Fundamentals of Software Architecture: An Engineering Approach

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

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

Author(s): Mark Richards, Neal Ford
Edition: 1
Publisher: O'Reilly Media
Year: 2020

Language: English
Commentary: Vector PDF
Pages: 422
City: Sebastopol, CA
Tags: Negotiation; Leadership; Microservices; Best Practices; Software Architecture; Team Management; Career; Event-Driven Architecture; Service-Oriented Architecture

Cover
Copyright
Table of Contents
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
Chapter 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
Part I. Foundations
Chapter 2. Architectural Thinking
Architecture Versus Design
Technical Breadth
Analyzing Trade-Offs
Understanding Business Drivers
Balancing Architecture and Hands-On Coding
Chapter 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
Chapter 4. Architecture Characteristics Defined
Architectural Characteristics (Partially) Listed
Operational Architecture Characteristics
Structural Architecture Characteristics
Cross-Cutting Architecture Characteristics
Trade-Offs and Least Worst Architecture
Chapter 5. Identifying Architectural Characteristics
Extracting Architecture Characteristics from Domain Concerns
Extracting Architecture Characteristics from Requirements
Case Study: Silicon Sandwiches
Explicit Characteristics
Implicit Characteristics
Chapter 6. Measuring and Governing Architecture Characteristics
Measuring Architecture Characteristics
Operational Measures
Structural Measures
Process Measures
Governance and Fitness Functions
Governing Architecture Characteristics
Fitness Functions
Chapter 7. Scope of Architecture Characteristics
Coupling and Connascence
Architectural Quanta and Granularity
Case Study: Going, Going, Gone
Chapter 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
Chapter 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
Chapter 10. Layered Architecture Style
Topology
Layers of Isolation
Adding Layers
Other Considerations
Why Use This Architecture Style
Architecture Characteristics Ratings
Chapter 11. Pipeline Architecture Style
Topology
Pipes
Filters
Example
Architecture Characteristics Ratings
Chapter 12. Microkernel Architecture Style
Topology
Core System
Plug-In Components
Registry
Contracts
Examples and Use Cases
Architecture Characteristics Ratings
Chapter 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
Chapter 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
Chapter 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
Chapter 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
Chapter 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
Chapter 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
Chapter 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
Chapter 20. Analyzing Architecture Risk
Risk Matrix
Risk Assessments
Risk Storming
Identification
Consensus
Agile Story Risk Analysis
Risk Storming Examples
Availability
Elasticity
Security
Chapter 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
Chapter 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
Chapter 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
Chapter 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
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
Index
About the Authors
Colophon