view as a single page
Why Evolution Works in Software
It's more than just a buzzword we use or some loosely-fitted analogy. The word "evolution" actually very keenly
describes how code changes in the software world. This section covers why. We cover several traits of evolution,
as we understand it in biology, and how those relate to an Agile software product.
Evolution acts on species, not individuals. While we often like to think of our code as "the program," it is not.
Source code is the definition of a species of programs or components. They are like DNA: a plan for how to
build an individual program.
Evolution also functions by way of new generations replacing older ones. When we change the source code, we evolve
the species. Over time the new generation of that species – the new version of our software – supplants its
predecessors. The analogy is very strong so far.
Evolution in biological species is, primarily, driven by environmental factors: new meteorological conditions,
new competitors, changes in available resources... these are all the kinds of things that can accelerate the
evolutionary process. All of these things are true of source code, almost verbatim. Changing environmental
factors lead to new tests which, in turn, drive changes in source code.
Now that we've established that the term "evolution" does apply to software in an Agile environment, let's
consider why it is beneficial to think of changing code as evolving. If code is evolving, it is always getting
better. If code is always getting better, then we don’t have to do a big design up front; instead, we can
design just to the needs of today in a way that allows for change tomorrow. This is a key element of Lean and
Agile software development: emergence.
Introduction to this Series,
Emergent Design (Bain)