This document discusses principles and techniques of evolutionary architecture. Evolutionary architecture aims to delay decisions as long as possible, architect for evolvability and testability, and use an emergent approach. Key principles include last responsible moment, architecting for evolvability and testability, Postel's Law, and Conway's Law. Techniques include database refactoring, continuous delivery, and HATEOAS. The goal of evolutionary architecture is to develop systems that can adapt and evolve over time in a sustainable way.
2. Agenda
Emergent design vs evolutionary
architecture
Principles of evolutionary architecture
Techniques of evolutionary architecture
How to achieve an evolutionary
architecture in practice
3. Design and
Architecture
Evolutionary versus Emergent
Design and Architecture
Evolutionary Architecture and Emergent
Design
4. Principles of Evolutionary
Architecture
Last responsible moment
Architect and develop for evolvability
Postels Law
Architect for testability
Conways Law
5. Last Responsible
Moment
Delay decisions as long as you can, but no
longer
Maximizes the information you have
Minimizes technical debt from complexity
Decide early what your drivers are, and
prioritize decisions accordingly
Evolutionary, neither emergent nor based
on guesswork
6. Architect for
Evolvability
Sensible breakdown of functionality
Consider data lifecycle and ownership
Appropriate coupling
Lightweight tooling and documentation
7. Develop for
Evolvability
Software internal quality metrics focusing
on ease of change
Find hotspots and focus efforts there
Measure continually, focusing on trends
9. Postels Law
Be conservative in what you send
Be liberal in what you receive
Only validate what you need
Holds for any information exchange
Use version changes when a contract
must be broken
10. Architect for
Testability
Aiming towards testability produces a
well-architected system
Messaging infrastructure used for
messaging, not business logic
Business sensible components
Testing at many levels, including contract
Build pipelines support the volume
11. Conways Law
Organizations design systems re鍖ecting
their communication structures
Broken communications imply complex
integration
Silos often result in broken communication
If you dont want your product to look like
your organization, change your
organization (or your product)
13. Database
Refactoring
De-compose big change into series of
small changes
Each change is a refactoring/migration
pair (or triple if you include access code)
Changes compose in the same way
functions compose
And of course, version control the
changes
And apply in the various environments
during promotion
14. Continuous
Delivery
Automate environments and con鍖gurations
Automate builds and use continuous
integration
Automate testing at all levels
Automate deployment
Just because you CAN release at any
time doesnt mean you HAVE to
15. HATEOAS
Hypermedia as the Engine of Application
State
Distribution of information
Consumer driven contracts
Evolvable contracts
Idempotency and other properties
16. Evolutionary
Architecture
De鍖ne your architectural 鍖tness function
Delay your decisions as long as you can
Understand various forms of technical
debt
Implement evidence based re-use
Create and maintain the testing safety
net