
Evolutionary architecture in practice
What it is made of and when to start

What it is made of and when to start
What it is made of and when to start
Why we need evolutionary architecture
16M+ customers, growing about 35% a year
A multi-product company with its own IT verticals
The products are merging into an ecosystem
Monolithic teams split into stream-aligned ones
Why you need evolutionary architecture
Tech debt accumulates as the system grows
Left unpaid, it can lead to bankruptcy
That turns into revolutionary 2.0 and 3.0 systems
But the process can be approached evolutionarily
The two definitions the talk builds on
What architecture is
The set of important design decisions shaping a system
Importance is defined by the cost of change
And a shared understanding of trajectory and boundaries
Where the project is going and its mental model
Incremental and guided change
What evolutionary architecture is made of
Incremental change: build and deploy
Guided change: fitness functions
Modularity and less coupling between business features
Plus appropriate coupling between parts of the system
A closed loop from idea to deploy
Idea → requirements → development → deploy
Idea
Requirements
Development
Deploy — and the loop repeats
How architectural conformance gets measured
The definition from the «Evolutionary Architecture» book
A measure of how the solution fits its context
And that context keeps changing
It acts as a guide for how architecture evolves
And as the constraint that evolution runs inside
Architectural characteristics and what measures them
Characteristics: availability, latency, throughput, security
Measured by unit, integration and contract tests
Plus architecture and process metrics
And monitoring with alerting
Key, relevant, irrelevant
Key measures are critical to architectural decisions
Work on those earliest and most seriously
Relevant ones matter while implementing requirements
Irrelevant ones need no fitness functions
Tooling for automating fitness function checks
Static code analysis and testing frameworks
Penetration testing and load testing
Monitoring and logging
Architecture checks: ArchUnit, Danger, fitv
Modularity and organizing components
Modularity, cohesion, coupling
Modularity — a logical grouping of related code
Cohesion — how much the parts belong in one module
Coupling — the interdependence between modules
One is about links inside, the other about links between
Principles for organizing system components
SDP: dependencies point towards stability
I = FanOut / (FanIn + FanOut) — instability
SAP: abstractness should match stability
A = Na / Nc — the component's abstractness
Team evolution triggers and their link to architecture
Conway's law, and brownfield rather than greenfield
Organizations design systems that copy their communication
The desired team structure changes
So the system has to be redesigned
The business cannot pause — so we redesign evolutionarily
Team evolution triggers
The software got too big for one team
Delivery slowed down, and the trend holds
Business services rest on scattered lower-level ones
Each trigger has its own symptoms
What evolutionary architecture is and when you need it
What evolutionary architecture is
Why it is needed
What it consists of: incremental change
…fitness functions and appropriate coupling
When it is time to evolve the teams and the systems
The sources from the talk's closing slide
«Evolutionary Architecture» and «Fundamentals of Software Architecture»
«Clean Architecture» with two reviews
«Team Topologies» and its three-part summary
Articles on the double loop and Essential Architecture
polomodov.tech
All slides and links are in the Telegram channel
Alexander Polomodov, Technical Director & Fellow, T-Technologies
@book_cube