Designing Software Architectures: A Practical Approach, 2nd Edition

Book description

Learn how to create successful architectural designs and improve your current design practices!

Designing Software Architectures, 2nd Edition, provides a practical, step-by-step methodology for architecture design that any professional software engineer can use, with structured methods supported by reusable chunks of design knowledge and rich case studies that demonstrate how to use the methods.

The Attribute-Driven Design method may not have changed since this book's first printing, but almost everything else about the industry has. In this newly updated edition, you will find new chapters on supporting business agility through API-centric design, deployability, cloud-based solutions, and technical debt in design.

Humberto Cervantes and Rick Kazman illuminate best practices for how architects should design complex systems so you can make design decisions in systematic, repeatable, and cost-effective ways. This book will help you become a better, more confident designer who can create high-quality architectures with ease.

The new edition includes:

  • A clear explanation of the Attribute-Driven Design method

  • New chapters focused on the technical environments and contexts of contemporary design

  • Two new case studies on The Hotel Pricing System and Digital Twin Platform

  • Coverage of current architecture topics like cloud computing, DevOps, and large-scale systems

  • Methods to make architecture design agile and achievable

Register your product at informit.com/register for convenient access to downloads, updates, and/or corrections as they become available.

Table of contents

  1. Cover Page
  2. About This eBook
  3. Halftitle Page
  4. Title Page
  5. Copyright Page
  6. Dedication Page
  7. Contents
  8. Preface
  9. Acknowledgments
  10. About the Authors
    1. Humberto Cervantes
    2. Rick Kazman
  11. 1. Introduction
    1. 1.1 Motivations
    2. 1.2 Software Architecture
    3. 1.3 The Role of the Architect
    4. 1.4 A Brief History of ADD
    5. 1.5 Summary
    6. 1.6 Further Reading
    7. 1.7 Discussion Questions
  12. 2. Architectural Design
    1. 2.1 Design in General
    2. 2.2 Design in Software Architecture
    3. 2.3 Why Is Architectural Design So Important?
    4. 2.4 Architectural Drivers
    5. 2.5 Summary
    6. 2.6 Further Reading
    7. 2.7 Discussion Questions
  13. 3. Making Design Decisions
    1. 3.1 Making Design Decisions
    2. 3.2 Design Concepts: The Building Blocks for Creating Structures
    3. 3.3 Design Concepts to Support Performance
    4. 3.4 Design Concepts to Support Availability
    5. 3.5 Design Concepts to Support Modifiability
    6. 3.6 Design Concepts to Support Security
    7. 3.7 Design Concepts to Support Integrability
    8. 3.8 Summary
    9. 3.9 Further Reading
    10. 3.10 Discussion Questions
  14. 4. The Architecture Design Process
    1. 4.1 The Need for a Principled Method
    2. 4.2 Attribute-Driven Design 3.0
    3. 4.3 Applying ADD to Different System Contexts
    4. 4.4 Identifying and Selecting Design Concepts
    5. 4.5 Producing Structures
    6. 4.6 Defining Interfaces
    7. 4.7 Creating Preliminary Documentation During Design
    8. 4.8 Tracking Design Progress
    9. 4.9 Summary
    10. 4.10 Further Reading
    11. 4.11 Discussion Questions
  15. 5. API-centric Design
    1. 5.1 Business Agility
    2. 5.2 API-centric Design
    3. 5.3 API-centric Design and ADD
    4. 5.4 Summary
    5. 5.5 Further Reading
    6. 5.6 Discussion Questions
  16. 6. Designing for Deployability
    1. 6.1 Deployability Principles and Architectural Design
    2. 6.2 Design Decisions to Support Deployability
    3. 6.3 Deployability and ADD
    4. 6.4 Summary
    5. 6.5 Further Reading
    6. 6.6 Discussion Questions
  17. 7. Designing Cloud-Based Solutions
    1. 7.1 Introduction to the Cloud
    2. 7.2 Drivers and the Cloud
    3. 7.3 Cloud-Based Design Concepts
    4. 7.4 ADD in the Design of Cloud-Based Solutions
    5. 7.5 Summary
    6. 7.6 Further Reading
    7. 7.7 Discussion Questions
  18. 8. Case Study: Hotel Pricing System
    1. 8.1 Business Case
    2. 8.2 System Requirements
    3. 8.3 Development and Operations Requirements
    4. 8.4 The Software Design Process
    5. 8.5 Summary
    6. 8.6 Further Reading
    7. 8.7 Discussion Questions
  19. 9. Case Study: Digital Twin Platform
    1. 9.1 Business Case
    2. 9.2 System Requirements
    3. 9.3 The Design Process
    4. 9.4 Summary
    5. 9.5 Further Reading
    6. 9.6 Discussion Questions
  20. 10. Technical Debt in Architectural Design
    1. 10.1 Technical Debt
    2. 10.2 The Roots of Technical Debt in Design
    3. 10.3 Refactoring and Redesign
    4. 10.4 Technical Debt and ADD
    5. 10.5 Summary
    6. 10.6 Further Reading
    7. 10.7 Discussion Questions
  21. 11. Analysis in the Design Process
    1. 11.1 Analysis and Design
    2. 11.2 Why Analyze?
    3. 11.3 Analysis Techniques
    4. 11.4 Tactics-Based Analysis
    5. 11.5 Reflective Questions
    6. 11.6 Scenario-Based Design Reviews
    7. 11.7 Summary
    8. 11.8 Further Reading
    9. 11.9 Discussion Questions
  22. 12. The Architecture Design Process in the Organization
    1. 12.1 Architecture Design and the Development Life Cycle
    2. 12.2 Architecture Design and the Organization
    3. 12.3 Summary
    4. 12.4 Further Reading
    5. 12.5 Discussion Questions
  23. 13. Final Thoughts
    1. 13.1 On the Need for Methods
    2. 13.2 Future Directions
    3. 13.3 Next Steps
    4. 13.4 Further Reading
    5. 13.5 Discussion Questions
  24. Appendix. Tactics-Based Questionnaires
    1. A.1 Availability
    2. A.2 Deployability
    3. A.3 Energy Efficiency
    4. A.4 Integrability
    5. A.5 Modifiability
    6. A.6 Performance
    7. A.7 Safety
    8. A.8 Security
    9. A.9 Testability
    10. A.10 Usability
    11. A.11 Further Reading
  25. Index
  26. From Ch. 4 of Designing Software Architectures, First Edition: Case Study: FCAPS System
    1. 4.1 Business Case
    2. 4.2 System Requirements
    3. 4.3 The Design Process
    4. 4.4 Summary
    5. 4.5 Further Reading
  27. From Ch. 5 of Designing Software Architectures, First Edition: Case Study: Big Data System
    1. 5.1 Business Case
    2. 5.2 System Requirements
    3. 5.3 The Design Process
    4. 5.4 Summary
    5. 5.5 Further Reading
  28. From Ch. 6 of Designing Software Architectures, First Edition: Case Study: Banking System
    1. 6.1 Business Case
    2. 6.2 Existing Architectural Documentation
    3. 6.3 The Design Process
    4. 6.4 Summary
    5. 6.5 Further Reading
  29. From Appendix A of Designing Software Architectures, First Edition: A Design Concepts Catalog
    1. A.1 Reference Architectures
    2. A.2 Deployment Patterns
    3. A.3 Architectural Design Patterns
    4. A.4 Tactics
    5. A.5 Externally Developed Components
    6. A.6 Summary
    7. A.7 Further Reading
  30. Code Snippets

Product information

  • Title: Designing Software Architectures: A Practical Approach, 2nd Edition
  • Author(s): Humberto Cervantes, Rick Kazman
  • Release date: June 2024
  • Publisher(s): Addison-Wesley Professional
  • ISBN: 9780138108069