Balancing Coupling in Software Design: Universal Design Principles for Architecting Modular Software Systems

Book description

Learn How Coupling Impacts Every Software Design Decision You Make--and How to Control It

If you want to build modular, evolvable, and resilient software systems, you have to get coupling right. Every design decision you make influences coupling, which in turn shapes the design options available to you. Despite its importance, coupling often doesn't receive the attention it deserves--until now.

Since the dawn of software engineering, it's been clear that proper management of coupling is essential for architecting modular software systems. This topic has been extensively researched over the years, but some of that knowledge has been forgotten, and some of it is challenging to apply in this day and age. In Balancing Coupling in Software Design, author Vlad Khononov has built a model that not only draws on this accumulated knowledge, but also adapts it to modern software engineering practices, offering a fresh perspective on modular software design.

With principles grounded in practice, Vlad teaches you not only to navigate the multi-dimensional nature of coupling but also to use coupling as a tool for managing complexity and increasing modularity. And who knows, maybe this book will change the way you think about software design as whole.

  • Defines the concept of coupling and the role it plays in system design and architecture

  • Explains how coupling can both increase complexity and foster modularity of a system

  • Introduces a holistic model that turns coupling into a tool for designing modular software

  • Shows how to evolve design decisions to support continuous growth of software systems

  • Illustrates the discussed principles with detailed examples based on real-life case studies

"Coupling is one of those words that is used a lot, but little understood. Vlad propels us from simplistic slogans like 'always decouple components' to a nuanced discussion of coupling in the context of complexity and software evolution. If you build modern software, read this book!"

--Gregor Hohpe, author of The Software Architect Elevator

Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.

Table of contents

  1. Cover Page
  2. About This eBook
  3. Title Page
  4. Copyright Page
  5. Dedication Page
  6. Contents
  7. Series Editor Foreword
  8. Foreword by Rebecca Wirfs-Brock
  9. Foreword by Kent Beck
  10. Preface
    1. Who Should Read This Book?
    2. How This Book Is Organized
    3. Case Studies and WolfDesk
  11. Acknowledgments
  12. About the Author
  13. Introduction
  14. Part I: Coupling
    1. Chapter 1. Coupling and System Design
      1. What Is Coupling?
      2. Magnitude of Coupling
      3. Flow of Knowledge
      4. Systems
      5. Key Takeaways
      6. Quiz
    2. Chapter 2. Coupling and Complexity: Cynefin
      1. What Is Complexity?
      2. Cynefin
      3. Comparing Cynefin Domains
      4. Cynefin in Software Design
      5. Cynefin Applications
      6. Cynefin and Complexity
      7. Key Takeaways
      8. Quiz
    3. Chapter 3. Coupling and Complexity: Interactions
      1. Nature of Complexity
      2. Complexity and System Design
      3. Hierarchical Complexity
      4. Degrees of Freedom
      5. Complexity and Constraints
      6. Coupling and Complex Interactions
      7. Example: Connecting Coupling and Complexity
      8. Key Takeaways
      9. Quiz
    4. Chapter 4. Coupling and Modularity
      1. Modularity
      2. Modules
      3. Modularity in Software Systems
      4. Modularity, Complexity, and Coupling
      5. Coupling in Modularity
      6. Key Takeaways
      7. Quiz
  15. Part II: Dimensions
    1. Chapter 5. Structured Design’s Module Coupling
      1. Structured Design
      2. Module Coupling
      3. Comparison of Module Coupling Levels
      4. Key Takeaways
      5. Quiz
    2. Chapter 6. Connascence
      1. What Is Connascence?
      2. Static Connascence
      3. Dynamic Connascence
      4. Evaluating Connascence
      5. Key Takeaways
      6. Quiz
    3. Chapter 7. Integration Strength
      1. Strength of Coupling
      2. Integration Strength
      3. Intrusive Coupling
      4. Functional Coupling
      5. Model Coupling
      6. Contract Coupling
      7. Integration Strength Discussion
      8. Integration Strength and Asynchronous Execution
      9. Key Takeaways
      10. Quiz
    4. Chapter 8. Distance
      1. Distance and Encapsulation Boundaries
      2. Additional Factors Affecting Distance
      3. Distance Versus Proximity
      4. Distance Versus Integration Strength
      5. Key Takeaways
      6. Quiz
    5. Chapter 9. Volatility
      1. Changes and Coupling
      2. Why Software Changes
      3. Evaluating Rates of Changes
      4. Volatility and Integration Strength
      5. Inferred Volatility
      6. Key Takeaways
      7. Quiz
  16. Part III: Balance
    1. Chapter 10. Balancing Coupling
      1. Combining the Dimensions of Coupling
      2. Combining Strength, Distance, and Volatility
      3. Balancing Coupling on a Numeric Scale
      4. Key Takeaways
      5. Quiz
    2. Chapter 11. Rebalancing Coupling
      1. Resilient Design
      2. Software Change Vectors
      3. Rebalancing Coupling
      4. Key Takeaways
      5. Quiz
    3. Chapter 12. Fractal Geometry of Software Design
      1. Growth
      2. Innovation
      3. Fractal Geometry
      4. Fractal Modularity
      5. Key Takeaways
      6. Quiz
    4. Chapter 13. Balanced Coupling in Practice
      1. Microservices
      2. Architectural Patterns
      3. Business Objects
      4. Methods
      5. Key Takeaways
      6. Quiz
    5. Chapter 14. Conclusion
  17. Epilogue
  18. Appendix A. The Ballad of Coupling
  19. Appendix B. Glossary of Coupling
  20. Appendix C. Answers to Quiz Questions
    1. Chapter 1: Coupling and System Design
    2. Chapter 2: Coupling and Complexity: Cynefin
    3. Chapter 3: Coupling and Complexity: Interactions
    4. Chapter 4: Coupling and Modularity
    5. Chapter 5: Structured Design’s Module Coupling
    6. Chapter 6: Connascence
    7. Chapter 7: Integration Strength
    8. Chapter 8: Distance
    9. Chapter 9: Volatility
    10. Chapter 10: Balancing Coupling
    11. Chapter 11: Rebalancing Coupling
    12. Chapter 12: Fractal Geometry of Software Design
  21. Bibliography
  22. Index
  23. Code Snippets

Product information

  • Title: Balancing Coupling in Software Design: Universal Design Principles for Architecting Modular Software Systems
  • Author(s): Vlad Khononov
  • Release date: October 2023
  • Publisher(s): Addison-Wesley Professional
  • ISBN: 9780137353514