Note
This content was drafted with assistance from AI tools for research, organization, and initial content generation. All final content has been reviewed, fact-checked, and edited by the author to ensure accuracy and alignment with the author’s intentions and perspective.
Table of Contents
Part I: Foundations
1. Introduction
- Defining Software Architecture
- Expectations of an Architect
- Intersection of Architecture and…
- Engineering Practices
- Operations/DevOps
- Process
- Data
- Laws of Software Architecture
2. Architectural Thinking
- Architecture Versus Design
- Technical Breadth
- Analyzing Trade-Offs
- Understanding Business Drivers
- Balancing Architecture and Hands-On Coding
3. 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
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
Part II: Architecture Styles
9. Foundations
- Fundamental Patterns
- Big Ball of Mud
- Unitary Architecture
- Client/Server
- 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
- Topology
- Layers of Isolation
- Adding Layers
- Other Considerations
- Why Use This Architecture Style
- Architecture Characteristics Ratings
11. Pipeline Architecture Style
- Topology
- Pipes
- Filters
- Example
- Architecture Characteristics Ratings
12. Microkernel Architecture Style
- Topology
- Core System
- Plug-In Components
- Registry
- Contracts
- Examples and Use Cases
- Architecture Characteristics Ratings
13. Service-Based Architecture Style
- Topology
- Topology Variants
- Service Design and Granularity
- Database Partitioning
- Example Architecture
- Architecture Characteristics Ratings
- When to Use This Architecture Style
14. 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
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
- Topology
- Taxonomy
- Business Services
- Enterprise Services
- Application Services
- Infrastructure Services
- Orchestration Engine
- Message Flow
- Reuse…and Coupling
- Architecture Characteristics Ratings
17. 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
18. 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
Part 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
- Example
20. Analyzing Architecture Risk
- Risk Matrix
- Risk Assessments
- Risk Storming
- Identification
- Consensus
- Agile Story Risk Analysis
- Risk Storming Examples
- Availability
- Elasticity
- Security
21. 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
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
- Summary
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
- Summary
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
Appendix
- Self-Assessment Questions
Index
Book Details:
- Title: Fundamentals of Software Architecture
- Subtitle: An Engineering Approach
- Authors: Mark Richards & Neal Ford
- Publisher: O’Reilly Media
- Copyright: 2020
- ISBN: 978-1-492-04345-4