Architecture & System Design › Domain-Driven Design
Ubiquitous Language
One shared vocabulary between developers and domain experts.
Also known as: ubiquitous language, shared language, domain language
Ubiquitous Language is the shared vocabulary spoken by developers, domain experts and the code alike: the same words for the same concepts in conversation, documentation and class names. When the business says “settlement” and the code says PayoutBatch, every discussion pays a translation tax — and mistranslations become bugs.
expert: "an order is reserved, then captured"
code: Order.reserve() → Order.capture() (same words, same model)
Building it means modelling sessions with experts (see event storming), challenging ambiguous terms (“account” meaning three things), and refactoring code toward the language relentlessly. The language is bounded: each bounded context owns its dialect, and the context map records how dialects translate.
The classic mistakes:
- Technical dialect in the model.
OrderDTOProcessorManagerspeaks framework, not domain. Class and method names should be explainable to the expert without translation. - One vague word, many meanings. “User,” “account,” “transaction” each meaning three things guarantees miscommunication. Split the terms or qualify them per context.
- Language diverging from code. The model evolves in conversation while code keeps old names; within months nobody trusts either. Refactor names as the language sharpens.
- Experts excluded. Developers inventing domain terms alone build a dialect nobody in the business speaks — then act surprised at wrong requirements.
- Cross-context leakage. Using one context’s terms inside another smuggles assumptions across boundaries. Each context guards its dialect; translation happens at the boundary.
- Documentation in a third dialect. Wikis describing what neither code nor experts say create a third source of truth. Docs quote the language; code embodies it.
How to grow it: model with experts, name code from the conversation, split ambiguous terms, and bound dialects per context. The language is the model made audible — invest in it like design, because it is.