9 Oct 2008
Evolved equals complex
In software development, programs that have grown over a long period of time are synonomus with complex programs. In German we call these applications “historisch gewachsen” (historically grown). It is the excuse for ugly code that smells and should be refactored. In the software world, the question is not: why is it complex? how does complexity emerge at all? Complexity can be found everywhere. Computing’s central challenge is not to produce complexity, but rather to hide, conceal and prevent it, in the words of Dijkstra: How not to make a mess of it.
This is one reason why legacy software is often unpleasant: evolved programs which have a long historical background are nearly always complex, esp. if the requirements evolve over time, too, for example if the application has been adapted to many different customers. In agile development, we use this process to produce an organized, controlled complexity. Thus, in the context of software, the
emergence of complexity is something very natural, because evolved equals complex.
In the context of the everyday life, the emergence of complexity is not a natural process. Things get more disordered by oneself. Ingredients do not assemble themselves to form a cake, and parts do not put themselves together to form a machine. Yet if there is evolution at work – for example if we consider living beings – complexity seems to come for free again. Evolved seems to equal complex,
and in fact complexity can be found everywhere where evolution is at work,
- in all living organisms which are subject to evolution
- in all evolving complex adaptive systems which have a long historical background
- in software development, esp. where systems have grown over a long period of time
(The Wikipedia picture from Thomas Splettstoesser shows T7 RNA polymerase (blue) producing a mRNA (green) from a DNA template (orange))