Lesson 1 · about 12 minutes

One word, one meaning

DDD starts with words, not with code. If two people use one word for two different things, the software gets that mix-up too.

Your win today

You find one probat8 word that has more than one meaning, and you write down one clear meaning for it.

1. The domain

Eric Evans, who named DDD: a domain is “a sphere of knowledge, influence, or activity. The subject area to which the user applies a program is the domain of the software.” — DDD Reference, p. vi

The domain is the part of the real world your software is for. For probat8, that is: wind turbines must stop at night when bats fly, so that few bats die.

The people who know this world best are the domain experts: bat biologists, consultants, wind farm companies, authorities. They are often not developers.

DDD says: the software should follow how the domain really works. So developers and domain experts must talk a lot, and they must understand each other.

2. Ubiquitous Language

“Ubiquitous Language is the term Eric Evans uses in Domain Driven Design for the practice of building up a common, rigorous language between developers and users.” — Martin Fowler. Evans adds: “Recognize that a change in the language is a change to the model.” — DDD Reference, p. 4

Ubiquitous means “found everywhere”. The Ubiquitous Language is one shared set of words that the team uses everywhere:

The rule is simple: one word, one meaning. And when the language changes, the code changes with it.

3. probat8 has a word with five meanings

Take the word operator (German: Betreiber). In probat8 it shows up with at least five meanings:

probat8’s own docs call “Betreiber” a “doubly loaded word”. The team saw the problem too.
WhereWordMeans…
Organizationsoperator, Betreibera type of organization: the company that runs the turbines
Roles on a turbine-yearBetreiberan outside person who may only upload turbine data
Admin paneloperatorinternal staff who run the app
Admin actionsoperator actiona task only that staff may start
Thresholdsoperatora comparison sign, like “<” or “≤”

Now picture a ticket: “Betreiber can’t see the data.” Which one? An operator company? An outside uploader? Your own admin? You must ask, and every question costs time. Worse: someone guesses, and builds the wrong thing.

4. The opposite problem: one thing, many names

It also goes the other way. The thing probat8 calculates (the turbine’s shutdown values for bat protection) has a different name in the docs, in the backend, in the frontend and on the screen. Four names, one thing.

Every time you cross from one part to the next, you translate in your head. That is slow, and it is where bugs hide.

5. How to fix a word

  1. Collect. Write down every meaning you find, with where you found it.
  2. Ask a domain expert. What do they mean when they say it?
  3. Pick one meaning per word. Give the other meanings their own, new words. Example: “operator company” and “data uploader”.
  4. Use it everywhere. Talk, docs, screen, code. Rename in the code when you can.
Evans: a bounded context is “a description of a boundary (typically a subsystem, or the work of a particular team) within which a particular model is defined and applicable.” — DDD Reference, p. vi

Sometimes both meanings are real and both are needed, but in different parts of the system. That is a hint for a Bounded Context: a part of the system where each word has exactly one meaning. That is a later lesson.

6. Practice

What is the domain of probat8?

The domain is the real-world problem area, not the software. Backend and frontend are how we solve it.

Who should share the Ubiquitous Language?

It is one language for the whole team, in talk and in code. That is the point: no translation.

A ticket says: “Betreiber can’t see the data.” What is the DDD move?

Guessing builds the wrong thing. English does not help: “operator” has even more meanings. Clear the word up, then name each meaning.

One thing has four names: docs, backend, frontend, screen. Why is this bad?

Each name change is a small translation in your head. Translations cost time and hide bugs.

A word has two real meanings, both needed, in two different parts of the system. This hints at…

Inside one Bounded Context, each word has one meaning. Two real meanings often mean two contexts. More on this in a later lesson.

Type the DDD name for “one shared set of words, used in talk, docs and code”.

Ubiquitous Language. “Ubiquitous” means “found everywhere”.

7. Your real-world task

At work, 5 minutes
  1. Pick one probat8 word that may have more than one meaning: “Betreiber”, “Transfer”, “verify” or “Projekt”.
  2. Ask one colleague: “What does this word mean to you?” Do not explain first.
  3. Write one line: the meaning you would pick, and a new word for the other meaning.

Tell Claude the word, the colleague’s answer and your line. The next lesson builds on it.

Read this (5 minutes)

Martin Fowler: “Ubiquitous Language”. Short and clear.

Want more? Eric Evans’ free DDD Reference (PDF): page vi (Definitions) and pages 3–4 (Ubiquitous Language). It is short but dense, so read only those pages for now.

Questions?

Something unclear? Ask Claude, your DDD teacher. No question is too small.