Domain-driven design (DDD) has emerged in software engineering as a methodology for tackling complex domain problems by connecting the implementation to an evolving model. The cornerstone of DDD lies in its emphasis on collaboration among the domain members.
However, cooperation in DDD transcends mere communication; it is a conduit for understanding and navigating the complexities inherent in diverse organizational levels.
During one of the DDD foundation training we offer, a question was raised by one of the participants about why collaboration is required when DDD is related to software modeling.
At the time, our answer was to explain that when complexity emerges, the context needs to be broken into parts that can lower the complexity a person can absorb and handle. And afterward, several elements must be combined to be part of a whole. Putting the pieces together needs collaboration to create a shared understanding of what the purpose of the domain is.
After giving it more thought, I wanted a better answer than the answer given. Because of that, I decided to write about it and explain it more deeply. This article delves into enriching the collaboration topic by emerging the contextual systems and the need to find the purpose underneath the context.
The Essence of Collaboration
The goal of domain-driven design is to translate the complexity of a context to a software design level. However, collaboration in DDD is not just about sharing information; it is about co-creating knowledge that captures the intricate essence of the domain, turning assumptions into facts, and uncovering implicit information. It involves people from a specific domain context engaging in a continuous dialogue, challenging assumptions, and evolving the domain model to ensure it remains aligned with the business’s core complexities.
But What Are Systems?
Despite this text starting with the software scope, systems here are related to the context we, as humans, are connected to. Systems in this context are designed to structure and bring coherence to a particular area. At the same time, human interactions define the protocols and operational dynamics, encompassing processes, mutual understandings, cultural norms, regulations, and ethical standards of business conduct. The main challenge is that humans see reality with filters from their background, shaping the assumptions and biases (e.g., culture, ethnicity, gender, society).
How Can We Explain the Problem of a Society or an Organizational Context When We Are Part of It?
According to Barry Oshry, a system is a set of interconnected elements organized to achieve a particular purpose or function. However, the unclarity of the relationship and its dependencies can trigger wicked problems (wicked problems are knotted up in many related factors, making them hard to fix. Plus, you cannot foresee or predict the impact of solving the problem.). These elements are not isolated; their relationships and interactions create patterns that influence the behavior and outcomes of the system as a whole.
Systems are dynamic and evolve, often exhibiting complex behaviors that emerge from these interactions. The way the system works, mixed with what people in the system think and believe, can make it fall into usual patterns that either get in the way of or help how well it does its job. Also, the conditions within the same system can affect how people act, which can sometimes cause misunderstandings, disagreements, and struggles for control.
In DDD, grasping the intricate layers of complexity is crucial to shaping the creation of technically robust systems that align with the business’s strategic objectives. It’s essential to recognize that doing this kind of research and understanding requires a significant mental effort, known as cognitive load. Our brains are naturally inclined to make assumptions and move on, as delving into complex matters consumes mental energy. The real challenge is overcoming the natural tendency and bridging the cognitive gap between various layers of complexity. It demands a framework that encourages thorough understanding and promotes collaborative efforts to navigate and integrate these complexities effectively.
How Can the Cognitive Gap Within the Team Be Reduced to Improve Collaboration and Shared Understanding?
For that, I’d like to explore the work of Otto Scharmer. The Theory U process provides a framework for understanding and facilitating change in individuals, organizations, and social systems. It is based on the premise that the quality of any system’s results depends on the consciousness from which people in the system operate.
In the context of DDD, Theory U can guide teams in co-creating domain models deeply rooted in the reality of the business and its complexities and encouraging a shift from designing software in isolation to engaging in a continuous, empathetic dialogue with domain members to foster a shared understanding for effective domain modeling.
Applying the Theory U from Otto Scharmer can offer an abstraction on how to approach collaboration by outlining a process of collective learning and co-creation that involves:
- Co-initiating: Engaging stakeholders to understand the domain’s complexities.
- Co-sensing: Observing and experiencing the domain to gain profound insights.
- Presencing: Reflecting and allowing a more profound sense of purpose to emerge.
- Co-creating: Designing and prototyping solutions that address the domain’s challenges.
- Co-evolving: Implementing solutions while adapting to feedback and changes in the domain.
Integrating Theories into Practice
Integrating the insights from Theory U and Seeing Systems into domain-driven design requires a shift in mindset from viewing software design as a purely technical endeavor to seeing it as a deeply collaborative, systemic process. Change agents adopt these frameworks in their DDD practices in organizational environments. They enhance alignment between software systems and business strategies, improve adaptability to changing market conditions, and create a more engaged and innovative workforce.
Challenges and Considerations
While the theoretical integration offers a promising outlook, its practical implementation is challenging. Resistance to change, entrenched organizational cultures, and the theories’ complexity can pose significant barriers. Addressing these challenges requires a thoughtful approach, including tailored training, leadership commitment, and fostering a culture of continuous learning and adaptation.
Collaboration in Domain-Driven Design is not merely a means to an end; it is an essential process that enables teams to navigate and embrace the complexities of their domains. By integrating insights from Theory U, the five disciplines of a learning organization, and understanding power and systems, DDD practitioners can elevate their collaborative practices, leading to more insightful, adaptable, and aligned domain models. Embracing these frameworks enhances the technical aspects of DDD and cultivates a more dynamic, responsive, and innovative organizational culture.