# Domain-Driven Design

> Model software around the language, rules, and boundaries of the problem domain.

- HTML version: https://robbiepalmer.me/ideas/domain-driven-design
- Source: https://www.domainlanguage.com/ddd/

Domain-Driven Design treats the domain model as a product of sustained collaboration between domain
experts and software builders. The model lives in code and language, not in a diagram handed over
before development begins.

Its most useful move is admitting that one universal model is often worse than several explicit
ones. A term can mean different things in different [bounded contexts](/ideas/bounded-context). A
context map then describes how those models meet and where translation belongs.

I care less about reproducing every named tactical pattern than about keeping language honest. If
the team, interface, database, and user all use the same word for different concepts, the design is
already accumulating ambiguity.

## Questions it prompts

* What language do the people doing the work already use?
* Where does the meaning of a term change?
* Which rules belong together and which should stay behind a translation boundary?

## Related ideas

- [Bounded Context](https://robbiepalmer.me/ideas/bounded-context.md): An explicit boundary within which one domain model and its language have a consistent meaning.
- [Code Scaffolding](https://robbiepalmer.me/ideas/code-scaffolding.md): Generating repeatable source, configuration, documentation, and project structure from declared inputs.
- [Data Mesh](https://robbiepalmer.me/ideas/data-mesh.md): A decentralised approach to analytical data built on domain ownership, data products, a self-serve platform, and federated governance.
- [EventStorming](https://robbiepalmer.me/ideas/eventstorming.md): A collaborative workshop method for discovering how a domain behaves by mapping events and the forces around them.
- [Intelligent Document Processing](https://robbiepalmer.me/ideas/intelligent-document-processing.md): A pipeline that turns varied documents into validated, structured data by combining recognition, language understanding, and workflow rules.
- [Logical empiricism](https://robbiepalmer.me/ideas/logical-empiricism.md): A movement that used logic and analysis to connect scientific claims with public evidence and to clarify the role of philosophy.
- [Ontology Engineering](https://robbiepalmer.me/ideas/ontology-engineering.md): The practice of defining the concepts, relationships, constraints, and shared vocabulary needed to represent a domain.

## Where it appears

- Project: [Intelligent Document Processing](https://robbiepalmer.me/projects/intelligent-document-processing.md)
- Blog post: [The Philosophy of Data Science](https://robbiepalmer.me/blog/2022-03-02-the-philosophy-of-data-science.md)

---

Markdown index of this site: https://robbiepalmer.me/llms.txt
