Fundamentals of Software Architecture by Mark Richards & Neal Ford
Fundamentals of Software Architecture
Authors: Mark Richards and Neal Ford
Published: 2020
Core Focus: A comprehensive guide to modern software architecture, covering architectural thinking, styles, patterns, and the evolving role of architects.
Key Highlights
The Eight Core Expectations of Software Architects
- Make architecture decisions - Define the rules and constraints for systems
- Continually analyze the architecture - Look for improvements and identify risks
- Keep current with trends - Understand emerging patterns and technologies
- Ensure compliance - Verify teams follow architectural decisions
- Diverse exposure and experience - Broad technical knowledge across domains
- Business domain knowledge - Understand the problem space deeply
- Interpersonal skills - Communicate, collaborate, and lead effectively
- Navigate politics - Work within organizational constraints
Architecture Characteristics (Non-Functional Requirements)
- Operational: Performance, scalability, availability, reliability
- Structural: Configurability, extensibility, maintainability
- Cross-Cutting: Security, observability, testability
Critical Insight: Never shoot for the best architecture—shoot for the least worst architecture. Every decision is a trade-off.
The Architecture Decision Record (ADR)
Document architectural decisions with:
- Context: What situation led to the decision
- Decision: What was decided
- Consequences: Trade-offs and implications
- Status: Proposed, accepted, superseded
Eight Fallacies of Distributed Computing
- The network is reliable
- Latency is zero
- Bandwidth is infinite
- The network is secure
- Topology doesn’t change
- There is one administrator
- Transport cost is zero
- The network is homogeneous
Why This Matters: Every distributed system violates these assumptions. Staff engineers must design resilience into every layer.
Architecture Styles Overview
- Layered (n-tier): Simple, monolithic, good for small applications
- Pipeline: Transform data through stages (ETL, compilers)
- Microkernel: Core system with plug-in modules (IDEs, browsers)
- Service-Based: Coarse-grained services, pragmatic middle ground
- Event-Driven: Asynchronous, highly decoupled, scalable
- Space-Based: Removes database bottleneck for extreme scalability
- Microservices: Fine-grained, independently deployable, high operational cost
- Service-Oriented: Enterprise-level, middleware-heavy (older pattern)
Evolutionary Architecture
- Fitness Functions: Automated checks that ensure architectural characteristics are met
- Incremental Change: Small, frequent modifications reduce risk
- Appropriate Coupling: Allow only necessary dependencies
The Staff Engineer’s Takeaway
Architecture is about trade-offs, not right answers. The book emphasizes:
- Think in trade-offs: Every decision sacrifices something. Make it explicit.
- Analyze before choosing: Understand your architectural characteristics before picking a style.
- Document decisions: Future you (and your team) will thank you.
- Stay hands-on: Architects who don’t code lose credibility and context.
- Communicate constantly: Architecture dies in isolation.
Practical Application
- Use ADRs for all significant technical decisions
- Create fitness functions to automate architectural governance
- Map business requirements to architectural characteristics first
- Choose the simplest architecture that meets your needs
- Build proof-of-concepts before committing to major changes
Quick Facts
- Best for: Mid-to-senior engineers transitioning to architecture roles
- Page count: ~400 pages
- Time investment: 12-15 hours
- Companion book: “Software Architecture: The Hard Parts” (same authors)
- Key philosophy: “There are no wrong answers in architecture, only expensive ones”
Bottom Line
This book transforms how you think about building systems. It’s not about memorizing patterns—it’s about developing architectural thinking: analyzing trade-offs, understanding context, and making decisions that balance competing concerns. Essential reading for any Staff+ engineer responsible for technical direction.