Some Thoughts On Tool Building

Emacs vs. Vim might be the most famous flame war in programmer culture, but there are plenty of other dimensions along which coding identity splits.

There is static vs. dynamic typing, functional vs. imperative programming, frontend vs. backend, probably more. My favorite is “tool builder” vs. “tool user.” The tool builder in this scenario is the kind of programmer who is rarely satisfied with how their tools work out of the box, and spends hours and hours configuring and hacking their computing environment to work exactly how they imagine it should.

The tool user is the kind of programmer who learns to use the tools as they were designed and strictly uses those tools to get their work done. Their work involves programming other systems, and that’s what they spend their time on.

I am a tool builder. I cut my tool building teeth configuring window managers like i3, awesome, and fluxbox. My current hobby is Emacs customization, which I spend around 5-10 hours on every month.

So that’s my bias.

I know people who are tool users. Programmers who think time spent tweaking tools is time they could be billing clients, getting their actual work done.

I don’t have a value judgement to make here. I don’t think tool building is “better” than tool using, although I will advocate for that approach given the chance. I’m just interested in the philosophies implied by these two types of people.

It’s hard, though, because there are probably many reasons people end up being tool builders vs. tool users. Here’s mine.

I like making computers do things because it’s fun. Figuring out the rules of a system and using that knowledge to cause something interesting to happen is just a good time. And the activity of loading data structures and an execution model into your head, and then trying to simulate ways in which you can manipulate those things to get what you want is something that brings me real pleasure. I was doing it long before I got paid to do it.

And so tinkering with my tools brings me back to my roots, to a time when I was writing code for the sake of writing code, and there were no stakes. It’s certainly a form of escapism. It’s like my version of video games, because I don’t play video games.

But there is also a productive side to it. I care about fine tuning my tools because I know it benefits my day-to-day workflows for writing code and writing blogs. I view tool building as a way to remove friction from my work, making it easier to get into and stay in a flow state.

This is not really a quantifiable benefit. I can’t point to a number of hours that I’ve saved because of tools that I’ve built or tweaked. That’s not the point. I’m saying I believe there to be a productivity benefit, but I don’t need anyone else to believe that. I build tools because that’s my choice.

Matt Roll @mroll