Evolutionary software architecture has gained much traction lately—at least in my bubble. It is one of my favourite topics, and I have presented and conducted workshops on it for over a decade. So, let me add a thought to the discussion:
The evolution of a software architecture has three dimensions:
- Technical evolution,
- conceptual evolution, and
- the evolution of business capabilities
Technical evolution allows new technology to be introduced and old technology to be removed while maintaining a running system.
Patterns like Hexagonal Architecture or any variant of Layered Architecture help with this.
Conceptual evolution allows fading in new concepts and fading out obsolete concepts without breaking the system. When we work on a problem, our understanding grows over time. From time to time, we have a moment of insight and find a simpler way to solve the same problem. The architecture of our system should support us in replacing the old solution with a new, better solution.
Ideas like Architecture Refactoring enable us to achieve this.
Business capability evolution allows adding new business areas – even with vastly different quality attributes.
Patterns like vertical decomposition help with this.
How evolvable is your architecture?