Crafted software

· mumblings · geek ·

Some tools can change the way that you see the world. Whenever I watch a time-lapse film of plants growing, I marvel at the fact that it allows you to see movement of plants that is otherwise invisible to us as humans because we live at the wrong rate. Our un-augmented senses and brains can’t get to grips with the pace of plants unless we speed up time using film. Recently, I’ve been thinking a bit about the tools I use. This has been prompted by my continuing efforts to learn to use Vim more efficiently and expertly (a lifelong quest, I suspect), but also because I happen to have read a few essays recently that struck similar chords and helped me to crystallize a few ideas I have thinking about. These are difficult things to encapsulate succinctly, but I am beginning to realise that they are quite important to the value that I place on certain tools (software or physical tools).

Mark Bernstein (the developer of Tinderbox), started writing about a phenomenon he refers to as NeoVictorian Computing about eight years ago, but I have only recently come across them. I would encourage you to read the essays, as they are insightful and opinionated pieces, and I will probably do a poor job of trying to summarise his ideas.

I propose that enterprise software is a hard problem that we can understand only after we solve an easier case, one that lies close to hand. Before we can tackle the enterprise, we need to write software for people. Not software for everyone, but software for you and for me.

Mark argues that software engineers who care about crafting good tools should build software to assist people in doing the hard things in life (like making sense of information rather than just collecting it, planning, and thinking); that is reliable enough to allow the user to trust it; and that is occasionally capable of inspiring “delight”. An important part of this (as the quote above states) is not trying to solve everyone’s problem or to be all things to all people. In later essays in the series he suggests that users should expect to have to learn, and that software should “embrace personality and style”. This describes precisely the qualities I value in the software that I love the most. Both Tinderbox and Vim are immensely powerful tools that take some effort to learn. Tinderbox is more accessible initially than Vim, as you can do simple things very easily with it, but it is a very deep bit of software that rewards efforts to understand it better. Vim can be off-puttingly intimidating from the start, but there’s almost no limit to its power once you understand the way it works. Both tools allow — in fact, encourage — the user to customise them and make them their own. Tinderbox users adopt their own colour schemes, shapes for notes and structures that make sense to them. Vim dotfiles are lifelong endeavours, and mean that no two copies of Vim will function in quite the same way. The user wears the imprint of their own use into the tool in the same way that a gardener wears the imprint of her hands into the wooden handle of a much-loved spade. After a while, that spade feels just right, but only to that user.

One thing that I have really come to appreciate about both Tinderbox and Vim is that they allow you not only to customise your way of working for all future work, but also just for this particular piece of work. In the same way that craftspeople might construct a rough jig to help them in making or putting together a particular item, it can be really helpful to throw together a few abbreviations or rough macros that are useful for the current document and no other. It’s a temporary thing, made of string and gaffer tape, but it does the job and the fact that you can knock it up quickly without worrying about tripping over it later is liberating.

Another issue that Mark alludes to is that you should create software that exploits the strengths of computers rather than emulating the analogue system it aims to replace. This is a kind of ‘honesty in materials’ that the Arts and Crafts movement also strove for: when they decorated an object with a design inspired by nature, it was always clearly an interpretation of nature, not an attempt to replicate a flower or leaf. If you want realistic flowers, fill a vase with real flowers. If you are trying to do a task that could be more easily achieved with your own hands, use your own hands. Computers and their software should enable us to do things that we can’t easily achieve any other way, and should avoid using skeuomorphisms to paper over problems with the function of an application1.

In The Slow Web, Jack Cheng discusses the differences between online applications and services that are like fast food and deliver a quick hit of pleasure (but are ultimately an unfulfilling or stressful experience), and those that may be more difficult in some way but that offer more lasting pleasure, like slow food. On the surface, Mark Bernstein’s NeoVictorian concepts and Jack Cheng’s Slow Web have little in common, but if you look a bit closer, you see that they have the same kinds of ideals in common. In both, there is the idea that our tools should be tailored to individual needs, and that deliberate constraints can be useful. Ultimately, I think that both remind us that good software allows us to gain knowledge (as opposed to information) that would be difficult to obtain otherwise, and that can have a lasting effect on the way we see the world. Once you’ve seen a time-lapse film of a bramble exploring its environment, you can never look at a blackberry in the same way again.

  1. Hello Apple’s iCal and Address Book! Sorry about the ‘papering over’ pun too — I didn’t spot that until after I had written it, I swear. ↩︎