Redr
1 / 332

Redr · Study Guide

Fundamentals of Software Architecture

An Engineering Approach

Mark Richards & Neal Ford

Unofficial AI-assisted study guide. Not affiliated with or endorsed by the author or publisher. For educational use — supplements, not replaces, the original work.

Contents

Part 01
Foundations
  • 01Introduction
  • 02Architectural Thinking
  • 03Modularity
  • 04Architecture Characteristics Defined
  • 05Identifying Architectural Characteristics
  • 06Measuring and Governing Architecture Characteristics
  • 07Scope of Architecture Characteristics
  • 08Component-Based Thinking
Part 02
Architecture Styles
  • 09Foundations (of Architecture Styles)
  • 10Layered Architecture Style
  • 11Pipeline Architecture Style
  • 12Microkernel Architecture Style
  • 13Service-Based Architecture Style
  • 14Event-Driven Architecture Style
  • 15Space-Based Architecture Style
  • 16Orchestration-Driven Service-Oriented Architecture
  • 17Microservices Architecture
  • 18Choosing the Appropriate Architecture Style
  • 19Architecture Decisions
Part 03
Techniques and Soft Skills
  • 20Analyzing Architecture Risk
  • 21Diagramming and Presenting Architecture
  • 22Making Teams Effective
  • 23Negotiation and Leadership Skills
  • 24Developing a Career Path

Part 01

Foundations

Ch. 1–8

Ch. 01

Introduction

Software architecture resists single definitions; the authors describe it as the union of structure, characteristics, decisions, and design principles. The chapter introduces the eight expectations of an architect and the two laws that recur throughout the book.

Ch. 01

The Four Dimensions of Architecture

Architecture is the intersection of four things: structure (the style — microservices, layered), architecture characteristics (the "-ilities" the system must support), architecture decisions (the rules that constrain construction), and design principles (the guidelines that steer implementation). None of them alone is the architecture.

Ch. 01

The Eight Expectations

Every architect must make decisions, continually analyze the architecture, keep current with trends, ensure compliance, possess diverse exposure and experience, understand the business domain, demonstrate interpersonal skills, and navigate organizational politics. The list mixes hard skills with soft skills deliberately.

Ch. 01

First Law of Software Architecture

"Everything in software architecture is a trade-off." The corollary: if an architect thinks they've discovered something that isn't a trade-off, they just haven't identified it yet. This frames every chapter that follows.

Ch. 01

Second Law of Software Architecture

"Why is more important than how." Implementation details can be looked up; the reasoning behind a decision cannot be reconstructed from the code. Justification is the architect's primary deliverable.

Ch. 01

Architecture vs Engineering Practices

Architecture cannot be separated from engineering practices like CI/CD, automated testing, and DevOps. Modern styles like microservices only became viable because containerization and deployment automation made them so. The two evolve together.

Ch. 01 · Vocab
Architecture Characteristic
A non-domain consideration the system must support (an "-ility").
Architecture Decision
A constraint that defines what is and isn't allowed in the architecture.
Design Principle
A flexible guideline steering implementation choices.
Architecture Style
The overall topology of the system (layered, microservices, event-driven).
Ch. 01 · Vocab
First Law
Everything is a trade-off.
Second Law
Why beats how.
Domain Knowledge
Familiarity with the business problem space, considered essential for architects.
Ch. 01 · Quiz1 / 4

Multiple choice

According to the First Law of Software Architecture, what should an architect conclude if they believe they have found a decision with no trade-offs?

Ch. 01 · Quiz2 / 4

Multiple choice

Which of the following is not one of the four dimensions the authors use to describe software architecture?

Ch. 01 · Quiz3 / 4

True / False

The Second Law of Software Architecture says "how" is more important than "why" because implementation correctness is what ultimately ships.

Ch. 01 · Quiz4 / 4

Spot the issue

A new architect documents only the decisions they made ("Use Kafka for event transport, partition by tenant ID") with no surrounding rationale. Six months later the team debates whether to switch to RabbitMQ. What's the main risk?

Ch. 02

Architectural Thinking

Architects and developers think differently; architects trade some depth for breadth and constantly weigh trade-offs. The chapter explores how to balance hands-on work, business understanding, and the "knowledge pyramid" while avoiding traps like frozen-caveman thinking.

Ch. 02

The Knowledge Pyramid

Knowledge divides into three layers: stuff you know, stuff you know you don't know, and stuff you don't know you don't know. Architects deliberately grow the middle layer — they need to recognize when to reach for something — rather than deepening the top.

Ch. 02

Breadth Over Depth

Developers prize deep expertise; architects prize broad recognition. The job is matching capabilities to problems, which requires knowing that something exists more than knowing how it's implemented in detail.

Ch. 02

Stale Expertise

Specialty knowledge decays. An architect who tries to maintain deep expertise across many areas fails on both fronts — they can't keep up and they don't have time to build the breadth their role actually needs.

Ch. 02

Trade-Off Analysis

Every architectural choice involves balancing competing concerns. Topic-based messaging gives decoupling and extensibility; queue-based messaging gives contract control and security. Neither is "right" — the context decides.

Ch. 02

Frozen Caveman Anti-Pattern

An architect who keeps raising the same irrational risk concern from a past project, ignoring current context. Recognizing this in yourself and others is the first defense.

Ch. 02

Hands-On Without Bottlenecking

Architects should stay technical without becoming the critical-path coder. Techniques: build proofs of concept, tackle technical debt and bugs, automate with scripts, do code reviews — not own production features.

Ch. 02 · Vocab
Knowledge Pyramid
Three-layer model of known, known-unknown, and unknown-unknown.
Technical Breadth
Wide, shallow knowledge prioritized over deep expertise for architects.
Technical Depth
Deep expertise in a narrow area, valued for senior developers.
Trade-Off Analysis
Structured comparison of competing options' pros and cons.
Ch. 02 · Vocab
Proof of Concept
Small working code an architect builds to validate a design.
Frozen Caveman
Anti-pattern of anchoring on outdated risks from past trauma.
Stale Expertise
Specialty knowledge that loses value when not actively maintained.
Ch. 02 · Quiz1 / 4

Multiple choice

Which layer of the Knowledge Pyramid should architects deliberately try to expand the most?

Ch. 02 · Quiz2 / 4

Spot the issue

An architect joins a project and immediately rejects asynchronous messaging because "the last team I worked with had message-ordering bugs that took us six months to debug." The current team is using Kafka with single-partition ordering and has no such risk. What's going on?

Ch. 02 · Quiz3 / 4

Multiple choice

Why does the book argue that architects should generally avoid being on the critical path of production feature work?

Ch. 02 · Quiz4 / 4

True / False

Architects should match developers' depth of expertise in every technology the system uses.

Ch. 03

Modularity

Modularity is the logical grouping of related code and the foundation of maintainable architecture. The chapter introduces measurable metrics — cohesion, coupling, connascence, and abstractness/instability — so architects can reason objectively rather than intuitively.

Ch. 03

Cohesion

How related the elements inside a module are. The cohesion spectrum runs from functional (best, all elements serve one purpose) down through sequential, communicational, procedural, temporal, logical, to coincidental (worst, grouped by accident).

Ch. 03

Coupling — Afferent and Efferent

Structural interdependence between modules. Afferent coupling counts incoming dependencies (who depends on me); efferent counts outgoing (who I depend on). Both are measurable with static analysis.

Ch. 03

Abstractness and Instability

Abstractness = ratio of abstract artifacts (interfaces, abstract classes) to concrete ones. Instability = efferent / (afferent + efferent) — high instability means the module changes often due to dependencies.

Ch. 03

Distance from the Main Sequence

The ideal balance is A + I = 1. Distance D = |A + I − 1|. Modules far from this line fall into the zone of uselessness (too abstract, no users) or the zone of pain (too concrete, too stable, can't change).

Ch. 03

Connascence

Meilir Page-Jones's concept: two components are connascent if changing one forces a corresponding change in the other to maintain correctness. Static connascence happens at source-code level (name, type, position); dynamic happens at runtime (timing, value, identity).

Ch. 03

Refactor Toward Weaker Connascence

The stronger the connascence, the harder maintenance becomes. The rule: refactor toward weaker forms (name is weakest, identity is strongest among static; value/identity strongest among dynamic). Strong connascence is tolerable only when locality is high.

Ch. 03 · Vocab
Cohesion
Degree to which a module's elements belong together.
Coupling
Degree of interdependence between modules.
Afferent Coupling
Incoming dependencies on this module.
Efferent Coupling
Outgoing dependencies from this module.
Ch. 03 · Vocab
LCOM
Lack of Cohesion in Methods — Chidamber–Kemerer metric.
Abstractness
Ratio of abstract to concrete elements in a module.
Instability
Efferent / total coupling; volatility under change.
Connascence
Page-Jones term for a relationship where one change forces another.
Ch. 03 · Quiz1 / 4

Multiple choice

A module has 12 outgoing dependencies and 2 incoming dependencies. What is its instability score?

Ch. 03 · Quiz2 / 4

Multiple choice

Which form of cohesion is considered the strongest (best)?

Ch. 03 · Quiz3 / 4

Spot the issue

A module sits at abstractness = 0.9 and instability = 0.9 — lots of abstract types, and almost nothing depends on it. Where does it fall on Martin's diagram and what does that imply?

Ch. 03 · Quiz4 / 4

True / False

Strong connascence between two components is always a defect that must be eliminated.

Ch. 04

Architecture Characteristics Defined

The chapter defines what qualifies as an architecture characteristic and groups them into operational, structural, and cross-cutting categories. It warns against trying to support too many "-ilities" at once — every characteristic added makes the design harder.

Ch. 04

The Three-Part Definition

A characteristic qualifies if it (1) specifies a non-domain consideration, (2) influences some structural aspect of the design, and (3) is critical or important to the application's success. Anything missing one of these isn't architectural.

Ch. 04

Operational Characteristics

Performance, scalability, elasticity, availability, reliability, recoverability — the runtime behavior the system exhibits. Heavy overlap with DevOps concerns; usually the loudest to stakeholders.

Ch. 04

Structural Characteristics

Configurability, extensibility, maintainability, portability, upgradeability — concerns about the code itself rather than its runtime behavior. Easier to measure; harder to sell to business.

Ch. 04

Cross-Cutting Characteristics

Authentication, authorization, security, privacy, accessibility, legal compliance — concerns that touch every part of the system rather than living in one layer. They're often non-negotiable.

Ch. 04

Scalability vs Elasticity

The two are routinely conflated. Scalability is sustained throughput growth (handling 10x users over a year); elasticity is bursty load handling (a flash sale spike). Architectures support them very differently.

Ch. 04

Limit the Number of Characteristics

Supporting many "-ilities" creates conflicting trade-offs. Pick the few that matter most — typically the top three — and let the rest receive best-effort. The Vasa warship (Ch. 5) is the cautionary tale.

Ch. 04 · Vocab
Operational Characteristic
Runtime concern like performance, availability, recoverability.
Structural Characteristic
Code-organization concern like maintainability, extensibility.
Cross-Cutting Characteristic
System-wide concern like security or accessibility.
Scalability
Sustained throughput growth as load rises over time.
Ch. 04 · Vocab
Elasticity
Ability to absorb sudden bursts in load.
Agility
Composite of modularity, deployability, and testability.
ISO 25010
Standard taxonomy of software product quality attributes.
Synonym Wars
Vendor-coined "-ility" terms that erode shared vocabulary.
Ch. 04 · Quiz1 / 4

Multiple choice

An e-commerce site needs to handle a 50× traffic spike during a 30-minute flash sale and then return to normal. Which characteristic primarily drives this?

Ch. 04 · Quiz2 / 4

Multiple choice

Which of the following is not part of the three-part definition of an architecture characteristic?

Ch. 04 · Quiz3 / 4

Spot the issue

An architect promises stakeholders the system will be "highly performant, scalable, elastic, available, resilient, maintainable, extensible, secure, and accessible — all top priority." What's the main problem?

Ch. 04 · Quiz4 / 4

True / False

Cross-cutting characteristics like security can usually be addressed by adding a single layer or module to the system.

Ch. 05

Identifying Architectural Characteristics

Architecture characteristics come from three sources: domain concerns, explicit requirements, and implicit domain knowledge. The chapter uses the Vasa warship as a cautionary tale about over-specified architectures and advocates the top-three rule for keeping characteristics tractable.

Ch. 05

Three Sources of Characteristics

Characteristics come from domain concerns (stakeholder goals like "time to market"), explicit requirements (response times, concurrent users stated in user stories), and implicit knowledge the architect must infer (security, availability are usually assumed).

Ch. 05

Translating Domain Concerns

Stakeholders speak business language. "User satisfaction" might mean response time or availability; "time to market" usually means agility (modularity + deployability + testability). The architect's job is the translation.

Ch. 05

Top Three Rule

Limit the explicit characteristics the architecture is built to support to about three. More creates conflicting optimizations. The discipline is choosing which to drop, not which to add.

Ch. 05

The Vasa Warship

The 17th-century Swedish warship Vasa was loaded with so many requested features — extra cannons, decorations, height — that it capsized on its maiden voyage. The architectural analog: over-specified systems collapse under their own weight.

Ch. 05

Implicit vs Explicit Requirements

Some requirements are written down (response time < 100ms); others are assumed (the system is secure). Architects must surface implicit ones explicitly because untested assumptions cause production failures.

Ch. 05

Composite Characteristics

Agility isn't a single characteristic — it's the composite of modularity, deployability, and testability. Stakeholders ask for the composite; architects must decompose it into measurable pieces.

Ch. 05 · Vocab
Domain Concern
A business goal expressed in stakeholder language.
Explicit Requirement
A clearly stated requirement in the spec.
Implicit Requirement
A requirement assumed without being stated.
Top Three Rule
Limit explicit characteristics to about three priorities.
Ch. 05 · Vocab
Vasa Anti-Pattern
Cramming too many characteristics until the system collapses.
Composite Characteristic
A characteristic made up of multiple measurable ones.
Domain-to-Architecture Mapping
Translating stakeholder concerns into technical traits.
Ch. 05 · Quiz1 / 4

Multiple choice

A stakeholder says "we need to get to market faster than our competitors." Which composite characteristic does this most directly imply?

Ch. 05 · Quiz2 / 4

Spot the issue

A team's architecture document lists 11 critical architecture characteristics, all marked "high priority." A new architect joining the project should be most concerned about:

Ch. 05 · Quiz3 / 4

Multiple choice

Which of the following is the least likely to be an *explicit* architectural requirement in a user story?

Ch. 05 · Quiz4 / 4

True / False

A characteristic that emerges from implicit domain knowledge doesn't really qualify as an architecture characteristic until it's written down somewhere.

Ch. 06

Measuring and Governing Architecture Characteristics

Characteristics that can't be measured can't be governed. The chapter introduces fitness functions — automated, objective tests of architectural integrity — borrowed from evolutionary computing, and surveys the metrics that make abstract "-ilities" testable.

Ch. 06

Fitness Function

"Any mechanism that provides an objective integrity assessment of some architecture characteristic(s)." Borrowed from evolutionary algorithms; the central testable artifact in evolutionary architecture.

Ch. 06

Operational Measurements

Performance, scalability, and availability come with well-known metrics: P50/P95/P99 latency, requests per second, uptime SLA. Loud and observable in production.

Ch. 06

Structural Measurements

Code-level metrics like cyclomatic complexity, modularity, coupling, abstractness, and instability — measurable by static analysis at every commit.

Ch. 06

Cyclomatic Complexity

Thomas McCabe's metric for independent execution paths through code. High values indicate methods doing too much; the standard threshold is 10, with anything higher flagged for decomposition.

Ch. 06

Categories of Fitness Functions

Fitness functions are classified along several axes: atomic vs holistic, triggered vs continual, static vs dynamic, automated vs manual, temporal. The taxonomy helps architects design coverage that catches different failure modes.

Ch. 06

Governance via Code

Tools like ArchUnit (Java) and NetArchTest (.NET) let architects write tests that assert architectural rules — for example, "the persistence layer never references the presentation layer." Violations fail the build like any other test.

Ch. 06 · Vocab
Fitness Function
Objective, automated assessment of an architecture characteristic.
Atomic Fitness Function
Tests a single characteristic.
Holistic Fitness Function
Tests combinations of characteristics together.
Triggered Fitness Function
Runs on a specific event (CI build, deploy).
Ch. 06 · Vocab
Continual Fitness Function
Runs constantly in production (monitoring).
Cyclomatic Complexity
McCabe's metric of independent execution paths.
ArchUnit
Java library for architectural test assertions.
NetArchTest
.NET equivalent of ArchUnit.
Ch. 06 · Quiz1 / 4

Multiple choice

Which definition best matches the book's description of a fitness function?

Ch. 06 · Quiz2 / 4

Spot the issue

A team wants to enforce that no class in the `api` package directly imports from the `persistence` package. They add a code-review checklist item asking reviewers to check for violations. What's the best critique?

Ch. 06 · Quiz3 / 4

Multiple choice

Which fitness-function pair is correctly matched?

Ch. 06 · Quiz4 / 4

True / False

Cyclomatic complexity directly measures how many lines of code a method contains.

Ch. 07

Scope of Architecture Characteristics

Traditional architecture treated characteristics as system-wide; modern distributed systems made that view obsolete. The chapter introduces the architecture quantum — an independently deployable unit with high functional cohesion and synchronous connascence — as the new scope of analysis.

Ch. 07

The Architecture Quantum

"An independently deployable artifact with high functional cohesion and synchronous connascence." The unit at which characteristics can be measured and varied. A monolith is one quantum; a microservice system has many.

Ch. 07

Independently Deployable

A quantum bundles everything it needs to run alone — including its database. Two "services" that share a database are part of the same quantum no matter how they look in code.

Ch. 07

High Functional Cohesion at the Quantum Level

A quantum should map to a single meaningful business or domain capability, not an arbitrary slice of code. Cohesion at the quantum scale corresponds to DDD's bounded context.

Ch. 07

Synchronous Connascence

Runtime dependency through synchronous calls binds parts of a quantum together. Asynchronous communication can decouple quanta, which is why event-driven and message-based patterns enable independent scaling.

Ch. 07

Different Characteristics Per Quantum

In a microservices system, one service can be highly available while another is highly scalable. The quantum reframes "what's the system's availability" into "what's each quantum's availability."

Ch. 07

Bounded Context Alignment

The architecture quantum naturally aligns with DDD's bounded context. This is why DDD became foundational to microservices — it provides the conceptual framing for where one quantum ends and the next begins.

Ch. 07 · Vocab
Architecture Quantum
Independently deployable artifact with high functional cohesion and synchronous connascence.
Independently Deployable
Property of bundling all dependencies (including DB) for standalone operation.
Functional Cohesion
Cohesion organized around one purpose mapped to a domain concept.
Synchronous Connascence
Runtime coupling through synchronous calls.
Ch. 07 · Vocab
Bounded Context
DDD concept where a model is internally consistent within explicit boundaries.
Static Coupling
How components are wired (dependencies, imports).
Dynamic Coupling
How components communicate at runtime (sync/async, transactional).
Monolithic Quantum
Traditional monolith treated as a single quantum.
Ch. 07 · Quiz1 / 4

Multiple choice

Service A and Service B are deployed as separate Docker containers and call each other over REST, but both write to the same PostgreSQL database. How many architecture quanta are present?

Ch. 07 · Quiz2 / 4

Multiple choice

Which DDD concept does the architecture quantum most directly align with?

Ch. 07 · Quiz3 / 4

Spot the issue

An architect describes the company's microservices system as having "99.95% availability across the system." A reviewer pushes back. Why?

Ch. 07 · Quiz4 / 4

True / False

Two services communicating only via asynchronous messaging are necessarily part of the same architecture quantum.

Ch. 08

Component-Based Thinking

Components are the architect's primary building block — the physical manifestation of modules. The chapter distinguishes components from classes, contrasts technical and domain partitioning, and offers workflows like Event Storming and the actor/actions approach for identifying them.

Ch. 08

Component as Architect's Unit

A component is a deployable, named, reusable piece — a library, layer, or subsystem. Architects work at the component level; developers fill in classes inside. The split clarifies who decides what.

Ch. 08

Technical Partitioning

Organizing top-level components by technical capability: presentation, business logic, persistence. Maps naturally to traditional org charts (UI team, backend team, DBA team) — which is partly why it's so common.

Ch. 08

Domain Partitioning

Organizing top-level components by business domain: CatalogCheckout, OrderTracking, UserProfile. Favored for agility, team alignment, and microservices because it minimizes the cross-team coordination needed for a single feature.

Ch. 08

Conway's Law and the Inverse Maneuver

"Organizations design systems that mirror their communication structures." The inverse Conway maneuver reshapes teams on purpose to produce a desired architecture, exploiting the law in reverse.

Ch. 08

Event Storming

A workshop technique from DDD where domain experts list every event the system processes; bounded contexts and components emerge from the clusters. Best for greenfield architectures with rich domain dynamics.

Ch. 08

Actor/Actions and Workflow Approaches

Two alternatives to Event Storming. Actor/actions identifies user roles and their actions — fits well-defined user types. Workflow models around process steps — fits domains without clear events.

Ch. 08

Component Identification Workflow

An iterative process: identify initial components, assign user stories to them, analyze roles and responsibilities, evaluate against architecture characteristics, restructure as needed. Components are refined, not designed once.

Ch. 08 · Vocab
Component
Physical building block — a deployable, named unit of classes/modules.
Technical Partitioning
Decomposition by technical role (UI, business, persistence).
Domain Partitioning
Decomposition by business domain or subdomain.
Subdomain
A discrete business capability within the overall domain.
Ch. 08 · Vocab
Conway's Law
Systems mirror the communication structures of the orgs that build them.
Inverse Conway Maneuver
Restructuring teams to drive a desired architecture.
Event Storming
DDD workshop technique that discovers components via domain events.
Actor/Actions Approach
Component discovery via user roles and their actions.
Ch. 08 · Vocab
Workflow Approach
Component discovery via business workflow steps.
Ch. 08 · Quiz1 / 4

Multiple choice

A team builds a new e-commerce platform with separate components for `presentation-layer`, `business-rules`, and `persistence`. Which partitioning style does this represent?

Ch. 08 · Quiz2 / 4

Spot the issue

A company wants a microservices architecture but its teams are still organized as `frontend-team`, `backend-team`, and `database-team`. After six months they have three large services aligned with those teams rather than with business domains. What's the lesson?

Ch. 08 · Quiz3 / 4

Multiple choice

Which component-discovery technique is best suited to a greenfield system in a domain rich with business events?

Ch. 08 · Quiz4 / 4

True / False

Architects typically design components at the class level, leaving package/module structure to developers.

Part 02

Architecture Styles

Ch. 9–19

Ch. 09

Foundations (of Architecture Styles)

Architecture styles are named sets of structural decisions and trade-offs that give architects shared vocabulary. The chapter distinguishes styles from patterns, surveys fundamental options (Big Ball of Mud, Unitary, Client/Server), and lays out the eight fallacies of distributed computing every architect must respect.

Ch. 09

Styles vs Patterns

A style describes the system's overall topology and the trade-offs that come with it. A pattern is a lower-level reusable solution within a style (circuit breaker, CQRS, saga). Styles are the question; patterns are tactics inside the answer.

Ch. 09

Big Ball of Mud

Foote and Yoder's anti-pattern name for systems with no discernible architecture — haphazard, undocumented, with cascading change impact. The default outcome when architecture is neglected, not a style anyone chooses.

Ch. 09

Technical vs Domain Partitioning at the Style Level

Layered, pipeline, and microkernel are technically partitioned monoliths. Service-based, event-driven, space-based, and microservices are typically domain-partitioned and distributed. The split affects nearly every characteristic the style supports.

Ch. 09

The Eight Fallacies of Distributed Computing

Deutsch and Gosling's list (Sun, 1994) of false assumptions about networks: the network is reliable, latency is zero, bandwidth is infinite, the network is secure, topology never changes, there is only one administrator, transport cost is zero, the network is homogeneous. Every one bites distributed systems.

Ch. 09

Distributed Logging and Transactions

Distribution multiplies operational concerns: you can't `tail -f` across 50 services, ACID transactions don't span network calls without painful coordination, and contracts between services must be versioned because deployments are independent.

Ch. 09

Stamp Coupling

A subtle distributed-system anti-pattern: passing larger data structures than the recipient needs (sending a whole order object when only the order ID is required). Wastes bandwidth and creates implicit coupling on shared field shapes.

Ch. 09 · Vocab
Architecture Style
Overarching structure defining components and their relationships.
Architecture Pattern
Lower-level reusable solution within a style.
Big Ball of Mud
Anti-pattern of unstructured, undocumented code.
Stamp Coupling
Passing larger data structures than needed across services.
Ch. 09 · Vocab
Eventual Consistency
Data converging to a consistent state over time, not immediately.
Saga
Sequence of local transactions with compensating actions for distributed workflows.
Circuit Breaker
Pattern that stops calls to a failing remote service to prevent cascade.
Topology
Arrangement and interconnection of architectural components.
Ch. 09 · Quiz1 / 4

Multiple choice

A new architect proposes building a distributed system without budgeting for latency, retries, or network failures. Which fallacy of distributed computing are they violating most directly?

Ch. 09 · Quiz2 / 4

Multiple choice

Which of the following is a pattern, not a style?

Ch. 09 · Quiz3 / 4

Spot the issue

A microservice exposes a `getOrder(orderId)` endpoint that returns the full order object — line items, customer details, shipping address, payment info — even when callers only need the order status. What anti-pattern is this?

Ch. 09 · Quiz4 / 4

True / False

The "Big Ball of Mud" is one of the formal architecture styles described in the book, distinct from layered and microservices.

Ch. 10

Layered Architecture Style

The layered (n-tier) architecture organizes components into horizontal technical layers — presentation, business, persistence, database — each with a defined role. It's the de facto starting style for small applications: simple, cheap, well-understood, but constrained by monolithic deployment and technical partitioning.

Ch. 10

Topology and Layers

Four standard layers: presentation, business, persistence, database. The number is flexible — some systems add a services layer or split persistence. Technically partitioned, not domain-partitioned.

Ch. 10

Layers of Isolation

Closed layers force requests to pass through every layer in sequence. The benefit: changing the database doesn't ripple to the presentation layer because the persistence layer absorbs the change. Isolation is the whole point.

Ch. 10

Closed vs Open Layers

A closed layer must be passed through; an open layer can be bypassed. Open layers are useful for shared utilities (logging, common services) but every open layer increases coupling.

Ch. 10

Architecture Sinkhole Anti-Pattern

When requests traverse multiple layers performing only trivial pass-through with no real logic, the layering adds overhead with no payoff. The 80/20 rule: tolerable if under 20% of requests behave this way.

Ch. 10

Why Layered Is So Common

Maps naturally to traditional org charts (UI team, backend team, DBA team) — Conway's Law in action. Low complexity, low cost, easy to learn. Often the right starting point even when it won't be the final answer.

Ch. 10

Star-Rating Profile

Excellent at cost (5) and simplicity (5). Weak at deployability, elasticity, evolutionary, fault tolerance, modularity, scalability (all 1). Reliability moderate (3), performance and testability low (2).

Ch. 10 · Vocab
Closed Layer
A layer that must be passed through; cannot be bypassed.
Open Layer
A layer that can be skipped by callers above it.
Architecture Sinkhole Anti-Pattern
Requests traverse layers without meaningful processing.
Layers of Isolation
Principle that closed layers contain change impact.
Ch. 10 · Vocab
Technical Partitioning
Grouping components by technical role rather than business domain.
Presentation Layer
User-facing UI and controllers.
Business Layer
Domain rules, workflows, validations.
Persistence Layer
Data-access mediation via DAOs, repositories, ORM.
Ch. 10 · Vocab
Monolithic Deployment
Single deployment unit containing all layers.
Ch. 10 · Quiz1 / 4

Multiple choice

A request enters the presentation layer, calls the business layer (which just delegates), calls the persistence layer (which just delegates), and returns to the presentation layer unchanged. If more than 20% of requests follow this path, what's happening?

Ch. 10 · Quiz2 / 4

Multiple choice

Which two characteristics does the layered architecture rate highest (5 stars)?

Ch. 10 · Quiz3 / 4

Spot the issue

A team makes the persistence layer "open" so that the presentation layer can read directly from the database for performance reasons. A year later, a schema change breaks the UI in unexpected places. What principle did they violate?

Ch. 10 · Quiz4 / 4

True / False

The layered architecture is a domain-partitioned style.

Ch. 11

Pipeline Architecture Style

Also known as pipes-and-filters, the pipeline style structures processing as a sequence of independent filters connected by unidirectional pipes — the pattern behind Unix shells, ETL tools, Apache Camel, and build pipelines. Strengths are compositional reuse and modularity; weaknesses come from monolithic deployment.

Ch. 11

Pipes and Filters

Two component types: pipes are unidirectional point-to-point channels carrying data; filters are self-contained, stateless, single-purpose processors. Data flows one way through the chain.

Ch. 11

Four Filter Types

Producers originate data (sources). Transformers modify input and produce output (map). Testers evaluate conditions and conditionally emit (filter/reduce). Consumers are terminal sinks. Every filter belongs to one of these four roles.

Ch. 11

Compositional Reuse

Filters are interchangeable building blocks. New pipelines come together by re-arranging existing filters instead of writing new code — like piping Unix utilities. This is the style's main draw.

Ch. 11

Common Uses

ETL pipelines (Apache Camel, AWS Data Pipeline), electronic data interchange, CI/build pipelines, stream processing, and complex event processing. Anywhere data flows linearly through transformation stages.

Ch. 11

Monolithic Deployment Constraint

Despite excellent internal modularity, filters typically ship as one deployable unit — one architecture quantum. You can't independently scale or fail-isolate one filter without breaking the metaphor.

Ch. 11

Star-Rating Profile

Top scores in cost (5), simplicity (5), and modularity (5). Moderate in deployability, evolutionary, testability (3). Weak in elasticity, fault tolerance, scalability (1).

Ch. 11 · Vocab
Pipe
Unidirectional point-to-point channel transferring data between filters.
Filter
Self-contained, stateless processing unit doing one task.
Producer
Filter that originates data into the pipeline.
Transformer
Filter that modifies input and produces output (map-style).
Ch. 11 · Vocab
Tester
Filter that evaluates input and conditionally emits output (filter/reduce-style).
Consumer
Terminal filter performing a final action.
Compositional Reuse
Re-using and reordering filters to construct new pipelines.
Pipes-and-Filters
Alternative name for the pipeline style.
Ch. 11 · Quiz1 / 4

Multiple choice

A filter receives a stream of orders, examines each one, and only forwards orders worth more than $100. Which filter type is this?

Ch. 11 · Quiz2 / 4

Multiple choice

What is the biggest architectural limitation of the pipeline style despite its strong modularity?

Ch. 11 · Quiz3 / 4

Spot the issue

A team builds an ETL pipeline where one filter both transforms records *and* writes them to the database at the same time. What pipeline principle does this violate?

Ch. 11 · Quiz4 / 4

True / False

A canonical example of pipeline architecture in everyday use is Unix shell piping (`cat file | grep foo | wc -l`).

Ch. 12

Microkernel Architecture Style

The microkernel (a.k.a. plug-in) architecture splits an application into a minimal core system and independent plug-ins that extend it. It's the dominant pattern for product software (Eclipse, IntelliJ, browsers, Jenkins) and any business app that needs extensibility or customer-specific rules.

Ch. 12

Core System

Holds the minimum functionality required to run the application — the general workflow, the "happy path." Can itself be internally layered. The core never knows the specifics of any plug-in.

Ch. 12

Plug-In Components

Independent, standalone modules that contain specialized processing, custom rules, or optional features. Isolated from each other so one plug-in's bug doesn't crash siblings.

Ch. 12

Plug-In Registry

The mechanism the core uses to discover, locate, and invoke available plug-ins. Holds names, contracts, and protocols. Without it the core has no way to find the plug-ins.

Ch. 12

Contracts

Standardized interfaces between core and plug-ins — XML, JSON, objects, or interface definitions. Versioning is critical: third-party plug-ins must keep working as the core evolves.

Ch. 12

Core-to-Plug-In Communication

Usually in-process method calls. Can be REST or messaging when plug-ins are remote, but that adds distributed-system complexity. In-process keeps the style monolithic and cheap.

Ch. 12

Why It Fits Product Software

Insurance, tax, and IDE products all share the pattern: a stable core with jurisdiction-specific or domain-specific rules that vary by customer. Plug-ins isolate variation; the core stays small and well-tested.

Ch. 12 · Vocab
Core System
Minimal essential functionality of the application.
Plug-In Component
Independent module that extends or specializes the core.
Plug-In Registry
Catalog the core uses to find plug-ins and their contracts.
Contract
Defined interface/data format between core and plug-in.
Ch. 12 · Vocab
Extensibility
Ability to add functionality without modifying the core.
Plug-In Architecture
Synonym for microkernel architecture.
Product-Based Application
Software shipped/installed and extended by customers or third parties.
Domain Partitioning
Organizing code around business domains.
Ch. 12 · Quiz1 / 4

Multiple choice

A tax-preparation product ships a stable engine and adds per-country tax rules as separate modules customers install. Which architecture style does this most closely match?

Ch. 12 · Quiz2 / 4

Multiple choice

What does the plug-in registry hold?

Ch. 12 · Quiz3 / 4

Spot the issue

A team builds a microkernel-style product but lets two plug-ins call each other directly, bypassing the core. What's the risk?

Ch. 12 · Quiz4 / 4

True / False

Eclipse, IntelliJ, and most modern web browsers are commonly cited as examples of microkernel architecture in production.

Ch. 13

Service-Based Architecture Style

Service-based architecture is the pragmatic middle ground between monoliths and microservices — a "distributed macro-layered" style with a separate UI, 4–12 coarse-grained domain services, and a single shared database. It captures most service-decomposition benefits while avoiding microservices' operational complexity.

Ch. 13

Topology

Separately deployed user interface, an optional API layer, 4–12 coarse-grained domain services, and a shared monolithic database. The services are independently deployable; the database is not.

Ch. 13

Coarse-Grained Domain Services

Each service represents a large slice of business functionality, not a single endpoint. Average ~7 services per application. Coarse granularity is the deliberate choice — it sidesteps microservices' granularity headaches.

Ch. 13

Shared Monolithic Database

All services share one database, optionally logically partitioned by domain. The big win: ACID transactions still work and SQL joins are possible. The trade-off: schema changes can ripple across services.

Ch. 13

ACID Transactions Across Services

Because the database is shared, services can participate in traditional ACID transactions. No sagas, no eventual consistency, no compensating actions. This alone is why many teams choose service-based over microservices.

Ch. 13

When to Choose Service-Based

Domain-driven business applications where transactional integrity matters more than ultra-fine-grained scaling; teams migrating from a monolith but not ready for full microservices; systems where 4–12 services map cleanly to the business.

Ch. 13

Star-Rating Profile

Strong across the board with no five-star ratings: cost 4, simplicity 4, deployability 4, evolutionary 4, fault tolerance 4, modularity 4, reliability 4, testability 4. Moderate elasticity, scalability, performance (3).

Ch. 13 · Vocab
Domain Service
Coarse-grained, independently deployed service representing a business domain.
Macro-Layered Structure
UI / services / database arranged as distributed layers.
API Layer
Optional reverse-proxy/gateway routing requests to domain services.
Coarse-Grained Service
Service encompassing a broad business capability.
Ch. 13 · Vocab
Shared Monolithic Database
Single database supporting all domain services.
Logical Database Partitioning
Schema organized by domain so changes affect only one service.
Architectural Modularity
Degree to which architecture supports independent change and deployment.
Domain Partitioning
Decomposing the system by business domain rather than technical concern.
Ch. 13 · Quiz1 / 4

Multiple choice

Approximately how many domain services does a typical service-based architecture have?

Ch. 13 · Quiz2 / 4

Multiple choice

Which property does service-based architecture preserve that microservices generally cannot?

Ch. 13 · Quiz3 / 4

Spot the issue

A team chooses service-based and immediately starts decomposing their domain into 40 fine-grained services, each with its own database. What have they actually built?

Ch. 13 · Quiz4 / 4

True / False

Service-based architecture rates 5 stars on scalability, matching microservices.

Ch. 14

Event-Driven Architecture Style

Event-driven architecture (EDA) is a distributed, asynchronous style built from decoupled processors that react to events. It excels at scalability, elasticity, and performance for reactive workflows but is complex to design, debug, and test. EDA can stand alone or hybridize with other styles.

Ch. 14

Request-Based vs Event-Based

Request-based systems use a deterministic orchestrator directing synchronous requests; event-based systems react asynchronously to events, enabling dynamic non-deterministic flows. The mental model is fundamentally different.

Ch. 14

Broker Topology

No central mediator. Initiating events flow through a lightweight broker (Kafka, RabbitMQ); processors react and emit further processing events in a chain. Highly decoupled, scalable, performant — but no workflow control or central error recovery.

Ch. 14

Mediator Topology

A central event mediator orchestrates multi-step workflows through queues and channels. Better error handling, recoverability, and workflow visibility — at the cost of coupling and reduced scalability/performance versus broker.

Ch. 14

Asynchronous Performance Advantage

Fire-and-forget messaging dramatically improves responsiveness because callers don't wait. This is the main reason EDA rates 5 stars on performance.

Ch. 14

Workflow Event Pattern

Error handling without bottlenecking the main flow. Failed events get sent to a workflow delegate that repairs and resubmits them, keeping the primary pipeline responsive while still recovering.

Ch. 14

Preventing Data Loss

Use persistent queues, synchronous send with broker acknowledgments, client-acknowledge mode on consumers, and "last participant support" so events aren't lost between broker, processor, and database.

Ch. 14

Star-Rating Profile

Five-star on elasticity, evolutionary, fault tolerance, performance, scalability. One-star on simplicity. The pattern that buys all the runtime characteristics is also the hardest to design and debug.

Ch. 14 · Vocab
Event Processor
Component that listens for and reacts to events.
Initiating Event
Event that kicks off a business process.
Processing Event
Event generated by a processor while handling an initiating event.
Event Channel
Queue or topic used to transport a category of events.
Ch. 14 · Vocab
Event Broker
Lightweight, decentralized routing mechanism (Kafka, RabbitMQ).
Event Mediator
Central orchestrator of multi-step event workflows.
Broker Topology
Decentralized EDA with no orchestration.
Mediator Topology
Centralized EDA with orchestrated workflows.
Ch. 14 · Vocab
Workflow Event Pattern
Error-handling pattern delegating failed events to a repair component.
Ch. 14 · Quiz1 / 4

Multiple choice

A team wants the highest possible scalability and performance for a reactive, real-time analytics system with simple workflows. Which EDA topology should they pick?

Ch. 14 · Quiz2 / 4

Multiple choice

EDA rates 5 stars on multiple characteristics but 1 star on which one?

Ch. 14 · Quiz3 / 4

Spot the issue

A team uses broker topology for an end-to-end order workflow with twelve sequential steps. Three months in, they cannot tell which step a given order is stuck on or how to recover from partial failures. What should they have done differently?

Ch. 14 · Quiz4 / 4

True / False

Asynchronous messaging in EDA improves responsiveness because callers don't wait for processing to complete.

Ch. 15

Space-Based Architecture Style

Space-based architecture targets extreme scalability, elasticity, and concurrent user volume by removing the central database as a synchronous constraint. It uses replicated in-memory data grids distributed across processing units with asynchronous database updates. Best for spiky, unpredictable load — concert tickets, online auctions, flash sales.

Ch. 15

The Database Bottleneck Problem

Most architectures hit a wall when the database becomes the synchronous constraint. Space-based removes the database from the request path entirely; reads and writes happen in distributed in-memory grids and propagate asynchronously to the DB.

Ch. 15

Processing Units

Each processing unit contains the application logic, an in-memory data grid, and a replication engine that propagates changes to peer units. Multiple processing units run concurrently, sharing state through replication.

Ch. 15

Virtualized Middleware

Four components manage the system: messaging grid (request routing), data grid (replicated in-memory cache), processing grid (optional cross-unit orchestration), deployment manager (dynamic processing-unit lifecycle for elasticity).

Ch. 15

Data Pumps and Asynchronous Persistence

Data changes flow from processing units to the database via persistent queues — the data pump. A separate data writer drains the queue and updates the DB. Reads at startup come from a data reader. Writes never block requests.

Ch. 15

Data Collisions

The cost of replicated caching: one unit's update can be overwritten by another's replication. Collision risk grows with cache size, update frequency, and number of instances — quantifiable as `(updates × instances²) / replication latency`.

Ch. 15

When to Use Space-Based

Unpredictable, spiky load that traditional architectures can't absorb: concert ticket sales, flash sales, online auctions. The cost and complexity are justified only when conventional scaling falls over.

Ch. 15

Star-Rating Profile

Five-star on elasticity, performance, scalability — the whole point. One-star on cost and simplicity. Moderate everywhere else. Pick it only when you genuinely need those three fives.

Ch. 15 · Vocab
Messaging Grid
Manages incoming requests and session state via load balancing.
Data Grid
Replicated in-memory cache distributed across processing units.
Processing Grid
Optional component orchestrating cross-unit requests.
Deployment Manager
Dynamically starts/stops processing units for elasticity.
Ch. 15 · Vocab
Data Pump
Sends data asynchronously via persistent queue to the database.
Data Writer
Drains the data pump's queue and persists to the database.
Data Reader
Reads from the database to seed processing units on startup.
Replicated Cache
In-memory cache duplicated across all processing units.
Ch. 15 · Quiz1 / 4

Multiple choice

Space-based architecture solves which fundamental scaling problem?

Ch. 15 · Quiz2 / 4

Spot the issue

A team picks space-based for a low-traffic internal admin app with predictable steady load. After six months, infrastructure cost has tripled with no performance benefit. What went wrong?

Ch. 15 · Quiz3 / 4

Multiple choice

What is the role of the data pump in space-based architecture?

Ch. 15 · Quiz4 / 4

True / False

Data collisions in space-based architecture become more likely as cache size, update frequency, and the number of processing units all increase.

Ch. 16

Orchestration-Driven Service-Oriented Architecture

A late-1990s/early-2000s enterprise style centered on reuse and a central orchestration engine (ESB) coordinating layered services. Heavy reuse created tight coupling, transactional complexity, and coordinated deployment headaches. Studied today mainly as a cautionary tale and the precursor that motivated microservices.

Ch. 16

Reuse as Organizing Principle

The architecture was driven by the business mandate to maximize reuse — amortize expensive licensed software and headcount. The instinct was right; the execution coupled everything together and produced the opposite of agility.

Ch. 16

Service Taxonomy

Strict layering of business services (abstract domain entry points), enterprise services (atomic reusable behaviors), application services (single-app needs), and infrastructure services (logging, auditing). The orchestration engine wires them together.

Ch. 16

The Orchestration Engine (ESB)

The Enterprise Service Bus is the heart of the architecture. It declaratively defines workflows, mediates protocols, and manages transaction boundaries. Powerful in theory; in practice, a central choke point that owned far too much logic.

Ch. 16

Technical Partitioning Pitfalls

Splitting services by technical capability rather than domain meant every business change rippled across multiple service layers. The agility costs were enormous and largely invisible until the system was committed.

Ch. 16

Coupling Through Reuse

Aggressive reuse coupled producers and consumers together; changes to a reusable service required coordinated, risky deployments across many consumers. The "reuse pays off" promise inverted into "reuse pays you back with interest."

Ch. 16

Worst of Both Worlds

SOA combined the disadvantages of monoliths (coordinated deploys, coupling) with the disadvantages of distributed systems (network failures, complexity). It earned 1-star ratings on cost, simplicity, deployability, evolutionary, performance, and testability.

Ch. 16 · Vocab
Business Service
Abstract, code-free domain entry point (e.g., ExecuteTrade).
Enterprise Service
Fine-grained, atomic, reusable behavior shared across the company.
Application Service
One-off service serving a single application.
Infrastructure Service
Provides operational concerns (logging, auditing).
Ch. 16 · Vocab
Orchestration Engine (ESB)
Central declarative coordinator wiring services together.
Mediator
Translates between protocols/formats for heterogeneous services.
Heterogeneous Interoperability
SOA's strength — bridging differing platforms via standard transports.
Service Taxonomy
The four-layer SOA categorization of services.
Ch. 16 · Quiz1 / 4

Multiple choice

What was the primary organizing principle of orchestration-driven SOA?

Ch. 16 · Quiz2 / 4

Multiple choice

Which of the following is not part of the SOA service taxonomy?

Ch. 16 · Quiz3 / 4

Spot the issue

A team building a new system in 2024 proposes a heavy reuse-driven service-oriented architecture coordinated by a central ESB. What's the strongest objection?

Ch. 16 · Quiz4 / 4

True / False

Orchestration-driven SOA rates highly on agility and evolutionary characteristics.

Ch. 17

Microservices Architecture

A highly distributed style inspired by DDD's bounded context — each service is independently deployable, owns its data, and is purpose-built around a single domain. Microservices prioritize decoupling above all else (even accepting code duplication) and avoid cross-service transactions. The hardest design problem is getting granularity right.

Ch. 17

Bounded Context Per Service

Each microservice owns its code, data, and dependencies internally. Nothing internal is shared outside the boundary. The bounded context is the unit of independence, not just the unit of meaning.

Ch. 17

Granularity Is the Hardest Problem

Too fine-grained → chatty inter-service communication, distributed transaction headaches. Too coarse → reintroduces internal coupling. The right answer is domain workflows, not lines of code or class count.

Ch. 17

Avoid Reuse, Prefer Duplication

Shared libraries reintroduce coupling — a breaking change in `common-utils` cascades across every consumer. Microservices accept duplication as the price of independence; it's a counterintuitive but central design rule.

Ch. 17

Data Isolation

Each service owns its database/schema. No shared schemas, no cross-service joins, no cross-service ACID transactions. This is non-negotiable in the style — sharing data sneaks coupling back in.

Ch. 17

Choreography vs Orchestration

Choreography — peer-to-peer messaging — preserves decoupling but makes complex workflows hard to reason about. Orchestration — central mediator — eases workflows but reintroduces coupling. The trade-off is constant.

Ch. 17

Sagas and Distributed Transactions

When transactions truly span services, use the saga pattern: a sequence of local transactions with compensating actions for rollback. Complex and to be used sparingly — most distributed-transaction needs are signs of wrong service boundaries.

Ch. 17

Sidecars and Service Mesh

Cross-cutting concerns (logging, monitoring, security, retries) live in sidecar containers co-located with each service. Together, sidecars form the service mesh — a unified control plane for observability and policy.

Ch. 17

Star-Rating Profile

Five-star on deployability, elasticity, evolutionary, fault tolerance, scalability. One-star on cost and simplicity. The most operationally expensive style, justified only when those five characteristics genuinely matter.

Ch. 17 · Vocab
Bounded Context
DDD concept; the boundary within which a model is internally consistent.
Choreography
Peer-to-peer service interaction without a central coordinator.
Orchestration
Service interaction directed by a central coordinator.
Saga
Long-running distributed transaction using compensating actions for eventual consistency.
Ch. 17 · Vocab
Sidecar Pattern
Co-located helper container handling operational concerns.
Service Mesh
Aggregated control plane formed by sidecars across services.
Service Discovery
Mechanism for dynamically locating service instances.
Micro-Frontend
UI components emitted independently by each service.
Ch. 17 · Quiz1 / 4

Multiple choice

According to the book, which is the hardest design problem in microservices?

Ch. 17 · Quiz2 / 4

Multiple choice

Why do microservices generally prefer duplication over reuse?

Ch. 17 · Quiz3 / 4

Spot the issue

A team builds microservices but lets two services share the same PostgreSQL schema "to avoid duplicating order data." Six months later they cannot deploy either service independently because schema changes break both. What principle did they violate?

Ch. 17 · Quiz4 / 4

True / False

Sagas are the recommended default for any workflow spanning multiple microservices.

Ch. 18

Choosing the Appropriate Architecture Style

There is no universally best architecture style; selection is context-dependent and the right answer shifts as the ecosystem evolves. Architects derive style from domain understanding, required characteristics, data architecture, and organizational factors — and document the choice with ADRs and fitness functions.

Ch. 18

Architecture Is a Snapshot in Time

Decisions appropriate today may be obsolete tomorrow. Cloud, containers, DevOps, and open source dominance keep shifting which trade-offs are acceptable. Re-evaluate periodically; don't treat past style choices as eternal.

Ch. 18

Three Primary Decisions

Every architecture style boils down to three big choices: monolith vs distributed, where data lives and how it's partitioned, and synchronous vs asynchronous communication. Everything else flows from these.

Ch. 18

Synchronous by Default

Use synchronous communication unless asynchronous is genuinely required. Async adds significant complexity (error handling, ordering, observability) — the burden of proof falls on the case for async, not the case against.

Ch. 18

Domain Drives Topology

Different bounded contexts may need different architecture characteristics. If a single style can't satisfy all of them, distributed is justified. If one style satisfies everything, distributed is overkill.

Ch. 18

Data Architecture Collaboration

Architects must partner with DBAs and data architects from the start. Data placement profoundly constrains style choices — picking microservices then "figuring out data later" is a path to failure.

Ch. 18

Outputs of the Design Process

The choice produces two durable artifacts: Architecture Decision Records (ADRs) documenting the significant decisions and fitness functions governing the characteristics over time. Neither is optional.

Ch. 18 · Vocab
Architecture Quantum
Independently deployable artifact with high functional cohesion and synchronous connascence.
Domain Partitioning
Organizing the system by business domain.
Technical Partitioning
Organizing by technical capability or layer.
Fitness Function
Objective integrity assessment of an architecture characteristic.
Ch. 18 · Vocab
Architecture Decision Record (ADR)
Documenting an architecturally significant decision.
Monolith vs Distributed
The most fundamental topology choice.
Data Residency / Partitioning
Where data lives and how it's divided.
Communication Synchronicity
Whether interactions are blocking request/response or non-blocking.
Ch. 18 · Quiz1 / 4

Multiple choice

Which is not one of the three primary architectural decisions the chapter highlights?

Ch. 18 · Quiz2 / 4

Multiple choice

What does the book recommend when an architect is uncertain whether communication between two services should be sync or async?

Ch. 18 · Quiz3 / 4

Spot the issue

A team picks microservices because "it's the modern best practice," ignoring that their single-bounded-context CRUD application doesn't need independent deployability, fault isolation, or scalability. What's the main error?

Ch. 18 · Quiz4 / 4

True / False

Once an architecture style is chosen, it should generally remain fixed for the life of the system because re-evaluation is too disruptive.

Ch. 19

Architecture Decisions

Decisions are the architect's core deliverable — not diagrams. They must be gathered carefully, justified completely, documented systematically, and communicated to the right stakeholders. Architecture Decision Records (ADRs) are the canonical documentation; three anti-patterns undermine decision quality.

Ch. 19

Architecturally Significant Decisions

Decisions affecting structure, non-functional characteristics, dependencies, interfaces, or construction techniques. Everything else is design and belongs to the developers. Knowing which is which is the architect's filter.

Ch. 19

Last Responsible Moment

Decisions should be deferred until enough information is available — but not later. Deciding too early locks in assumptions; deciding too late wastes effort. "Just enough information" is the bar.

Ch. 19

ADR Template

A short structured document with Title (sequentially numbered), Status (Proposed / Accepted / Superseded), Context (forces and alternatives), Decision (prescriptive "we will…" statement), Consequences (positive and negative impacts), and optional Compliance and Notes.

Ch. 19

Single System of Record

Decisions must live in one durable, broadly accessible location — a wiki, not Git, never email. Discoverability by non-developers is the requirement; if stakeholders can't find decisions, they didn't happen.

Ch. 19

Covering Your Assets Anti-Pattern

The architect avoids making decisions out of fear of being wrong — passing the buck or leaving the decision implicit. Cure: decide at the last responsible moment with sufficient (not perfect) information, then collaborate to validate quickly.

Ch. 19

Groundhog Day Anti-Pattern

The same decision gets debated over and over because no one understands why it was made. Cure: always document both technical *and* business justification. Once stakeholders understand the rationale, they stop relitigating.

Ch. 19

Email-Driven Architecture Anti-Pattern

Decisions communicated by email and then lost. Cure: maintain a single durable system of record (wiki); use email only to *notify* stakeholders of a decision with a link to the ADR — never as the storage medium.

Ch. 19 · Vocab
Architecture Decision Record (ADR)
Structured doc describing a single architecturally significant decision.
Status (in ADR)
Lifecycle marker — Proposed, Accepted, or Superseded.
Context (in ADR)
Forces, constraints, and alternatives motivating the decision.
Consequences (in ADR)
Resulting impacts and trade-offs.
Ch. 19 · Vocab
Compliance (in ADR)
How adherence will be measured and governed.
Last Responsible Moment
Latest point at which a decision can be made without negative consequences.
System of Record
Single authoritative store of decisions.
Covering Your Assets
Anti-pattern of avoiding decisions out of fear.
Ch. 19 · Quiz1 / 4

Multiple choice

According to the chapter, which is the canonical storage location for architecture decisions?

Ch. 19 · Quiz2 / 4

Multiple choice

A team keeps relitigating the choice of message broker — every quarter someone proposes switching. The original ADR documents only *what* was chosen, not *why*. Which anti-pattern is this?

Ch. 19 · Quiz3 / 4

Spot the issue

An architect is asked to choose between two databases. They respond, "Let the team decide — they'll have to live with it." A year later, the team made an inconsistent choice across services and is suffering for it. Which anti-pattern is this?

Ch. 19 · Quiz4 / 4

True / False

The ADR template's "Consequences" section should describe only positive impacts so the decision looks well-reasoned.

Part 03

Techniques and Soft Skills

Ch. 20–24

Ch. 20

Analyzing Architecture Risk

Risk analysis surfaces architectural deficiencies before they cause failures. The chapter offers a quantitative 1–9 risk matrix that turns subjective opinion into measurable scores, plus "risk storming," a collaborative exercise that brings multiple perspectives to bear on vulnerabilities across dimensions like availability, scalability, security, and performance.

Ch. 20

The Risk Matrix (1–9 Scale)

Risk = Impact (1–3) × Likelihood (1–3), producing a numeric score from 1 to 9. Scores of 1–2 are low, 3–4 medium, 6–9 high. Multiplication removes much of the subjectivity from "low/medium/high" arguments.

Ch. 20

Risk Direction Indicators

Beyond static ratings, annotate whether a risk is improving (+), steady, or worsening (−) over time. Leadership needs to see trends, not just snapshots — a risk holding at 6 is very different from a risk worsening from 3 to 6.

Ch. 20

Risk Storming

A facilitated three-phase activity where architects, senior developers, and tech leads rate risks on an architecture diagram across dimensions like unproven tech, performance, scalability, availability, data loss, single points of failure, and security.

Ch. 20

Identification Phase

Participants rate risks in isolation using the matrix and sticky notes before any discussion happens. The isolation is deliberate: it prevents groupthink and ensures diverse perspectives surface.

Ch. 20

Consensus Phase

Participants reconvene to compare ratings. Where significant disagreement exists (one rates a 6 and another a 3), discussion clarifies assumptions until alignment is reached. The disagreements are where the learning happens.

Ch. 20

Mitigation Phase

The group develops concrete strategies to reduce agreed-upon risks. The output is actionable architecture changes — circuit breakers, redundancy, caching — not just a list of worries.

Ch. 20

Risk at the Quantum Level

Risk is evaluated per architecture quantum and per characteristic, not across the whole system. Different quanta typically have different risk profiles, just as they have different characteristics (Ch. 7).

Ch. 20 · Vocab
Risk Matrix
3×3 grid mapping likelihood vs impact with multiplied score (1–9).
Risk Storming
Three-phase collaborative risk-identification activity.
Architecture Quantum
Unit at which risk is assessed.
Impact
Severity if a risk materializes (1–3).
Ch. 20 · Vocab
Likelihood
How likely the risk is to occur (1–3).
Risk Direction
Visual marker showing whether a risk is trending better or worse.
Identification Phase
Opening, non-collaborative step of risk storming.
Consensus Phase
Group-alignment phase reconciling individual ratings.
Ch. 20 · Quiz1 / 4

Multiple choice

A risk has Impact = 3 (severe) and Likelihood = 2 (medium). What is its score on the risk matrix and how is it classified?

Ch. 20 · Quiz2 / 4

Multiple choice

Why does the identification phase of risk storming require participants to rate risks in isolation before discussion?

Ch. 20 · Quiz3 / 4

Spot the issue

A team produces a risk report listing 30 risks as static "high" / "medium" / "low" labels with no indication of whether anything is getting better or worse. The director asks "are we improving?" and no one can answer. What's missing?

Ch. 20 · Quiz4 / 4

True / False

Risk analysis in modern distributed systems should treat the whole system as the unit of analysis, not individual architecture quanta.

Ch. 21

Diagramming and Presenting Architecture

Diagrams and presentations are the architect's primary communication medium. The chapter surveys the dominant diagramming standards (UML, C4, ArchiMate) and presentation patterns including the Takahashi/Lessig minimal-slide style, deliberate transitions, and incremental reveals.

Ch. 21

Diagramming Standards

UML today is mostly reduced to class and sequence diagrams. C4 (Context, Container, Component, Code) was designed by Simon Brown and works well for monoliths. ArchiMate is a lightweight open-source enterprise modeling language scoped to be "as small as possible."

Ch. 21

Representational Consistency

Maintain visual continuity when zooming in or switching views: the same component should look the same across diagrams, and transitions between abstraction levels should be explicit. The audience never loses orientation.

Ch. 21

Line Semantics

A simple convention worth standardizing: solid lines = synchronous, dotted lines = asynchronous. Consistent line usage removes a whole class of ambiguity from architecture diagrams.

Ch. 21

Irrational Artifact Attachment

The emotional overinvestment architects develop in particular diagrams. Treat diagrams as disposable artifacts; the team's understanding matters more than any one drawing's permanence.

Ch. 21

Takahashi Method

Masayoshi Takahashi's minimalist presentation style: many slides, each containing only one or two very large words. Slides advance rapidly; the speaker carries the content. Lessig Method (Lawrence Lessig) is a close variant.

Ch. 21

Bullet-Riddled Corpse Anti-Pattern

Slides crammed with bullet-point text. The audience reads ahead of the speaker; engagement dies. The fix is minimal text plus incremental reveals — letting the speaker stay ahead.

Ch. 21

Transitions and Incremental Reveals

Rather than dropping a complete diagram on screen, build it up piece by piece so the audience follows the architect's reasoning. Deliberate transitions between slides reinforce narrative flow.

Ch. 21 · Vocab
UML (Unified Modeling Language)
Standard graphical modeling language; class and sequence diagrams remain most-used.
C4 Model
Simon Brown's hierarchical Context/Container/Component/Code approach.
ArchiMate
Open-source enterprise architecture modeling language.
Takahashi Method
Presentation style with many short slides showing one or two large words.
Ch. 21 · Vocab
Lessig Method
Lawrence Lessig's variant of tight slide/speech synchronization.
Incremental Build
A slide revealed progressively rather than all at once.
Transitions
Deliberate pacing devices between slides.
Bullet-Riddled Corpse
Anti-pattern slide overcrowded with bullets.
Ch. 21 · Vocab
Representational Consistency
Keeping elements visually consistent across diagrams.
Ch. 21 · Quiz1 / 4

Multiple choice

According to the line-semantics convention, which is correct?

Ch. 21 · Quiz2 / 4

Multiple choice

Which presentation anti-pattern does the Takahashi Method most directly counter?

Ch. 21 · Quiz3 / 4

Spot the issue

An architect presents a final architecture by dropping a single complex diagram on screen and talking through every box and arrow for ten minutes. Audience attention dies after two minutes. What technique would help most?

Ch. 21 · Quiz4 / 4

True / False

Architects should treat their diagrams as permanent artifacts that must be preserved across the system's lifetime.

Ch. 22

Making Teams Effective

An architect's job extends beyond producing diagrams — they must guide development teams to implement the architecture. The way team boundaries are set is the lever that determines success: three personality types (control freak, armchair, effective), calibration factors, warning signs, and the use of checklists.

Ch. 22

Three Architect Personalities

Control freak sets boundaries too tight, micromanages, demotivates. Armchair is disconnected from implementation, sets boundaries too loose, forces developers to become accidental architects. Effective sets just-right boundaries and stays engaged.

Ch. 22

Team Boundaries as the Lever

Architects shape outcomes by drawing the constraints around what the team may decide. Too tight = stifled creativity; too loose = confusion and lost velocity. The whole art is calibration.

Ch. 22

Control Calibration Factors

The right level of control depends on team familiarity, team size, team experience, project complexity, and project duration. Experienced, smaller, tighter teams need less control; the inverse needs more.

Ch. 22

Process Loss (Brooks's Law)

Adding people to a team paradoxically reduces effective output past a point — coordination overhead, merge conflicts, and communication costs grow non-linearly. More people doesn't mean more delivery.

Ch. 22

Pluralistic Ignorance

Team members publicly agree with a decision they privately reject because they assume everyone else understands something they don't. Example: a team agrees to use messaging between services even though one member knows a firewall makes it pointless.

Ch. 22

Diffusion of Responsibility

In larger teams, individuals feel less personally accountable. Tasks fall through cracks, roles blur. Closely linked to process loss and pluralistic ignorance — together they're the warning-sign trio.

Ch. 22

Checklists

Three high-value checklists: Developer Code Completion (definition of done), Unit and Functional Testing (edge cases, non-automated scenarios), Software Release. Effective checklists are short, focused on error-prone areas, and exclude purely procedural items.

Ch. 22 · Vocab
Control Freak Architect
Personality type with overly tight boundaries.
Armchair Architect
Personality type with overly loose boundaries; disengaged.
Effective Architect
Personality type with calibrated boundaries.
Process Loss
Productivity decay from coordination overhead as team size grows.
Ch. 22 · Vocab
Pluralistic Ignorance
Public endorsement of a privately rejected position.
Diffusion of Responsibility
Reduced individual accountability in larger teams.
Hawthorne Effect
Behavior improves when people know they're being observed.
Definition of Done
Concrete criteria for considering code finished.
Ch. 22 · Quiz1 / 4

Multiple choice

A team agrees in a meeting to introduce a messaging broker between two services even though one engineer privately believes the firewall makes it impractical and several others suspect the same. Which dynamic is this?

Ch. 22 · Quiz2 / 4

Multiple choice

Which architect personality sets team boundaries that are too loose, forcing developers to make accidental architecture decisions?

Ch. 22 · Quiz3 / 4

Spot the issue

A team's project is behind schedule, so leadership adds five more developers. A month later velocity has *decreased*. What principle explains this?

Ch. 22 · Quiz4 / 4

True / False

A good code-completion checklist should be exhaustive, listing every step a developer takes.

Ch. 23

Negotiation and Leadership Skills

Architects negotiate constantly — with business stakeholders, fellow architects, and developers — and lead teams without formal authority. The chapter offers concrete techniques for each context, introduces the 4 C's of architecture, and frames the architect as simultaneously pragmatic and visionary.

Ch. 23

The 4 C's of Architecture

Communication, Collaboration, Clarity, and Conciseness — the core soft-skill competencies that make architects effective at influencing decisions across stakeholders, peers, and teams.

Ch. 23

Negotiating with Business Stakeholders

Translate "-ility" demands into cost and time. When a stakeholder insists on "five nines" (99.999%) availability, probe whether "three nines" (99.9%) actually satisfies the underlying business need — drastically cheaper for nearly the same value.

Ch. 23

Divide-and-Conquer Rule

Break broad architecture characteristics into measurable sub-concerns. Not "performance" but response time (e.g., 50 ms), throughput (e.g., 1000 req/sec), or resource utilization. Decomposed concerns are negotiable; vague characteristics aren't.

Ch. 23

Negotiating with Other Architects

"Demonstration defeats discussion" — a working proof of concept beats hours of debate. Stay calm; avoid escalating arguments; let evidence win. Architects who lose arguments to data lose well.

Ch. 23

Negotiating with Developers

State the justification before the decision, because once developers disagree they cognitively disengage and stop processing further arguments. Where possible, guide dissenters to self-discover the solution rather than imposing it.

Ch. 23

Pragmatic Yet Visionary

Architects must hold strategic long-term vision *and* day-to-day pragmatism in tension. Pure vision gets dismissed as impractical; pure pragmatism produces no leadership. The job sits at the intersection.

Ch. 23

Leading Without Formal Authority

Architects lead without org-chart authority, so credibility comes from demonstrated competence, integration with the development team, and modeling the behavior they expect. Title alone earns nothing.

Ch. 23 · Vocab
The 4 C's
Communication, Collaboration, Clarity, Conciseness.
Divide-and-Conquer Rule
Decomposing broad characteristics into specific measurable concerns.
Demonstration Defeats Discussion
A working artifact wins arguments faster than rhetoric.
Pragmatic Yet Visionary
The dual stance the architect must occupy.
Ch. 23 · Vocab
Cognitive Disengagement
Phenomenon where, once someone disagrees, they stop processing further arguments.
Five Nines / Three Nines
Shorthand availability targets (99.999% / 99.9%).
Facilitation
Guiding a group toward a decision without imposing one.
Negotiation
Reconciling competing concerns to produce a decision everyone can live with.
Ch. 23 · Quiz1 / 4

Multiple choice

A stakeholder demands five-nines (99.999%) availability for an internal HR tool used by 50 employees during business hours. What's the negotiation technique the book recommends?

Ch. 23 · Quiz2 / 4

Multiple choice

Why does the book recommend stating the justification before the decision when talking to developers?

Ch. 23 · Quiz3 / 4

Spot the issue

Two architects spend three hours debating whether a new service should be synchronous or asynchronous, with no resolution. One of them realizes they can build a small proof of concept in an afternoon. What principle should they invoke?

Ch. 23 · Quiz4 / 4

True / False

Architects with the title "Chief Architect" automatically have enough formal authority to direct development teams without needing to build credibility.

Ch. 24

Developing a Career Path

An architect's career is sustained by deliberate, ongoing breadth-building, not by deepening expertise in any single technology. The chapter codifies the 20-Minute Rule for daily learning, restates the laws of software architecture, advocates breadth over depth, and offers the personal Technology Radar.

Ch. 24

Breadth Over Depth

Architects sacrifice some hard-won technical depth to widen their portfolio across frameworks, languages, and platforms. Matching capabilities to business constraints requires broad knowledge; deep specialization is the developer's path, not the architect's.

Ch. 24

The 20-Minute Rule

Spend at least 20 minutes every day learning something new or deepening a topic relevant to architecture. Sustained over months, this is what keeps technical breadth from decaying. Skip it for weeks and the breadth erodes.

Ch. 24

First Law of the 20-Minute Rule

Do it first thing in the morning, right after coffee/tea and *before* checking email. Plans to do it at lunch or after work almost always fail because the day eats the time. Timing is the rule.

Ch. 24

First Law of Software Architecture

"Everything in software architecture is a trade-off." If you think you've found something that isn't, you haven't identified it yet. This is why architecture is hard and can't be Googled — and why breadth matters more than recipes.

Ch. 24

Second Law of Software Architecture

"Why is more important than how." Architects justify decisions; they don't just describe them. The First and Second Laws frame the entire book.

Ch. 24

Personal Technology Radar

Adapted from ThoughtWorks; four rings — Adopt (current expertise), Trial (promising, worth investing in), Assess (worth watching), Hold (deliberately deprioritized). Maps career intent visually and keeps learning purposeful.

Ch. 24

Continuous Learning Imperative

Software professionals discard more learned detail in a lifetime than perhaps any other profession. Staying employable as an architect requires actively curating learning sources (InfoQ, DZone, ThoughtWorks Tech Radar, peer recommendations).

Ch. 24 · Vocab
20-Minute Rule
Daily 20-minute investment in learning to sustain architect-level breadth.
First Law of the 20-Minute Rule
Do it first thing in the morning, before email.
First Law of Software Architecture
Everything is a trade-off.
Second Law of Software Architecture
Why beats how.
Ch. 24 · Vocab
Technology Radar
Four-ring instrument (Adopt / Trial / Assess / Hold) for tracking technologies.
Breadth (Technical)
Wide cross-domain knowledge prioritized over deep specialization.
Depth (Technical)
Deep expertise in a narrow area, appropriate for developers.
Personal Resource Stockpile
Curated set of feeds and communities an architect consults.
Ch. 24 · Quiz1 / 4

Multiple choice

When does the book recommend doing the 20-minute learning block, and why?

Ch. 24 · Quiz2 / 4

Multiple choice

On a personal Technology Radar, which ring marks a technology you have deliberately decided not to invest in?

Ch. 24 · Quiz3 / 4

Spot the issue

A senior developer wants to become an architect and plans to "go deeper" in their favorite language and framework over the next two years to qualify. What's the strategic problem?

Ch. 24 · Quiz4 / 4

True / False

The First Law of Software Architecture says trade-offs always exist, even when not initially visible.

Key Takeaways

01

Everything in software architecture is a trade-off; if you think you've found something that isn't, you just haven't identified the trade-off yet.

02

Why is more important than how — decisions without justification get relitigated forever as Groundhog Day.

03

Architecture characteristics must be measurable to be governable; fitness functions make the abstract testable.

04

The architecture quantum reframes characteristics from system-wide to per-deployable-unit, enabling modern distributed designs.

05

No architecture style is universally best; selection is context-dependent and decays as the ecosystem evolves.

06

Architects lead without formal authority — soft skills (negotiation, presentation, team calibration) matter as much as technical breadth.