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

Building Evolutionary Architectures

Book Description

The software development ecosystem is constantly changing, providing a constant stream of new tools, frameworks, techniques, and paradigms. Over the past few years, incremental developments in core engineering practices for software development have created the foundations for rethinking how architecture changes over time, along with ways to protect important architectural characteristics as it evolves. This practical guide ties those parts together with a new way to think about architecture and time.

Table of Contents

  1. Foreword
  2. Preface
    1. Conventions Used in This Book
    2. O’Reilly Safari
    3. How to Contact Us
    4. Additional Information
    5. Acknowledgments
  3. 1. Software Architecture
    1. Evolutionary Architecture
      1. How Is Long-term Planning Possible When Everything Changes All the Time?
      2. Once I’ve Built an Architecture, How Can I Prevent It from Gradually Degrading Over Time?
    2. Incremental Change
    3. Guided Change
    4. Multiple Architectural Dimensions
    5. Conway’s Law
    6. Why Evolutionary?
    7. Summary
  4. 2. Fitness Functions
    1. What is a Fitness Function?
    2. Categories
      1. Atomic Versus Holistic
      2. Triggered Versus Continual
      3. Static Versus Dynamic
      4. Automated Versus Manual
      5. Temporal
      6. Intentional Over Emergent
      7. Domain-specific
    3. Identify Fitness Functions Early
    4. Review Fitness Functions
  5. 3. Engineering Incremental Change
    1. Building Blocks
      1. Testable
      2. Deployment Pipelines
      3. Combining Fitness Function Categories
      4. Case Study: Architectural Restructuring while Deploying 60 Times/Day
      5. Conflicting Goals
      6. Case Study: Adding Fitness Functions to PenultimateWidgets’ Invoicing Service
    2. Hypothesis- and Data-Driven Development
    3. Case Study: What to Port?
  6. 4. Architectural Coupling
    1. Modularity
    2. Architectural Quanta and Granularity
    3. Evolvability of Architectural Styles
      1. Big Ball of Mud
      2. Monoliths
      3. Event-Driven Architectures
      4. Service-Oriented Architectures
      5. “Serverless” Architectures
    4. Controlling Quantum Size
    5. Case Study: Guarding Against Component Cycles
  7. 5. Evolutionary Data
    1. Evolutionary Database Design
      1. Evolving Schemas
      2. Shared Database Integration
    2. Inappropriate Data Coupling
      1. Two-Phase Commit Transactions
      2. Age and Quality of Data
    3. Case Study: Evolving PenultimateWidgets’ Routing
  8. 6. Building Evolvable Architectures
    1. Mechanics
      1. 1. Identify Dimensions Affected by Evolution
      2. 2. Define Fitness Function(s) for Each Dimension
      3. 3. Use Deployment Pipelines to Automate Fitness Functions
    2. Greenfield Projects
    3. Retrofitting Existing Architectures
      1. Appropriate Coupling and Cohesion
      2. Engineering Practices
      3. Fitness Functions
      4. COTS Implications
    4. Migrating Architectures
      1. Migration Steps
      2. Evolving Module Interactions
    5. Guidelines for Building Evolutionary Architectures
      1. Remove Needless Variability
      2. Make Decisions Reversible
      3. Prefer Evolvable over Predictable
      4. Build Anticorruption Layers
      5. Case Study: Service Templates
      6. Build Sacrificial Architectures
      7. Mitigate External Change
      8. Updating Libraries Versus Frameworks
      9. Prefer Continuous Delivery to Snapshots
      10. Version Services Internally
    6. Case Study: Evolving PenultimateWidgets’ Ratings
  9. 7. Evolutionary Architecture Pitfalls and Antipatterns
    1. Technical Architecture
      1. Antipattern: Vendor King
      2. Pitfall: Leaky Abstractions
      3. Antipattern: Last 10% Trap
      4. Antipattern: Code Reuse Abuse
      5. Case Study: Reuse at PenultimateWidgets
      6. Pitfall: Resume-Driven Development
    2. Incremental Change
      1. Antipattern: Inappropriate Governance
      2. Case Study: Goldilocks Governance at PenultimateWidgets
      3. Pitfall: Lack of Speed to Release
    3. Business Concerns
      1. Pitfall: Product Customization
      2. Antipattern: Reporting
      3. Pitfall: Planning Horizons
  10. 8. Putting Evolutionary Architecture into Practice
    1. Organizational Factors
      1. Cross-Functional Teams
      2. Organized Around Business Capabilities
      3. Product over Project
      4. Dealing with External Change
      5. Connections Between Team Members
    2. Team Coupling Characteristics
      1. Culture
      2. Culture of Experimentation
    3. CFO and Budgeting
    4. Building Enterprise Fitness Functions
      1. Case Study: PenultimateWidgets as a Platform
    5. Where Do You Start?
      1. Low-Hanging Fruit
      2. Highest-Value
      3. Testing
      4. Infrastructure
      5. Case Study: Enterprise Architecture at PenultimateWidgets
    6. Future State?
      1. Fitness Functions Using AI
      2. Generative Testing
    7. Why (or Why Not)?
      1. Why Should a Company Decide to Build an Evolutionary Architecture?
      2. Case Study: Selective Scale at PenultimateWidgets
      3. Why Would a Company Choose Not to Build an Evolutionary Architecture?
      4. Convincing Others
      5. Case Study: Consulting Judo
    8. The Business Case
      1. “The Future Is Already Here…”
      2. Moving Fast Without Breaking Things
      3. Less Risk
      4. New Capabilities
    9. Building Evolutionary Architectures
  11. Index