Stell dir vor, du planst eine neue Seilbahn: Du startest nicht beim Stahl, sondern bei den Menschen, die sie nutzen – Wege, Wartezeiten, Ziele. Genau so baut Domain-Driven Design (DDD) digitale Produkte: nicht vom Code her, sondern von der Domäne – der Welt deiner Kundinnen und Kunden. Das Ergebnis: Software, die klar, skalierbar und spürbar nützlich ist. Und ja, damit baust du Produkte, die Menschen wirklich lieben.
Was ist Domain-Driven Design (DDD)? Herkunft, Bedeutung, Nutzen
Domain-Driven Design ist ein Ansatz, den der Softwarearchitekt Eric Evans 2003 geprägt hat. Die Kernidee: Die Fachdomäne – also das Problemfeld deiner Kundschaft – ist der Nordstern für Produkt, Sprache, Architektur und Code. Statt Features „von außen“ zu stapeln, modellierst du die Fachlogik präzise und lässt Technologie ihr dienen. DDD liefert dafür Konzepte, Praktiken und eine gemeinsame Sprache zwischen Business und Technik.
Domain-Driven Design richtet Produkt und Technik konsequent an der Kundendomäne aus: Teams teilen eine gemeinsame Sprache, schneiden die Software entlang klarer Kontextgrenzen und entwickeln so fokussierte, skalierbare Lösungen mit echtem Nutzwert.
Warum DDD dir als Unternehmer, Startup oder Solo-Selbstständige:r hilft
- Schneller zum Wert: Du investierst in das, was die Domäne wirklich braucht – weniger Spielwiese, mehr Wirkung.
- Skalierbar ohne Chaos: Klare Grenzen im System verhindern die berüchtigte „Feature-Suppe“.
- Weniger Reibung: Business und Tech sprechen dieselbe Sprache; Missverständnisse und teure Fehlentwicklungen schrumpfen.
- Robust gegen Wandel: Wenn sich der Markt dreht, musst du nicht alles neu schreiben – du veränderst gezielt die betroffenen Domänen.
Kernelemente von DDD – kurz und verständlich
- Domäne: Das fachliche Problemfeld (z. B. „Wein-Abo-Vertrieb“, „Bike-Verleih“).
- Subdomänen: Teilbereiche mit eigenem Zweck: Core (dein Wettbewerbsvorteil), Supporting, Generic.
- Bounded Contexts: Klare Sprach- und Modellgrenzen, in denen Begriffe eine eindeutige Bedeutung haben.
- Ubiquitous Language: Eine gemeinsame, präzise Alltagssprache, die sich in Meetings, Tickets, Tests und Code widerspiegelt.
- Taktiken: Entitäten, Wertobjekte, Aggregate, Domain-Events, Repositories, Anti-Corruption Layer, Context Maps.
So identifizierst du Domänen, die echten Kundennutzen erzeugen
Starte nicht in der IDE, sondern am Markt. So gehst du vor:
- Jobs-to-be-Done klären: Welche „Arbeit“ will der Kunde erledigen? Beispiel: „Als Hobbykoch will ich saisonale Weine passend zu meinen Menüs entdecken.“
- Event Storming: Hänge Haftnotizen an die Wand und sammle gemeinsam die fachlichen Ereignisse (z. B. „Bestellung aufgegeben“, „Zahlung bestätigt“, „Lieferung zugestellt“). Das schafft Überblick über Abläufe und Bruchstellen.
- Domänen schneiden: Ordne Ereignisse und Regeln zu Subdomänen: Core (z. B. Personalisierung der Weinempfehlungen), Supporting (z. B. Zahlung), Generic (z. B. Authentifizierung).
- Wertflüsse skizzieren: Wo entsteht der Kundennutzen? Welche Schritte führen zum Aha-Moment? Daran orientierst du deine Roadmap.
- Risiken markieren: Wo sind Regulatorik, Haftung oder Abhängigkeiten? Diese Zonen verdienen klare Grenzen und oft einen eigenen Context.
Bounded Contexts: Dein Mittel gegen Bedeutungschaos und Monolith-Müdigkeit
Viele Teams stolpern, weil der Begriff „Kunde“ oder „Bestellung“ überall etwas anderes bedeutet. Bounded Contexts schaffen Ordnung:
- Eine Bedeutung pro Kontext: „Kunde“ im Sales-Context ist ein Lead; im Billing-Context ein zahlender Vertragspartner.
- Saubere Schnittstellen: Contexts reden via klarer APIs oder Events miteinander. Übersetzungen übernimmt ein Anti-Corruption Layer.
- Skalierungsschiene: Du startest in einem Monolithen mit Modulen pro Context und kannst später auf Microservices schneiden – ohne Neuaufbau.
Praxis-Tipp: Zeichne eine Context Map: Welche Contexts gibt es, wie hängen sie zusammen (Upstream/Downstream), wo brauchst du ACLs, wo Shared Kernel?
Ubiquitous Language: Eine Sprache für Business, Design und Code
Wenn alle dasselbe sagen und dasselbe meinen, verkürzt sich die Time-to-Value dramatisch. So etablierst du die Sprache:
- Begriffe sammeln: Aus Kundeninterviews, Tickets, Verträgen, Fehlermeldungen.
- Definitionen festlegen: „Was ist eine ‚Buchung‘? Ab wann gilt sie als ‚bestätigt‘?“
- Direkt anwenden: Nutze die Begriffe in User Stories, Akzeptanzkriterien, Testfällen, UI-Texten und Code-Namen.
- Lebendes Glossar: Ein leicht zugängliches, versioniertes Dokument – gepflegt von Business und Tech gemeinsam.
Erkennbar gut wird’s, wenn neue Teammitglieder ohne Übersetzungsschicht verstehen, worum es geht.
Praktische Muster für den Einstieg – auch im bestehenden Produkt
- Hexagonale Architektur (Ports & Adapters): Trennt Fachlogik von Infrastruktur. Erlaubt spätere Technologie-Wechsel ohne Fachbruch.
- Strangler-Pattern: Schalte Legacy-Teile schrittweise ab, indem du neue Contexts davor setzt und Traffic umlenkst.
- Anti-Corruption Layer: Isoliert dein sauberes Modell von externen oder Alt-Systemen.
- Domain Events: Fachlich benannte Ereignisse, intern oder asynchron publiziert – ideal für entkoppelte Erweiterungen.
- CQRS (wo sinnvoll): Trenne Lesen und Schreiben, wenn Abfragen und Befehle sehr unterschiedliche Anforderungen haben.
Vorgehen im Brownfield: 1) Engen Scope wählen (z. B. „Reklamationsprozess“), 2) Events und Regeln modellieren, 3) Ubiquitous Language etablieren, 4) Context-Grenze ziehen, 5) ACL bauen, 6) Metriken definieren, 7) schrittweise migrieren.
Typische Fehler – und wie du sie vermeidest
- DDD als Technik-Toolbox missverstehen: DDD ist primär fachliche Modellierung. Starte bei Sprache und Domäne, nicht bei Frameworks.
- Zuviel Microservices zu früh: Erst stabile Bounded Contexts finden, dann physisch schneiden.
- Unklare Begriffe zulassen: Jede doppelte Bedeutung kostet dich später x-fach. Entscheidungsbedarf sofort klären.
- Kontextgrenzen nach Teamzuschnitt statt Domäne: Umgekehrt denken: Domäne zuerst, Teams folgen dem Schnitt.
- „One-size-fits-all“-Modell: Ein gemeinsames Datenmodell über alles zieht dich in den Sumpf. Kontextgrenzen respektieren.
Wie du den Erfolg mit DDD misst – damit Kund:innen es wirklich lieben
- Domänen-KPIs: Metriken entlang des Wertstroms (z. B. Empfehlungs-CTR, Erstkaufzeit, Churn, Reklamations-Lead-Time).
- Qualitätsmetriken pro Kontext: Cycle Time, Defect Rate, Mean Time to Recovery – aber immer im Bezug zur Domäne.
- Outcome vor Output: Lieber „+15 % wiederkehrende Bestellungen“ als „5 neue Features“.
- Kundensignale: NPS pro Journey-Schritt, Support-Tickets nach Context klassifiziert, Wiederkaufraten segmentiert.
Einsatzbereiche im Unternehmenskontext
- E-Commerce: Katalog, Warenkorb, Zahlung, Fulfillment, Personalisierung.
- FinTech/Versicherung: Onboarding, Risikobewertung, Policen, Schadensfälle, Compliance.
- Gesundheit: Terminmanagement, Abrechnung, Befunde, Einwilligungen.
- Industrie/IoT: Auftragsabwicklung, Fertigungssteuerung, Instandhaltung, Ersatzteile.
- Mobilität/Tourismus: Buchung, Kapazitätsmanagement, Check-in, Ticketing – hier in Südtirol ein Dauerbrenner.
Verwandte Begriffe und Einordnung
- Design Thinking, Lean Startup: Großartig für Problemverständnis und Hypothesen. DDD übersetzt die Erkenntnisse in klare Modelle und Architektur.
- Clean/Hexagonale Architektur: Technische Muster, die DDD tragen. DDD liefert die fachlichen Schnitte, diese Muster stabilisieren die Umsetzung.
- Microservices: Mögliches Deployment-Modell – kein Ziel an sich. DDD hilft zu entscheiden, wo es Sinn ergibt.
- Event Storming, Domain Storytelling: Workshops zur Domänenanalyse, häufige Einstiege in DDD.
Beispiel aus der Praxis: Das Wein-Abo aus dem Eisacktal
Ein Startup kuratiert monatliche Weinboxen. Nach Event Storming zeigen sich Subdomänen: Selektion & Empfehlung (Core), Abo-Verwaltung (Supporting), Zahlung & Versand (Generic). Bounded Contexts werden entsprechend geschnitten. Die Ubiquitous Language klärt knifflige Begriffe („Lieferpause“ vs. „Abo kündigen“). Über Domain Events („Abo erneuert“, „Geschmack aktualisiert“) koppeln sie Empfehlungen entkoppelt an Abo-Änderungen. Ergebnis nach drei Monaten: +18 % Box-Annahme, -22 % Supportanfragen zum Abo-Status, Dev-Lead-Time pro Feature halbiert. Nicht wegen Magie – sondern weil Domäne, Sprache und Architektur zusammenfanden.
FAQ
Was ist Domain-Driven Design (DDD) und wie hilft es, kundenorientierte Produkte zu bauen?
DDD ist ein Ansatz, der Produkt und Technik strikt an der Kundendomäne ausrichtet. Teams entwickeln eine gemeinsame Sprache für Begriffe und Regeln, schneiden die Lösung in klar abgegrenzte Bounded Contexts und modellieren die Fachlogik präzise. So entstehen Produkte, die echte Kundenprobleme lösen, leichter zu erweitern sind und messbar mehr Wert liefern.
Wie identifiziere und modelliere ich Domänen mit echtem Mehrwert?
Starte mit Jobs-to-be-Done und Event Storming: Sammle fachliche Ereignisse entlang der Customer Journey, gruppiere sie zu Subdomänen (Core/Supporting/Generic) und skizziere den Wertstrom. Formuliere Regeln und Begriffe in einer Ubiquitous Language. Priorisiere dann Core-Domänen, denn dort entsteht dein Wettbewerbsvorteil.
Was sind Bounded Contexts – und warum machen sie Produkte skalierbar?
Ein Bounded Context definiert eine klare Sprach- und Modellgrenze. Innerhalb gilt eine eindeutige Bedeutung für Begriffe; zwischen Contexts kommunizierst du über APIs oder Events und übersetzt bei Bedarf mit einem Anti-Corruption Layer. Das verhindert Bedeutungschaos, reduziert Kopplung und erlaubt späteres Skalieren bis hin zu Microservices.
Wie etabliere ich eine Ubiquitous Language zwischen Fach- und Entwicklungsteam?
Erarbeite ein gemeinsames Glossar aus Kundeninterviews, Verträgen und Prozessen. Definiere strittige Begriffe gemeinsam und nutze sie konsequent in Stories, Tests, UI-Texten und Code. Aktualisiere die Sprache kontinuierlich und mache sie leicht zugänglich – so wird sie zur DNA deines Produkts.
Welche ersten Schritte und Muster eignen sich für den DDD-Einstieg im bestehenden System?
Wähle einen fokussierten Prozess (z. B. Reklamationen), führe Event Storming durch, schneide einen Bounded Context, implementiere ihn hexagonal und entkopple ihn mit Anti-Corruption Layer vom Legacy-System. Nutze das Strangler-Pattern, um schrittweise umzuschalten. Miss die Wirkung mit domänenspezifischen KPIs.
Welche typischen Fehler sollte ich bei der Einführung vermeiden?
Zu früh Microservices, unklare Begriffe tolerieren, Kontextgrenzen nach Teamstruktur statt Domäne schneiden, ein zentrales Datenmodell für alles erzwingen und DDD als rein technische Toolbox missverstehen. Fokus zuerst auf Sprache, Domäne und klare Grenzen.
Wie messe ich, ob DDD mein Produkt erfolgreicher macht?
Leite Outcome-Metriken direkt aus der Domäne ab: z. B. Zeit bis zum Erstwert, Conversion in Kernschritten, Fehlerraten pro Context, Wiederkaufrate, Churn, NPS je Journey-Phase. Ergänze technische Qualitätsmetriken (Cycle Time, MTTR), aber bewerte sie entlang des Wertstroms.
Wie kann der Begriff Domain Driven Design (DDD) noch genannt oder geschrieben werden?
Gängig sind Domain-Driven Design, Domain Driven Design, DDD, domänengetriebene Entwicklung, domainzentrierte Produktentwicklung, fachliche Modellierung, domänenorientierte Softwareentwicklung. Verwandte Schlagworte sind Bounded Context, Ubiquitous Language, Context Map, Aggregate, Domain Events, Anti-Corruption Layer.
Fazit: Bau zuerst Klarheit, dann Features
Wenn du die Sprache deiner Domäne schärfst, klare Kontextgrenzen ziehst und Wertströme modellierst, entsteht Fokus – und Fokus baut Produkte, die Menschen lieben. Fang klein an, miss Wirkung, iteriere mutig. Die beste Technik ist die, die deiner Domäne dient.