A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system.
– John Gall
Defining Evolutionary Architecture
Common wisdom in software once held that architectural elements are “difficult to change later.” An evolutionary architecture designs for incremental change in an architecture as a first principle. Evolutionary architectures are appealing because change has historically been difficult to anticipate and expensive to retrofit. If evolutionary change is built into the architecture, change becomes easier and cheaper, allowing changes to development practices, release practices, and overall agility.
A Comprehensive Presentation of Evolutionary Architecture, Presented by Neal Ford
Justification Of The Choices Made
- The first architecture that designs for incremental change in an architecture as a first principle
- Gall’s law help us realize that we need to start with a small working system and build from that. It’s so easy due to e.g. ego (who does not want to be the person who delivers the perfect solution), expectations from management or chosen development methodology (that don’t allow us to be iterative) to try to design the perfect system from the beginning. If the system is complex, Gall tells us that it can’t be done!
The Other Alternatives That Were Not Chosen
- There are no real alternatives if the main objective is incremental, non-breaking change