Skip to content
Latticework
Esc
Try
No. 070People, Org & Influence

Ubiquitous Language

Use one vocabulary, shared by domain experts and developers, in conversation, documents and code alike.

When experts and code use the same words, a sentence in a meeting maps straight to the model, and misunderstandings show up early.

To an executive

When the business and the builders use different words for the same thing, meaning is lost and costly errors reach customers. One shared vocabulary removes that gap.

To an engineer

Use the domain experts' terms in conversation, documents, class names and tests within each bounded context. When the language changes, change the code to match.

The idea

In Domain-Driven Design, Eric Evans argues that a team should build a common, rigorous language with the domain experts and use it everywhere: in conversations, diagrams, documents, and the names of classes, methods and tests.

The language is not handed down by the business or invented by developers. It grows as the team learns, and the model in the code changes when the language does.

It applies within a bounded context. The same word can rightly mean different things in different contexts; the language makes that explicit instead of papering over it.

Why it works

Translation loses meaning. Every time someone maps "the business word" to "the code word", details get dropped. One language removes the translation step.

Ambiguity surfaces early. When people must agree on a precise term, they discover that "customer" or "order" meant three different things before that difference reaches production.

Experts can check the design. If the model reads in their words, domain experts can spot what is wrong with it.

Where it applies

  • Domain modelling and design reviews, where names will become code.
  • Workshops with the business, such as event storming, where terms are discovered.
  • Integrations between contexts, where the same word must be translated deliberately.

How to apply

  1. Listen for the words experts actually use, and write them down with a one-line definition.
  2. Challenge vague or overloaded terms until everyone agrees on one meaning.
  3. Rename the code when the language changes, so the two never drift apart.
  4. Mark context boundaries where a term changes meaning, and translate there on purpose.

Example scenario

An insurer's claims team kept shipping features that missed the point. In a modelling session, it turned out "policy" meant the signed contract to underwriters, the product template to marketing, and a database row to developers.

The team agreed that inside the claims context policy meant the contract in force on the day of the loss, renamed the classes to match, and introduced product for the template. Requirements discussions became shorter, and the next two features shipped without rework.

Questions to ask

  • Would a domain expert recognise the names in this design and code?
  • Which word means different things to different people in this room?
  • Where does our code use a term the business never says?

When not to use it

  • Purely technical components such as logging or caching, where there is no business vocabulary to share.
  • Across the whole enterprise: forcing one meaning for every word across all contexts creates a vague, lowest-common-denominator model.

How it misleads you

A glossary nobody uses is not a ubiquitous language. If the words live only in a wiki and not in the code and conversations, the team still translates — it just pretends not to.

Further reading

Last reviewed · Suggest an improvement