Kill Your Children

The fiction of software

By Julian Browne on August 14, 2007. Filed Under business, delivery, strategy

A classic sign of inexperience in creative endeavour (or perhaps any undertaking) is the inability to 'let go' of your best ideas. Rookies, will come up with a concept, lovingly craft their baby, and refuse to be budged even as the world around them changes. Despite market forces, advice from experts, they continue to add ever more baroque extensions to their now irrelevant core, never questioning whether their foundations are still appropriate. What often results is largely unintelligible and difficult to enhance and maintain once they learned their lessons and moved on.

This is true of software architecture and code as much as it is of fiction.

In one of my other lives outside software, I write, and to some extent study, narrative fiction, and am something of a devotee of John Gardner, the man who heavily influenced Raymond Chandler in his formative years. Although not as commercially successful as his protégé, John Gardner's books on how to approach writing are succinct and timeless directives on the delicate process of harnessing the imagination and applying it to the business of production. Something that applies to hacking as much as it does to short stories or poetry.

Without wishing to boil his life's work down to a few bullet points (although as an advocate of the minimalist approach, he may well have approved) many of his edicts can be generically represented by the assertion that text (code), is cheap. By that I mean experienced individuals soon come to see that even the most beautifully structured text (code) is replaceable and throwaway. Seeing this allows them to adapt and go with a flow of ideas, to closely couple what is done to what is needed. It's the idea, or the concept, or the requirement, that is king, not the first realisation of it you came up with. Which great art work didn't go through tens, or hundreds, of revisions to reach perfection?

Great code invariably has to go through many revisions, not just to meet changing requirements, but also to fix bugs and support ongoing maintenance. I'm not convinced there will ever be a simple way to auto-generate the complete source code required for an application from a business-level model, but clearly the pursuit of this aim (coding without coders) is also the pursuit of cheap, throwaway, replaceable code. The 'model' is the idea and the 'code' is relegated to the cheap and cheerful instantiation of it. Change the model, click a button, change the code.

I don't think full auto-generation will come, because the inputs to the model originate from a source too capricious to submit to the modes of engineering - other human beings. Donald Knuth recognised this decades ago, describing software creation as an aesthetic experience more like poetry or music than building office blocks.

Our customers might expect or wish us to exhibit the predictability of engineers but, on so many occasions, what they get is the result of self-indulgent political pettiness and unmanaged precocity.

You can't completely tame creativity, and neither should one try, but you can remain mindful of the desired end result. If authors can produce prize-winning novels to order, and sculptors make millions in the whimsical art market, then hackers can surely follow suit.

And it's all about killing your children.