Wednesday, 27 March 2013

On the importance of attention-to-detail in software tools development.

As the Apple example demonstrates, attention to detail, in aggregate, results in a superior product, which enables you to justify charging a premium price.

This truism is particularly apt when it comes to tools, because the affordances and micro-features that one's day-to-day tools offer have a huge impact on the way that we do our day-to-day job. The extent to which we developers follow the path of least resistance is, in many ways, quite sad, but this most human of characteristics places incredible power in the hands of the tool-makers. Best practice is often defined by the tools that we use. As a crude example, witness how Hungarian notation fell out of favour as soon as popular IDEs started to display "type hints" when the mouse hovered over the variable.

Make it slightly easier to do something, or to arrange text in a particular way, and developers will change their behaviour in response.

For many years (2001-2011) I used TextPad on windows, and came to particularly appreciate it's block select mode when managing vertically aligned characters. The shortcut for this feature (Ctrl+Q, B) has been burned irreversibly into my motor cortex. I used this feature not only to manage vertically-aligned assignment statements, but also to quickly add blocks of end-of-line comments, and to support a declarative programming style that relied heavily on in-source tables of parameters & other data.

This declarative approach to software construction had a particularly pleasing synergy with the MATLAB language and the uncomplicated, linear loop-free aesthetic which is made possible by it's impressive collection of array-oriented library functions.

More recently, (2011-2013) I have been using Sublime Text as my editor-of-choice. (As well as a little vim, when I have no choice). Whilst the multiple selection feature of Sublime text is super-duper-awesome in it's own way, I still miss TextPad's block select feature, particularly it's ability to automatically insert whitespace at the end of lines, allowing one to easily reclaim blocks of space to the right of the logic for descriptive commentary. (80 column limits be damned as an onions-in-the-varnish anachronistic throwback).

Anyway, seemingly small things, but still important: What seem like trivial affordances really do shape the way that one thinks and works. For the past year I switched away from Textpad + MATLAB towards Sublime Text & vim + Python, and the combined strictures of PEP8 & PyLint, together with the subtly different affordances of the Sublime Text vs. TextPad steered my development style away from the declarative parameter-driven approach towards a more "traditional" programming style, to the moderate detriment of the "quality" of the applications that I produced.

Despite Python's numerous, obvious and justifiable claims to superiority, there exists an ineffable and emergent quality that language and tools together supply, and a quality that was not (quite) captured in the tools that I was using for the past year.

Another observation: When moving the caret quickly along a line of text using the arrow keys with the "ctrl" key pressed down, the cursor in the MATLAB editor stops very slightly more frequently than other editors, resulting in a slightly "sluggish" feel to the navigation. Paying attention to matters such as this is the equivalent, to a tool-maker, of the auto-maker paying attention to the "thunk" noise that the car door makes when it closes. A feature that operates almost on a subliminal level to create the impression of quality, and, to the tool-user, the feeling of "floating" through the text file making changes, rather than the feeling of wading through a muddy swamp.

Another observation: Little bits of automation to make life easier. When I highlight a word in Sublime Text and press the open-parentheses "(" key, the word is surrounded in parentheses. When I do the same in the MATLAB editor, the word is deleted and replaced by the open parenthesis character.

I am a craftsman. I want to love my tools. MATLAB has elements of greatness, but a large number of flaws as well. Some of these flaws cannot be addressed without making the tool something other than what it is.

Fair enough.

But some can be addressed with passion, attention-to-detail, design sense, and strong, detailed technical leadership.