AI-Native Entwicklung
Für die EEF haben wir eine Web-App für Flurstückeigentümer:innen und parallel eine AI-Pipeline drum herum gebaut. Mit diesem Produkt konnten wir produktiv belastbar aufzeigen, dass AI-Native-Entwicklung Produktionsqualität trägt.
- Erneuerbare Energien
- AI-Native Entwicklung
- Compliance & Datenschutz
- Team-Aufbau & Enablement
- Quality Gates
- Requirements Engineering
- Personas

- LAUFZEIT
- Mai 2026 bis heute
- Prototyp-Phase sechs Wochen, seither Pilotierung im produktiven Betrieb
- TEAM
- Zweiköpfiges Kernteam
- Senior-Softwareentwicklerin und Product Ownerin, punktuell verstärkt
- BRANCHE
- Erneuerbare Energien
- Projektentwicklung, Genehmigung, Bau sowie Betrieb von Hybridparks
- ROLLE
- Aufbau einer AI-Native-Entwicklungspipeline
- samt dem Produkt, an dem sie sich beweisen musste
- VORGEHEN
- Spec → Critic → Gate → Code → Review
- Vier Quality Gates, an jedem entscheidet ein Mensch
- NACHWEIS
- 245 dokumentierte Läufe
- 631 Persona-Prüfpässe, 26 begründete Architekturentscheidungen
Für den Auftrag haben wir eine produktive Web-App gebaut, bei der jeder Schritt AI-getrieben lief - von der Anforderungsanalyse über Spezifikation und Architekturplanung bis zu Implementierung und Review. Und die Maschinerie, die das verantwortbar macht: Verbindliche Specs mit rückverfolgbaren Anforderungs-IDs, gegnerische Persona-Reviews, vier Quality Gates mit menschlicher Entscheidung, Testpflicht vor Code und ein Protokoll über jeden einzelnen Lauf.
Der Kunde stand vor der Frage, die derzeit jede Entwicklungsorganisation beschäftigt: AI-Werkzeuge schreiben Code, sichtbar schnell - aber trägt der Code über einen Klickdummy hinaus? Und woran erkennt man, dass man dem Ergebnis trauen darf? Kein Team liest die Ausgabe eines Modells Zeile für Zeile nach. Wenn Vertrauen aber nicht aus Lektüre kommen kann, muss es aus Struktur kommen. Unser Auftrag war deshalb zweiteilig: Eine App - und eine zugehörige Kontrollstruktur, an der sich zeigen lässt, dass sie verantwortbar entstanden ist.
Die fachliche Anforderung an die App war auch die Verarbeitung von personenbezogenen Daten von Grundstückseigentümer:innen. Datenschutz war hier keine Nebenbedingung, sondern Abbruchkriterium. Dazu kamen ein knappes Zeitfenster für die Prototyp-Phase und ein zweiköpfiges Kernteam mit sehr unterschiedlichen technischen Profilen.
Unser Outcome
Unsere Qualitätsstandards standen längst fest: Reviews, Testabdeckung, begründete Entscheidungen. Die eigentliche Aufgabe war, sie in eine Arbeitsweise zu übersetzen, in der nicht mehr ein Mensch jede Zeile schreibt - ohne dabei einen Millimeter von ihnen abzurücken. Die Zahlen darunter sind der Beleg, dass die Übertragung gelungen ist.
6 Wochen
Prototyp-Phase vom Kickoff bis zur produktiv nutzbaren Web-App, mit einem zweiköpfigen Kernteam
631
Persona-Prüfpässe - jede substanzielle Entscheidung von mindestens drei gegnerischen Rollen geprüft, bevor ein Mensch sie freigab
>2.100
automatisierte Tests, unter Red-Green-Refactor-Zwang vor dem Code geschrieben, dazu 24 End-to-End-Tests
Was wir gebaut haben
Vier Teile, die zusammenwirken. Erstens eine verbindliche Beschreibung dessen, was entstehen soll - festgelegt, bevor gebaut wird. Zweitens unabhängige Prüfinstanzen, die jedes Ergebnis gegenlesen. Drittens feste Grenzen, die die Maschine nicht selbst verschieben kann. Und viertens eine Aufzeichnung, die jeden Schritt im Nachhinein nachvollziehbar macht.
Jeder dieser Teile schließt eine Lücke, die entsteht, sobald Software nicht mehr Zeile für Zeile von Hand geschrieben wird. Und keiner von ihnen wirkt ohne die anderen drei: Eine Vorgabe ohne Prüfung wird ignoriert, eine Prüfung ohne Grenzen läuft endlos, und was nicht aufgezeichnet ist, lässt sich später weder belegen noch verbessern.
Keine Zeile Code ohne Anforderungs-ID
Jede Anforderung einer Spezifikation trägt eine Nummer: Funktionale Anforderungen, Qualitätsanforderungen, Randfälle. Diese Nummern ziehen sich durch alles, was daraus entsteht - Tests, Commit-Messages, Pull-Request-Beschreibungen, Laufprotokolle. Code, der sich auf keine ID zurückführen lässt, gehört nicht ins Feature und wird entfernt.
Dahinter steht die härtere Regel: Wenn Code etwas tut, was die Spec nicht hergibt, wird zuerst die Spec korrigiert - dann der Code. Andernfalls reproduziert die nächste Generierung denselben Fehler, weil die Vorlage ihn immer noch enthält. Die Spec ist der Vertrag, an dem korrigiert wird; der Code ist Output, der jederzeit neu erzeugt werden kann.
Das ist der praktische Unterschied zwischen einem Prompt und einer Spezifikation. Ein Prompt ist vergessen, sobald die Antwort da ist. Eine Spezifikation überlebt die Generierung, die aus ihr entstanden ist - und lässt sich beim nächsten Mal wiederverwenden, prüfen und gegen das Ergebnis halten.
Gegnerische Prüfer statt zustimmender Assistent
Wir haben eine Bibliothek fester Prüfrollen aufgebaut: Pragmatismus, Architektur, Risiko, Datenschutz, Sicherheit, Nutzerführung, Gestaltung. Jede substanzielle Entscheidung - Spezifikation, Architekturentscheidung, fertiger Code - durchläuft mindestens drei davon, und mindestens eine muss kritisch besetzt sein. Welche Rollen greifen, folgt festen Regeln: Alles mit Authentifizierung zieht Sicherheit, alles mit personenbezogenen Daten zieht Datenschutz.
Diese Prüfer widersprechen sich, und genau das ist ihr Zweck. 57-mal war der Widerspruch so ausgeprägt, dass ein eigener Konsolidierungsschritt nötig war: Er bündelt Übereinstimmungen, Konflikte und offene Fragen zu einer Entscheidungsvorlage - und entscheidet ausdrücklich nicht selbst. Entschieden hat ein Mensch.
Ein Modell, das seinen eigenen Output bewertet, bestätigt ihn. Es hat den Text gerade selbst erzeugt und hält ihn folgerichtig für plausibel. Erst wenn es aus einer festgelegten Rolle heraus prüft, mit dem ausdrücklichen Auftrag, Schwächen zu finden, werden die Befunde brauchbar.
Grenzen technisch erzwingen
Pro Aufgabe gelten fünf Selbstheilungsrunden und dreißig Minuten ohne sichtbaren Fortschritt. Danach ist Schluss: Strukturierte Zusammenfassung, Übergabe an den Menschen. Ausdrücklich untersagt ist, sich selbst neues Budget zuzuweisen oder Schleifen so zu verschachteln, dass die Zählung umgangen wird.
Wo eine Regel technisch erzwingbar war, haben wir sie erzwungen statt sie aufzuschreiben. Force-Push, das Umgehen der Commit-Hooks und der Direkt-Push auf den Hauptzweig sind auf Werkzeugebene gesperrt. Ein Pre-Commit-Hook blockiert jeden Commit an Code, zu dem kein frisches Laufprotokoll vorliegt - wer den Prüfpass nicht dokumentiert, kann schlicht nicht committen.
Der teure Fehlermodus agentischer Systeme ist nämlich nicht der falsche Code. Falscher Code fällt im Test auf. Teuer wird der Agent, der eine Sackgasse nicht als Sackgasse erkennt und weiter iteriert - plausibel begründet, unermüdlich und auf Kosten, die niemand bemerkt, solange niemand hinschaut.
Wir testen nicht nur den Code, sondern den Agenten
Für die Pipeline selbst gibt es eine eigene Prüfstrecke: Sechs Aufgaben mit automatischen Judges, die messen, ob der Agent sich an die eigenen Regeln hält. Schreibt er die Spezifikation, bevor er codet? Führt er den Prüfpass aus? Nutzt er das bestehende Design-System, statt eine eigene Komponente zu erfinden? Bleibt er der festgelegten Anredeform treu?
Dazu kommen Post-Mortems, wenn die Pipeline versagt - dreimal dokumentiert. In einem Fall wurde ein Code-Review übersprungen, weil ein Hook fehlte. Die Konsequenz war nicht „künftig besser aufpassen“, sondern der Hook.
Regeln, die man einem Agenten gibt, sind Behauptungen, bis man sie prüft. Das gilt umso mehr, je länger die Anweisungsdatei wird: Was in Absatz vierzig steht, wird unter Druck genauso übergangen wie von einem Menschen.
„Anfangs musste ich mich erst im Umgang mit Git zurechtfinden. Die Pipeline musste so gebaut sein, dass ich nichts kaputtmachen konnte. Nach drei Wochen habe ich Use Cases innerhalb weniger Stunden eigenständig umgesetzt und produktiv gestellt, ohne dafür ein:e Entwickler:in zu brauchen.“
Unsere Vorgehensweise
Wissen wird kuratiert, nicht angebunden
Die internen Wissenssysteme des Kunden sind bewusst nicht an die AI-Werkzeuge angeschlossen. Stattdessen gilt ein Pull-Prinzip: Fehlt dem Agenten Kontext, fragt er ausdrücklich danach, und ein Mensch liefert den geprüften Auszug in die Wissensbasis des Projekts.
Das kostet Zeit, in jeder einzelnen Sitzung, und es ist die unbequemere Variante. Es kauft dafür zweierlei: Keine unkontrollierten Abflüsse aus Kundensystemen - bei personenbezogenen Daten keine Feinheit, sondern die Grundbedingung - und eine Wissensbasis, in der nur steht, was jemand geprüft hat und für den Produkt-Case relevant ist. Das spart Token.
Abbrechen statt fertigmachen
Das Iterationsbudget bricht Läufe ab, die kurz vor dem Ziel zu stehen scheinen. Im Einzelfall fühlt sich das jedes Mal falsch an - der nächste Versuch wirkt immer wie der, der es löst.
Über 245 Läufe hinweg ist es genau das, was verhindert, dass ein Agent stundenlang an einer Fehlannahme weiterarbeitet. Der Abbruch ist kein Scheitern, sondern die Übergabe an die Instanz, die die Fehlannahme erkennen kann: Einen Menschen mit Kontext.
Die Pipeline hat sich an ihren eigenen Pannen korrigiert
Wenn die Pipeline versagt hat, haben wir das Versagen analysiert statt es zu umgehen - mit Ursachenanalyse und einer Maßnahme, die den Fehler strukturell unmöglich macht. Aus einem übersprungenen Code-Review wurde ein Hook, aus einem ignorierten Pfad eine Prüfung vor dem Commit.
Bemerkenswert ist die Richtung dieser Korrekturen: Sie gingen fast nie in Richtung „mehr Anweisung“, sondern in Richtung „weniger Möglichkeit“. Was ein System technisch nicht zulässt, muss niemand disziplinieren.
AI-Pipeline
Claude Code
Anwendung
TypeScript strict
React Native
Expo
Expo Router
TanStack Query
Backend
Bun
Hono
Drizzle
Zod
PostgreSQL
Betrieb
Vercel
Neon Postgres in EU-Region
GitHub Actions
Qualität
Vitest
Jest
React Native Testing Library
ESLint
Prettier
tsc strict

