Der aktuelle State of the Art im Software Engineering ist untrennbar mit Künstlicher Intelligenz verbunden. Wo früher erhebliche Zeit in das Durchforsten von Bibliotheks-Dokumentationen, das Schreiben von repetitivem Boilerplate-Code oder das mühsame Aufsetzen technischer Grundgerüste floss, liefern Copiloten heute in Sekundenschnelle erste Lösungsvorschläge. Das reine Beherrschen einer Programmiersprache, also das Wissen um die exakte Grammatik und die verfügbaren Standard-APIs, verliert deutlich an Bedeutung, da die Maschine diese Zusammenhänge auf Abruf bereitstellt. Der Begriff Copilot steht in dieser Serie stellvertretend für KI-gestützte Coding-Agents, sei es GitHub Copilot, JetBrains Junie, Cursor, Claude Code oder ein anderes Werkzeug. Die Argumentation gilt für alle gleichermaßen, weil sie auf der gemeinsamen Funktionsweise und nicht auf einem konkreten Produkt aufbaut.
Vom Coder zum Architekten und Prüfer
Mit diesem Wandel verschiebt sich der Fokus. Die präzise Spezifikation rückt ins Zentrum der Arbeit. Es keimt die verlockende Vision auf, direkt von einer fachlichen Beschreibung zur fertigen technischen Lösung zu springen. Doch Vorsicht ist geboten: Die KI glänzt zwar durch syntaktisch korrekten und lauffähigen Code, nutzt diese Fähigkeit aber oft, um Lücken in einer ungenauen Spezifikation „kreativ” (und potenziell fachlich falsch) zu schließen. Der Mensch verlässt zunehmend die Rolle des Schreibenden und wird zum Architekten und Prüfer. Um diese Rolle auszufüllen, ist ein tieferes Verständnis der fachlichen Konzepte und architektonischen bzw. Softwaredesignvorgaben notwendiger denn je.
Agilität in Zeiten der Generierung
Trotz der Geschwindigkeit der KI bleibt Agilität der entscheidende Erfolgsfaktor. Warum?
- Perfekte Anforderungen sind eine Illusion: Es war noch nie möglich, zu Projektbeginn perfekte Anforderungen zu erheben.
- Lernen durch Tun: Der eigentliche Erkenntnisgewinn über fachliche Zusammenhänge entsteht erst während des Entwicklungsprozesses. Und Agilität ist die Disziplin, die daraus entstehendes Wissen kontinuierlich in das Projekt zurückführt.
- Permanenter Wandel: Anforderungen und Rahmenbedingungen ändern sich heute schneller als je zuvor. Change kommt verstärkt von außen, die Welt dreht sich weiter.
Wir müssen Systeme also ständig anpassen und überprüfen. Genau hier wird Softwaredesign zur Voraussetzung von Agilität: Erst anpassbare und erweiterbare Strukturen machen das ständige Reagieren auf neue Erkenntnisse und veränderte Rahmenbedingungen wirtschaftlich tragfähig. Das gilt auf allen Ebenen der Architektur, im Rahmen dieser Artikelserie aber besonders für das Softwaredesign der Geschäftsdomäne.
Warum Tests und reine Fachprüfung allein nicht ausreichen
Es wäre jedoch zu kurz gegriffen, die neue Rolle des Menschen allein auf das Abgleichen von fachlichen Anforderungen mit den KI-Ergebnissen zu reduzieren. Ein funktionierendes System ist mehr als die Summe seiner generierten Funktionen. Es benötigt eine innere Ordnung. Wer sich blind auf die KI verlässt, erhält zwar lauffähige Bausteine, verliert aber das Systemverständnis für deren Zusammenspiel. In dieser Lücke zwischen „Code, der irgendwie funktioniert” und „nachhaltigem Softwaredesign” offenbart sich das Risiko der KI-gestützten Entwicklung.
Oft wird die Testabdeckung als Rettungsanker ins Feld geführt. Doch hier ist Vorsicht geboten: Eine 100%ige Testabdeckung ist in der Praxis eine Illusion und oft gar nicht sinnvoll. Vor allem aber heilt sie kein schlechtes Design. Wenn ein Test fehlschlägt, ist das lediglich ein Symptom. Ohne ein tiefes Verständnis des zugrunde liegenden Softwaredesigns lässt sich kaum beurteilen, ob wir lediglich ein technisches Detail korrigieren müssen oder ob das gesamte Konzept in sich widersprüchlich ist und angepasst werden muss. Ein Designdefizit führt zu handfesten Risiken: eine strukturelle Erosion des Codes, der Verlust des mentalen Modells beim Entwickler und eine schleichende logische Inkonsistenz, die durch oberflächliche Tests nicht abgefangen wird.
Taktisches DDD als Ordnungsprinzip
Hier tritt das taktische Domain-Driven Design (taktisches DDD) auf den Plan. Während das strategische DDD den Blick auf die großen fachlichen Zusammenhänge richtet, bietet das taktische DDD konkrete Entwurfsmuster für die Implementierung innerhalb einer Domäne.
Kurz gefasst ist taktisches DDD ein formaler Werkzeugkasten, um fachliche Regeln (Invarianten) direkt in die Struktur des Codes zu gießen. Statt Logik willkürlich über das System zu verstreuen, nutzt es spezifische Bausteine:
- Entities: Objekte mit einer eindeutigen Identität, die einen Lebenszyklus durchlaufen (z. B. ein „Kunde”).
- Value Objects: Unveränderliche Objekte, die durch ihre Werte definiert sind (z. B. eine „IBAN” oder ein „GeldBetrag”). Sie sind der Schlüssel zur Vermeidung technischer Primitive.
- Aggregates: Eine Gruppe von Objekten, die als Einheit betrachtet werden. Das sogenannte Aggregate Root garantiert als einzige Zugriffsschnittstelle, dass alle fachlichen Regeln innerhalb dieser Gruppe jederzeit eingehalten werden.
- Domain Services: Ort für Fachlogik, die nicht sinnvoll in eine einzelne Entity oder ein Value Object passt.
Diese Bausteine sorgen für Strukturen, die das Verständnis und die Wartbarkeit spürbar verbessern. Eine detaillierte Analyse dieser Bausteine und weiterer Bausteine sowie deren Implementierung im Zusammenspiel mit KI folgt in den Folgeartikeln dieser Serie anhand eines konkreten Praxisbeispiels.
Bevor wir dann die Vorteile von taktischem DDD im Rahmen KI-gestützter Softwareentwicklung etwas genauer betrachten, noch ein Blick auf einen verwandten, aktuell stark diskutierten Aspekt.
Der „Battle of Truth”: Domänenmodell vs. Spezifikation
In der aktuellen Architektur-Community tobt ein spannender Streit: Was ist die eigentliche Single Source of Truth? Die Fronten unterteilen sich dabei wie folgt:
- Die Spec-Sovereignty-Fraktion: Sie argumentiert, dass die Spezifikation (z. B. in Form von strukturierten Markdown-Modellen, Mermaid-Diagrammen oder Agent-Blueprints) die Wahrheit ist. Der Java-Code ist (bald) nur noch ein „Artefakt”, das von einer KI aus der Spec generiert wird.
- Die Code-Sovereignty-Fraktion (Klassisches DDD): Sie beharrt darauf, dass nur der Code die Wahrheit ist, da nur er die tatsächliche Laufzeit-Realität abbildet. Eine Spec kann lügen (ggf. einfach nur veraltet sein); Code tut es nicht.
Warum die Code-Souveränität das stabilere Fundament bleibt
Es spricht vieles dafür, dass das Primat des Codes bestehen bleibt – nicht aus Technikverliebtheit, sondern aus drei fundamentalen Gründen:
- Realität zur Laufzeit: Der Code ist das einzige Artefakt, das tatsächlich ausgeführt wird. Alles davor ist Intention, alles danach Beobachtung. Eine Spezifikation beschreibt, was sein soll; der Code beschreibt, was ist.
- Deterministische Verarbeitung: Ein Compiler liefert bei gleicher Eingabe immer dasselbe Ergebnis. Generative Modelle tun das nicht, nicht einmal annähernd. Diese Lücke zwischen Spec und Laufzeit muss durch den Code selbst geschlossen werden, durch die Art, wie er strukturiert ist. Taktisches DDD verfolgt dabei eine klare Grundhaltung: Die Fachlichkeit soll möglichst explizit im Code abgebildet werden, nicht zwischen den Zeilen mitgedacht oder in Konventionen verborgen. Value Objects und Aggregates sind die konsequente Umsetzung dieser Haltung: Sie kapseln Invarianten so, dass die fachliche Wahrheit nicht in einem variablen LLM-Output liegt, sondern im typisierten, kompilierten Code.
- Präzision in begrenzten Kontexten: Eine textuelle Spezifikation kann Mehrdeutigkeiten enthalten, ohne dass es jemandem auffällt. Ein Typsystem kann das nicht, Money und BigDecimal sind verschiedene Dinge, und der Compiler zwingt zur Entscheidung. Diese Präzisionstiefe lässt sich allerdings nur dort erreichen, wo der Kontext überschaubar bleibt. Genau das leisten DDD-Bausteine: Ein Aggregate definiert eine klar abgegrenzte Verantwortungsgrenze, innerhalb derer sowohl Mensch als auch KI mit hoher Genauigkeit arbeiten können. Ohne solche Grenzen verliert sich jede Implementierung, egal ob von Hand geschrieben oder generiert, in der Komplexität des Gesamtsystems. Im Sinne des taktischen DDD ist der Code die exakteste und detailreichste Abbildung des Fachmodells. Hier werden Invarianten und Business-Regeln, Strukturen und Abläufe in einer Tiefe definiert, die eine rein textuelle Spezifikation kaum erreichen kann.
Die empirischen Belege für diese Grenzen aktueller LLMs, Nicht-Determinismus, Reasoning Failures, Kontext-Erosion, fassen wir im Kasten „Wissenschaftliche Evidenz: Warum die KI klare Strukturen braucht” zusammen.
Wissenschaftliche Evidenz: Warum die KI klare Strukturen braucht
Die im Haupttext genannten LLM-Schwächen sind empirisch belegt. Drei aktuelle Befunde sind für die DDD-Argumentation besonders relevant:
- Nichtdeterminismus trotz Temperature 0 [2]: Selbst bei Temperature 0, also der Einstellung, die theoretisch Determinismus garantiert, variieren Cloud-LLM-Ausgaben signifikant. Implikation: Reproduzierbarkeit muss durch deterministische Abbildung der Fachlichkeit im Code erzwungen werden, unter anderem durch Typen, Tests, Guard-Clauses und Aggregate-Grenzen, nicht durch Prompt-Tuning.
- Lost-in-the-Middle bei langen Kontexten [3]: Informationen in der Mitte langer Prompts werden de-priorisiert. Implikation: Kontextfenster klein halten. Also exakt das, was die Kapselung in DDD-Bausteinen erreicht. Aggregate-Grenzen sind dafür das prominenteste Beispiel; Value Objects, Domain Services und andere Bausteine wirken auf derselben Ebene.
- Reasoning-Failures bei mehrstufiger Logik [4]: LLMs operieren statistisch, nicht deduktiv. Reasoning-Modelle und Agent-Ketten haben das Risiko von Schlussfolgerungs-Fehlern deutlich reduziert, eliminiert haben sie es nicht. Implikation: Der Prompt ist die Anweisung, der Code ist die Wahrheit. Geschäftsregeln können und sollen in Prompts vorkommen. Verbindlich werden sie aber erst dort, wo Aggregates und Assertions sie maschinell erzwingen. Mit jeder Erweiterung verschiebt sich das Gesamtzusammenspiel, und nur die im Code geprüften Regeln sichern die Konsistenz über die Zeit.
Engineering statt Illusion: Das Zusammenspiel der Wahrheiten
Dabei darf man sich keinen Illusionen hingeben: Weder eine perfekte Spezifikation noch eine lückenlose Testabdeckung sind in der Praxis wirklich erreichbar. Dennoch bleiben beide Säulen für qualitativ hochwertiges Software-Engineering unverzichtbar.
Eine saubere, strukturierte Spezifikation ist nach wie vor das Fundament jeder professionellen Entwicklung, sie ist die Quelle der Absicht. Doch so präzise sie auch sein mag, es bleibt aus den genannten Gründen (Nicht-Determinismus der KI, logische Unschärfen, Schwierigkeiten beim Umgang mit großen Kontexten) schwierig, die Spezifikation als die einzige Wahrheit anzusehen. Ebenso verhält es sich mit Tests: Eine 100%ige Abdeckung ist oft eine ökonomische und theoretische Illusion. Dennoch sind Unit-Tests kein optionaler Luxus, sondern essenzielles Engineering. Sie bilden die pragmatische Brücke, um die Kluft zwischen der Spezifikation und der tatsächlichen Ausführung so gering wie möglich zu halten.
Wenn wir akzeptieren, dass weder die Spec unfehlbar noch der Test lückenlos ist, rückt ein dritter Faktor ins Zentrum: Aufbau und Struktur des Codes. Nur weil wir nicht mehr jede Zeile von Hand schreiben, verliert Softwaredesign nicht an Bedeutung, im Gegenteil. Der strukturelle Aufbau beeinflusst maßgeblich die entscheidenden Qualitätsparameter, wie Änderbarkeit und Erweiterbarkeit.
Es ist ein gefährlicher Trugschluss zu glauben, dass Wartbarkeit im Zeitalter der KI „kostenlos” oder vernachlässigbar sei. Ein schlecht strukturierter „Big Ball of Mud” lässt sich auch mit KI-Unterstützung nur unter hohem Risiko und hohem Aufwand anpassen. Die kognitive Last beim Refactoring und die Gefahr von Seiteneffekten steigen ohne sauberes Design überproportional an, unabhängig davon, wer oder was die Tastatur bedient.
Da eine lückenlose formale Verifikation meist am Aufwand scheitert oder an theoretische Grenzen stößt, bleibt der Code die einzige finale Instanz der Wahrheit. Er ist die detailreichste Abbildung der Fachlichkeit. Aber nur dann, wenn die Codebasis selbst aufgeräumt und nachvollziehbar strukturiert ist. Ohne diese strukturelle Qualität funktioniert weder klassische Wartung noch KI-gestützte Weiterentwicklung. Für die Geschäftslogik fachlich getriebener Domänen liefert taktisches DDD diese Qualität auf besonders wirksame Weise: Es gibt dem Code eine Struktur, die ihn kontrollierbar, prüfbar und vor allem langfristig änderbar macht. In der Welt des DDD bleibt der Code damit das „Living Document”, das die Realität der Domäne widerspruchsfrei abbildet.
Reasoning-Modelle und Agenten: Was sich ändert, was bleibt
Man könnte einwenden: Die hier beschriebenen LLM-Schwächen seien Stand 2024, längst eingeholt durch Reasoning-Modelle und agentische Systeme. Tatsächlich hat sich vieles bewegt. Modelle mit explizitem Reasoning-Schritt zeigen in formalen Logikaufgaben, mathematischen Beweisen und mehrstufigen Schlussfolgerungen deutlich bessere Ergebnisse als die Generation davor. Agentische Systeme können Code ausführen, Tests laufen lassen, Fehler beobachten und ihren Ansatz korrigieren. Sie sind nicht mehr auf einen einzigen Generierungsschritt ohne Rückkopplung angewiesen. Das verändert die DDD-Argumentation an einer Stelle und stärkt sie an einer anderen.
Verändert hat sich der Punkt der reinen Reasoning-Defizite. Ein modernes Reasoning-Modell wird einen Aggregate-Konsistenz-Check, der sich aus drei verschachtelten Invarianten ergibt, in vielen Fällen korrekt durchdenken. Das war 2024 noch eine zuverlässige Fehlerquelle, 2026 nicht mehr durchgängig. Auch die Halluzination einzelner API-Aufrufe ist seltener geworden, weil agentische Systeme ihre Annahmen gegen die echte Codebasis prüfen können.
Gestärkt hat sich dagegen das Kontextargument, und das ist die wichtigere Beobachtung. Agentische Systeme arbeiten typischerweise mit deutlich größeren Kontextfenstern und über längere Zeiträume hinweg. Sie lesen Dateien, planen mehrstufige Änderungen, schreiben über Modulgrenzen hinweg. Dass moderne Kontextfenster eine Million Tokens umfassen, ändert daran weniger als erwartet: Was zählt, ist nicht die theoretische Größe, sondern der effektive Aufmerksamkeitsspielraum, in dem verlässlich verschachtelt geschlussfolgert werden kann. Genau in diesem Modus wird die Strukturqualität der Codebasis zum Engpass. Ein Agent, der eine unstrukturierte Codebasis analysieren soll, verzweigt sich in Abhängigkeiten, bis sein effektiver Kontext kollabiert. In einer sauber geschnittenen Aggregate-Landschaft kann er dagegen präzise innerhalb einer Verantwortungsgrenze arbeiten. Je autonomer die KI wird, desto teurer wird schlechtes Design, nicht billiger.
Hinzu kommt ein zweiter Effekt: Reasoning-Modelle und Agenten sind teuer. Pro Aufruf, pro Token, pro Werkzeugzyklus. Wer ihnen einen sauber strukturierten Kontext liefert, bekommt das Ergebnis in einem Bruchteil der Schritte. Taktisches DDD wird damit nicht nur zur Qualitäts-, sondern auch zur Kosten-Frage.
Die Pointe bleibt also dieselbe, aber sie verschiebt sich. War taktisches DDD 2024 vor allem ein Korrektiv für schwache Generierung, ist es 2026 ein Verstärker für starke Autonomie. Eine gute KI in einem schlechten Design produziert schneller schlechte Software. Eine gute KI in einem DDD-konformen Design produziert schneller gute Software. Der Hebel ist immer die Struktur des Codes. Nur die Geschwindigkeit, mit der dieser Hebel wirkt, ist gewachsen.
Strategische Relevanz: Taktik nur für das Herzstück
Die bisherige Argumentation verdeutlicht: Softwareentwicklung ist ein evolutionärer Prozess, der von ständiger Anpassung und der permanenten Prüfung (insbesondere auch der Prüfung von abstrakten Qualitätsparametern wie Anpassbarkeit, Erweiterbarkeit oder Wartbarkeit) lebt. Damit dieser Prozess nicht im Chaos versinkt, muss der Code eine Struktur aufweisen, die Anpassbarkeit, Erweiterbarkeit und Nachvollziehbarkeit ermöglicht. Doch hier ist Differenzierung gefragt, denn nicht jeder Code verdient den gleichen Grad an gestalterischer Akribie.
Im Kontext von Domain-Driven Design unterscheiden wir zwischen verschiedenen Subdomains. Während Generic Subdomains (z. B. Finanzbuchhaltung) oft mit Standardlösungen oder Supporting Subdomains (z. B. einfache Daten-CRUD-Module) mit einfacheren Mitteln wie Low-Code-Tools abgedeckt werden können, ist die Core Subdomain das eigentliche Herzstück. Hier liegt die Logik, die den Wettbewerbsvorteil des Unternehmens ausmacht.
Genau hier entfaltet taktisches DDD seine volle Stärke. Es eignet sich besonders für
- Komplexe Businesslogik: Systeme mit tief verschachtelten Regeln und hohen Anforderungen an die Datenintegrität.
- Langlebige Software: Projekte, die über Jahre gewartet und deren Fachmodelle stetig erweitert werden müssen.
- Kritische Systeme: Überall dort, wo ein falscher Zustand (Invalid State) fatale wirtschaftliche oder technische Folgen hat.
Konkrete Anwendungsfelder, in denen sich der Einsatz immer wieder bewährt hat:
- Finanzsysteme: Sicherstellung von Transaktions-Invarianten, die niemals durch KI-generierte Seiteneffekte korrumpiert werden dürfen.
- Logistik-Plattformen: Modellierung von hochdynamischen Zuständen, bei denen die Konsistenz über Zeit- und Ortsdaten nur durch strikte Aggregate-Grenzen gewährleistet werden kann.
- Versicherungs-Engines: Abbildung komplexer Tarife, bei denen die Fachlogik so tief im Modell verwoben ist, dass eine einfache CRUD-Struktur sofort zu teuren Berechnungsfehlern führen würde.
- E-Government: Absicherung formal-juristischer Prüflogiken. Taktisches DDD verhindert, dass KI-generierter Code rechtsverbindliche Invarianten in Verwaltungsverfahren (z. B. Bewilligungskriterien) durch unzulässige Heuristiken aufweicht.
- Energy & Utilities: Verwaltung dezentraler Energieströme und Bilanzkreise. Hier garantieren klare Domänengrenzen, dass KI-optimierte Laststeuerung nicht gegen physikalische Netzrestriktionen oder komplexe regulatorische Abrechnungsmodelle verstößt.
Taktisches DDD ist jedoch keine „Silver Bullet”. Für einfache Web-Apps, reine Daten-Pipelines oder Prototypen mit kurzer Lebensdauer kann der Overhead von Aggregates und Value Objects zu groß sein. In solchen Fällen ist ein simplerer, datenzentrierter Ansatz oft wirtschaftlicher. Wer DDD auf ein triviales Problem wirft, baut eine „Over-Engineering”-Falle, in der die Komplexität des Designs die Komplexität des Problems übersteigt.
Drei Hebel: Wie taktisches DDD den Copiloten führt
Taktisches DDD adressiert die typischen Schwächen generativer Erzeugung durch drei Klassen von Mechanismen: strukturelle, semantische und absichernde, die jeweils ein anderes Risiko der KI-gestützten Entwicklung abfangen.
- Strukturelle Mechanismen: Modularisierung statt Vermischung. Ohne explizite strukturelle Vorgaben füllt die KI das Design-Vakuum mit dem, was statistisch wahrscheinlich ist, oft prozedurale Klassen mit vermischten Verantwortungen und enge, starre Abhängigkeiten zwischen fachlich eigentlich unabhängigen Prozessen. Aggregates erzwingen fachliche Modularisierung und definieren klare Verantwortungsgrenzen; Domain Events brechen starre Strukturen auf, indem Folgeprozesse nicht direkt aufgerufen, sondern als isolierte Handler auf veröffentlichte Ereignisse (z. B. OrderPlaced) reagieren. Side-Effect-Free Functions, also nebenwirkungsfreie Methoden, die nur Werte zurückgeben, ohne den Zustand des Aggregates zu verändern, trennen Berechnung von Zustandsänderung (Command-Query Separation) und verhindern, dass die KI Logik und Seiteneffekte zu unentwirrbaren Methoden vermischt. Der Begriff stammt von Eric Evans und beschreibt eine zentrale Grundhaltung des taktischen DDD: Wo es möglich ist, soll Verhalten vorhersagbar bleiben, indem es nichts verändert. Aus genau dieser Haltung leiten sich auch Value Objects ab, die ihre Unveränderlichkeit nicht zufällig haben, sondern als konsequente Anwendung desselben Prinzips. Diese strukturelle Klarheit hat einen praktischen Nebeneffekt: Da Fachlogik in dedizierten Bausteinen gekapselt ist, muss dem Copiloten nur ein kleiner, hochrelevanter Codeausschnitt präsentiert werden. Das minimiert „Lost-in-the-Middle”-Effekte und Halluzinationen.
- Semantische Mechanismen: Bedeutung statt generischer Begriffe. KI greift ohne Steuerung auf technische Primitive und generische Methodennamen zurück. Drei Prinzipien wirken dem entgegen: Die Ubiquitous Language sorgt dafür, dass die Fachsprache konsequent bis in den Quellcode getragen wird. Die KI verwendet ClaimAdjustment statt updateStatus. Intention-Revealing Interfaces benennen den Zweck einer Operation so, dass die fachliche Absicht ohne Implementierungsblick erkennbar ist (acceptTermsAndConditions() statt processData()) – das schafft die Erwartungshaltung, gegen die der Reviewer die KI-Lösung sofort prüfen kann. Value Objects eliminieren die sogenannte Primitive Obsession: Wenn IBAN und String verschiedene Typen sind, kann die KI sie nicht mehr verwechseln, und Geschäftsregeln wandern in das Typsystem selbst.
- Absichernde Mechanismen: Garantien statt Hoffnung. Statt darauf zu vertrauen, dass die KI fachliche Regeln korrekt umsetzt, werden diese als harte Zusicherungen im Code verankert. Assertions formulieren Invarianten explizit. Der Reviewer erkennt sofort, welche Garantie der Code gibt, und Verstöße fallen in Tests früh auf. Der entscheidende Zweitnutzen bei KI-Unterstützung: Bei späteren Erweiterungen liest die KI diese Invarianten automatisch aus dem Code, ohne dass sie jedes Mal im Prompt mitgegeben werden müssen. Die Logik schützt sich selbst vor unbedachten Änderungen durch den Copiloten.
- Strukturelle Erwartungshaltung als gemeinsamer Effekt: Diese drei Mechanismen wirken zusammen wie ein Filter für den Review. Jeder DDD-Baustein definiert eine spezifische Erwartung. In einem Value Object ausschließlich Berechnungen und Validierungen, in einem Aggregate die Durchsetzung von Invarianten, in einem Application Service nur Koordination. Sobald die KI dieses Profil verletzt, etwa eine Datenbankverbindung in ein Value Object mischt, wird die strukturelle Abweichung sofort sichtbar. Das Design fungiert damit als Aufmerksamkeitslenker: Sie nimmt dem Reviewer die Arbeit ab, alles prüfen zu müssen, und fokussiert ihn auf die fachliche Korrektheit dort, wo sie wirklich entschieden wird.
Fazit: Design als Überlebensstrategie im KI-Zeitalter
Wer den Copiloten in der Core Domain von der Leine lässt, ohne ihm die strukturellen Vorgaben des taktischen DDD (oder anderer detaillierter Designprinzipien) zu geben, baut unter Umständen in Rekordgeschwindigkeit eine technische Sackgasse. Wir haben gesehen, dass KI inzwischen vieles beherrscht, was vor wenigen Jahren noch als Grenze galt: komplexere Reasoning-Ketten, präzisere API-Nutzung, autonomes Arbeiten in größeren Kontexten. Was sie weiterhin nicht hat, ist ein Bewusstsein für architektonische bzw. Design Integrität, langfristige Änderbarkeit und fachliche Invarianten.
Hochwertiges Softwaredesign ist daher im Zeitalter der generativen KI kein optionales Extra für Ästheten, sondern ein zentraler wirtschaftlicher Hebel. Taktisches DDD wirkt dabei auf drei Ebenen:
- Es macht generierten Code durch klare Strukturen deutlich besser prüfbar.
- Es sichert die Integrität des Kern-Geschäftsmodells gegen statistische Unschärfen ab.
- Es garantiert, dass wir auch morgen noch Verantwortung für unsere Systeme tragen können, statt im Schuldenberg KI-generierten Codes zu versinken.
Die Rolle des Entwicklers wandelt sich dabei grundlegend: Er schreibt weniger Zeilen, trägt aber eine höhere Verantwortung für die strukturelle Korrektheit. Und je autonomer der Copilot wird, desto mehr entscheidet die Qualität des Softwaredesigns darüber, ob seine Geschwindigkeit zum Vorteil oder zum Problem wird. Wer diese Leitplanken beherrscht, nutzt die KI nicht nur als Schreibhilfe, sondern als hocheffizienten Werkzeugmacher für ein robustes digitales Fundament.
Von der Theorie in die Praxis. Wie diese theoretischen Bausteine in einem modernen Tech-Stack konkret zum Leben erweckt werden, zeigen die Folgeartikel dieser Serie. Teil 2 übersetzt anhand eines praktischen Beispiels das fachliche Modell in Code und zeigt, welche Eigenschaften der taktischen DDD-Bausteine sie zur belastbaren Grundlage für KI-gestützte Entwicklung machen. Die Teile 3 und 4 schließen den Bogen zum Werkzeug: Wie wird das Softwaredesign als persistente Vorgabe im Projekt verankert, wie sehen konkrete Aufträge an den Copiloten aus, und wie macht ein automatisch erzeugtes Strukturdiagramm sichtbar, was die KI tatsächlich gebaut hat?
Links & Literatur
[1] Evans, Eric: „Domain-Driven Design: Tackling Complexity in the Heart of Software”, Addison-Wesley, 2003
[2] Atıl, Berk et al.: „Non-Determinism of “Deterministic” LLM System Settings in Hosted Environments” in: Proceedings of the 5th Workshop on Evaluation and Comparison of NLP Systems (Eval4NLP), S. 135–148, Mumbai, Indien. Association for Computational Linguistics, 2025: https://aclanthology.org/2025.eval4nlp-1.12/
[3] Salvatore, Nikolaus; Wang, Hao; Zhang, Qiong: „Lost in the Middle: An Emergent Property from Information Retrieval Demands in LLMs”, arXiv:2510.10276, 2025: https://arxiv.org/abs/2510.10276
[4] Song, Peiyang; Goodman, Noah et al.: „Large Language Model Reasoning Failures”, arXiv:2602.06176, 2026
Author
🔍 Frequently Asked Questions (FAQ)
1. Warum wird taktisches DDD durch KI-Coding-Agents wichtiger?
KI-Coding-Agents können in kurzer Zeit syntaktisch korrekten und lauffähigen Code erzeugen. Bei ungenauen Spezifikationen schließen sie fachliche Lücken jedoch möglicherweise auf statistisch plausible, aber fachlich falsche Weise. Taktisches DDD verankert Geschäftsregeln und Invarianten deshalb direkt in der Struktur des Codes.
2. Welche Rolle übernehmen Entwickler bei KI-gestützter Softwareentwicklung?
Entwickler schreiben zunehmend weniger einzelne Codezeilen und übernehmen stärker die Rolle von Architekten und Prüfern. Sie müssen Spezifikationen präzisieren und bewerten, ob generierter Code fachlich korrekt, architektonisch konsistent und langfristig wartbar ist. Dafür wird ein tiefes Verständnis der Domäne und des Softwaredesigns wichtiger als die reine Beherrschung der Programmiersyntax.
3. Warum reicht eine hohe Testabdeckung für KI-generierten Code nicht aus?
Eine hohe Testabdeckung kann Fehler sichtbar machen, aber kein schlechtes Softwaredesign reparieren. Ein fehlgeschlagener Test zeigt zunächst nur ein Symptom und beantwortet nicht, ob ein technisches Detail oder das zugrunde liegende fachliche Modell fehlerhaft ist. Ohne eine nachvollziehbare Code-Struktur bleiben strukturelle Erosion und logische Inkonsistenzen schwer erkennbar.
4. Warum bleibt der Code die stabilere Source of Truth als die Spezifikation?
Die Spezifikation beschreibt die beabsichtigte Funktionsweise eines Systems, während der Code die tatsächlich ausgeführte Laufzeitrealität bestimmt. Spezifikationen können mehrdeutig oder veraltet sein, und generative Modelle liefern nicht vollständig deterministische Ergebnisse. Typisierter und kompilierter Code kann fachliche Regeln dagegen durch Value Objects, Aggregates, Assertions und Invarianten verbindlich durchsetzen.
5. Wie unterstützt taktisches DDD die Arbeit von Coding-Agents?
Taktisches DDD definiert klare Verantwortungsgrenzen und kapselt Fachlogik in Bausteinen wie Aggregates, Value Objects und Domain Services. Ubiquitous Language und Intention-Revealing Interfaces geben dem Coding-Agent semantisch eindeutige Vorgaben. Gleichzeitig reduzieren kleine, klar abgegrenzte Kontexte die Gefahr von Kontextverlust und unnötigen Agenten- und Werkzeugzyklen.
6. Für welche Softwareprojekte eignet sich taktisches DDD besonders?
Taktisches DDD eignet sich besonders für komplexe, langlebige oder kritische Systeme, deren Geschäftsregeln und Datenintegrität dauerhaft geschützt werden müssen. Dazu gehören beispielsweise Finanzsysteme, Logistik-Plattformen, Versicherungsanwendungen, E-Government-Systeme und Lösungen für den Energiesektor. Für einfache Webanwendungen, Daten-Pipelines oder kurzlebige Prototypen kann der zusätzliche Modellierungsaufwand dagegen unverhältnismäßig sein.




