System Design Space
Knowledge graphSettings

Updated: May 6, 2026 at 4:20 PM

Learning Domain-Driven Design (short summary)

medium

DDD matters not because of its vocabulary, but because it helps teams see model boundaries before the system gets split into services.

In real design work, the chapter shows how bounded contexts, ubiquitous language, and strategic design become the basis for API boundaries, team contracts, and cleaner ownership lines.

In interviews and engineering discussions, it helps talk about shared models, semantic mismatch, and accidental coupling between domains without drifting into abstract theory.

Practical value of this chapter

Design in practice

Use bounded contexts as the base for API boundaries and team contracts.

Decision quality

Apply ubiquitous language to reduce semantic mismatch in integrations.

Interview articulation

Map DDD artifacts to practical choices: events, anti-corruption layers, and ownership.

Failure framing

Control shared-model and accidental-coupling risks between domains.

Review from Alexander

Strategic and tactical design

A review of the first part of the book: how DDD connects business subdomains, model language, and context boundaries.

Read review

Learning Domain-Driven Design

Authors: Vlad Khononov
Publisher: O'Reilly Media, 2021
Length: 342 pages

Practical DDD from Vlad Khononov: bounded contexts, ubiquitous language, tactical patterns, microservices, and Data Mesh.

Original
Translated

This chapter treats DDD not as a vocabulary of patterns, but as a way to agree on a model: identify business subdomains, build a ubiquitous language, and draw bounded contexts where rules, ownership, and pace of change differ.

That framing connects service boundaries, event-driven architecture, and Data Mesh into one practical picture instead of treating them as unrelated sets of terms.

Book structure

The book moves from finding domain boundaries to making concrete architecture decisions.

Part I: Strategic Design

Business subdomains, ubiquitous language, bounded contexts, and team relationship patterns.

Part II: Tactical Design

Ways to implement business logic, architecture styles, and integration between contexts.

Part III: DDD in Practice

Design heuristics, solution evolution, Event Storming, and work in brownfield systems.

Part IV: Architecture Relationships

Microservices, event-driven architecture, and Data Mesh as extensions of domain thinking.

Part I: Strategic Design

Business subdomains

Vlad Khononov starts by asking which parts of the business are truly unique and which should be implemented more simply or bought as products.

Core subdomain

What creates competitive advantage and deserves the best engineering attention.

  • High complexity
  • Cannot simply be bought
  • Worth developing in-house

Supporting subdomain

Important business capability without unique market differentiation.

  • Medium complexity
  • Can often be simplified
  • Does not always need perfect design

Generic subdomain

A common problem that is usually cheaper to solve with an existing product.

  • Low uniqueness
  • Off-the-shelf tools fit well
  • Should not become the system core

Ubiquitous language and bounded contexts

Ubiquitous language lets domain experts and developers discuss the same model with the same words. It only works inside a specific bounded context.

Business subdomains usually already exist in the company, while context boundaries are design decisions. That is where one model ends and another begins.

Team relationship patterns

Cooperation

  • Partnership — teams develop the solution together and keep the model aligned
  • Shared Kernel — a small shared part of the model is maintained jointly

Customer and supplier

  • Conformist — the downstream team accepts the upstream model
  • Anti-Corruption Layer — a translation layer protects the local model from foreign concepts
  • Open-Host Service — a stable public interface defines the integration rules

A context map is used to analyze these relationships: it shows not just system links, but also the dependency shape between teams.

Part II: Tactical Design

Business logic implementation options

Transaction Script

Procedural logic organized around a concrete business action or transaction.

Active Record

An object combines data, simple rules, and knowledge of its persistence.

Domain Model

A rich model with entities, value objects, aggregates, and encapsulated business rules.

Event-Sourced Domain Model

State is rebuilt from an event history rather than only from the latest row.

Architecture patterns

Layered Architecture

Classic presentation, business-logic, and data-access layers.

Ports & Adapters

The domain is isolated from external systems through ports and adapters.

CQRS

Commands and reads are separated when they need different models and requirements.

Integration between bounded contexts

Model translation

  • Stateless Translation — each request is translated independently
  • Stateful Translation — the adapter keeps an intermediate model or aggregates data

Aggregate integration

  • Outbox Pattern — an event is published reliably together with the data change
  • Saga — a long-running process is split into steps and compensations
  • Process Manager — a separate component coordinates a complex business process

Part III: DDD in Practice

Tactical design decision tree

In the book, a heuristic is not a perfect rule, but a good-enough guide for the next decision.

1. Identify the subdomain type: core, supporting, or generic.

2. Choose a business-logic implementation style, from a simple script to a rich domain model.

3. Select an architecture style: layers, ports and adapters, or command/read separation.

4. Align the testing strategy with the cost of mistakes and the expected pace of change.

Vectors of change

Domain changes

  • A core subdomain can become generic when the market catches up.
  • A supporting area can become core when it creates new advantage.
  • A purchased product may need a local model when the business becomes more specialized.

Organizational changes

  • A team partnership can turn into a customer-supplier relationship.
  • Teams may diverge in goals, release cadence, and ownership.
  • Team mergers and splits should trigger a review of context boundaries.

Event Storming

This group modeling technique helps collect domain knowledge, reveal causality, and create a shared language for the team.

1. Unstructured exploration

Find domain events and important facts.

2. Timeline

Order events by time and causality.

3. Commands

Understand who or what triggers an action.

4. Policies

Describe automatic reactions to events.

5. External systems

Mark dependencies outside the domain.

6. Aggregates

Find objects that protect business invariants.

7. Bounded contexts

Group the model by language, rules, and responsibility.

Related book

Building Microservices

Sam Newman's practical view of how domain boundaries become services, contracts, and operational ownership.

Open chapter

Review from Alexander

DDD and microservices

A review of the relationship between Domain-Driven Design, public interface size, and real service boundaries.

Read review

Part IV: DDD and Microservices

What makes a service micro

The book focuses less on the absolute size of a service and more on the size of its public interface. A good service can be complex inside if it exposes a small, understandable surface outside.

Deep service

  • Narrow public interface
  • Complex internal logic
  • Strong encapsulation
  • Controlled system complexity

Shallow service

  • Broad interface
  • Simple implementation
  • Weak encapsulation
  • Rising complexity across the whole system

Granularity and complexity

Smaller services are simpler in isolation, but the interaction network between them becomes more expensive.

Good decomposition reduces total system complexity instead of chasing the smallest possible service size.

Heuristics for microservice boundaries

Deep service

a narrow public interface and rich internal logic

Shallow service

a broad interface, weak encapsulation, and rising system complexity

Bounded context

each microservice can be a context, but not every context has to become a service

Aggregates

a lower boundary below which a service is usually too small

Business subdomains

a strong heuristic for finding durable service boundaries

Review from Alexander

Event-driven architecture

How different event types help reduce coupling between contexts and services.

Read review

Event-Driven Architecture

Event-driven style and Event Sourcing

Event-driven architecture

  • Architecture style
  • Asynchronous interaction
  • Communication between system components

Event Sourcing

  • State storage pattern
  • Change history as a sequence of events
  • Usually applied inside one service or aggregate

Message types

Event

a fact that has already happened and is phrased in the past tense

Command

a request for action expressed as intent

Event notification

a minimal signal about a fact without unnecessary state

Event-carried state transfer

a message that includes data the consumer needs

Domain event

a business fact that matters inside the domain

Coupling types in event-driven architecture

The event type you choose can either loosen service coupling or make it tighter in a less visible way.

Implementation coupling

the consumer depends on the supplier's internal details

Functional coupling

services are too tightly bound to the same business process

Temporal coupling

both sides must be available at the same time or in a strict order

Review from Alexander

Data Mesh and DDD

How domain boundaries and ubiquitous language help shape data products and federated governance.

Read review

Data Mesh and DDD

Analytical and transactional data models

Transactional model (OLTP)

  • Fine-grained records
  • Predictable queries
  • Normalized data
  • Optimized for writes

Analytical model (OLAP)

  • Aggregated data
  • Exploratory queries
  • Star or snowflake schema
  • Optimized for reads

Problems with centralized DWHs and data lakes

  • The central team becomes a bottleneck.
  • Hard coupling through ETL makes change expensive.
  • One model struggles to describe different domain contexts.
  • A data lake turns into a swamp without ownership and context.
  • Consumers lose the meaning of fields and quality rules.
  • Fixing data issues gets separated from the source team.

Four Data Mesh principles

Domain ownership

domain teams own their analytical data

Data as a product

data has consumers, documentation, quality expectations, and SLA

Self-serve platform

publishing and consuming data does not require a manual queue in a central team

Federated governance

shared standards coexist with local domain responsibility

Data Mesh fits DDD well: bounded contexts become the basis for data products, while ubiquitous language helps describe both schema and meaning.

Applying DDD in system design interviews

When DDD helps

  • Define service boundaries through bounded contexts.
  • Choose architecture by subdomain type and cost of error.
  • Design integrations through context maps and anti-corruption layers.
  • Use Event Storming during domain discovery.

Key concepts

  • Deep services — a narrow interface and a strong internal model
  • Aggregates — the smallest boundary for a consistent change
  • Context map — a map of relationships and integrations between models
  • Event patterns — tools for loose coupling between contexts

Additional materials

Related chapters

Where to find the book

Enable tracking in Settings