Logo von nextlevels
Projekt anfragen
Zurück zum Wiki

Ubiquitous Language

Zuletzt aktualisiert am

Kurz erklärt

Ubiquitous Language ist die gemeinsame, verbindliche Fachsprache, die Fachexperten und Entwickler in einem Domain-Driven-Design-Projekt teilen. Dieselben Begriffe tauchen in Gesprächen, Anforderungen, Tickets, Tests und im Quellcode auf.

Geprägt hat den Begriff Eric Evans in seinem 2003 erschienenen Buch „Domain-Driven Design: Tackling Complexity in the Heart of Software". „Ubiquitous" heißt „allgegenwärtig": Die Sprache gilt überall, wo über das Fachgebiet gesprochen oder programmiert wird.

Für CTOs und IT-Leiter im Mittelstand ist das kein akademisches Detail. Wenn Vertrieb, Fertigung und Entwicklung unter „Auftrag" drei verschiedene Dinge verstehen, entstehen Missverständnisse, falsche Features und teure Nacharbeit. Die Ubiquitous Language ist das Werkzeug, das diese Lücke schließt. Wie sich DDD insgesamt in mittelständischen Projekten einsetzen lässt, beschreibt der Beitrag Domain-Driven Design in der Praxis.

Herkunft und Bedeutung des Begriffs

Eric Evans veröffentlichte sein Buch im August 2003 bei Addison-Wesley. Die Ubiquitous Language ist dort eines der zentralen Muster: Das Team baut eine Sprache auf, die direkt auf dem Domänenmodell beruht. Martin Fowler fasst die Idee in seinem Bliki-Eintrag zur Ubiquitous Language als „common, rigorous language" zwischen Entwicklern und Anwendern zusammen. Streng muss sie sein, weil Software mit Mehrdeutigkeit schlecht umgehen kann.

Wichtig ist die Richtung der Abhängigkeit. Die Sprache ist kein nachträglich erstelltes Wörterbuch, das jemand neben das Projekt legt. Sie entsteht aus dem Modell, und das Modell entsteht aus der Sprache. Ändert sich das Verständnis der Domäne, ändern sich Begriffe und Modell gemeinsam. Evans betont, dass Fachexperten Einspruch erheben sollen, wenn ein Begriff das Fachwissen nur ungenau oder umständlich ausdrückt.

Evans hat später eine kompakte Zusammenfassung aller Muster veröffentlicht, die DDD Reference auf domainlanguage.com. Sie steht unter einer Creative-Commons-Lizenz (CC BY 4.0) frei zur Verfügung und eignet sich als Nachschlagewerk für Teams, die das Buch bereits kennen. Vaughn Vernon greift das Thema 2013 in „Implementing Domain-Driven Design" auf und zeigt, wie die Sprache in konkreten Code übersetzt wird.

Sprechen Fachbereich und IT bei dir dieselbe Sprache?

Von der Schnittstellen-Architektur bis zur Drittanbieter-Integration – maßgeschneiderte Software aus einer Hand.

Enterprise-Software-Leistungen ansehen

Warum eine gemeinsame Fachsprache so viel bewirkt

In klassischen Projekten gibt es mindestens zwei Sprachen: die Sprache des Fachbereichs und die Sprache der Entwickler. Dazwischen sitzen Übersetzer, etwa Business-Analysten, Product Owner oder ein Lastenheft. Jede Übersetzung kostet Präzision. Die Ubiquitous Language reduziert diese Übersetzungsschritte, weil alle Beteiligten dieselben Wörter mit derselben Bedeutung verwenden.

Übersetzungsverluste vermeiden

Ein Fachexperte spricht von einer „Teillieferung", das Ticket nennt es „Partial Shipment", die Datenbank hat eine Spalte split_flag und der Test prüft status == 7. Vier Begriffe für dieselbe Sache. Jeder Wechsel ist eine Gelegenheit für Fehler. Wenn stattdessen überall „Teillieferung" steht, kann ein Fachexperte einen Testnamen lesen und sofort sagen, ob die Regel stimmt.

Fachwissen im System sichern

Viele mittelständische Unternehmen hängen an wenigen Wissensträgern, die Sonderfälle und Ausnahmen im Kopf haben. Steht dieses Wissen in sprechend benannten Klassen, Methoden und Tests, überlebt es Personalwechsel. Gerade bei gewachsener Legacy-Software zeigt sich der Unterschied: Code mit Fachbegriffen lässt sich nachvollziehen, Code voller technischer Abkürzungen muss man mühsam rekonstruieren.

Dazu kommt ein Frühwarneffekt. Wenn ein Begriff im Gespräch sperrig wirkt oder Fachexperten ihn ständig umschreiben müssen, ist das oft ein Hinweis auf ein schwaches Modell. Die Sprache macht Designprobleme hörbar, bevor sie im Code teuer werden.

Gültigkeitsbereich: eine Sprache pro Bounded Context

Ein häufiges Missverständnis lautet, die Ubiquitous Language gelte für das ganze Unternehmen. Evans begrenzt sie bewusst auf einen Bounded Context, also einen klar abgegrenzten Bereich, in dem ein Modell und seine Begriffe eindeutig gelten. Martin Fowler beschreibt im Eintrag zum Bounded Context, warum ein einziges, unternehmensweites Modell in großen Domänen selten funktioniert.

Das Wort „Auftrag" zeigt es gut. Im Vertrieb ist ein Auftrag ein angenommenes Angebot mit Preis und Liefertermin. In der Fertigung ist es ein Fertigungsauftrag mit Arbeitsplan und Kapazitäten. Im Service ist es ein Einsatz beim Kunden. Alle drei Bedeutungen sind korrekt, aber eben nur in ihrem Kontext. Wer sie in ein gemeinsames Modell zwingt, erhält ein Objekt mit Dutzenden optionaler Felder, das niemand mehr versteht.

Die Grenzen zwischen den Kontexten und die Übersetzung an diesen Grenzen dokumentiert eine Context Map. Dort wird festgelegt, wie ein Vertriebsauftrag zum Fertigungsauftrag wird. Innerhalb eines Kontexts bleibt die Sprache dagegen strikt eindeutig.

So baust du eine Ubiquitous Language auf und hältst sie lebendig

Eine Fachsprache entsteht nicht in einem Meeting, sie wächst mit dem Projekt. Bewährt haben sich diese Schritte:

  1. Gemeinsam modellieren: Workshops wie Event Storming bringen Fachexperten und Entwickler an eine Wand. Alberto Brandolini hat das Format entwickelt, Details finden sich auf eventstorming.com. Die dort gesammelten Domänenereignisse wie „Wartung abgeschlossen" liefern die ersten Begriffe.
  2. Glossar pro Kontext anlegen: Jeder Begriff bekommt eine kurze Definition, ein Beispiel und gegebenenfalls verbotene Synonyme. Das Glossar liegt am besten versioniert im Repository, nah am Code.
  3. Begriffe überall verwenden: Klassen, Methoden, Events, Testnamen, API-Felder, Tickets und User Stories tragen dieselben Wörter. Code-Reviews prüfen auch die Benennung.
  4. Fachexperten einbinden: Sie lesen Testszenarien und Glossareinträge und widersprechen, wenn ein Begriff nicht passt.
  5. Abweichungen sofort klären: Taucht ein neues Synonym auf, entscheidet das Team, welcher Begriff gilt, und passt Glossar und Code an.

Begriffe ändern sich: Umbenennen gehört zur Arbeit

Eine Ubiquitous Language ist nie fertig. Neue Erkenntnisse führen zu neuen oder präziseren Begriffen. Stellt das Team fest, dass ein „Wartungsauftrag" eigentlich zwei verschiedene Dinge meint, etwa geplante Inspektion und Störungsbehebung, muss das Modell geteilt und der Code umbenannt werden. Dieses gezielte Refactoring ist kein Zusatzaufwand, es hält Sprache und Code synchron.

Moderne IDEs machen Umbenennungen im Code einfach. Schwieriger sind öffentliche Schnittstellen, Datenbankspalten und Events, die andere Systeme konsumieren. Hier helfen Versionierung, Übergangsphasen mit Alias-Feldern und eine klare Kommunikation an die abhängigen Teams.

Deutsch oder Englisch im Code? Zwei Positionen

In deutschen Unternehmen stellt sich eine Frage, die Evans' Buch kaum behandelt: In welcher Sprache stehen die Fachbegriffe im Code? Für beide Antworten gibt es gute Argumente, und die Entscheidung hängt vom Team und vom Umfeld ab.

Position 1: Deutsche Fachbegriffe im Code

Befürworter argumentieren, dass Begriffe wie „Rüstzeit", „Abnahme", „Gewährleistung" oder „Kommission" keine exakte englische Entsprechung haben. Jede Übersetzung erzeugt genau die Lücke, die die Ubiquitous Language schließen soll. Fachexperten können Testnamen direkt lesen, und das Glossar braucht keine Übersetzungsspalte. Der Nachteil: Mischcode wie getRuestzeit(), Umlaute in Bezeichnern, die je nach Tooling Probleme machen, und eine höhere Einstiegshürde für internationale oder externe Entwickler.

Position 2: Englisch durchgängig

Andere Teams schreiben konsequent Englisch, weil Frameworks, Bibliotheken und Fachliteratur englisch sind und weil internationale Kollegen ohne Deutschkenntnisse mitarbeiten. Der Code liest sich einheitlich. Der Preis ist eine Übersetzungsebene: Das Glossar muss jeden deutschen Fachbegriff verbindlich auf genau einen englischen Begriff abbilden, sonst entstehen konkurrierende Übersetzungen. Fehlübersetzungen fallen Fachexperten zudem kaum auf, weil sie den Code nicht lesen.

Viele Teams wählen einen Mittelweg: technisches Vokabular wie Repository, save oder Handler auf Englisch, Fachbegriffe auf Deutsch. Entscheidende Kriterien sind die Zusammensetzung des Teams, die Frage, ob Fachexperten Tests lesen sollen, und wie gut sich die Domänenbegriffe übersetzen lassen. Wichtig ist nur, dass die Entscheidung bewusst getroffen und im Glossar festgehalten wird.

BDD und Gherkin: die Sprache ausführbar machen

Behaviour-Driven Development (BDD) ist ein praktisches Werkzeug, um die Ubiquitous Language in Tests zu verankern. Dan North stellte BDD 2006 im Artikel „Introducing BDD" vor. Laut der Cucumber-Dokumentation wurde das Given/When/Then-Schema ausdrücklich von der Ubiquitous Language aus Evans' Buch beeinflusst.

Die Beschreibungssprache Gherkin ist laut Gherkin-Referenz von Cucumber in über 70 Sprachen verfügbar. Mit der Kopfzeile # language: de lauten die Schlüsselwörter unter anderem „Funktionalität", „Szenario", „Angenommen", „Wenn" und „Dann". So entstehen Akzeptanzkriterien, die Fachexperten lesen und Entwickler automatisiert ausführen:

# language: de
Funktionalität: Serviceeinsatz abschließen
  Szenario: Abschluss ohne unterschriebenes Abnahmeprotokoll
    Angenommen ein Serviceeinsatz ist im Status "laufend"
    Wenn der Techniker den Einsatz ohne Kundenunterschrift abschließen will
    Dann wird der Abschluss abgelehnt

Der Mehrwert liegt in der Sprache, nicht im Tool. Wenn die Szenarien andere Wörter benutzen als der Code, hat BDD seinen Zweck verfehlt.

Beispiel: Fachsprache im Code bei einem Maschinenbauer

Das folgende Beispiel ist fiktiv. Ein Maschinenbauer entwickelt eine Software für seinen technischen Kundendienst. Im Service-Kontext haben Fachbereich und Entwicklung diese Begriffe festgelegt:

Fiktives Beispiel: Glossarbegriffe, ihre Umsetzung im Code und typische Anti-Patterns
Begriff im GlossarIm CodeFalsch (Anti-Pattern)
ServiceeinsatzServiceeinsatzJob, Ticket, Order im Wechsel
Einsatz abschließenabschliessen(protokoll)updateStatus(id, 4)
AbnahmeprotokollAbnahmeprotokolldoc, attachment2
ErsatzteilanforderungErsatzteilanforderungOrderItem aus dem Vertriebskontext
Wartung abgeschlossen (Ereignis)WartungAbgeschlossenStatusChangedEvent

Der Unterschied wird im Code sichtbar. Die erste Funktion ist technisch korrekt, verrät aber nichts über die Fachregel. Die zweite Variante benennt die Absicht und macht die Regel aus dem Gherkin-Szenario direkt lesbar:

// Unklar: technische Namen, die Fachregel steckt in Magic Numbers
function update(o: Order, s: number): void {
  if (s === 4 && o.doc) {
    o.status = s;
  }
}

// Fachsprache: der Code sagt, was im Kundendienst passiert
type EinsatzStatus = "geplant" | "laufend" | "abgeschlossen";

class Serviceeinsatz {
  private status: EinsatzStatus = "geplant";

  abschliessen(protokoll: Abnahmeprotokoll): WartungAbgeschlossen {
    if (!protokoll.istVomKundenUnterschrieben()) {
      throw new AbnahmeFehlt(this.id);
    }
    this.status = "abgeschlossen";
    return new WartungAbgeschlossen(this.id, protokoll.datum);
  }
}

Dasselbe Prinzip funktioniert mit englischen Namen wie ServiceCall.complete(), solange das Glossar die Zuordnung verbindlich festlegt. Entscheidend sind sprechende Namen, die eine Fachhandlung ausdrücken, statt generischer Verben wie update oder process.

Typische Fehler bei der Ubiquitous Language

  • Glossar ohne Codebezug: Ein Wiki-Glossar, das niemand pflegt und das im Code nicht auftaucht, bleibt Dekoration.
  • Eine Sprache für das ganze Unternehmen: Wer „Kunde" oder „Auftrag" unternehmensweit vereinheitlichen will, erzeugt aufgeblähte Modelle. Jeder Bounded Context braucht seine eigene Sprache.
  • Entwicklerjargon als Fachsprache: Begriffe wie „Entity", „DTO" oder „Flag" gehören nicht in die Gespräche mit dem Fachbereich.
  • Synonyme dulden: Wenn „Einsatz", „Auftrag" und „Termin" dasselbe meinen sollen, muss das Team sich auf einen Begriff festlegen.
  • Fachexperten außen vor lassen: Eine Sprache, die nur Entwickler definieren, ist keine gemeinsame Sprache.
  • Umbenennen scheuen: Veraltete Namen im Code, weil das Umbenennen lästig erscheint, lassen Sprache und Modell auseinanderdriften.

Häufige Fragen zu Ubiquitous Language

Was ist der Unterschied zwischen Ubiquitous Language und einem Glossar?

Ein Glossar ist ein Dokument. Die Ubiquitous Language ist die gelebte Sprache des Teams, die in Gesprächen, Tickets, Tests und Code gleichermaßen verwendet wird. Das Glossar ist ein Hilfsmittel, um diese Sprache festzuhalten. Ohne Verwendung im Code bleibt es wirkungslos.

Brauche ich Domain-Driven Design, um eine Ubiquitous Language zu nutzen?

Nein. Der Begriff stammt aus DDD, aber jedes Softwareprojekt profitiert davon, wenn Fachbereich und Entwicklung dieselben Begriffe verwenden. Ihre volle Wirkung entfaltet die Sprache allerdings zusammen mit einem bewusst gestalteten Domänenmodell und klaren Bounded Contexts.

Wer ist für die Ubiquitous Language verantwortlich?

Das gesamte Team, bestehend aus Fachexperten und Entwicklern. In der Praxis hilft es, wenn eine Person, etwa der Product Owner, Änderungen am Glossar koordiniert. Entscheidungen über Begriffe trifft das Team aber gemeinsam, und Code-Reviews achten auf die Einhaltung.

Wie fange ich in einem bestehenden System an?

Beginne mit dem Kontext, an dem gerade aktiv entwickelt wird. Sammle in einem Workshop die wichtigsten Begriffe, lege ein kleines Glossar an und benenne neuen Code konsequent danach. Bestehenden Code passt du schrittweise an, sobald du ihn ohnehin anfasst.

Weiterführende Artikel