BigJoe Logo BigJoe
Blog Books
Blog Books
All Books Fundamentals of Software Architecture, 2nd Edition
All Books
Fundamentals of Software Architecture, 2nd Edition

Fundamentals of Software Architecture, 2nd Edition

Mark Richards, Neal Ford

Contents

Jump to chapter

1. Preface: Preface to the Second Edition 1.1 Conventions Used in This Book 1.2 Supplemental Material 1.3 O’Reilly Online Learning 1.4 How to Contact Us 1.5 Acknowledgments
2. Chapter 1. Introduction 2.1 Defining Software Architecture 2.2 Laws of Software Architecture 2.3 Expectations of an Architect 2.4 Roadmap
3. Chapter 2. Architectural Thinking 3.1 Architecture Versus Design 3.2 Technical Breadth 3.3 Frozen Caveman Antipattern 3.4 Analyzing Trade-Offs 3.5 Understanding Business Drivers 3.6 Balancing Architecture and Hands-On Coding 3.7 There’s More to Architectural Thinking
4. Chapter 3. Modularity 4.1 Modularity Versus Granularity 4.2 Defining Modularity 4.3 Modular Reuse Before Classes 4.4 A Language with No Name Conflicts: Java 1.0 4.5 Measuring Modularity 4.6 Why Such Similar Names for Coupling Metrics? 4.7 The Limitations of Metrics 4.8 From Modules to Components
5. Chapter 4. Architectural Characteristics Defined 5.1 The Longevity of the Term “Non-Functional Requirements” 5.2 Architectural Characteristics and System Design 5.3 Architectural Characteristics (Partially) Listed 5.4 The Many Ambiguities in Software Architecture 5.5 Trade-Offs and Least Worst Architecture
6. Chapter 5. Identifying Architectural Characteristics 6.1 Extracting Architectural Characteristics from Domain Concerns 6.2 Composite Architectural Characteristics 6.3 Extracting Architectural Characteristics 6.4 The Origin of Architecture Katas 6.5 Kata: Silicon Sandwiches 6.6 Design Versus Architecture and Trade-Offs 6.7 Limiting and Prioritizing Architectural Characteristics 6.8 Case Study: The Vasa
7. Chapter 6. Measuring and Governing Architecture Characteristics 7.1 Measuring Architecture Characteristics 7.2 The Many Flavors of Performance 7.3 Cyclomatic Complexity 7.4 What's a Good Value for Cyclomatic Complexity? 7.5 Governance and Fitness Functions
8. Chapter 7. The Scope of Architectural Characteristics 8.1 Architectural Quanta and Granularity 8.2 Plurals for Latin-Derived Technical Terms 8.3 Domain-Driven Design's Bounded Context 8.4 Synchronous Communication 8.5 The Impact of Scoping 8.6 Scoping and the Cloud
9. Chapter 8. Component-Based Thinking 9.1 Defining Logical Components 9.2 Logical Versus Physical Architecture 9.3 Creating a Logical Architecture 9.4 Component Coupling 9.5 Case Study: Going, Going, Gone—Discovering Components
10. Chapter 9. Foundations 10.1 Styles Versus Patterns 10.2 Where Do Architectural Styles Come From? 10.3 Fundamental Patterns 10.4 Three-Tier Architectures, Language Design, and Long-Term Implications 10.5 Architecture Partitioning 10.6 Conway’s Law 10.7 Monolithic Versus Distributed Architectures 10.8 Team Topologies and Architecture 10.9 On to Specific Styles
11. Chapter 10. Layered Architecture Style 11.1 Topology 11.2 Style Specifics 11.3 Data Topologies 11.4 Cloud Considerations 11.5 Common Risks 11.6 Governance 11.7 Team Topology Considerations 11.8 Style Characteristics 11.9 Examples and Use Cases
12. Chapter 11. The Modular Monolith Architecture Style 12.1 Topology 12.2 Style Specifics 12.3 Data Topologies 12.4 Cloud Considerations 12.5 Common Risks 12.6 Governance 12.7 Team Topology Considerations 12.8 Style Characteristics 12.9 Examples and Use Cases
13. Chapter 12. Pipeline Architecture Style (Pipeline Architecture) 13.1 Topology (Topology) 13.2 Style Specifics 13.3 Data Topologies (Data Topology) 13.4 Cloud Considerations 13.5 Common Risks 13.6 Governance (Governance) 13.7 Team Topology Considerations 13.8 Style Characteristics 13.9 Examples and Use Cases
14. Chapter 13. Microkernel Architecture Style (Microkernel Architecture) 14.1 Topology (Topology) 14.2 Style Specifics 14.3 Data Topologies (Data Topology) 14.4 Cloud Considerations 14.5 Common Risks 14.6 Governance (Governance) 14.7 Team Topology Considerations 14.8 Architecture Characteristics Ratings 14.9 Examples and Use Cases
15. Chapter 14. Service-Based Architecture Style (Service-Based Architecture) 15.1 Topology (Topology) 15.2 Style Specifics 15.3 Data Topologies (Data Topology) 15.4 Cloud Considerations 15.5 Common Risks 15.6 Governance (Governance) 15.7 Team Topology Considerations 15.8 Style Characteristics 15.9 Examples and Use Cases
16. Chapter 15. Event-Driven Architecture Style 16.1 Topology 16.2 Style Specifics 16.3 Data Topologies (Data Topology) 16.4 Cloud Considerations 16.5 Common Risks 16.6 Governance (Governance) 16.7 Team Topology Considerations 16.8 Style Characteristics 16.9 Examples and Use Cases
17. Chapter 16. Space-Based Architecture Style 17.1 Topology (Topology) 17.2 Style Specifics 17.3 Data Topologies (Data Topology) 17.4 Cloud Considerations 17.5 Common Risks 17.6 Governance (Governance) 17.7 Team Topology Considerations 17.8 Style Characteristics 17.9 Examples and Use Cases
18. Chapter 17. Orchestration-Driven Service-Oriented Architecture 18.1 Topology (Topology) 18.2 Style Specifics 18.3 Why So Many Service Names? 18.4 Data Topologies (Data Topology) 18.5 Really? Declarative Transactions?!? 18.6 Cloud Considerations 18.7 Common Risks 18.8 Governance (Governance) 18.9 Team Topology Considerations 18.10 Style Characteristics 18.11 Examples and Use Cases
19. Chapter 18. Microservices Architecture 19.1 Topology 19.2 Style Specifics 19.3 Enforced Heterogeneity 19.4 Data Topologies 19.5 Cloud Considerations 19.6 Common Risks 19.7 Governance 19.8 Team Topology Considerations 19.9 Style Characteristics 19.10 Examples and Use Cases
20. Chapter 19. Choosing the Appropriate Architecture Style 20.1 Shifting "Fashion" in Architecture 20.2 Decision Criteria 20.3 Monolith Case Study: Silicon Sandwiches 20.4 Distributed Case Study: Going, Going, Gone
21. Chapter 20. Architectural Patterns (Architectural Pattern) 21.1 Reuse 21.2 Orthogonal Coupling (Orthogonal Coupling) 21.3 Communication 21.4 CQRS (CQRS) 21.5 Infrastructure (Infrastructure)
22. Chapter 21. Architectural Decisions 22.1 Architectural Decision Antipatterns 22.2 Architectural Significance 22.3 Architectural Decision Records 22.4 ADRs and Request for Comments (RFC)
23. Chapter 22. Analyzing Architecture Risk 23.1 Risk Matrix (Risk Matrix) 23.2 Risk Assessments 23.3 Risk Storming (Risk Storming) 23.4 User-Story Risk Analysis 23.5 Risk-Storming Use Case 23.6 Summary
24. Chapter 23. Diagramming Architecture 24.1 Diagramming 24.2 Irrational Artifact Attachment 24.3 Use Layers Semantically, Not Decoratively 24.4 Summary
25. Chapter 24. Making Teams Effective 25.1 Collaboration 25.2 Constraints and Boundaries 25.3 Architect Personalities 25.4 How Much Involvement? 25.5 Team Warning Signs 25.6 Leveraging Checklists 25.7 The Hawthorne Effect 25.8 Providing Guidance 25.9 The Impact of Business Justifications 25.10 Summary
26. Chapter 25. Negotiation and Leadership Skills 26.1 Negotiation and Facilitation 26.2 The Software Architect as a Leader 26.3 Integrating with the Development Team 26.4 Developer Flow State 26.5 Summary
27. Chapter 26. Architectural Intersections 27.1 Architecture and Implementation 27.2 Architecture and Infrastructure 27.3 History: How Pets.com Gave Us Elastic Scale 27.4 Architecture and Data Topologies 27.5 Architecture and Engineering Practices 27.6 Architecture and Team Topologies 27.7 Architecture and Systems Integration 27.8 Architecture and the Enterprise 27.9 Architecture and the Business Environment 27.10 Architecture and Generative AI 27.11 Summary
28. Chapter 27. The Laws of Software Architecture, Revisited 28.1 First Law: Everything in Software Architecture Is a Trade-Off 28.2 Why We Can’t Have Nice Things—Trade-Offs! 28.3 Second Law: Why Is More Important Than How 28.4 The Spectrum Between Extremes 28.5 Parting Words of Advice
29. Appendix. Discussion Questions 29.1 Chapter 1 : Introduction 29.2 Chapter 2 : Architectural Thinking 29.3 Chapter 3 : Modularity (Modularity) 29.4 Chapter 4 : Architecture Characteristics Defined 29.5 Chapter 5 : Identifying Architectural Characteristics 29.6 Chapter 6 : Measuring and Governing Architecture Characteristics 29.7 Chapter 7 : The Scope of Architectural Characteristics 29.8 Chapter 8 : Component-Based Thinking 29.9 Chapter 9 : Foundations 29.10 Chapter 10 : Layered Architecture Style (Layered Architecture Style) 29.11 Chapter 11 : Modular Monolith Architecture Style (Modular Monolith Architecture Style) 29.12 Chapter 12 : Pipeline Architecture Style (Pipeline Architecture Style) 29.13 Chapter 13 : Microkernel Architecture Style (Microkernel Architecture Style) 29.14 Chapter 14 : Service-Based Architecture Style (Service-Based Architecture Style) 29.15 Chapter 15 : Event-Driven Architecture Style (Event-Driven Architecture Style) 29.16 Chapter 16 : Space-Based Architecture Style (Space-Based Architecture Style) 29.17 Chapter 17 : Orchestration-Driven Service-Oriented Architecture (Orchestration-Driven Service-Oriented Architecture) 29.18 Chapter 18 : Microservices Architecture (Microservices Architecture) 29.19 Chapter 19 : Choosing the Appropriate Architecture Style 29.20 Chapter 20 : Architectural Patterns (Architectural Patterns) 29.21 Chapter 21 : Architectural Decisions 29.22 Chapter 22 : Analyzing Architecture Risk 29.23 Chapter 23 : Diagramming Architecture 29.24 Chapter 24 : Making Teams Effective 29.25 Chapter 25 : Negotiation and Leadership Skills 29.26 Chapter 26 : Architectural Intersections 29.27 Chapter 27 : The Laws of Software Architecture, Revisited
30. Colophon 31. Fundamentals of Software Architecture 32. Praise for Fundamentals of Software Architecture
Font size
Background
Font

Appendix. Discussion Questions

Parting Words of Advice Chapter 1 : Introduction