- Obtaining Domain Knowledge Through Collaboration
- Domain-Driven Design Patterns and Practices
- Discovering Subdomains and Mapping Their Evolution Stages
- Build-or-Buy Decisions with Subdomain Types and Evolution Stages
- Summary
Domain-Driven Design Patterns and Practices
DDD entails a variety of patterns and practices consisting of strategic and tactical design. Figure 2.2 shows the Wardley Map adjusted for DDD by adding a layer to the y-axis of the map. This layer is not an official part of a Wardley Map itself. Instead, it is intended to provide an easy-to-follow path to enter the field of strategic and tactical design, going from the top—the strategic design patterns—to further down to the tactical design patterns. Please feel free to ignore this layer if it confuses you more than it helps.
Figure 2.2 Strategic and tactical design as part of the value chain
Strategic and tactical design provides a set of patterns and practices to analyze and discover a problem domain and to design and implement a software solution fitting the problem domain as closely as possible. The top of the y-axis layer suggests starting in the problem space of strategic design. In connection with Wardley Mapping, the problem domain or business domain is composed of the users and their user needs. Even so, neither is redundant with the other. In the problem space of strategic design, analyzing the problem domain and discovering subdomains are essential. This chapter focuses on the problem space of strategic design.
Going further down, Figure 2.2 switches to the solution space of strategic design. While the problem space focuses on which problems to solve, the solution space concentrates on how to solve these problems. The solution space of strategic design is about making high-level design decisions, decomposing the system into modular components (the bounded contexts), and mapping the integrations between them (the context maps).
A step further down comes the stage of tactical design patterns. Tactical design patterns support low-level design decisions; the intent of these decisions is to design and implement a solution that fits the problem domain as closely as possible. Tactical design patterns provide building blocks to implement the domain model in code. While strategic design focuses on analyzing, discovering, decomposing, and mapping activities, the essential activities of tactical design are designing and implementing. Even though tactical design is included in Figure 2.2 as part of the added y-axis layer, it is typically not reflected as value chain components in a Wardley Map. It appears in the figure just as a means to visually demonstrate its classification.
Skipping the strategic design patterns and practices and going straight to tactical design creates a risk of implementing the solution of a barely understood problem domain and investing in parts providing undifferentiating value. It’s advisable to start with strategic design first to obtain the needed domain knowledge and identify where to prioritize the development efforts. Strategic design helps the organization analyze and understand the problem domain and discover the core domain so that it knows where to invest most strategically.
