Rethinking Agility in Databases - Part I: Evolution

Skip Navigation Links

Rethinking Agility in Databases 2/23/2008 6:57 AM

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.

Let's continue.

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 Evolution in Data Structures >