Fundamentals of Software Architecture

An Engineering Approach

Mark Richards, Neal Ford

Publisher: O'Reilly, 2020, 400 pages

ISBN: 978-2-492-04345-4

Keywords: IT Architecture

Last modified: April 1, 2021, 8:50 p.m.

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
  • Preface: Invalidating Axioms
    • Conventions Used in This Book
    • Using Code Examples
    • O'Reilly Online Learning
    • How to Contact Us
    • Acknowledgments
      • 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
      • Operations/DevOps
      • Process
      • Data
    • Laws of Software Architecture
  1. Foundations
    1. Architectural Thinking
      • Architecture Versus Design
      • Technical Breadth
      • Analyzing Trade-Offs
      • Understanding Business Drivers
      • Balancing Architecture and Hands-On Coding
    2.  Modularity
      • Definition
      • Measuring Modularity
        • Cohesion
        • Coupling
        • Abstractness, Instability, and Distance from the Main Sequence
        • Distance from the Main Sequence
        • Connascence
        • Unifying Coupling and Connascence Metrics
      • From Modules to Components
    3. Architecture Characteristics Defined
      • Architectural Characteristics (Partially) Listed
        • Operational Architecture Characteristics
        • Structural Architecture Characteristics
        • Cross-Cutting Architecture Characteristics
      • Trade-Offs and Least Worst Architecture
    4. Identifying Architectural Characteristics
      • Extracting Architecture Characteristics from Domain Concerns
      • Extracting Architecture Characteristics from Requirements
      • Case Study: Silicon Sandwiches
        • Explicit Characteristics
        • Implicit Characteristics
    5. Measuring and Governing Architecture Characteristics
      • Measuring Architecture Characteristics
        • Operational Measures
        • Structural Measures
        • Process Measures
      • Governance and Fitness Functions
        • Governing Architecture Characteristics
        • Fitness Functions
    6. Scope of Architecture Characteristics
      • Coupling and Connascence
      • Architectural Quanta and Granularity
        • Case Study: Going, Going, Gone
    7. 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
  2. Architecture Styles
    1. Foundations
      • Fundamental Patterns
        • Big Ball of Mud
        • Unitary Architecture
        • Client/Server
      • Monolithic Versus Distributed Architectures
        1. Fallacy #1: The Network Is Reliable
        2. Fallacy #2: Latency Is Zero
        3. Fallacy #3: Bandwidth Is Infinite
        4. Fallacy #4: The Network Is Secure
        5. Fallacy #5: The Topology Never Changes
        6. Fallacy #6: There Is Only One Administrator
        7. Fallacy #7: Transport Cost Is Zero
        8. Fallacy #8: The Network Is Homogeneous
        9. Other Distributed Considerations
    2. Layered Architecture Style
      • Topology
      • Layers of Isolation
      • Adding Layers
      • Other Considerations
      • Why Use This Architecture Style
      • Architecture Characteristics Ratings
    3. Pipeline Architecture Style
      • Topology
        • Pipes
        • Filters
      • Example
      • Architecture Characteristics Ratings
    4. Microkernel Architecture Style
      • Topology
        • Core System
        • Plug-In Components
      • Registry
      • Contracts
      • Examples and Use Cases
      • Architecture Characteristics Ratings
    5. Service-Based Architecture Style
      • Topology
      • Topology Variants
      • Service Design and Granularity
      • Database Partitioning
      • Example Architecture
      • Architecture Characteristics Ratings
      • When to Use This Architecture Style
    6. Event-Driven Architecture Style
      • Topology
      • Broker Topology
      • Mediator Topology
      • Asynchronous Capabilities
      • Error Handling
      • Preventing Data Loss
      • Broadcast Capabilities
      • Request-Reply
      • Choosing Between Request-Based and Event-Based
      • Hybrid Event-Driven Architectures
      • Architecture Characteristics Ratings
    7. 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
    8. Orchestration-Driven Service-Oriented Architecture
      • History and Philosophy
      • Topology
      • Taxonomy
        • Business Services
        • Enterprise Services
        • Application Services
        • Infrastructure Services
        • Orchestration Engine
        • Message Flow
      • Reuse…and Coupling
      • Architecture Characteristics Ratings
    9. Microservices Architecture
      • History
      • Topology
      • Distributed
      • Bounded Context
        • Granularity
        • Data Isolation
      • API Layer
      • Operational Reuse
      • Frontends
      • Communication
        • Choreography and Orchestration
        • Transactions and Sagas
      • Architecture Characteristics Ratings
      • Additional References
    10. Choosing the Appropriate Architecture Style
      • Shifting “Fashion” in Architecture
      • Decision Criteria
      • Monolith Case Study: Silicon Sandwiches
        • Modular Monolith
        • Microkernel
      • Distributed Case Study: Going, Going, Gone
  3. Techniques and Soft Skills
    1. 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
        • Example
    2. Analyzing Architecture Risk
      • Risk Matrix
      • Risk Assessments
      • Risk Storming
        • Identification
        • Consensus
      • Agile Story Risk Analysis
      • Risk Storming Examples
        • Availability
        • Elasticity
        • Security
    3. Diagramming and Presenting Architecture
      • Diagramming
        • Tools
        • Diagramming Standards: UML, C4, and ArchiMate
        • Diagram Guidelines
      • Presenting
        • Manipulating Time
        • Incremental Builds
        • Infodecks Versus Presentations
        • Slides Are Half of the Story
        • Invisibility
    4. 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
      • Summary
    5. 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
      • Summary
    6. 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
    • Appendix: 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

Reviews

Fundamentals of Software Architecture

Reviewed by Roland Buresund

Very Good ******** (8 out of 10)

Last modified: Nov. 19, 2023, 10:26 a.m.

At long last, a very good primer on Software Architecture!

Goes through the basics, then goes into different styles and explains them in enough detail for a budding architect, and ends with some soft skills and career advice.

Definetely recommended reading, unless you want a book on how to write an architecture (this is the fundamentals, not the nitty-gritty details book).

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required

captcha

required