Crafting Tools September 21, 2013

Just before The Move, anticipating a lot of unscrewing and re-screwing (courtesy of Ikea), I treated myself with a new portable electric screw driver. And a nice one, too.
Since then, a few month have passed and, oh boy, have I screwed and unscrewed.
And would you believe it: each and every time I enjoyed it. A lot.

What on earth can make you look forward to assemble a large Ikea bunk bed ?
Even more than that, what will lead you to want to go the extra inch and be very thorough with your screwing ?

A good screwdriver.

Yes, there is probably only a small fringe of the population over-thinking this.
Nerds, that tend to over-think everything ; craftsmen, that know that their tools are an extension of themselves ; artists, who don’t want tools to stay in their way…

Many of us programers love to customise our dot files so our terminal can be as sharp as possible, delighting ourselves in every millisecond spared not typing needless key strokes.
Many of us keep searching for the perfect pen or bag, trying to find the ultimate comfort or even peace of mind.
We know that being comfortable with our tools will increase our productivity by increasing our happiness.
There is something blissful about using the perfect tool to create.

Which brings me to the main point:
if you build a product of any kind, that’s what you need it to achieve.
And I mean product in its widest way: a screwdriver, a pen or a bag, of course ; a car, an app or a service ; or the tools a team rely upon to perform their work.
Ruby, in many ways, fits this description. It is designed with developer happiness in mind (and it succeeds: try and make a ruby developer switch language…).

As an IT manager and a devop, I had to design and build the tools for people to work with, greatly influencing the way they were working.
Here is what I got from it.

Understand the precise nature of your users work, their daily tasks. This is crucial. You should be able to perform their work in order to really understand it.
Spot the sticking points, these repeated tasks that could be optimised or even automated, the ones triggering a grimace each time.
Correct these points, trying to have a minimal influence on the other parts of the daily routine.

For complex system, think the whole architecture around the user.
It’s like reverse programming, starting from the user, going all the way to the system, producing a perfectly fitted tool in-between.

Be aggressive when it comes to options, they are a productivity killer.
Be extra attentive with the interface, even (and especially) for a command line one.
And, well, ensure it is working properly.

The Japanese have elevated craftsmanship to an art.
I’d like to think of the tools and interface I create like Masamune did, making the swords for the Samurai.