Domain-Driven Design (DDD)
The heart of software is its ability to solve domain-related problems for its users. All other features, vital though they may be, support this basic purpose.
Domain-Driven Design is Eric Evans's foundational methodology for tackling software complexity by making the business domain the primary driver of architecture and code. It provides two interlocking layers: Strategic Design, which establishes Bounded Contexts, Ubiquitous Language, and context integration patterns; and Tactical Design, which uses named building blocks — Entities, Value Objects, Aggregates, Domain Services, and Domain Events — to implement the model in code. DDD is the reference framework for architects, engineering leads, and teams navigating complex domains, microservices decomposition, or legacy modernization.
“We're building a logistics platform — shippers post freight orders, carriers bid on them, and we handle the matching, tracking, and invoicing. It's…”
Stop modeling your database. Start modeling the domain that actually matters.
DDD is organized into Strategic Design and Tactical Design layers, applied in strict sequence. Strategic Design starts with Knowledge Crunching — iterative collaboration with domain experts — to identify subdomains, classify them as Core (your competitive differentiator), Supporting (necessary but not differentiating), or Generic (commodity, buy or reuse), and define Bounded Contexts: explicit boundaries within which a single internally consistent model applies. Context relationships are documented in a Context Map using named integration patterns: Shared Kernel, Customer-Supplier, Conformist, Anti-Corruption Layer, Open Host Service, and Published Language — each with specific implications for team coupling and model translation. Only after strategic clarity does Tactical Design refine each context's internal model using Evans's building blocks: Entities (identity-tracked, mutable), Value Objects (equality-by-value, immutable), Aggregates (consistency boundaries controlled by a root Entity), Domain Services (stateless operations), Domain Events (immutable records of meaningful domain occurrences), Repositories (persistence abstractions), and Factories (complex construction logic). DDD is explicitly iterative — a Breakthrough in domain understanding often requires refactoring both the model and the Ubiquitous Language that names it. Evans explicitly warns against the Anemic Domain Model antipattern, where objects become data holders and all logic migrates into services.
Software systems become unmaintainable when the code model diverges from business reality — developers model database tables instead of domain concepts, teams use different words for the same thing, and service boundaries are drawn along technical seams rather than domain boundaries. The result is the 'model-implementation gap': a system that's expensive to change, fragile at integration points, and increasingly opaque to the stakeholders who depend on it. DDD addresses this directly with a prescriptive system for finding where models belong, what they should contain, and how they should communicate.
Walk away with explicit Bounded Context boundaries your teams can own, a Ubiquitous Language glossary that eliminates vocabulary drift between developers and domain experts, and Aggregate designs that enforce business invariants rather than leaving consistency to luck.
- A description of your business domain, product, or system — even rough requirements or a user story map
- Your current or planned technical architecture, service list, or data model
- Information about team structure, organizational boundaries, and inter-team dependencies
- Specific pain points: service boundary confusion, vocabulary misalignment, a legacy monolith to decompose, or a new complex domain to model from scratch
- A Context Map identifying bounded contexts, their integration pattern relationships, and ownership boundaries — ready to drive microservice or team topology decisions
- A Ubiquitous Language Glossary with per-context term definitions, disambiguation notes, and guidance on where each term applies and where it doesn't
- Aggregate Boundary Specifications naming each root entity, the objects in its consistency cluster, and the invariants it must enforce
- A Subdomain Classification Matrix labeling each subdomain as Core, Supporting, or Generic with build-vs-buy-vs-partner recommendations
Watch the methodology work.
Three specimens from a single real session: the same situation, before and after, the full transcript, and the skill answering live in the channel where the work happens.
Your codebase has a single `Order` model with 47 columns, referenced by your shipper portal, carrier mobile app, ops dashboard, and finance exports — each team added their own fields. 'Carrier' means three different things in three different services. Your microservices migration plan lists 12 proposed services that all share the same `orders` database table. A change to add a pricing field broke the carrier app. New developers spend their first month asking 'what does this field actually mean and who owns it?'
Your system has four named Bounded Contexts — Freight Posting, Carrier Matching, Transportation Execution, Financial Settlement — each with its own Ubiquitous Language and explicit integration boundaries. 'Load', 'Bid', 'Shipment', and 'Invoice' are precise terms that mean one thing per context. A `LoadAwarded` domain event cleanly hands off from Carrier Matching to Transportation Execution with no shared database. Finance integrates a billing platform behind an Anti-Corruption Layer. Your best engineers focus on the Carrier Matching model because the Subdomain Classification told them that's where the competitive advantage lives.
The same skill, where the work happens.
No new app to learn. The methodology runs over the WhatsApp Business API, so the answer lands as a reply in the thread you’re already in — same rigour, zero context-switch.
What it does, specifically.
Each capability is a distinct move drawn straight from the source methodology — not a generic assistant guessing.
Bounded Context Discovery
Guides you through identifying the natural seams in your domain where a single consistent model breaks down — the points where 'Customer' in billing means something fundamentally different from 'Customer' in fulfillment. Each Bounded Context gets an explicit name, scope, and owner, preventing the terminological bleed that causes integration bugs and misaligned teams.
Ubiquitous Language Workshop
Produces a per-context domain glossary by surfacing the terms domain experts use, reconciling them with developer vocabulary, and codifying the agreed language. The resulting glossary is not just documentation — it becomes the naming standard for classes, methods, events, and APIs within each bounded context.
Context Map Generation
Documents the relationships between bounded contexts using Evans's named integration patterns — Shared Kernel, Customer-Supplier, Conformist, Anti-Corruption Layer, Open Host Service, and Published Language. Each pattern carries specific implications for team autonomy, coupling tolerance, and who bears translation responsibility.
Aggregate Boundary Design
Identifies which domain objects form consistency clusters, which object acts as the Aggregate Root (the only external entry point), and which invariants the root must enforce. Guides the critical boundary-sizing decisions that prevent both bloated aggregates that serialize into megabyte payloads and anemic aggregates that leak invariant enforcement.
Core Domain Distillation
Classifies every subdomain as Core (the competitive differentiator — build here, invest deeply), Supporting (necessary but not differentiating — build simply or outsource), or Generic (commodity functionality — buy or reuse), and recommends investment strategy accordingly. Focuses your best engineering talent on the domain work that creates competitive advantage.
Graded before it shipped.
Every skill is scored against independent scenarios for methodology fidelity before it goes live — not vibes, a rubric.
Context Map Diagram
A structured map of all bounded contexts in your system, the named integration pattern governing each relationship (ACL, Customer-Supplier, Published Language, etc.), direction of dependency, and team ownership. Serves as the architectural backbone for microservice decomposition or Team Topologies decisions.
Ubiquitous Language Glossary
A per-context term dictionary with precise definitions, usage rules, and disambiguation notes — especially for terms that appear in multiple contexts with different meanings (e.g., 'Customer in Billing context ≠ Recipient in Fulfillment context'). Formatted for team wikis or architectural decision records.
Aggregate Boundary Specification
For each key aggregate: the root entity, the objects inside its consistency boundary, the invariants the root enforces, lifecycle transitions, and recommended Repository interface. Includes a 'why this boundary' rationale and flags for common aggregate bloat antipatterns.
Subdomain Classification Matrix
A table classifying each subdomain as Core, Supporting, or Generic, with investment strategy recommendation (build carefully / build simply / buy-or-reuse), strategic value rationale, and candidate third-party solutions for Generic subdomains.
Grounded in the original work.
Every answer traces back to a real source and the practitioner who wrote it — not a secondhand summary. Here is the source of record.
Eric Evans
Eric Evans is the author of 'Domain-Driven Design: Tackling Complexity in the Heart of Software' (Addison-Wesley, 2003), universally called 'the blue book' and one of the most influential software design texts of the past two decades. He is the founder of Domain Language, a consultancy specializing in DDD coaching and training for complex software organizations. Evans is a recurring keynote speaker at DDD Europe and DDD eXchange, and his pattern catalog — Bounded Contexts, Ubiquitous Language, Aggregates — has directly shaped how modern teams design microservices architectures and distributed systems.
Domain-Driven Design: Tackling Complexity in the Heart of Software
Author of 'the blue book' (Addison-Wesley, 2003); founder of Domain Language consultancy; keynote speaker at DDD Europe and DDD eXchange; originator of Bounded Context, Ubiquitous Language, and Aggregate patterns adopted industry-wide.
Be first to run it.
Domain-Driven Design (DDD) is being built right now. Leave your email and we’ll tell you the moment it goes live.