0%

Book Description

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

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