23. Okt. 2025·7 Min

KI‑generierter Code prüfbar machen: Vom Prototyp zur Übergabe an ein Team

Mache KI-generierten Code prüfbar, indem du Ordner, Benennung und schriftliche Invarianten vereinheitlichst, sodass ein menschliches Team sicher übernehmen und Änderungen ausliefern kann.

KI‑generierter Code prüfbar machen: Vom Prototyp zur Übergabe an ein Team

Warum KI‑Prototypen schwer zu übergeben sind

KI‑Prototypen schaffen oft eines: sie bringen dich schnell zum „funktioniert“. Das Problem beginnt, wenn „funktioniert“ zu „team‑wartbar“ werden muss. Ein Prototyp toleriert Abkürzungen, weil dieselbe Person (oder derselbe Chat‑Thread) den gesamten Kontext kennt. Ein Team kann das nicht.

KI‑erzeugter Code wirkt beim Review oft schwieriger als von Menschen geschriebener Code, weil die Absicht nicht immer sichtbar ist. Menschlicher Code hinterlässt normalerweise Spuren: konsistente Muster, wiederholte Entscheidungen und ein paar Kommentare, die erklären, warum etwas existiert. KI‑Output kann korrekt sein, aber weiterhin Stile mischen, Muster zwischen Dateien verschieben und Annahmen an Stellen verstecken, an denen Reviewer nicht suchen.

Das Ziel ist Vorhersagbarkeit: vorhersehbare Orte, vorhersehbare Namen, vorhersehbares Verhalten. Wenn ein Teammitglied erraten kann, wo etwas liegt, wie es heißt und wie es sich verhält, wird Review zu einer schnellen Kontrolle statt zu einer Detektivgeschichte.

Was typischerweise schiefgeht, wenn ein Prototyp zum Teamprojekt wird:

  • Ähnliche Features werden unterschiedlich implementiert, weil die KI zwischen Prompts ihre Herangehensweise geändert hat.
  • Dateien landen dort, wo sie gerade passen, sodass zusammengehöriger Code verstreut wird.
  • Die Benennung variiert (userId vs userid vs user_id), was die Suche unzuverlässig macht und Bugs leichter übersieht.
  • Konfiguration und „magische Werte“ werden dupliziert.
  • Fehlerbehandlung und Validierung driftet, sodass Edge‑Cases sich zwischen Bildschirmen oder Endpunkten unterschiedlich verhalten.

Kleine Inkonsistenzen multiplizieren die Wartungszeit, weil sie wiederholte Entscheidungen erzwingen. Wenn jeder neue Bildschirm leicht andere Ordner, Komponentennamen und Datenabrufstile hat, können Reviewer kein stabiles mentales Modell aufbauen. Sie müssen den Code jedes Mal neu lernen.

Ein realistisches Beispiel: Eine nicht‑technische Gründerin verwendet ein vibe‑coding‑Tool, um ein einfaches CRM zu erstellen. Es demo‑tauglich, aber wenn ein kleines Team übernimmt, finden sie drei verschiedene Wege, Auth‑State zu speichern, zwei Namensstile für React‑Komponenten und Geschäftsregeln verteilt über UI‑Code und Backend‑Handler. Nichts ist „kaputt“, aber jede Änderung fühlt sich riskant an, weil niemand weiß, welche Muster die echten sind.

Die Übergabe wird einfacher, wenn du die Anzahl der Entscheidungen reduzierst. Teams sind schneller, wenn die Codebasis ihnen leise und konsistent sagt, was als Nächstes zu tun ist.

Was „prüfbar“ in der Praxis bedeutet

„Prüfbar“ heißt: Ein neuer Entwickler kann das Repo öffnen, die richtige Stelle zum Ändern finden, die Änderung vornehmen und bestätigen, dass nichts anderes kaputtging. Das ist basic, und genau das fehlt vielen KI‑Prototypen.

Um KI‑erzeugten Code prüfbar zu machen, konzentriere dich weniger auf Cleverness und mehr darauf, wie sicher ein Mensch ihn anfassen kann. Reviewability reduziert das Änderungsrisiko.

Was Reviewer sehen müssen

Wenn ein Teammitglied einen Pull Request prüft, versucht es schnell ein paar Fragen zu beantworten:

  • Wofür ist diese Änderung, in einfachen Worten?
  • Wo lebt das Verhalten (UI, API, Datenbank) und warum genau dort?
  • Was sind die Grenzen (was darf diese Änderung nicht beeinflussen)?
  • Wie kann ich es verifizieren (Tests, manuelle Schritte oder beides)?
  • Was ist der Rollback‑Plan, falls es sich falsch verhält?

Kleine Diffs helfen, aber „klein“ ist nicht nur Zeilenanzahl. Es bedeutet auch stabile Grenzen: Eine Änderung in einem Bereich sollte nicht erfordern, dass man ungeklärte Dateien anfasst.

Signale für eine prüfbare Codebasis

Perfektion ist nicht nötig. Du brauchst Konventionen, ein bisschen Dokumentation, ein paar Tests und Leitplanken, die künftigen Drift verhindern.

Ein Reviewer fühlt sich sicherer, wenn er schnell erkennen kann:

  • Vorhersehbare Struktur und Namen.
  • Klare Absicht in Funktionen und Komponenten (keine mysteriösen Helfer).
  • Ein kurzes README zum Starten, Testen und zu üblichen Workflows.
  • Ein paar hochwertige Tests für kritische Abläufe.
  • Explizite Regeln für „darf nicht kaputtgehen“ Verhalten (Invarianten).

Beispiel: Du hast ein React‑Frontend und eine Go‑API gebaut. Der Prototyp funktioniert, aber der „create customer“ Ablauf ist über UI‑Code, API‑Handler und DB‑Aufrufe verteilt mit leicht unterschiedlichen Feldnamen. Prüfbarmachen heißt: diese Namen angleichen, die API‑Grenze klar halten und die Regeln aufschreiben (z. B. „E‑Mail muss einzigartig sein“ und „Status kann nur active oder paused sein“).

Strebe nicht an, alles umzuschreiben, bis es wie ein Lehrbuchprojekt aussieht. Übergabebereiter Code ist klar, konsistent und sicher zu ändern, auch wenn er noch nicht die schönste Version ist.

Ordnerstruktur, die Navigation einfach macht

Ein Team verzeiht unvollkommenen Code. Schwieriger ist, nichts zu finden. Wenn du willst, dass KI‑erzeugter Code prüfbar ist, mache das Projekt leicht zu scannen: eine kleine Menge oberster Ordner, konsistente Namen und ein offensichtliches Zuhause für Konfiguration.

Eine einfache Struktur, die funktioniert

Halte die Top‑Level‑Karte stabil, während die App wächst. Viele Übergaben scheitern, weil für jedes Experiment neue Ordner auftauchen. Trenne stattdessen drei Anliegen: App‑Komposition (Screens, Routes), Kern‑Business‑Regeln und Infrastruktur.

Hier ist ein praktisches Muster, das du anpassen kannst (Web‑App‑Beispiel):

/
  /app            # routes/pages and UI composition
  /core           # domain logic: entities, rules, use-cases
  /ui             # reusable components, styles, design tokens
  /infra          # db, api clients, queues, auth adapters
  /config         # env schema, feature flags, app settings
  /scripts        # local tooling, seed data, one-off tasks
  /docs           # handoff notes, invariants, decisions

Wenn deine erste Version schnell generiert wurde, halte diese Trennung sichtbar. Lege ersetzbare generierte Module unter etwas wie /generated ab und menschlich bearbeitete Module unter /core oder /app. Der Punkt ist, versehentliche Änderungen an Code zu vermeiden, den du später eventuell neu generierst.

Mache die Frage „Wo lebt das?“ in 10 Sekunden beantwortbar

Vor der Übergabe mache einen kurzen Navigationstest mit einem Teamkollegen (oder deinem zukünftigen Ich). Frage, wo die Login‑UI lebt, wo Autorisierungsregeln sind, wo DB‑Zugriff definiert ist, wo API‑Basis‑URLs und Feature‑Flags gesetzt werden und wo „besondere“ Skripte liegen.

Wenn eine Antwort mit „kommt drauf an“ oder „such danach“ beginnt, passe die Struktur so lange an, bis jedes Thema ein einziges, langweiliges Zuhause hat. Dieses langweilige Gefühl macht Wartung schnell und sicher.

Namenskonventionen, denen Menschen vertrauen können

Eine Namenskonvention ist ein Versprechen: Ein Reviewer sollte erraten können, was etwas ist, wo es liegt und wie es verwendet wird, bevor er die Datei öffnet.

Beginne bei Dateinamen und bleibe bei einem Stil im gesamten Repo. Ein einfacher Default ist: Ordner in kebab‑case, React‑Komponenten in PascalCase und Nicht‑Komponenten‑TypeScript‑Dateien in camelCase. Breche die Regel nur, wenn das Ökosystem es erwartet (z. B. standardmäßige Flutter‑Konventionen oder Standarddateien wie README).

Namen sollten die Absicht offenbaren, nicht die Implementierung:

  • Gut: BillingSummaryCard.tsx (was es repräsentiert)
  • Riskant: StripeCard.tsx (verbackt eine Vendor‑Entscheidung)
  • Riskant: RenderBilling.tsx (beschreibt wie, nicht warum)

Sei strikt mit vagen Eimern. Dateien namens utils, helpers oder common werden schnell zu Sammelstellen, besonders wenn Code in Schüben generiert wird. Wenn du gemeinsamen Code brauchst, benenne ihn nach Scope und Zweck, z. B. auth/tokenStorage.ts oder billing/billingCalculations.ts.

Feature‑Ordner vs. technische Ordner

Feature‑Ordner beschreiben den Nutzer‑Problemraum. Technische Ordner beschreiben cross‑cutting Infrastruktur. Mischen versteckt Grenzen.

Eine praktische Aufteilung sind Features wie billing, onboarding, inventory und technische Bereiche wie api, db, routing, design-system. Wenn du mehrere Clients (Web, Server, Mobile) hast, macht es Änderungen leichter nachvollziehbar, dieselben Feature‑Namen über die Schichten hinweg zu verwenden.

Eine kurze Namens‑Rubrik für Reviewer

Nutze diese kurze Rubrik im Code‑Review:

  • Kannst du in 3 Sekunden anhand des Namens sagen, was es ist?
  • Passt der Name zur Ebene (Feature‑Namen für Business‑Logik, technische Namen für Infrastruktur)?
  • Würde der Name noch Sinn ergeben, wenn sich die Implementierung ändert?
  • Ist er konsistent mit benachbarten Dateien und Ordnern?

Benennungen früh ändern. Renames sind während der Übergabe billig und nachdem das Team darauf aufgebaut hat teuer.

Dokumentiere die Invarianten (die Regeln, die wahr bleiben müssen)

Auf einer eigenen Domain teilen
Setze die App auf deiner eigenen Domain auf, wenn Stakeholder bereit sind.

Eine Invariante ist eine Regel, auf die sich deine App zur Richtigkeit verlässt, selbst wenn Features sich ändern. KI‑generierter Code „funktioniert“ oft, weil der Generator eine Reihe von Regeln annahm, aber diese Regeln leben möglicherweise nur in Prompts oder im Kopf einer Person. Schreib sie auf, damit Reviewer wissen, was nicht stillschweigend verschoben werden darf.

Gute Invarianten sind langweilig, spezifisch und testbar. Vermeide vage Aussagen wie „validiere Eingaben“. Sag genau, was erlaubt ist, wer was tun darf und was passiert, wenn die Regel gebrochen wird.

Nützliche Invarianten‑Beispiele (nach denen Reviewer suchen)

Die meisten Übergabeprobleme kommen aus den gleichen Bereichen:

  • Berechtigungen: „Nur Projektbesitzer können Mitglieder einladen; Admins können Mitglieder entfernen; Mitglieder können Abrechnung einsehen, aber nicht bearbeiten.“
  • Datenhoheit: „Jede Task gehört genau zu einem Projekt. Ein Nutzer kann nur Tasks für Projekte sehen, bei denen er Mitglied ist.“
  • ID‑ und Formatregeln: „Public IDs sind UUIDv4‑Strings. Interne numerische IDs verlassen niemals Server‑Antworten.“
  • Zustandsübergänge: „Order‑Status kann draft -> paid -> shipped. shipped kann niemals zu paid zurückkehren.“
  • Datenintegrität: „E‑Mail ist einzigartig (case‑insensitive). Löschen eines Projekts führt zu Soft‑Delete der Tasks; Tasks werden niemals hard‑deleted.“

Wenn du den Satz in einen Unit‑Test oder einen API‑Test umwandeln kannst, ist es das richtige Level.

Wo Invarianten dokumentieren, damit sie geprüft werden

Lege Invarianten dorthin, wo Menschen beim Review natürlich nachschauen:

  • Im Repo‑README: ein kurzer Abschnitt „System rules“ mit den wichtigsten Invarianten.
  • Neben dem Code, der sie durchsetzt: kurze Kommentare bei Auth‑Checks, Validierung und Zustandsübergängen.
  • In einer einseitigen Entscheidungsnotiz für große Regeln: Auth‑Modell, Datenmodell‑Entscheidungen, Workflow‑Zustände.

Vermeide es, Invarianten in langen Docs zu verstecken, die niemand öffnet. Wenn sie bei normalen PR‑Reviews nicht auftauchen, werden sie übersehen.

Wie man Invarianten schreibt (und sicher ändert)

Formuliere jede Invariante mit Scope, Regel und Enforcement‑Punkt. Beispiel: „Für alle Endpunkte unter /api/projects/:id muss der Anfragende Projektmitglied sein; durchgesetzt in Auth‑Middleware und erneut geprüft bei Task‑Updates.“

Wenn sich eine Invariante ändert, mache es explizit. Aktualisiere die Doc‑Zeile, verweise auf die Code‑Stellen, die geändert wurden, und füge oder aktualisiere einen Test, der unter der alten Regel fehlschlagen würde. Ansonsten führt das Team dazu, halb altes und halb neues Verhalten beizubehalten.

Wenn du eine vibe‑coding‑Plattform wie Koder.ai verwendest, ist ein nützlicher Übergabeschritt, sie zu bitten, die Invarianten aufzulisten, die sie beim Generieren der App angenommen hat. Verwandle das dann in eine kleine Menge testbarer Regeln, die das Team prüfen und aktuell halten kann.

Schritt für Schritt: Aus Prototyp wird Übergabebereiter Code

Eine Übergabe ist nicht dasselbe wie „läuft auf meinem Rechner“. Das Ziel ist, das Projekt leicht lesbar, sicher änderbar und vorhersagbar für jemanden zu machen, der es neu öffnet.

Beginne damit, den Scope einzufrieren. Wähle ein Datum und eine kurze Liste dessen, was stabil sein muss (Kern‑Screens, Schlüssel‑Flows, Integrationen). Schreibe auch auf, was ausdrücklich außer Scope ist, damit niemand während der Aufräumarbeiten Features weiter hinzufügt.

Mache dann Cleanup, bevor du etwas Neues hinzufügst. Hier beginnt Prüfbarkeit sichtbar zu werden: Die Codebasis verhält sich wie ein Produkt, nicht wie eine Demo.

Eine praktische Abfolge:

  • Scope für die Übergabe sperren: 3–5 User‑Journeys, die funktionieren müssen, plus 3–5 Dinge, die du nicht ändern wirst.
  • Ordner und Namen normalisieren: Dateien in vorhersehbare Struktur verschieben, unklare Module umbenennen, toten Code löschen.
  • Kleine Modulnotizen hinzufügen, wo sie gesehen werden: „Was das tut“ und „Was es nicht tun darf“, kurz gehalten.
  • Invarianten neben Enforcement‑Punkten ablegen: Regel über die Funktion/Query/Komponente schreiben, die sie durchsetzt.
  • Eine minimale Smoke‑Test‑Plan erstellen: kurze Checkliste, die dem eingefrorenen Scope und den Invarianten entspricht.

Halte den Smoke‑Test‑Plan klein, aber echt. Für eine React‑App mit Go‑API und Postgres könnte das heißen: anmelden, Datensatz anlegen, Seite neu laden, prüfen, dass er persistiert, und prüfen, dass eine eingeschränkte Aktion fehlschlägt.

Führe einen Review‑Zyklus durch, der sich nur auf Lesbarkeit konzentriert, nicht auf Features. Bitte ein Teammitglied, 30 Minuten zu investieren und folgende Fragen zu beantworten: „Finde ich die Dinge?“ „Passen Namen zum Verhalten?“ „Sind die Invarianten offensichtlich?“ Behebe Dinge, die sie ausbremsen, und höre dann auf.

Schnellchecks vor der Übergabe an ein Team

Generierten und menschlichen Code trennen
Regeneriere riskante Teile in einem /generated-Bereich und halte die Kernlogik stabil.

Vor der Übergabe mache einen „Fresh Eyes“‑Test. Bitte jemanden, der den Prototyp nicht gebaut hat, das Repo zu öffnen und laut zu erklären, was er denkt, was es tut. Wenn er Startpunkte nicht schnell findet, zahlt das Team diesen Preis bei jeder Änderung.

Eine einfache Regel: Ein neuer Entwickler sollte die Haupteinstiegspunkte in unter zwei Minuten finden können. Das bedeutet normalerweise ein klares README, das die ein oder zwei Startpunkte nennt (Web‑App‑Entry, API‑Entry, Config) und dass diese Dateien nicht vergraben sind.

Prüfe außerdem die Review‑Größe. Wenn Schlüsselmodule endloses Scrollen erfordern, fangen Reviewer an, Probleme zu übersehen. Teile lange Dateien, sodass jede Datei eine einzelne Aufgabe hat und in einer Sitzung verstanden werden kann.

Eine kurze Übergabe‑Checkliste:

  • Einstiegspunkte sind offensichtlich: wo die App startet, wo Routen leben, wo Umgebungswerte gelesen werden.
  • Dateien sind mundgerecht: die meisten passen auf einen oder zwei Bildschirme; keine „God‑Files“.
  • Namen passen zum Verhalten: validateUser validiert, schreibt nicht zusätzlich in die DB.
  • Invarianten sind nah am Code: Kommentare oder kleine Doc‑Blöcke mit Regeln, die wahr bleiben müssen.
  • Jede Änderung ist leicht zu verifizieren: eine schnelle Prüfung, die Kernflüsse absichert.

Ein realistisches Übergabeszenario

Maya ist eine nicht‑technische Gründerin. Sie baute ein MVP, indem sie das Produkt im Chat beschrieb: ein einfaches CRM für ein kleines Dienstleistungsunternehmen. Es funktioniert: Login, Kunden, Deals, Notizen und ein einfaches Admin‑Panel. Nach ein paar Wochen stellt sie zwei Entwickler ein, damit aus „läuft auf meinem Laptop“ etwas wird, auf das sich das Geschäft verlassen kann.

Am ersten Tag fangen sie nicht mit einem Rewrite an. Sie machen den Code prüfbar. Ihr erster Schritt ist, die App in zwei Buckets zu kartieren: Kernmodule (Dinge, von denen jedes Feature abhängt) und Features (Screens und Workflows, die Nutzer berühren). Das gibt ihnen einen Ort, Entscheidungen zu treffen, und einen Ort, Änderungen vorzunehmen.

Sie einigen sich auf eine einfache Feature‑Map: core (Auth, DB‑Zugriff, Berechtigungen, Logging, UI‑Komponenten) und features (customers, deals, notes, admin).

Dann passen sie die Ordner an diese Map an. Vorher waren Dateien verstreut mit gemischter Benennung wie CustomerPage.tsx, customer_view.tsx und custPageNew.tsx. Danach hat jedes Feature ein Zuhause und Core‑Code ist klar getrennt. Reviews werden schneller, weil Pull Requests tendenziell innerhalb eines Feature‑Ordners bleiben und Core‑Änderungen offensichtlich werden.

Eine kleine Benennungsregel macht den Großteil der Arbeit: „Ordner sind Substantive, Komponenten sind PascalCase, Funktionen sind Verben und wir kürzen nicht.“ Also wird custPageNew.tsx zu CustomerDetailsPage.tsx und doStuff() zu saveCustomerNote().

Eine Invariante, die leise Bugs verhindert

Sie schreiben eine Schlüsselregel auf, die immer gelten muss, und legen sie in eine kurze INVARIANTS.md im Feature‑Ordner.

Beispielinvariante für das CRM:

Nur der Deal‑Besitzer oder ein Admin darf einen Deal bearbeiten. Alle anderen können ihn ansehen, aber nicht Status, Wert oder Notizen ändern.

Dieser Satz leitet Backend‑Prüfungen, Datenbank‑Queries und Frontend‑UI‑Zustände. Wenn später „Bulk Edit“ hinzugefügt wird, wissen Reviewer genau, was nicht kaputtgehen darf.

Wie „gut genug“ nach einer Woche aussieht

Nach einer Woche ist der Code nicht perfekt, aber die Übergabe ist real:

  • Jedes Feature lebt in einem Ordner mit vorhersehbaren Dateinamen.
  • Core‑Module sind getrennt und wiederverwendet, nicht kopiert.
  • Invarianten sind dort geschrieben, wo Änderungen passieren, nicht in Chat‑History vergraben.
  • Neue Änderungen werden durch kleine PRs verteilt, die leicht zu prüfen sind.

Häufige Fehler, die KI‑Code brüchig machen

Prototyp des CRMs, das du beschrieben hast
Erstelle ein einfaches CRM im Chat und standardisiere dann Muster für dein Team.

KI bringt dich schnell zum Prototyp. Das Problem ist, dass „funktioniert“ oft auf versteckten Annahmen beruht. Wenn ein Team später daran arbeitet, brechen kleine Änderungen an überraschenden Stellen Dinge.

Ein häufiger Fehler ist, alles auf einmal zu refaktorisieren. Große Aufräumaktionen fühlen sich gut an, machen es aber schwer zu erkennen, was sich geändert hat und warum. Setze zunächst Grenzen: Entschiede, welche Module stabil sind, wo neuer Code erlaubt ist und welches Verhalten nicht geändert werden darf. Verbessere dann nach und nach einen Bereich.

Ein weiteres Problem sind doppelte Konzepte mit unterschiedlichen Namen. Die KI erstellt gern sowohl UserService als auch AccountManager für dieselbe Aufgabe oder plan vs pricingTier für eine Idee. Wähle einen Begriff für jedes Kernkonzept und benenne konsistent über UI, API und DB hinweg.

Versteckte Regeln sind ebenfalls eine große Fehlerquelle. Wenn die echte Geschäftslogik in Prompts oder Chat‑History lebt, wird das Repo schwer wartbar. Pack die Regeln in das Codebase‑Repository als klare Kommentare, Tests oder eine kurze Invarianten‑Datei.

Sammelordner wie shared, common oder utils werden schnell zu Mülltonnen. Wenn du gemeinsame Module brauchst, definiere, was sie besitzen (Inputs, Outputs, Verantwortlichkeiten) und halte sie eng.

Geschäftsregeln in UI‑Code zu mischen ist eine weitere Falle. Eine schnelle Bedingung in einer React‑Komponente wird zum einzigen Ort, an dem eine Preisregel existiert. Später widerspricht die Mobile‑App oder das Backend. Halte Geschäftslogik in einer Schicht (oft Backend oder Domain‑Modul) und lass die UI diese anfragen, statt sie neu zu implementieren.

Schließlich entsteht Bruch durch das Überspringen von Review‑Normen. Teams brauchen kleine Diffs, klare Commits und eindeutige Intentionsbeschreibungen. Auch wenn ein Generator die Änderung erzeugt hat, behandle sie wie einen normalen PR: halte den Scope eng, erkläre die Änderung und mache die Verifikation einfach.

Nächste Schritte: Mache Wartung zum normalen Workflow

Behandle die Übergabe als Beginn der Wartung, nicht als Endpunkt. Das Ziel bleibt simpel: Eine neue Person kann eine kleine Änderung vornehmen, ohne versteckte Regeln zu brechen.

Macht Team‑Präferenzen zu ein paar schriftlichen Defaults: eine Ordner‑Karte, einen Benennungsstil und eine Vorlage für Invarianten. Wenn diese Regeln vorher vereinbart sind, hören Review‑Kommentare auf, persönliche Vorlieben zu sein, und werden konsistente Prüfungen.

Halte ein „handoff README“, das zu den wenigen wichtigen Stellen führt: wo Invarianten liegen, wie man die App startet, wie man sicher ein Feature hinzufügt und was man ohne Diskussion nicht ändern darf. Ein neues Teammitglied sollte Antworten in unter fünf Minuten finden.

Wenn euer Workflow Reversibilität unterstützt, nutzt sie. Beispielsweise unterstützt Koder.ai Snapshots und Rollback, was ein einfaches Sicherheitsnetz vor Refactors oder Abhängigkeits‑Upgrades sein kann. Wenn ihr bereit seid, Ownership zu übertragen, gibt der Export des Quellcodes von koder.ai dem Team einen sauberen Startpunkt für normale Git‑Arbeit.

FAQ

Why does an AI prototype feel “fine” until a team tries to maintain it?

Fang damit an, den Code vorhersagbar zu machen. Gleiche Ordnerstruktur, Benennung und Grenzen an, sodass ein Teammitglied erraten kann, wo Dinge liegen und wie sie sich verhalten, ohne das ganze Repo durchsuchen zu müssen.

What’s the fastest way to reduce “three different ways” of doing the same thing?

Wähle für jede wiederkehrende Aufgabe ein Muster (Authentifizierung, Datenabruf, Validierung, Fehlerbehandlung) und wende es überall an. Ziel ist nicht „das Beste“, sondern „konsistent“, damit Reviewer die App nicht bei jeder Änderung neu lernen müssen.

What does “reviewable” actually mean for AI-generated code?

Ein prüfbares Repository lässt einen neuen Entwickler die richtige Stelle finden, eine kleine Änderung machen und sie sicher verifizieren. Wenn Änderungen regelmäßig in ungeklärte Bereiche laufen oder Regeln geraten werden müssen, ist es noch nicht prüfbar.

What folder structure makes handoff and navigation easiest?

Nutze eine kleine, stabile Menge oberster Ordner und gib jeder Verantwortlichkeit ein offensichtliches Zuhause. Trenne App‑Komposition (Routen/Bildschirme), Kern‑Business‑Logik und Infrastruktur, sodass Navigation Sekunden statt Detektivarbeit braucht.

How do I avoid editing code that I might regenerate later?

Lege generierten Code in einen klaren Ordner wie /generated und halte von Menschen editierten Code in stabilen Bereichen wie /core und /app. So vermeidest du versehentliche Änderungen, die später überschrieben werden, und machst Ownership während Reviews klar.

Which naming conventions matter most during a handoff?

Wähle eine Konvention und erzwinge sie überall: einheitliche Schreibweise für Ordner und Dateien, konsistente Komponentenbenennung und gleiche Feldnamen in UI, API und DB. Konsistenz macht die Suche zuverlässig und reduziert subtile Fehler durch falsche Namen.

What are “invariants,” and why should I document them?

Invarianten sind Regeln, die beim Ändern des Produkts unbedingt wahr bleiben müssen, z. B. Berechtigungen, Unique‑Constraints und erlaubte Zustandsübergänge. Sie aufzuschreiben verwandelt versteckte Annahmen in sichtbare Prüfungen, die Reviewer schützen können.

Where should invariants live so they actually get reviewed?

Platziere sie dort, wo Menschen sie wirklich sehen: ein kurzer Abschnitt im README plus knappe Hinweise direkt neben dem Code, der die Regel durchsetzt. Wenn die Regel nicht bei normalen PR‑Reviews auftaucht, wird sie vergessen.

What’s a practical step-by-step plan to make a prototype handoff-ready?

Sperre zunächst den Scope, wähle eine kleine Menge Kern‑User‑Journeys und was ausdrücklich außer Scope ist. Normalisiere dann Ordner und Namen, lösche toten Code, füge eine minimale Smoke‑Test‑Checkliste hinzu und mache einen Review‑Durchgang, der nur auf Lesbarkeit abzielt.

What are the most common mistakes that make AI code brittle after handoff?

Vermeide große Refactors, die alles anfassen, Sammelordner wie utils, Geschäftslogik in UI‑Konditionals oder Regeln, die nur in Chat‑Historie leben. Achte außerdem auf doppelte Konzepte mit unterschiedlichen Namen und auf inkonsistente Validierung/Fehlerbehandlung.

Related posts