Skip to content
iSAQB-blog-article-Lilienthal WP

Domain-Driven Design: Avoiding Misun­der­standings to Protect Your Investment

An Article by Carola Lilienthal

Software devel­opment is a process prone to misun­der­standings: future users speak their own business language, while the devel­opment team comes from a technical world and is tasked with creating something that doesn’t yet exist – innov­ative and state-of-the-art. So failure is definitely an option!

“It’s devel­opers’ (mis)understanding,
not domain experts’ knowledge,
that gets released in production.”

– Alberto Brandolini, creator of Event Storming

With this quote, Brandolini hits the nail on the head: under­standing Domain-Driven Design (DDD) is absolutely essential for everyone involved in the software devel­opment process. In software devel­opment, we must succeed in deeply under­standing the domain and trans­ferring that knowledge into the software.

Only then can we build systems that fully match the tasks domain experts expect the software to fulfill. On one hand, domain-driven software improves and accel­erates business processes. On the other, we can continue evolving the system in line with the domain over many years, because domains are typically more stable than the technologies we use.

DDD is a method­ology that puts this domain-centric approach front and center (see Lilienthal 2023). Together with domain experts, the devel­opment team gains an under­standing of the domain’s processes and language in an agile way. The techniques used to gather requirements are summa­rized in DDD under the term “Collab­o­rative Modelling.” The knowledge gained is trans­ferred into a Context Map (Fig. 1), Bounded Contexts, the Ubiquitous Language, domain models, and ultimately into source code. Let’s take a closer look at these steps.

 

Figure 1: Relationship between domain, software system, and team structure

 

Collab­o­rative Modelling and Strategic Design

Collab­o­rative Modelling is used at various “altitudes” throughout the project. We begin with the big picture – a high-level view of the domain – and analyze cross-cutting processes. Based on this analysis, we start with DDD’s Strategic Design. This involves identi­fying subdo­mains within the main domain and assessing their impor­tance (Core, Supporting, Generic Subdo­mains). This evalu­ation helps the devel­opment team and management decide where to invest resources and where buying third-party software might be more effective.

 

Figure 2: Example of a Context Map for a cinema domain

 

To gain an overall view of the system architecture, we then create a so-called Context Map that shows subdo­mains and their relation­ships in the form of Bounded Contexts (see Fig. 2). The Context Map defines the structure of the software, using Bounded Contexts as domain-driven modules and identi­fying their inter­faces through Context Mapping. This gives us a domain-driven architecture that can also guide how we structure our teams (see Conway 1968).

 

Ubiquitous Language and Tactical Design

Each Bounded Context has its own Ubiquitous Language – a shared domain vocab­ulary – and its own domain model, which is then trans­lated into source code.

 

Ubiquitous Language
A DDD-based system consists of several modules, each with a domain model tailored to the specific Bounded Context. This allows each model to precisely address its subdomain.
For creating these domain models, DDD provides guide­lines through Tactical Design. It defines five types of classes, each imple­mented according to a specific pattern and connected to one another: Entity, Domain Value, Service, Repos­itory, and Factory. One technique that helps with modeling these classes is Example Mapping, derived from Behavior-Driven Devel­opment (BDD; see North 2006). This approach helps define scenarios for domain-driven accep­tance testing and model class inter­faces and inter­ac­tions accordingly.

 

Conclusion and Outlook

Like most living method­ologies, DDD is constantly evolving. Currently, the DDD community is actively discussing concepts like Team Topologies (see Skelton 2025) and Wardley Maps (see Wardley 2017). Team Topologies has broadened our view of team organi­zation beyond just Stream-Aligned Teams, which implement a Bounded Context. It invites us to also consider Platform Teams, Enabling Teams, and teams focused on Compli­cated Subsystems.

Wardley Maps help us make strategic decisions for the evolution of software solutions visible and under­standable to all stake­holders. This enables meaningful discus­sions with upper management about long-term planning.

When these DDD techniques and concepts are applied throughout the devel­opment process – and the domain-driven perspective is maintained during further devel­opment – the investment in software will pay off in the long run. DDD helps avoid misun­der­standings about the supported domain and leads to systems that truly support their users.

 

Refer­ences

  • Carola Lilienthal, Henning Schwentner: Domain-Driven Trans­for­mation, dpunkt 2023.
  • Melvin E. Conway: How Do Committees Invent? In: F. D. Thompson Publi­ca­tions, Inc. (Ed.): Datamation. Vol. 14, No. 5, April 1968, pp. 28–31
  • Dan North: Intro­ducing BDD, Better Software Magazine, March 2006
  • Simon Wardley: My Basics for Business Strategy, Medium. Hacker Noon, May 2017
  • Matthew Skelton, Manuel Pais: Team Topologies: Organizing Business and Technology for Fast Flow of Value, IT Revolution, 2nd Edition, 2025

 

Author

Dr. Carola Lilienthal is Managing Director of WPS – Workplace Solutions GmbH. On behalf of her clients, she regularly reviews the quality of software archi­tec­tures. Her experience is captured in the books Sustainable Software Archi­tec­tures and Domain-Driven Trans­for­mation.

 

Appendix

 

Ubiquitous Language
DDD encourages everyone involved in a software project to develop a shared domain language – the Ubiquitous Language. This shared language should be based on the business termi­nology of domain experts, not the technical jargon of devel­opers. The goal is to standardize business terms from the problem space so that they are reflected in the solution space (i.e., the software). DDD recom­mends using this shared language consis­tently: in speech, in writing, in diagrams – and in code.

Bounded Context
In a software system, there should be one Bounded Context per subdomain. It comprises part of the source code and has its own database schema. In tradi­tional software architecture, Bounded Contexts would be called modules or compo­nents. But from a DDD perspective, the key is that they are defined by domain boundaries.

Wardley Mapping
A Wardley Map is a repre­sen­tation of the landscape in which a company operates. It visualizes a value chain (activ­ities required to meet user needs) and how those activ­ities evolve over time due to compe­tition and demand.

Context Map
The larger the domain and the software, the more domain contexts there will be. To maintain an overview, DDD provides the Context Map – a map of the domain contexts.

Conway’s Law
This principle states that the architecture of a system reflects the commu­ni­cation structure of the organi­zation that created it. In simple terms: the structure of the system mirrors the structure of the teams building it.

Team Topologies
Team Topologies is a concept and framework that provides guidance on organizing and evolving teams within an organi­zation to efficiently build and deliver software. It became widely known through the book by Matthew Skelton and Manuel Pais published in 2019.

Stream-Aligned Teams
These teams deliver value to customers along the value stream. They are cross-functional, enabling them to deliver signif­icant incre­ments quickly. They have a clear mission and are respon­sible for the full lifecycle of their products – from devel­opment to deployment and operations.

Share this article:

Related Posts

Stay Up-to-Date with the iSAQB® Newsletter!

Scroll To Top