- Da KI-Agenten ins Zentrum der Code-Erstellung rücken, werden bisher „optionale“ Best Practices wie Tests, Dokumentation und statische Typisierung nun zu Pflichtbestandteilen
- 100 % Code Coverage wird eingefordert, damit jede Codezeile tatsächlich geprüft und durch ausführbare Beispiele untermauert wird
- Verzeichnisstruktur und Dateibenennung werden klar gestaltet, damit LLMs sich leichter durch die Codebasis bewegen können; empfohlen werden klein granulare Dateien
- Schnelle, ephemere und nebenläufig nutzbare Entwicklungsumgebungen werden aufgebaut, damit mehrere Agenten parallel arbeiten können
- Statische Typsysteme und automatisierte Quality-Management-Tools sind entscheidend, um ein Code-Ökosystem zu erhalten, dem KI vertrauen kann
KI und die Notwendigkeit von „gutem Code“
- Lange Zeit galten Tests, Dokumentation, kleine Module und statische Typisierung als Maßstab für guten Code, wurden in der Praxis aber oft ausgelassen
- Da KI-Agenten ihren Code nicht selbst zuverlässig aufräumen können, sind diese Best Practices nun zwingend notwendig
- Damit Agenten nicht in die falsche Richtung laufen, sind klare Guardrails und ihre konsequente Durchsetzung unverzichtbar
- Mit robusten Guardrails konvergieren LLMs nur auf den richtigen Pfad; in unvollständigen Umgebungen verstärken sie dagegen Probleme
100 % Code Coverage
- Teams machen 100 % Code Coverage zur Pflicht, nicht nur zur Bug-Vermeidung, sondern um das Verhalten jedes von Agenten geschriebenen Codes zu verifizieren
- Bei 95 % oder 99,99 % Coverage bleibt unklar, woher ungetesteter Code stammt; bei 100 % lassen sich alle nicht verifizierten Zeilen eindeutig identifizieren
- Coverage-Reports dienen als To-do-Liste für Tests, und ein LLM muss bei Code-Änderungen zwingend ausführbare Beispiele liefern
- Dieser Ansatz hat Nebeneffekte wie das Entfernen unerreichbaren Codes, das Explizitmachen von Edge Cases und effizientere Code Reviews
Namespaces und Dateistruktur
- Agenten erkunden die Codebasis über das Dateisystem, daher fungieren Verzeichnisstruktur und Dateinamen als wichtige Schnittstelle
- Ein klarer Pfad wie ./billing/invoices/compute.ts vermittelt deutlich mehr Information als ./utils/helpers.ts
- Bevorzugt werden sollten kleine, klar definierte Dateien, damit LLMs den gesamten Dateiinhalt in den Kontext laden können und Performance-Einbußen vermieden werden
- Diese Strukturierung führt zu höherer Suchgeschwindigkeit und Genauigkeit der Agenten
Schnelle, ephemere und nebenläufige Entwicklungsumgebungen
- Statt einer einzelnen klassischen Entwicklungsumgebung verlagert sich agentenbasierte Entwicklung hin zu einer Form, in der mehrere Prozesse parallel verwaltet werden
- Fast: Tests und Verifikationsschritte müssen schnell laufen; das Team optimiert darauf, mehr als 10.000 Assertions in unter einer Minute abzuschließen
- Geschwindigkeit wird durch starke Parallelisierung, harte Isolation und eine Caching-Schicht für Third-Party-Aufrufe erreicht
- Ephemeral: Mit dem Befehl
new-feature <name> wird innerhalb von 1 bis 2 Sekunden eine neue Umgebung erzeugt, automatisch konfiguriert und der Agent gestartet
- Wenn manuelle Einrichtung nötig ist, sinkt die Nutzung drastisch; vollständige Automatisierung ist daher zentral
- Concurrent: Damit mehrere Entwicklungsumgebungen gleichzeitig laufen können, sind Konfliktvermeidung bei Ports, DBs, Caches usw. erforderlich
- Die Isolation erfolgt per Docker oder über umgebungsvariablenbasierte Konfiguration
End-to-End-Typsysteme und automatisiertes Quality Management
- Möglichst viele Best Practices werden automatisiert, um die Freiheitsgrade von LLMs zu verringern und eine konsistente Qualität zu sichern
- Automatische Linter und Formatter werden strikt konfiguriert, sodass bei jedem abgeschlossenen Arbeitsschritt des LLM automatisch Korrekturen angewendet werden
- Empfohlen wird die Nutzung statisch typisierter Sprachen, insbesondere starker Typsysteme rund um TypeScript
- Mit
UserId, WorkspaceSlug und SignedWebhookPayload sorgen aussagekräftige Typnamen dafür, dass die Codeabsicht klar ausgedrückt wird
- Über OpenAPI wird die Typkonsistenz zwischen Frontend und Backend erhalten
- Das Typsystem und Trigger von Postgres sichern die Datenintegrität, während Kysely einen typsicheren Client erzeugt
- Auch alle Third-Party-Clients sollten präzise Typdefinitionen haben oder entsprechend gekapselt eingesetzt werden
Fazit: Neudefinition von Codequalität im KI-Zeitalter
- Agenten sind nicht ermüdende und hervorragende Coder, aber ihre Leistung hängt von der Qualität ihrer Umgebung ab
- „Guter Code“ ist keine Option mehr, sondern Voraussetzung dafür, dass KI korrekt arbeiten kann
- Das anfängliche Setup mag wie eine Belastung wirken, ist aber eine längst überfällige notwendige Investition
- Mit Unterstützung der Entwicklungsleitung sollte das Ziel sein, eine KI-freundliche Codebasis aufzubauen
Noch keine Kommentare.