- LLMs haben das Schreiben von Code beschleunigt, aber die inhärente Komplexität des Software Engineerings nicht verringert
- Da Codegenerierung einfacher geworden ist, verbreitet sich die Illusion, dass Fachwissen nicht mehr nötig sei, und einige Organisationen bauen deshalb bereits Engineering-Teams ab
- Die eigentliche Schwierigkeit liegt nicht im Schreiben von Code, sondern in Systemdesign, Spezifikation, Verifikation und der Wahrung von Konsistenz; KI beschleunigt die Belastung in diesen Bereichen eher noch
- Die Fehlanpassung zwischen Spezifikation, Tests und Implementierung (spec drift) verschärft sich schnell, wodurch das Risiko steigt, dass die Zuverlässigkeit von Systemen zusammenbricht
- In mehr als 40 Jahren Berufserfahrung zeigte sich dieses Muster immer wieder; schon in der Visual-Basic-Ära der 1990er gab es dieselbe Behauptung, Fachwissen sei überflüssig, bis sich die Notwendigkeit technischer Disziplin am Ende erneut bestätigte
- LLMs sind hervorragende Werkzeuge für die Erkundung von Designs und die Beschleunigung früher Implementierungsphasen, sollten aber nicht als Ersatz für technische Disziplin, sondern zu ihrer Stärkung eingesetzt werden
Der gefährliche Irrtum der Branche
- Seit LLMs Code erzeugen können, herrscht in der Softwarebranche die Stimmung, Software Engineering selbst werde nicht mehr benötigt
- Disziplinen wie Architektur, Spezifikation und sorgfältige Verifikation werden behandelt, als seien sie Relikte aus einer vergangenen Ära
- In manchen Organisationen ist diese Idee bereits in Richtlinien eingeflossen, was mit Verweis auf Fortschritte bei KI zu groß angelegten Entlassungen von Engineers führt
- KI ist dabei nur die neueste Ausrede, um schlechten Geschäftsentscheidungen oder Marktdruck auszuweichen
- Das Eingeben von Prompts in eine KI wird zunehmend so dargestellt, als ersetze es die Disziplinen, die Software Engineering bisher ausmachten
Ein sich wiederholendes historisches Muster
- In mehr als 40 Jahren Berufserfahrung war immer wieder dasselbe Muster zu beobachten: neues Tool erscheint → Erklärung, dass schwierige Probleme gelöst seien → sprunghafte Produktivität und beeindruckende Demos → Personalabbau → zunehmende Systemkomplexität → am Ende Ergebnisse, die den Erwartungen nicht entsprechen
- Die Tools und Behauptungen ändern sich, aber das Muster selbst bleibt fast unverändert
Die Analogie zur Flugzeugwartung
- In der Flugzeugwartung gab es große Fortschritte bei Tools, computergestützter Diagnose, digitalen Handbüchern und der Interpretation von KI-Telemetrie, doch der Bedarf an erfahrenen Technikern ist unverändert
- Verkehrsflugzeuge sind extrem komplexe Systeme mit Millionen von Teilen und Tausenden miteinander verbundener Subsysteme
- Die Diagnose von Problemen erfordert nicht nur das richtige Tool oder das Abarbeiten einer Checkliste, sondern Erfahrung und Urteilsvermögen darüber, wie sich das System unter realen Betriebsbedingungen verhält
- Keine Fluggesellschaft würde wegen besserer Tools ausgebildete Techniker abschaffen und vorschlagen, Reparaturen Gate Agents zu überlassen
- Genau eine sehr ähnliche Behauptung stellt die Softwarebranche derzeit jedoch über sich selbst auf
DIY vs. professionelle Systeme
- Hobbyprojekte, kleine persönliche Apps und Experimente mit neuen Ideen sind überhaupt kein Problem; einige der spannendsten Ideen in der Geschichte des Computings sind aus genau solchen Versuchen entstanden
- Professionelle Softwareentwicklung ist jedoch eine völlig andere Kategorie: Zahlungsabwicklung, Speicherung sensibler Daten, Infrastrukturmanagement und der Betrieb von Systemen, auf die Menschen täglich angewiesen sind
- Kundinnen und Kunden erwarten selbstverständlich, dass Systeme korrekt funktionieren, auch während ihrer Weiterentwicklung korrekt bleiben und die Menschen, die sie bauen, verstehen, wie sie funktionieren
- Diese Erwartung ist die Grundbedingung professionellen Engineerings und der Punkt, an dem Disziplin und Fachwissen unvermeidbar werden
Code war nie der schwierige Teil
- Dass das Schreiben von Code der schwierige Teil der Softwareentwicklung sei, ist ein alter Irrtum
- Das Eintippen von Syntax war schon immer einer der am wenigsten interessanten Teile des Systembaus; die eigentliche Schwierigkeit liegt darin, das Verhalten eines Systems festzulegen, die Interaktion von Komponenten zu entwerfen und Verstehbarkeit trotz wachsender Komplexität zu erhalten
- Das ist kein Coding-Problem, sondern ein Engineering-Problem
- Weniger Aufwand für die Codeproduktion beseitigt diese Probleme nicht, sondern ermöglicht nur, größere und komplexere Systeme schneller zu bauen
- Das als Produktivitätssteigerung zu sehen, ist eine Illusion: Die Last verschiebt sich nur an einen anderen Ort
- Die kognitive Last, die für Code Reviews und den Umgang mit generiertem Code nötig ist, kann die Produktivität stärker senken als das eigentliche Schreiben von Code
- Wenn lediglich die Geschwindigkeit steigt, ohne dass das zugrunde liegende Verhalten ausreichend verstanden wird, beschleunigt das nur den Zeitpunkt, an dem Komplexität unbeherrschbar wird, und das Ergebnis ist trotzdem falsch
Dieses Muster gab es schon: die Visual-Basic-Ära
- Schon in den 1990ern gab es bei Visual Basic ein ähnliches Versprechen: Programmierung sei demokratisiert worden und Fachwissen werde überflüssig
- Tatsächlich ermöglichte Visual Basic viele Anwendungen, die sonst wahrscheinlich nie gebaut worden wären
- Doch als Systeme größer und stärker vernetzt wurden, zeigte sich erneut, dass Software-Artefakte zu produzieren nicht dasselbe ist wie verlässliche Systeme zu entwickeln
- Heute erleben wir eine verstärkte Version desselben Musters: Nicht nur die Hürde zum Bau von Anwendungen wurde gesenkt, sondern die Hürde zur Codeproduktion selbst
- Daraus entsteht der verführerische Glaube, Fachwissen sei nun nicht mehr nötig
Das Alignment-Problem
- Verlässliche Software hängt von Alignment ab, einem Thema, das außerhalb des Engineerings kaum diskutiert wird
- Ein System beginnt mit einer Vorstellung seines Verhaltens → wird als Spezifikation dokumentiert → Engineers übersetzen diese Spezifikation in Tests und Produktionscode
- Für die langfristige Zuverlässigkeit eines Systems müssen Spezifikation, Tests und Implementierung ständig aufeinander abgestimmt bleiben
- Sobald diese drei Ebenen auseinanderdriften, verliert das System nach und nach seine Integrität
- Die Spezifikation beschreibt Verhalten, das nicht mehr implementiert ist
- Tests verifizieren nur noch Teile des Verhaltens und lassen anderes aus
- Später hinzukommende Engineers lesen Code und raten, wie sich das System verhält, ob dieser nun noch das ursprüngliche Design widerspiegelt oder nicht
- Mit der Zeit häufen sich diese Vermutungen, bis ein System entsteht, das niemand wirklich mehr versteht
- Dieses Phänomen lässt sich als „spec drift“ bezeichnen: Die Beschreibung eines Systems und das System selbst entfernen sich schrittweise voneinander
- Der Code wurde geändert, aber die Spezifikation blieb gleich
- Die Spezifikation hat sich weiterentwickelt, aber die Tests blieben unverändert
- Das Verhalten hat sich schrittweise verändert, sodass niemand mehr sicher sagen kann, was ursprünglich beabsichtigt war
- Wenn das Alignment bricht, hält Zuverlässigkeit nicht lange stand
KI beschleunigt den Drift
- LLMs beschleunigen die Codeproduktion dramatisch; genau das ist ihre größte Stärke und zugleich der Punkt, an dem das Risiko entsteht
- Wenn Code schneller produziert wird als die technische Disziplin, die ihn umgibt, wird auch die Kraft beschleunigt, die spec drift erzeugt
- Änderungen, die früher sorgfältiges Nachdenken und manuelle Implementierung erforderten, sind jetzt in wenigen Sekunden möglich
- Ganze Systemabschnitte können neu geschrieben werden, bevor irgendjemand überprüft hat, ob das Verhalten noch der Spezifikation entspricht
- Der Code kann vernünftig wirken, kompilieren, gut lesbar sein und sogar bestehende Tests bestehen, während das Alignment, das das System einst zusammenhielt, bereits verschwunden ist
- Was wie Produktivität aussieht, ist in Wahrheit womöglich nur die Fähigkeit, sich schneller als zuvor in Richtung Fehlanpassung zu bewegen
Wo KI tatsächlich hilft
- LLMs sind kein Fehler; wenn sie mit Bedacht eingesetzt werden, können sie die Art und Weise, wie Engineers Systeme erkunden und entwerfen, dramatisch verbessern
- Besonders stark sind sie beim Durchdenken von Problemen, beim Erkunden von Designalternativen, beim Zusammenfassen komplexer Systeme und beim Erstellen von Entwürfen, die frühe Implementierungsphasen beschleunigen
- Schwierig bleiben Bereiche, die über längere Zeit strenge Disziplin und Konsistenz verlangen
- Die Abstimmung zwischen Spezifikation, Tests und Implementierung aufrechtzuerhalten, bleibt Engineering-Verantwortung; kein Tool kann diese Verantwortung ersetzen, sondern allenfalls unterstützen
- Die eigentliche Chance besteht darin, LLMs nicht als stillen Ersatz des Engineering-Prozesses zu nutzen, sondern zu seiner Stärkung
Konversationelles Software Engineering
- Eine der interessanten Möglichkeiten, die LLMs eröffnet haben: Teile des Software Engineerings könnten konversationeller werden
- Über Jahrzehnte hinweg waren Werkzeuge für Systemdesign starr: Spezifikationen waren Dokumente, Architektur waren Diagramme, und das Denken, das dorthin führte, verschwand in Meetings und Flurgesprächen
- Mit LLMs können Engineers Ideen interaktiv erkunden, Annahmen testen und Designarbeit auf eine Weise leisten, die einem natürlichen Gespräch näherkommt
- Doch Konversation ist kein Engineering: Konversation ist eine Methode zur Erkundung von Ideen, Engineering beginnt erst dann, wenn Ideen in einer Form festgehalten werden, die verifiziert, getestet und gewartet werden kann
- Die Aufgabe der nächsten Generation von Engineering-Tools wird darin bestehen, zu lernen, wie sich diese beiden Welten verbinden lassen, ohne die Disziplin zu verlieren, die komplexe Systeme verlangen
Fachwissen ist weiterhin wichtig
- Professionelle Software braucht weiterhin Engineers, die verstehen, wie die von ihnen gebauten Systeme tatsächlich funktionieren
- Tools können die Entwicklung beschleunigen, aber sie beseitigen nicht das Fachwissen, das nötig ist, um komplexe Systeme zu entwerfen, zu durchdenken und zu warten
- Die Branche ist gefährlich nah daran, diese Tatsache zu vergessen
- LLMs können erfahrene Engineers deutlich produktiver machen, ersetzen aber nicht die technische Disziplin, die für den Bau verlässlicher Systeme erforderlich ist
- Diese Tools sollten wirksam genutzt und nicht verehrt werden
1 Kommentare
Hacker-News-Kommentare
Ich stimme der Prämisse des Artikels nicht zu. Ich denke, Engineering insgesamt ist einfacher geworden, im Guten wie im Schlechten. Früher gab es auch schon viele Leute, die einfach massenhaft Null-Checks eingebaut haben, statt etwas wirklich zu verstehen. Jetzt wurde das nur auf große Skalierung ausgedehnt. Umgekehrt wird großartiges Engineering ebenfalls stärker verstärkt, und ich habe Fälle gesehen, in denen Features, die früher Wochen gebraucht hätten, in wenigen Tagen gebaut wurden
Es gibt Fälle, in denen selbst hundert Unit-Tests die Korrektheit von Code kaum beweisen können. Die meisten Entwickler wissen nicht, was ausreichend ist. Leute, die viel Vibe Coding betreiben, überlassen sogar das Testen der Maschine. Auf der Ebene des Systemdesigns braucht man Architekturen, die allgemeine Sicherheit und zeitliche Invarianten garantieren können. Die meisten zeichnen aber nur Kästen und Pfeile und zitieren „Best Practices“. Wie beim Sussman-Effekt, nach dem Software eher den Naturwissenschaften ähnelt, verbringt man mehr Zeit mit Beobachtung. GenAI als Werkzeug zu verwenden kann nützlich sein, aber das Denken einzustellen und sich auf das Werkzeug zu verlassen, ist gefährlich
Jedes Mal, wenn alle paar Jahre ein neues Werkzeug auftaucht, heißt es: „Der schwierige Teil des Software Engineerings ist gelöst.“ Die Produktivität schießt nach oben, die Demos beeindrucken, und die Branche lobt sich selbst. Aber kurz darauf folgen Stellenstreichungen. Es wäre schön, wenn es einen echten Durchbruch gäbe, aber wenn das Ergebnis Entlassungen sind, hat das wenig Wert. Am Ende bleibt dieselbe Frage — wenn das Ziel darin besteht, Arbeitsplätze abzubauen, was ist dann die Vision der Unternehmen, wenn Menschen ihren Lebensunterhalt nicht mehr bestreiten können?
Ich stimme der Aussage zu, dass „Coding nie der schwierige Teil war“. Experten wussten bereits, was sie bauen wollten; nur die wiederholte Arbeit war lästig
Junior-Entwickler, die sich zu stark auf AI verlassen, werden später den Preis dafür zahlen, dass ihnen die Grundlagen fehlen. Am Ende genießen nur erfahrene Leute echte Jobsicherheit
Der Behauptung „Code schreiben war nie der schwierige Teil“ kann ich nur schwer zustimmen. Natürlich ist es nicht immer schwierig, aber unter Zeitdruck wird das Schreiben von Code zum Flaschenhals. AI macht Versuche möglich, die früher unmöglich waren, und verschafft mehr Engineering-Zeit
AI hat auch gutes Engineering leichter gemacht. Letztlich ist sie ein Verstärker von Verhalten
Ich bin ein AI-Skeptiker, aber ich glaube nicht, dass sie die Jobs meiner Kollegen wegnimmt. Stattdessen spart sie mir Zeit. Ich nutze sie als Recherche-Tool besser als Google, zur Erkundung von Codebasen, zum Erzeugen von Hilfsfunktionen und zur Prüfung von Fehlern
In letzter Zeit wird die Unterscheidung zwischen Software Engineering und Research klarer. Für explorative Forschung ist AI ein erstaunliches Werkzeug. Wenn ich Potenzial sehe, wechsle ich in den SWE-Modus, verstehe und bearbeite den Code und verfeinere ihn mit meiner Erfahrung. Die Rolle von AI ist begrenzt, aber weiterhin nützlich
Wie viele weitere Modellgenerationen braucht es wohl, bis diese Leute (die Pessimisten) aufgeben? Zwei? Drei?