System Design Space
Knowledge graphSettings

Updated: March 24, 2026 at 12:33 PM

Building Evolutionary Architectures (short summary)

hard

Architecture rarely decays because teams stop caring. It decays because change starts accumulating faster than the system can absorb it. This chapter shows how to make evolution deliberate instead of hoping one good diagram will survive production forever.

The strongest part is the way it ties incremental change, fitness functions, connascence, architectural quantum, and database evolution into one operating model. That helps teams decide which constraints should be executable, where coupling has become too expensive, and how to change the system without losing delivery cadence.

In reviews and interviews, the chapter helps you discuss more than the target architecture. It gives you a way to explain how the design stays healthy after launch: which rules must be enforced, how degradation gets noticed, and why good architecture needs ongoing discipline.

Practical value of this chapter

Fitness functions

Shows how to convert architecture principles into measurable automated checks.

Controlled change

Helps roll out architecture changes incrementally without breaking delivery cadence.

Coupling visibility

Makes dependency hotspots visible before they become expensive change bottlenecks.

Interview differentiation

Strengthens interview answers with a practical strategy for keeping architecture evolvable.

Source

CoA Book Club

The chapter material is based on the book analysis in the Code of Architecture book club

Read original

Building Evolutionary Architectures, 2nd Edition

Authors: Neal Ford, Rebecca Parsons, Patrick Kua, Pramod Sadalage
Publisher: O'Reilly Media, Inc.
Length: 262 pages

Fitness Functions for Architectural Verification, Connascence, Architectural Quantum and Database Evolution.

Original
Translated

Related book

Fundamentals of Software Architecture

Basic concepts of architecture: characteristics, styles, decision making

Read review

What is Evolutionary Architecture

Evolutionary Architecture = Incremental Change + Fitness Functions + Appropriate Coupling

Incremental Change

The architecture should support small, frequent changes instead of large releases

Fitness Functions

Automated checks of architecture compliance with specified characteristics

Appropriate Coupling

The right level of coupling between components for independent evolution

Related book

Continuous Architecture in Practice

Practical continuation of fitness functions: continuous feedback loops and architecture decisions as an ongoing process.

Read review

Fitness Functions

Fitness Function is an objective criterion for assessing how well an architecture meets a given characteristic. The term is borrowed from genetic algorithms.

Types of Fitness Functions

  • Atomic — checking one characteristic (unit test)
  • Holistic — checking the interaction of several characteristics
  • Triggered — triggered by event (commit, deploy)
  • Continuous — work constantly (monitoring)

Implementation examples

  • Performance — load tests in CI/CD pipeline
  • Security — SAST/DAST scanning, dependency audit
  • Modularity — ArchUnit, dependency checks
  • Resilience — Chaos Engineering experiments

Key idea

Fitness Functions integrate into the CI/CD pipeline and automatically block changes that violate architectural specifications. This turns architectural decisions into executable specifications.

Related book

Software Architecture: The Hard Parts

Detailed analysis of coupling, cohesion and architectural quantum

Read review

Coupling and Connascence

The book expands on the concept of coupling through the concept Connascence — a more detailed taxonomy of dependencies between components.

Static Connascence (weak)

  • Name - name consistency
  • Type - type consistency
  • Meaning — consistency of semantics of constants
  • Position — consistency of parameter order
  • Algorithm — consistency of algorithms

Dynamic Connascence (strong)

  • Execution - order of execution
  • Timing - time dependencies
  • Values - associated values
  • Identity - links to one object

Rule: Strive for weak connascence between modules (Name, Type) and allow strong only inside the module. The stronger the connascence, the closer the components should be.

Architectural Quantum

Architectural Quantum — a minimal independently deployable artifact with high functional coherence, including all the necessary components (code, data, infrastructure) for operation.

Monolith

1 quantum = entire system

Modular Monolith

1 quantum, but logical separation

Microservices

N quanta = N services

Quanta quantity influences independence of evolution: the larger the quanta, the more independently parts of the system can develop, but the higher the operational complexity.

Related book

Database Internals

Deep dive into the DBMS design and distributed transactions

Read review

Evolution of Databases

Data schema evolution is one of the most difficult parts of evolutionary architecture. The authors recommend an approach incremental migrations.

ACID (RDBMS)

PostgreSQL, MySQL, Oracle

Strong consistency, schema fixed

BASE (NoSQL)

MongoDB, Cassandra, DynamoDB

Eventual consistency, flexible schema

NewSQL

Spanner, CockroachDB, YDB

ACID + horizontal scaling

Expand-Contract Pattern

For safe circuit evolution: Expand (add new field) → Migrate (transfer data) → Contract (delete old field). Allows you to make changes without downtime.

Organizational aspects

Architecture is inextricably linked with organizational structure (Conway's Law). The authors emphasize the importance of aligning architectural boundaries with team boundaries.

DORA Metrics

  • Deployment Frequency - how often do we deploy?
  • Lead Time for Changes — time from commit to sale
  • Mean Time to Recovery — recovery time
  • Change Failure Rate — % of unsuccessful deployments

Types of solutions

  • Type 1 (irreversible) — choice of language, DBMS, cloud. Requires careful analysis.
  • Type 2 (reversible) — API design, module structure. You can experiment.

Application at System Design Interview

✓ What to use

  • Fitness Functions - “how will we check that the system complies with the SLO?” (monitoring latency, error rate)
  • Architectural Quantum — justification of service boundaries and choice between monolith and microservices
  • Expand-Contract — data schema migration strategy without downtime
  • Connascence — analysis of dependencies between components during decomposition

✗ Common mistakes

  • Design "for eternity" instead of an evolutionary approach
  • Ignore the cost of future changes
  • Ignore Organizational Constraints (Conway's Law)
  • Choosing microservices without understanding operational overhead

Application example

"For this case I would choose modular monolith as a starting point - this gives one architectural quantum with low operational overhead. The boundaries of the modules correspond to bounded contexts, which will allow them to be extracted into separate services without refactoring in the future. As a fitness function for performance, we will add load test to the CI pipeline with threshold p99 < 200ms."

Verdict

Advantages

  • A practical approach to architectural evolution
  • The Fitness Functions concept is immediately applicable
  • Good coverage of organizational aspects
  • Synergy with other books by authors

Restrictions

  • Fewer practical implementation examples
  • Connascence may seem abstract
  • Requires familiarity with other books in the series

Recommendation: Read after "Fundamentals of Software Architecture" and "Software Architecture: The Hard Parts" - the books form a trilogy with common terminology and complement each other.

Sources

Related chapters

Where to find the book

Enable tracking in Settings