Eberhard Wolff's article highlights the challenges in defining cohesion and coupling in software architecture. The core issue is the lack of precise definitions, leading to subjective interpretations and inconsistent advice. The Independent Variation Principle (IVP) offers a more rigorous approach, emphasizing the alignment of module boundaries with change driver assignments. IVP suggests that elements sharing the same change drivers should reside within the same module, while those with differing drivers should be separated. The article critiques common notions, like prioritizing data sharing over variation dependence, and the perceived symmetry between cohesion and coupling. It argues that proper cohesion minimizes coupling, making the latter a symptom rather than an independent variable. Code duplication, often viewed as a cohesion violation, can be appropriate when serving distinct change drivers, such as customer-specific requirements. The idea that organizational principles should change at different levels of a software hierarchy is also questioned, advocating for consistent application of IVP at all granularities. A module's size is not necessarily an issue if it represents a genuinely coherent body of domain knowledge that varies together. The summary concludes by highlighting the two axioms of IVP, separation and unification, that elements that share the same change drivers must be together, and elements with different change drivers must be separate.
dev.to
dev.to
Create attached notes ...
