O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Fundamentals of Software Architecture

Book Description

Although salary surveys worldwide regularly identify software architect as one of the top ten best jobs, no decent guides exist to help developers become architects. Until now. This practical guide provides the first comprehensive overview of software architecture’s many aspects. You’ll examine architectural characteristics, architectural patterns, component determination, diagramming and presenting architecture, evolutionary architecture, and many other topics.

Authors Neal Ford and Mark Richards help you learn through examples in a variety of popular programming languages, such as Java, C#, JavaScript, and others. You’ll focus on architecture principles with examples that apply across all technology stacks.

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
  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 vs. Design
    2. Technical Breadth
    3. Analyzing Tradeoffs
    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. Tradeoffs 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. Silicon Sandwiches
  8. 6. Measuring & 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. 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. Architecture Styles
    1. Fundamental Patterns
      1. “Big Ball of Mud”
      2. Unitary Architecture
      3. Client/server
    2. Monolithic vs. 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. Architectural 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
  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 vs. On-Premises Implementations
    4. Replicated vs. Distributed Caching
    5. Near-Cache Considerations
    6. Implementation Examples
      1. Concert Ticketing System
      2. Online Auction System
    7. Architectural 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. 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. Front ends
    8. Communication
      1. Choreography and Orchestration
      2. Transactions and Sagas
    9. Architectural 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 AntiPattern
      2. Groundhog Day AntiPattern
      3. Email-Driven Architecture AntiPattern
    2. Architecturally Significant
    3. Architecture Decision Records
      1. Basic Structure
      2. Storing ADRs
      3. ADRs as Documentation
      4. Using ADRs for Standards
      5. Examples
  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. Diagraming 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 One 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 14 - Event-Driven Architecture Style
  30. Index