I have been intensely pondering about why I keep on writing programming tools. The question about why comes from Simon SInek’s Start With Why. If I am to create a useful tool, my why has to connect with the whys of other humans.
And I think I found it. I write tools because I want to experience joy and power when I program. And I want everyone that programs to be able to experience the same.
Programming can and should be joyful: we’re using our mind to interact with a lightning fast computing machine through symbols. This is already, in itself, amazing. On top of that, these interactions can create tools and experiences that are available to other humans all over the world, and through which we can interact with them. This is all unfathomable, almost miraculous, and yet real.
Programming should make you feel powerful. Powerful not in the sense of ruling over others, or fluffing your ego. Powerful in the sense that wherever you want to take things, you can, with confidence and speed. Even if that power requires effort and skill which develops over time, that power should always be strong and only get stronger. Only truly major undertakings should challenge your power over the situation. These challenges are, of course, welcome.
Contrast this with the typical programming experience. Most systems, languages and tools I’ve worked with are great at making me sad and making me feel powerless. That sadness and powerlessness comes from the sheer difficulty of getting anything done, being able to understand even a little bit of what’s going on. The wonderful promise of computers is lost in a haze of frustration. Then you wonder: why am I looking at this screen when I could be in a park looking at ducks go by?
Some gems stand out. For me, Redis is exactly the type of technology that bestows joy and power on its users. To a lesser degree, so are Javascript and Node.js (though I had to build my own extensive tooling for years to be able to feel joyful and powerful in them).
Basically, then, if when using a programming tool, you feel (mostly) joyful and powerful, it works. If you feel sad and powerless, it doesn’t. Now I have a clear metric.
Now, once things are working, you also want and need to trust them. If you’re building a system, you want to be able to trust it will keep on going when you’re not looking at it. That it will not collapse under load, or just somehow flake out. You want an AK-47 that requires minimal maintenance and almost never jams. Redis also stands out head and shoulders in this respect: unless you run of memory because you just have too much stuff, it is unkillable and will just keep on going for years. No small feat for something that stores data in memory.
So that’s really why I build programming tools, and what I expect of any programming tool I use from someone else. A programming tool should induce joy, power and trust on those who build systems with them. And, perhaps intriguingly, also on those who use those systems. Perhaps what the maker feels while building it is also what the user experiences when using it.