This section lays the foundation for understanding software design through the lens of complexity, modularity, and coupling. These articles explore how systems become complex, what makes them modular, and how coupling can be used as a powerful design tool. Together, they build up to the key idea of balanced coupling and provide the vocabulary needed for deeper architectural thinking.
Complexity
This article explores how the Cynefin framework defines complexity in software systems, emphasizing its subjective nature and the role of cognitive limits. It lays the groundwork for understanding complexity as a key force in software design.
Modularity
Modularity isn’t just a buzzword—it’s the opposite of complexity. This article defines modularity as a design principle that enables predictable, low-effort change, and explains how coupling lies at the heart of both modularity and complexity.
Coupling
Coupling isn't inherently bad—in fact, it's what makes software systems work. This article redefines coupling as a design tool, introducing a multi-dimensional model that evaluates how integration strength, distance, and volatility impact modularity and complexity.
Balance
Explore how integration strength, distance, and volatility interact to define modularity and complexity in software systems. This article introduces a practical model for managing the effects of coupling.