19 October 2005

Intelligent software design

As usual, there was a lot of interesting discussion at this week's Sydney Agile discussion group (Syxpac). One topic I found particularly interesting though, was the discussion around Intelligent Design, and how it relates to software.

Robert Atkins brought it up indirectly, raising problems around code too complex to test in a large interconnected system. How about the old "metaphor" practice, I said, isn't that supposed to help large systems hang together by providing some kind of conceptual framework? One of the ThoughtWorkers (sorry, can't remember your name!) laughed and said it comes down to an intelligent design discussion.

With evolution of living things, at the smallest level there's a simple mechanism to decide what features progress. This is the concept of survival of the fittest —the features most suited to promoting survival and reproduction get passed on to the next generation. Despite the complexity that can develop from this simple rule, every development that occurs must meet this rule or it ceases to exist [1].

So how does this relate to software development? Well, in all the agile development methodologies, there are rules in place to decide what makes "good code". A shortlist might include:

  • Testability
  • Simplicity
  • Communicates its intent

I'm sure there's a few more, but you get the gist. With software development, at the smallest level these rules create a simple mechanism to decide what features progress. This leads us to the assumption that all agile development relies upon. If you take these rules, apply them to every small change you make to the code, over time even a complex system will continue to meet the above criteria.

But does this work? Do these simple rules for software evolution result in a better system over time? I don't think there's a conclusive answer yet, but it certainly more likely than any of the alternatives.

[1] An in-depth discussion of evolution can be found in many books by Richard Dawkins. If you want to understand it well and have some good arguments to convince your more sceptical friends, I'd definitely recommend any of them.