domain-driven-design
Skill17 starsChanged 56 days agoMITView on GitHub
Designs and reviews software domain models using Domain-Driven Design, including subdomains, bounded contexts, context maps, ubiquitous language, aggregates, value objects, domain events, repositories, and anti-corruption layers. Use when business rules are complex, service or module boundaries are unclear, teams disagree on terminology, or the user mentions DDD, bounded contexts, aggregates, or domain modeling.
25 other projects use a version of this.
Adopted by
Most recently taken up by
- reddygopalkrishna/developer-agent-skillstheir own version, first seen Nov 8, 2026
- nledford/engineering-review-boardtheir own version, first seen Nov 3, 2026
- AntonioMellies/claude-code-skillstheir own version, first seen Nov 1, 2026
- sbrudz/agent-skillstheir own version, first seen Nov 1, 2026
- conjurer-rich/skillstheir own version, first seen Oct 25, 2026
- hugo082/skillstheir own version, first seen Oct 22, 2026
Used with
Projects with it also use hexagonal-architecture, clean-architecture and 2 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
ffsshhttiikkSkillhexagonal-architecture
Hexagonal architecture patterns and implementation
Also in 4 projects that use this
harrissohail6Skillclean-architecture
Clean architecture and SOLID principles. Auto-activates when designing systems or refactoring code structure.
Also in 4 projects that use this
xenitV1Skillclean-code
Pragmatic coding standards - concise, direct, no over-engineering, no unnecessary comments
Also in 4 projects that use this
SentrySkillreview
Fixture review skill.
Also in 3 projects that use this
Other versions25 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 25
- ciembor/agent-rules-books★ 2.8ksame name
- wondelai/skills★ 2.6ksame name
- rrezartprebreza/spring-boot-skills★ 344same name
- techygarg/lattice★ 209same name
- fatonh/symfony-skills★ 35same name
- G1Joshi/Agent-Skills★ 15same name
- nledford/engineering-review-board★ 11same name
- eralmansouri/skills★ 9same name
- reddygopalkrishna/developer-agent-skills★ 8same name
- bernard-ng/skills★ 4same name
15 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository53 other files it gives its agents.
- agents-sdkSkill
- agent-workflowSkill
- api-designSkill
- aws-iamSkill
- bash-shell-scriptingSkill
- cicd-github-actionsSkill
- cloudflare-email-serviceSkill
- cloudflareSkill
- cloudflare-waf-authorSkill
- cloudflare-workers-authorSkill
- cloud-platformsSkill
- codebase-security-auditSkill
- containers-orchestrationSkill
- core-engineeringSkill
- database-postgresqlSkill
- databricksSkill
- data-engineeringSkill
- distributed-transactionsSkill
- documentation-standardsSkill
- durable-objectsSkill
- frontend-engineeringSkill
- git-workflowSkill
- go-rust-systemsSkill
- iam-security-advisorSkill
- independent-verificationSkill
- infrastructure-iacSkill
- kubernetes-containersSkill
- kubernetes-operator-developmentSkill
- mcp-developmentSkill
- memory-architectureSkill
- multi-perspective-reviewSkill
- networking-transportSkill
- observabilitySkill
- oktaSkill
- pdf-exportSkill
- python-developmentSkill
- reactflow-architecture-diagramsSkill
- sandbox-sdkSkill
- scripting-automationSkill
- security-testingSkill
- service-resilienceSkill
- single-file-dashboardSkill
- skills-compositionSkill
- skills-continuous-improvementSkill
- snowflakeSkill
- system-designSkill
- typescript-javascriptSkill
- web-perfSkill
- web-research-kb-refreshSkill
- workers-best-practicesSkill
- workload-identitySkill
- wranglerSkill
- zero-trustSkill
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 9 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 23 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Use Domain-Driven Design (DDD) to make complex business rules and ownership boundaries explicit.
- Distinctive: line 12
Start from business capabilities, policies, language, and change patterns, not tables, endpoints, or deployment units.
- Distinctive: line 13
Treat one model as valid only inside its bounded context.
- Distinctive: line 14
Use a ubiquitous language shared by domain experts and engineers in conversations, code, tests, APIs, and events.
- Distinctive: line 16
Keep aggregate boundaries small.
- Distinctive: line 19
Prefer a modular monolith until independent deployment, scaling, security, data ownership, or team autonomy justifies distribution.
- Distinctive: line 34
Create a glossary only from validated language.
- Distinctive: line 44
Do not label every component "core." The classification should influence build-versus-buy, staffing, design depth, and tolerance for vendor …
- Very specific: line 60
Use the strategic design reference (${HANDBOOK_ROOT}/skills/domain-driven-design/references/strategic-design.md) for context maps and …
- Very specific: line 76
Use the tactical modeling reference (${HANDBOOK_ROOT}/skills/domain-driven-design/references/tactical-modeling.md) for aggregate and event …
- Distinctive: line 88
Do not share database tables, ORM entities, or mutable domain objects across bounded contexts.
“Common” is measured: kept by at least 6 in 10 of the 23 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Domain-Driven Design
Use Domain-Driven Design (DDD) to make complex business rules and ownership boundaries explicit. Do not use DDD vocabulary to disguise ordinary CRUD or technology-driven service decomposition.
DDD Contract
- Start from business capabilities, policies, language, and change patterns, not tables, endpoints, or deployment units.
- Treat one model as valid only inside its bounded context. The same term may intentionally mean different things elsewhere.
- Use a ubiquitous language shared by domain experts and engineers in conversations, code, tests, APIs, and events.
- Align boundaries with cohesive invariants and ownership. A bounded context is a semantic and organizational boundary, not automatically a microservice.
- Keep aggregate boundaries small. One aggregate is one transactional consistency boundary.
- Reference other aggregates by stable identity rather than loading or mutating a large object graph.
- Make cross-context contracts explicit and versioned. Use an anti-corruption layer when an upstream model must not leak inward.
- Prefer a modular monolith until independent deployment, scaling, security, data ownership, or team autonomy justifies distribution.
- Validate models through concrete scenarios and examples with domain experts.
Workflow
1. Establish the domain language
Collect:
- business outcomes and critical decisions;
- domain terms and definitions;
- actors, commands, policies, constraints, and exceptional cases;
- examples that distinguish similar concepts;
- terms with conflicting meanings across teams.
Create a glossary only from validated language. Treat unresolved synonyms and overloaded terms as modeling questions.
2. Classify subdomains
Separate:
- Core subdomains: differentiated capabilities that justify focused investment.
- Supporting subdomains: necessary business-specific capabilities that are not differentiators.
- Generic subdomains: commodity capabilities better bought, reused, or delegated when practical.
Do not label every component "core." The classification should influence build-versus-buy, staffing, design depth, and tolerance for vendor coupling.
3. Discover bounded contexts
For each candidate context, state:
- purpose and language;
- decisions and invariants it owns;
- authoritative data;
- team or owner;
- commands, queries, and published contracts;
- upstream and downstream relationships;
- expected rate and reason for change.
Split when language, invariants, ownership, or change cadence diverge materially. Merge contexts that are separated only by technical layers or speculative scaling.
Use the strategic design reference (${HANDBOOK_ROOT}/skills/domain-driven-design/references/strategic-design.md) for context maps and integration relationships.
4. Model behavior inside a context
Identify:
- entities with continuity and identity;
- value objects defined by immutable attributes;
- aggregates that protect invariants;
- aggregate roots as the only external mutation entry point;
- domain events that record meaningful completed facts;
- domain services for stateless domain behavior that has no natural entity or value-object home;
- repositories for loading and saving aggregate roots.
Application services orchestrate use cases, authorization, transactions, and external ports. They should not contain the domain rules that determine valid state.
Use the tactical modeling reference (${HANDBOOK_ROOT}/skills/domain-driven-design/references/tactical-modeling.md) for aggregate and event design.
5. Design cross-context interaction
Choose deliberately:
- synchronous request/response for immediate decisions;
- asynchronous events for facts and decoupled reactions;
- published language for stable shared contracts;
- anti-corruption layer for translation and model protection;
- separate ways when integration cost exceeds its value.
Do not share database tables, ORM entities, or mutable domain objects across bounded contexts. Shared kernels require explicit joint ownership and should remain small.
For consistency across contexts, use the distributed transactions skill (${HANDBOOK_ROOT}/skills/distributed-transactions/SKILL.md).
6. Validate and evolve
Validate with:
- example mapping or scenario walkthroughs;
- aggregate invariant tests;
- contract tests between contexts;
- architecture tests for forbidden dependencies;
- production signals tied to domain outcomes;
- explicit migration and compatibility plans.
Revisit boundaries when language, ownership, coupling, or change patterns provide evidence that the model is wrong. Avoid large rewrites solely to achieve a theoretically pure model.
Review Questions
- Which business decision or invariant does each model element protect?
- Where does each term have one precise meaning?
- Does each bounded context own its data and contract?
- Can one command atomically preserve one aggregate's invariants?
- Are cross-aggregate workflows explicit and eventually consistent where necessary?
- Does infrastructure vocabulary leak into the domain model?
- Are boundaries supported by team ownership and change patterns?
- Is DDD complexity justified by domain complexity?
Anti-Patterns
- One enterprise-wide canonical model for unrelated teams and workflows.
- One bounded context or service per database table.
- Aggregates that load an entire customer, account, or order graph.
- Repositories for every entity regardless of aggregate ownership.
- Anemic models where application services hold every business rule.
- Domain events used as commands or mutable data-transfer objects.
- Shared databases presented as independent services.
- Generic
Manager,Processor, orServicetypes that conceal domain language. - Applying event sourcing, CQRS, or microservices merely because DDD is mentioned.
Required Output
Produce:
- Domain goal, assumptions, and validated terminology
- Subdomain classification
- Bounded contexts with ownership and authoritative data
- Context map and integration contracts
- Key aggregates, invariants, commands, and domain events
- Transaction and consistency boundaries
- Migration and validation plan
- Risks, unresolved language, and evidence that would change the model
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

