November 2, 2006

...Learn TDD with Codemanship

Murder Your Darlings

The process of evolution is an extremely powerful way of solving complex design problems, but it can seem cruel and wasteful. In reality, of course, it is far from being either, but only when seen in the bigger picture. At the level of the individual, however, it can be brutal. Cumulative selection implies cumulative rejection. We cannot allow every variant to survive from one generation to the next. In nature, this means death. In software design, this means throwing stuff away because it's not good enough.

And we're not terribly good at throwing stuff away in the software industry. We tend to be hoarders of design decisions. People who write software (or software designs, like use cases or UML models) get intellectually attached to their designs, and it can be quite a wrench to have to consign them to the dustbin, even if we are doing it to make way for a better design. And managers don't like to see designs discarded because that implies waste. (Run away! Run away!).

This is why it's very common, for example, for the first UI design to end up being the UI design for the rest of the project. This is a barrier to the evolutionary design process. If unsuccessful design decisions are allowed to survive in subsequent generations of the software, then the code will inevitably fall far short of ideal. It has the destructive power of cumulative selection in reverse. Bad design decisions build on bad design decisions, until we have software designs that are improbably bad.

To succeed with evolutionary design, you need to adopt a rather blunt and brutal approach. You have to be ready to look at your designs in the cold, hard light of day. If they don't measure up, you have to be prepared to kill them so that only the fittest can survive. Over time this has nurtured an instinct in me to be precious about design quality and not about the actual designs themselves.

And this applies at any scale. Although the costs and risks may be far higher, we still have to be prepared to kill off entire systems - if need be - to push the evolution of our enterprise architectures forward.

When asked for advice for aspiring writers, Sir Arthur Quiller-Couch reportedly said: "Murder Your Darlings." This probably applies to any creative endevour, including software development.
Posted 14 years, 2 months ago on November 2, 2006