As software developers, we are asked to work in an environment with constantly changing requirements. As a result of this, we strive to create adaptable systems through the use of established patterns, architectures and design guidelines, such as the Open-Closed? Principle. We live in a world that satisfies all the needs of an ultimately adaptable system, just look around. Evolution provides us with a great example of how to create a system that can react and adapt to changing requirements. While natural selection generally takes long periods of time to create adaptations, we can shorten the time and eliminate some dead ends by using the advantage we have: our minds.
This discussion will focus on mapping our standard development tools, such as tests, refactoring and continuous integration, onto the evolutionary process to find a way to apply darwinian principles to develop highly adaptable systems that can survive in our environment of ever-changing requirements.