artisanal bytes

“Hand-crafted in San Francisco from locally sourced bits.”

Know Your Tools Deeply

I take a craftsman’s approach to the work I do. As far as I can remember, I always have, but it may be a case of misremembered history. It could be that it is a lot easier to believe you have always been a craftsman when you already know how to use your tools well. In learning new tools, be it programming languages, databases, frameworks, or a whole new skill like woodworking, I find myself leaning back on learning just enough to get something done. It is from this perspective that I feel empathy for programmers these days. There are too many abstractions and specialized tools and too many different tools that being dedicated to a toolset is a difficult proposition. But it is a worthy position to take up.

A fine time to do it is when you have a particular challenge to overcome. Take for example a system performance issue you are experiencing. Maybe it is an issue with page render times in a complex React app. Or maybe it is a PostgreSQL database that is responding much more slowly than you need. Now is the time to become an expert in that technology. Yes, keep your eye on what you are trying to solve and don’t go down rabbit holes that are clearly distracting. But do not try to solve your problem in a narrow focused way either. Widen your information and knowledge gathering and go deep in the areas that could be relevant. Read a bunch of documentation!

Learn how React makes decisions about what components to render and what component lifecycles are. Read through the code as well as the docs to find if there are optimizations you can make to how you use the framework. Or study the data structures that PostgreSQL uses to store data on disk and in memory and learn how reading and writing that data impacts the database’s performance.

I guarantee you will learn more than you need to in order to solve your current problem. But the bigger payoff comes in the future when the next problem arises. Perhaps you will solve the problem much faster because of your deeper understanding of how the system works. Or, better yet, perhaps what you learn now will help you to prevent the next crisis altogether. If your company is gaining in success, then the time spent to learn more now is a good investment. The next crisis will be more crucial to solve faster, because there will be more users impacted. Invest when you can — now!


When you are trying to solve an immediate crisis and spending time learning, it can look to others like you are not doing the right work. Make sure you explain to them why you are spending time learning now and bake that effort into whatever estimates you give. Be transparent about the process you are going to take and why you think it will payoff. If you get pushback from your team or manager, then you have a whole other problem to solve, which probably won’t be quite as straightforward.

This is also a great case to make for simplicity and boring tools. It is far better to know a few tools really well than many tools only well enough. You may end up using a tool for something that it is not perfectly optimized for, or you may end up using tools that are not the sexiest most modern tool. But if you build a system that your team can adapt and fix quickly, then you have a higher chance of success.