“Loose coupling & high cohesion” are key design principles for creating maintainable and understandable software. These principles can be applied on different levels of granularity ranging from classes to even systems. They also play an integral part when setting boundaries for domains and bounded contexts. While there have already been many talks and workshops on coupling at various conferences the topic of cohesion hasn’t been covered as much. This talk is all about cohesion.
We will begin by exploring the fundamental principles of cohesion in software design, illustrating its significance in creating clear, maintainable, and scalable systems. In this course you will learn what cohesion is and what kinds of cohesion there are. We will talk about types of cohesion in software design like functional, sequential, temporal or coincidental cohesion. But this talk will also look at the term cohesion in other disciplines like chemistry, geology, social behavior or soil mechanics.
In the second part this talk will cover cohesion in Domain Driven Design. A holistic approach to the topic of cohesion is especially interesting in the context of Domain Driven Design. For instance an Ubiquitous Language aims at a high degree of cohesion between terminology, conversations, code and documents within a Bounded Context. Special attention will be given to practical approaches for achieving high cohesion in domain models. We will explore real-world scenarios where cohesive design directly impacts the effectiveness of DDD, offering insights into overcoming common challenges faced in complex domain scenarios. Through this, attendees will gain a deeper appreciation of how cohesive design principles can simplify complex domain models, leading to more robust and adaptable software systems. But we will also look at the meaning of cohesion in other disciplines, which are mentioned in the intro of the talk, and learn how they can help us during collaborative and interdisciplinary design work.
This talk is designed not only for software architects and developers but also for non-technical stakeholders who wish to understand how cohesive software design can directly contribute to meeting business objectives. By the end of this session, attendees will be equipped with actionable strategies to enhance their domain models, ensuring that their software truly reflects and serves their business domain with clarity and precision.