Building Evolutionary Architectures
Automated Software Governance
Paperback Engels 2022 2e druk 9781492097549Samenvatting
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.
Specificaties
Lezersrecensies
Inhoudsopgave
Foreword to the Second Edition
Preface
The Structure of This Book
Case Studies and PenultimateWidgets
Conventions Used in This Book
Using Code Examples
O´Reilly Online Learning
How to Contact Us
Additional Information
Acknowledgments
Part I. Mechanics
1. Evolving Software Architecture
The Challenges of Evolving Software
Evolutionary Architecture
Guided Change
Incremental Change
Multiple Architectural Dimensions
How Is Long-Term Planning Possible When Everything Changes All the Time?
Once I´ve Built an Architecture, How Can I Prevent It from Degrading Over Time?
Why Evolutionary?
Summary
2. Fitness Functions
What Is a Fitness Function?
Categories
Scope: Atomic Versus Holistic
Cadence: Triggered Versus Continual Versus Temporal
Case Study: Triggered or Continuous?
Result: Static Versus Dynamic
Invocation: Automated Versus Manual
Proactivity: Intentional Versus Emergent
Coverage: Domain-Specific Fitness Functions?
Who Writes Fitness Functions?
Where Is My Fitness Function Testing Framework?
Outcomes Versus Implementations
Summary
3. Engineering Incremental Change
Incremental Change
Deployment Pipelines
Case Study: Adding Fitness Functions to PenultimateWidgetsâ Invoicing Service
Case Study: Validating API Consistency in an Automated Build
Summary
4. Automating Architectural Governance
Fitness Functions as Architectural Governance
Code-Based Fitness Functions
Afferent and Efferent Coupling
Abstractness, Instability, and Distance from the Main Sequence
Directionality of Imports
Cyclomatic Complexity and âHerdingâ Governance
Turnkey Tools
Legality of Open Source Libraries
A11y and Other Supported Architecture Characteristics
ArchUnit
Linters for Code Governance
Case Study: Availability Fitness Function
Case Study: Load-Testing Along with Canary Releases
Case Study: What to Port?
Fitness Functions Youâre Already Using
Integration Architecture
Communication Governance in Microservices
Case Study: Choosing How to Implement a Fitness Function
DevOps
Enterprise Architecture
Case Study: Architectural Restructuring While Deploying 60 Times per Day
Fidelity Fitness Functions
Fitness Functions as a Checklist, Not a Stick
Documenting Fitness Functions
Summary
Part II. Structure
5. Evolutionary Architecture Topologies
Evolvable Architecture Structure
Connascence
Connascence Intersection with Bounded Context
Architectural Quanta and Granularity
Independently Deployable
High Functional Cohesion
High Static Coupling
Dynamic Quantum Coupling
Contracts
Case Study: Microservices as an Evolutionary Architecture
Reuse Patterns
Effective Reuse = Abstraction + Low Volatility
Sidecars and Service Mesh: Orthogonal Operational Coupling
Data Mesh: Orthogonal Data Coupling
Summary
6. Evolutionary Data
Evolutionary Database Design
Evolving Schemas
Shared Database Integration
Inappropriate Data Entanglement
Two-Phase Commit Transactions
Age and Quality of Data
Case Study: Evolving PenultimateWidgetsâ Routing
From Native to Fitness Function
Referential Integrity
Data Duplication
Replacing Triggers and Stored Procedures
Case Study: Evolving from Relational to Nonrelational
Summary
Part III. Impact
7. Building Evolvable Architectures
Principles of Evolutionary Architecture
Last Responsible Moment
Architect and Develop for Evolvability
Postelâs Law
Architect for Testability
Conwayâs Law
Mechanics
Step 1: Identify Dimensions Affected by Evolution
Step 2: Define Fitness Function(s) for Each Dimension
Step 3: Use Deployment Pipelines to Automate Fitness Functions
Greenfield Projects
Retrofitting Existing Architectures
Appropriate Coupling and Cohesion
COTS Implications
Migrating Architectures
Migration Steps
Evolving Module Interactions
Guidelines for Building Evolutionary Architectures
Remove Needless Variability
Make Decisions Reversible
Prefer Evolvable over Predictable
Build Anticorruption Layers
Build Sacrificial Architectures
Mitigate External Change
Updating Libraries Versus Frameworks
Version Services Internally
Case Study: Evolving PenultimateWidgetsâ Ratings
Fitness Function-Driven Architecture
Summary
8. Evolutionary Architecture Pitfalls and Antipatterns
Technical Architecture
Antipattern: Last 10% Trap and Low Code/No Code
Case Study: Reuse at PenultimateWidgets
Antipattern: Vendor King
Pitfall: Leaky Abstractions
Pitfall: Resume-Driven Development
Incremental Change
Antipattern: Inappropriate Governance
Case Study: Just Enough Governance at Penultimate Widgets
Pitfall: Lack of Speed to Release
Business Concerns
Pitfall: Product Customization
Antipattern: Reporting Atop the System of Record
Pitfall: Excessively Long Planning Horizons
Summary
9. Putting Evolutionary Architecture into Practice
Organizational Factors
Don´t Fight Conway´s Law
Culture
Culture of Experimentation
CFO and Budgeting
The Business Case
Hypothesis- and Data-Driven Development
Fitness Functions as Experimental Media
Building Enterprise Fitness Functions
Case Study: Zero-Day Security Vulnerability
Carving Out Bounded Contexts Within Existing Integration Architecture
Where Do You Start?
Low-Hanging Fruit
Highest Value First
Testing
Infrastructure
Case Study: Enterprise Architecture at PenultimateWidgets
Future State?
Fitness Functions Using AI
Generative Testing
Why (or Why Not)?
Why Should a Company Decide to Build an Evolutionary Architecture?
Why Would a Company Choose Not to Build an Evolutionary Architecture?
Summary
Index
About the Authors
Rubrieken
- advisering
- algemeen management
- coaching en trainen
- communicatie en media
- economie
- financieel management
- inkoop en logistiek
- internet en social media
- it-management / ict
- juridisch
- leiderschap
- marketing
- mens en maatschappij
- non-profit
- ondernemen
- organisatiekunde
- personal finance
- personeelsmanagement
- persoonlijke effectiviteit
- projectmanagement
- psychologie
- reclame en verkoop
- strategisch management
- verandermanagement
- werk en loopbaan