Fundamentals of Software Architecture by Mark Richards, Neal Ford

Regular price
Regular price
Sale price

Salary surveys worldwide regularly place software architect in the top 10 best jobs, yet no real guide exists to help developers become architects. Until now. This book provides the first comprehensive overview of software architecture’s many aspects. Aspiring and existing architects alike will examine architectural characteristics, architectural patterns, component determination, diagramming and presenting architecture, evolutionary architecture, and many other topics.

Mark Richards and Neal Ford—hands-on practitioners who have taught software architecture classes professionally for years—focus on architecture principles that apply across all technology stacks. You’ll explore software architecture in a modern light, taking into account all the innovations of the past decade.

This book examines:

  • Architecture patterns: The technical basis for many architectural decisions
  • Components: Identification, coupling, cohesion, partitioning, and granularity
  • Soft skills: Effective team management, meetings, negotiation, presentations, and more
  • Modernity: Engineering practices and operational approaches that have changed radically in the past few years
  • Architecture as an engineering discipline: Repeatable results, metrics, and concrete valuations that add rigor to software architecture
  • Table of contents

    Preface: Invalidating Axioms
    Conventions Used in This Book
    Using Code Examples
    O’Reilly Online Learning
    How to Contact Us
    Acknowledgments from Mark Richards
    Acknowledgments from Neal Ford
    1. Introduction
    Defining Software Architecture
    Expectations of an Architect
    Make Architecture Decisions
    Continually Analyze the Architecture
    Keep Current with Latest Trends
    Ensure Compliance with Decisions
    Diverse Exposure and Experience
    Have Business Domain Knowledge
    Possess Interpersonal Skills
    Understand and Navigate Politics
    Intersection of Architecture and…
    Engineering Practices
    Laws of Software Architecture
    I. Foundations
    2. Architectural Thinking
    Architecture Versus Design
    Technical Breadth
    Analyzing Trade-Offs
    Understanding Business Drivers
    Balancing Architecture and Hands-On Coding
    3. Modularity
    Measuring Modularity
    Abstractness, Instability, and Distance from the Main Sequence
    Distance from the Main Sequence
    Unifying Coupling and Connascence Metrics
    From Modules to Components
    4. Architecture Characteristics Defined
    Architectural Characteristics (Partially) Listed
    Operational Architecture Characteristics
    Structural Architecture Characteristics
    Cross-Cutting Architecture Characteristics
    Trade-Offs and Least Worst Architecture
    5. Identifying Architectural Characteristics
    Extracting Architecture Characteristics from Domain Concerns
    Extracting Architecture Characteristics from Requirements
    Case Study: Silicon Sandwiches
    Explicit Characteristics
    Implicit Characteristics
    6. Measuring and Governing Architecture Characteristics
    Measuring Architecture Characteristics
    Operational Measures
    Structural Measures
    Process Measures
    Governance and Fitness Functions
    Governing Architecture Characteristics
    Fitness Functions
    7. Scope of Architecture Characteristics
    Coupling and Connascence
    Architectural Quanta and Granularity
    Case Study: Going, Going, Gone
    8. Component-Based Thinking
    Component Scope
    Architect Role
    Architecture Partitioning
    Case Study: Silicon Sandwiches: Partitioning
    Developer Role
    Component Identification Flow
    Identifying Initial Components
    Assign Requirements to Components
    Analyze Roles and Responsibilities
    Analyze Architecture Characteristics
    Restructure Components
    Component Granularity
    Component Design
    Discovering Components
    Case Study: Going, Going, Gone: Discovering Components
    Architecture Quantum Redux: Choosing Between Monolithic Versus Distributed Architectures
    II. Architecture Styles
    9. Foundations
    Fundamental Patterns
    Big Ball of Mud
    Unitary Architecture
    Monolithic Versus Distributed Architectures
    Fallacy #1: The Network Is Reliable
    Fallacy #2: Latency Is Zero
    Fallacy #3: Bandwidth Is Infinite
    Fallacy #4: The Network Is Secure
    Fallacy #5: The Topology Never Changes
    Fallacy #6: There Is Only One Administrator
    Fallacy #7: Transport Cost Is Zero
    Fallacy #8: The Network Is Homogeneous
    Other Distributed Considerations
    10. Layered Architecture Style
    Layers of Isolation
    Adding Layers
    Other Considerations
    Why Use This Architecture Style
    Architecture Characteristics Ratings
    11. Pipeline Architecture Style
    Architecture Characteristics Ratings
    12. Microkernel Architecture Style
    Core System
    Plug-In Components
    Examples and Use Cases
    Architecture Characteristics Ratings
    13. Service-Based Architecture Style
    Topology Variants
    Service Design and Granularity
    Database Partitioning
    Example Architecture
    Architecture Characteristics Ratings
    When to Use This Architecture Style
    14. Event-Driven Architecture Style
    Broker Topology
    Mediator Topology
    Asynchronous Capabilities
    Error Handling
    Preventing Data Loss
    Broadcast Capabilities
    Choosing Between Request-Based and Event-Based
    Hybrid Event-Driven Architectures
    Architecture Characteristics Ratings
    15. Space-Based Architecture Style
    General Topology
    Processing Unit
    Virtualized Middleware
    Data Pumps
    Data Writers
    Data Readers
    Data Collisions
    Cloud Versus On-Premises Implementations
    Replicated Versus Distributed Caching
    Near-Cache Considerations
    Implementation Examples
    Concert Ticketing System
    Online Auction System
    Architecture Characteristics Ratings
    16. Orchestration-Driven Service-Oriented Architecture
    History and Philosophy
    Business Services
    Enterprise Services
    Application Services
    Infrastructure Services
    Orchestration Engine
    Message Flow
    Reuse…and Coupling
    Architecture Characteristics Ratings
    17. Microservices Architecture
    Bounded Context
    Data Isolation
    API Layer
    Operational Reuse
    Choreography and Orchestration
    Transactions and Sagas
    Architecture Characteristics Ratings
    Additional References
    18. Choosing the Appropriate Architecture Style
    Shifting “Fashion” in Architecture
    Decision Criteria
    Monolith Case Study: Silicon Sandwiches
    Modular Monolith
    Distributed Case Study: Going, Going, Gone
    III. Techniques and Soft Skills
    19. Architecture Decisions
    Architecture Decision Anti-Patterns
    Covering Your Assets Anti-Pattern
    Groundhog Day Anti-Pattern
    Email-Driven Architecture Anti-Pattern
    Architecturally Significant
    Architecture Decision Records
    Basic Structure
    Storing ADRs
    ADRs as Documentation
    Using ADRs for Standards
    20. Analyzing Architecture Risk
    Risk Matrix
    Risk Assessments
    Risk Storming
    Agile Story Risk Analysis
    Risk Storming Examples
    21. Diagramming and Presenting Architecture
    Diagramming Standards: UML, C4, and ArchiMate
    Diagram Guidelines
    Manipulating Time
    Incremental Builds
    Infodecks Versus Presentations
    Slides Are Half of the Story
    22. Making Teams Effective
    Team Boundaries
    Architect Personalities
    Control Freak
    Armchair Architect
    Effective Architect
    How Much Control?
    Team Warning Signs
    Leveraging Checklists
    Developer Code Completion Checklist
    Unit and Functional Testing Checklist
    Software Release Checklist
    Providing Guidance
    23. Negotiation and Leadership Skills
    Negotiation and Facilitation
    Negotiating with Business Stakeholders
    Negotiating with Other Architects
    Negotiating with Developers
    The Software Architect as a Leader
    The 4 C’s of Architecture
    Be Pragmatic, Yet Visionary
    Leading Teams by Example
    Integrating with the Development Team
    24. Developing a Career Path
    The 20-Minute Rule
    Developing a Personal Radar
    The ThoughtWorks Technology Radar
    Open Source Visualization Bits
    Using Social Media
    Parting Words of Advice
    Self-Assessment Questions
    Chapter 1: Introduction
    Chapter 2: Architectural Thinking
    Chapter 3: Modularity
    Chapter 4: Architecture Characteristics Defined
    Chapter 5: Identifying Architecture Characteristics
    Chapter 6: Measuring and Governing Architecture Characteristics
    Chapter 7: Scope of Architecture Characteristics
    Chapter 8: Component-Based Thinking
    Chapter 9: Architecture Styles
    Chapter 10: Layered Architecture Style
    Chapter 11: Pipeline Architecture
    Chapter 12: Microkernel Architecture
    Chapter 13: Service-Based Architecture
    Chapter 14: Event-Driven Architecture Style
    Chapter 15: Space-Based Architecture
    Chapter 16: Orchestration-Driven Service-Oriented Architecture
    Chapter 17: Microservices Architecture
    Chapter 18: Choosing the Appropriate Architecture Style
    Chapter 19: Architecture Decisions
    Chapter 20: Analyzing Architecture Risk
    Chapter 21: Diagramming and Presenting Architecture
    Chapter 22: Making Teams Effective
    Chapter 23: Negotiation and Leadership Skills
    Chapter 24: Developing a Career Path



Explore Our Product Range