Building simple systems is hard; we do what's easy

I'm more or less back from the tar pit of weblog upgrade. But the agitation and anxiety generated by a series of upgrade failures, template tag errors, and Ecto client connection problems feels like a huge waste of personal energy and time. I'm perfectly willing to own my part of this experience. I do worry and feel incompetent when I'm seeing error messages. But it's not all me. We're building complexity faster than we can manage it.

My colleague orcmid reminded me of Edsgar Dijkstra's predictions about computing complexity. In the E.W.Dijkstra Archive, at the University of Texas, I found EWD's essay The next fifty years, which, I think, was written in the late 1980's. It's short and worth reading, but a few of the quotes are instructive (and prescient):

Computing's core challenge is how not to make a mess of it. If people object that any science has to meet that challenge, we should give a double rebuttal. Firstly, machines are so fast and storage capacities are so huge that we face orders of magnitude more room for confusion, the propagation and diffusion of which are easily inadvertently mechanized. Secondly, because we are dealing with artefacts, all unmastered complexity is of our own making; there is no one else to blame and so we had better learn how not to introduce the complexity in the first place.

Using the introduction of the real-time interrupt as an example of how we add complexity to systems, Dijkstra concludes:

The moral is clear: prevention is better than cure, in particular if the illness is unmastered complexity, for which no cure exists.
Dijkstra, however, was very optimistic about the future of working toward simplicity.

The opportunity for simplification is very encouraging because, in all examples that come to mind, the design process cost much less labour and led to a much better final product than its intuitively conceived alternatives. The world being what it is, I also expect this opportunity to stay with us for decades to come. Firstly, simplicity and elegance are unpopular because they require hard work and discipline to achieve and education to be appreciated. Secondly we observe massive investments in efforts that are heading in the opposite direction.

Most of the applications and tools we build, for developers and for users, that provide a plethora of options (think of word processing or software language IDE's, or ...) and in Dijkstra's words "by their suggestion of power, they rather invite than discourage complexity".

This reminds me of Pogo's famous quotation: "We have met the enemy and he is us". So, first we need to acknowledge how we are avoiding the hard work of developing simple systems that work. We most often build interfaces on top of interfaces, protocols on top of protocols, software tools and user applications with dozens of options. In short we do what's easier.