Strategic DDD

12 min read · Updated 2026-04-25

Strategic DDD is the half of the methodology that decides where the boundaries go. Tactical DDD shapes what’s inside each boundary; strategic DDD shapes the boundaries themselves and the relationships between them.

Why Technical Boundaries Aren’t Enough

A common mistake: split a system by technical layer — API gateway, business logic service, data access service, auth service, integration service. Looks clean. Creates a distributed monolith.

Technical-layer split
Looks clean, scales poorly
Business operations span multiple services. Data consistency is brittle. Domain knowledge is scattered. Every change requires cross-team coordination.
Domain-driven split
Reflects business reality
A bounded context owns its slice of the business end-to-end. Teams shipping in their context don't need to coordinate with others for routine work.

Two Spaces, Again

Strategic DDD operates across the problem space (the business reality) and the solution space (the software architecture). The point is to understand the problem space before designing the solution.

Problem space — domain and sub-domains

The domain is the entire business area you operate in. Sub-domains are distinct areas of functionality within it. For e-commerce, sub-domains might include:

Sub-domains aren’t all equal. They classify into three buckets, and the classification drives investment decisions:

Core sub-domain
Your competitive advantage. Where senior engineers and custom architecture should go. (e.g., Netflix's recommendation engine.)
Supporting sub-domain
Business-essential, but not differentiating. Custom-built but simpler. (e.g., order processing for most e-commerce.)
Generic sub-domain
Necessary, not unique. Buy off-the-shelf. (e.g., authentication, payment processing, email delivery.)

Practical heuristics for finding sub-domains

Discovery techniques

Bounded Contexts: The Solution-Space Boundary

A bounded context is the implementation boundary inside which a specific domain model applies. Inside the boundary, all terms have specific, consistent meanings. Outside it, the same words can mean entirely different things.

Sub-domain ↔ bounded context isn’t always one-to-one

Linguistic boundaries

The most reliable signal that you’ve found a bounded-context boundary is language. When experts from different parts of the business use the same word for different things, you’ve probably found a boundary.

Context Maps: Documenting Relationships

Once you’ve identified bounded contexts, you need to understand how they relate. A context map shows:

The Seven Integration Patterns

Different relationships need different integration approaches. Strategic DDD codifies seven patterns:

1. Partnership

Two contexts developed by tightly collaborating teams. Changes are coordinated; both teams have equal influence.

Example. Sales context ↔ Marketing context. Joint campaigns require coordination on both sides.

When to use. Contexts that must evolve together; teams that work closely.

Risk. High coordination cost; both teams must move at the same pace.

2. Customer/Supplier

One context (supplier) provides services to another (customer). The supplier has more interface influence but must consider customer needs. Most common pattern in well-designed systems.

Example. Product Catalog (supplier) → Sales (customer). Sales depends on product data but doesn’t control catalog structure.

When to use. Clear dependency relationship; stable interface.

Risk. Supplier changes can break customer; needs good versioning.

3. Conformist

Downstream context accepts the upstream model unchanged. Common when integrating with external systems where you have no influence.

Example. External payment gateway → Order processing. Must accept whatever payment payload format the gateway provides.

When to use. External or legacy systems you can’t change.

Risk. Upstream changes force downstream changes; can pollute the domain model.

4. Anti-Corruption Layer (ACL)

Downstream context translates the upstream model into its own terms. Protects the downstream from upstream changes.

Example. Legacy inventory system → [translation layer] → Modern order system. The order system keeps its clean model despite the legacy system’s mess.

When to use. Integrating legacy or external systems with mismatched models.

Benefit. Protects downstream’s domain model; simplifies testing and maintenance.

5. Shared Kernel

Two contexts share a model for some concepts. Requires close coordination and shared ownership. Use sparingly, only for very stable concepts.

Example. Sales context ↔ Support context, sharing Customer identity.

When to use. Very stable shared concepts; teams that can coordinate closely.

Risk. Changes affect multiple contexts; can become a bottleneck.

6. Open Host Service

A context exposes a well-defined API for multiple downstream contexts. The upstream designs its interface to serve many clients, not optimize for one.

Example. User authentication service (open host) → many client contexts.

When to use. One-to-many relationships; stable public APIs.

Benefit. Reduces coupling; clients can evolve independently.

7. Separate Ways

Contexts are not connected and duplicate functionality rather than integrate. Sometimes the right call when integration cost exceeds duplication cost.

Example. Internal analytics ↔ External reporting tool, both maintaining their own customer data.

When to use. Integration cost > duplication cost; very different models needed.

Benefit. Complete independence; no coordination overhead.

Common Mistakes

Step 01
Distributed monolith
Services physically split but tightly coupled. Use ACLs to isolate contexts. Design for eventual consistency.
Step 02
God context
One context handles too many concerns. Look for natural seams — different sub-domains, different teams, different change rates.
Step 03
Anemic context
Just CRUD services with no business logic. Move rules into domain models. Focus on behavior, not just storage.
Step 04
Premature splitting
Too-fine-grained contexts before understanding the domain. Start coarse; split as you learn.

Boundaries Evolve

Bounded contexts aren’t permanent. As your business grows and changes, boundaries need to evolve.

Signs to split
A context wants to break up
Teams conflicting over changes. Very different concerns inside one context. Wildly different scalability or reliability needs. Domain model becoming hard to reason about.
Signs to merge
Two contexts want to come together
Excessive cross-context communication for simple operations. Lots of shared data always used together. Constant coordination on changes between teams. Duplicated business logic.

Strategies for evolving boundaries:

Closing the Loop

Strategic DDD isn’t a one-time exercise. Your boundaries will evolve as your business grows and your understanding deepens. Start with understanding the domain, identify bounded contexts through linguistic boundaries, map the relationships, and validate against real business scenarios.

The goal isn’t perfect boundaries from day one. It’s the best boundaries you can draw now, with the discipline to refine them as you learn.

Recap