I don’t hear this phrase in professional settings very often, unless it is coming out of my own mouth, but up until recently it was true that the gulf between the software we were expected to create and the tools we had available to create them seemed insurmountable. Only in the last five years has this changed very much, and there’s still a lot we’re left wanting for, like the Cobbler’s proverbial children.
If you’re surrounded by ugly software all day, with little or no UX considerations, and told that you’re not a Real Programmer if that’s not appealing to you, that you should just suck it up and white knuckle it like everybody else, it takes tremendous reserves and resolve to rise above that. I think for a rare few of us it’s galvanizing, but for many of the rest it seems to grind them down. Death by a thousand cuts. I see people all the time who merely aspire to create things that are adequate to the task. In fairness they are simply emulating the world around them, and I’m sure that explains why they sometimes get uncomfortable or defensive when it’s apparent that someone expects more from them.
I suppose it shouldn’t really be that surprising to me that our tools lag behind our abilities. In the physical world, given a good enough tool a proper craftsman is expected to use it to make something even more amazing than the tool itself. Otherwise how would you have made the tool in the first place?
But at the same time I think these sorts of thoughts, I also know full well that I personally own tools that are often far prettier than anything I actually make with them. I reconcile this by acknowledging that the things I do are a hobby. That I am in fact an amateur when it comes to food prep, carpentry, landscaping, computer repair.
However, the first job I was ever proud of was as a bike mechanic. I still have a drawer full of obsolete 20 year old Park wrenches in a tool chest in the back of my closet. When people compare physical tools with software tools we often think of it as an analogy, but I have seen how the other half lives and I don’t consider it an analogy at all. All the rules that apply to a high carbon steel wrench with surfaces ground to tight tolerances have corollaries in the software world.
A poorly thought out tool can create an expensive mess that the craftsman bears the responsibility to clean up. “A good craftsman doesn’t blame the tool.” We have all heard that a million times. But we tend to omit the important part: the craftsman will seek out a new, better tool and chuck the bad one in the trash without a second thought. That is what it means not to blame the tool. A tool has no judgement, I do. It means it’s my fault for keeping the blasted thing around when I knew the damage it was capable of.
Every craftsman I’ve known about has at least one tool they’ve made for themselves. In some cases it’s something simple, like modifying an existing tool, but in many cases they will pour some time and care into making it, so that they can use it for years to come. If you’re really nice they might make you one, or at least teach you how to make it. I’m starting to see that sort of behavior more reliably in the software world. I don’t know why it’s happening now. I have some theories, but they’re only theories. I am certain though that I’m grateful it’s happening and hope it continues forever.
There is still so much more to do.