Problem
Big up-front architecture decisions are made with the least information. Requirements, load, and technology shift, and rigid designs become expensive to change. Teams fear refactoring without safety nets.
Also known as: incremental-architecture, guided-architectural-change
Design systems to support guided, incremental change across multiple dimensions as requirements evolve.
Big up-front architecture decisions are made with the least information. Requirements, load, and technology shift, and rigid designs become expensive to change. Teams fear refactoring without safety nets.
Evolutionary architecture accepts that change is constant and optimizes for the ability to change safely. It combines three ingredients: incremental change, fitness functions that guard important characteristics, and appropriate coupling that limits blast radius.
Appropriate coupling is the third pillar. Services or modules that change together should live together, and those that change independently should be separated by stable contracts. Data coupling deserves special attention because schemas outlive code.
A loop of small change, automated validation, and deployment.
idea -> small change -> pipeline
pipeline: unit + contract tests -> fitness functions -> deploy (canary)
measure -> keep / roll back -> next change
Irreversible choice? hide behind an interface, decide late.
Techniques that support evolution include expand and contract migrations, feature flags, parallel runs, and consumer-driven contract tests. Each lets you change one side while the other keeps working, so a change can ship in many safe steps rather than a single risky release.
Medium - CI/CD and test environments
Medium
Medium to high
No fitness functions, so incremental change erodes qualities
Deferred decisions never made, leaving ambiguity
Incremental steps without a direction become random drift