ChatGPT, GitHub Copilot, Cursor und ihre Verwandten können jetzt eine React-Komponente ausspucken, noch bevor man die Eingabeaufforderung fertig getippt hat. Eine Next.js-Route an Supabase anbinden? In Sekunden erledigt. Diese verworrene TypeScript-Utility refactoren? Hier sind drei Optionen, inklusive Type Guards. Für jeden, der mit modernen Web-Stacks arbeitet, kann sich das fast schon magisch anfühlen.

Ich nutze diese Tools täglich. Mein Stack besteht aus Next.js, TypeScript und Supabase, und die KI sitzt direkt in meinem Editor, bereit, Custom Hooks zu erstellen, Datenbankabfragen zu generieren oder unordentliche bedingte Logik aufzuräumen. Im Kleinen agiert sie wie ein sehr schneller Junior-Entwickler. Sie beherrscht die Syntax in- und auswendig. Sie erinnert sich an API-Oberflächen, die ich sonst googeln müsste. Sie wird nicht müde, Boilerplate-Code zu schreiben.

Aber Software geht ständig kaputt. Apps fühlen sich langsamer an. Customer Dashboards laggen. Edge Cases bringen Formulare zum Absturz. Wenn KI das Programmieren so viel einfacher gemacht hat, warum fühlt sich die Nutzung von Software dann schlechter an als noch vor ein paar Jahren?

Die Antwort ist, dass das Generieren von Syntax und das Bauen von Software nicht dieselbe Aufgabe sind.

Syntax ist keine Architektur

KI geht bemerkenswert gut mit Tokens um. Bitt sie, einen useEffect-Hook zu schreiben, der auf einen Supabase Real-time Channel lauscht, und du erhältst etwas, das kompiliert. Sie kann eine untypisierte JavaScript-Datei in striktes TypeScript umwandeln oder eine Formular-Komponente mit Zod-Validierung erstellen, noch bevor du deinen Kaffee getrunken hast.

Was sie nicht kann, ist die Konturen deiner spezifischen Anwendung zu verstehen. Gute Software erfordert ein bewusstes State Management, einen sorgfältigen Umgang mit Race Conditions und eine klare Übersicht darüber, wo Daten gespeichert sind und wo sie lediglich angezeigt werden. Die KI sieht die unmittelbare Datei, nicht das System. Sie behandelt deinen Codebase wie einen flachen Textkorridor statt wie ein lebendiges Bauwerk mit tragenden Wänden.

Stell es dir wie einen Architekten vor, der noch nie in einem Haus gelebt hat. Er kann wunderschöne Grundrisse zeichnen. Er weiß, wie viele Fenster ein Schlafzimmer haben sollte. Aber er weiß nicht, wo die Rohre im Februar dazu neigen zu lecken, oder welcher Flur in der Sommerhitze unbenutzbar wird. Dieses gelebte Wissen ist das, was ein Gebäude stabil hält. Bei Code ist es genauso.

Die zwei Reibungspunkte

Wenn ich die KI größere Codeblöcke ohne strenge Leitplanken schreiben lasse, bemerke ich, dass immer wieder dieselben zwei Probleme auftauchen.

Erstens ignoriert sie die Design Patterns, die du bereits etabliert hast. Vielleicht extrahiert dein Team das gesamte Data Fetching in eine dedizierte Schicht aus Custom Hooks. Vielleicht hast du eine strikte Konvention dafür, wie Supabase RLS-Policies auf Frontend-Helper gemappt werden. Der KI ist das egal. Sie wird ein rohes supabase.from().select() direkt in das onClick eines Buttons werfen, wenn das die unmittelbare Aufgabe löst. Der Code läuft. Er sieht sogar sauber aus. Aber er ist ein Ausreißer in deinem Codebase, und jeder Ausreißer ist eine zukünftige Refactoring-Steuer. Sechs Monate später muss jemand diese Nadel finden, verstehen, warum sie existiert, und sie vorsichtig wieder in die Spur bringen.

Zweitens greift sie nach Komplexität, wenn Einfachheit ausreichen würde. Das Tool wurde auf Repositories trainiert,

Software fühlt sich sperriger an, weil die Komplexität schneller wächst, als Teams sie bewältigen können. Wir bauen größere Anwendungen mit kleineren Teams, bewaffnet mit Werkzeugen, die uns unbesiegbar fühlen lassen. Wenn ein Entwickler an einem Nachmittag ein ganzes Dashboard erstellen kann, erwartet die Organisation bis Mittwoch drei Dashboards. Skalierung ohne Sorgfalt führt zu fragilen Systemen. Der State bläht sich auf. Die Bundle-Größen steigen schleichend an. Race Conditions häufen sich. Die Benutzeroberfläche mag modern aussehen, aber sie setzt sich zurück, wenn ein Benutzer auf die Zurück-Taste drückt, oder sie benötigt vier Sekunden zum Hydrieren, weil niemand Zeit hatte, den Waterfall der KI-generierten Datenabrufe zu profilieren.

Arbeite mit der Maschine, nicht für sie

All das bedeutet nicht, dass du die KI aus deinem Editor werfen solltest. Es bedeutet, dass du Grenzen brauchst.

Nutze sie für das, was sie gut kann. Lass sie den langweiligen Kram schreiben: repetitive TypeScript-Interfaces, Boilerplate-Supabase-Queries, Jest-Setup