Warum KI die Softwareentwicklung (noch) nicht überflüssig macht


Der Hype um ChatGPT und andere KI Tools ist so präsent wie nie. Immer mehr Aufgaben können von einer KI übernommen werden . Auch in der Berichterstattung liest man immer häufiger, dass KI immer neue Durchbrüche in der Softwareentwicklung erzielt. So soll ChatGPT sogar schon ein Vorstellungsgespräch bei Google als Level-3 Ingenieur mit Jahresgehalt von über $180.000 bestanden haben.

Wenn sogar Google scheinbar bereit wäre ChatGPT als Entwickler zu beschäftigen, wozu brauchen wir dann noch dich? Ein Computer wird nicht krank, braucht keinen Urlaub, macht keine Pausen… Also vermutlich der Traum eines jeden Personalverantwortlichen. Stell dir einfach einmal vor, wie viel Geld die Unternehmen sparen würden, wenn sie keine lästigen Entwickler mehr beschäftigen müssten, die immer neue Forderungen nach Gehalt und Freizeit stellen. Das klingt doch nach einer tollen Welt für Unternehmen, oder nicht?

Ich möchte Dir in diesem Beitrag aufzeigen, warum die aktuelle “KI” noch weit davon entfernt ist, uns Entwickler komplett zu ersetzen.

Wie werden wir Entwickler los?

Der Versuch, Entwickler “los zu werden” ist tatsächlich nicht neu. Besonders in den letzten Jahren kamen immer mehr “No Code” Lösungen oder generell Baukästen auf den Markt. Alle eint auf die ein oder andere Art folgendes Versprechen: “Mit unserer Lösung brauchst du keine teuren Entwickler mehr und kannst dir alles in wenigen Klicks selber zusammenklicken”.

Auf den ersten Blick klingt das fantastisch - und zwar für beide Seiten: Die Unternehmen sparen sich die Kosten für einen Entwickler, der nur stupide Aufgaben umsetzt und du kannst in einem anderen Unternehmen “richtige” Probleme lösen.

Aber wenn wir jetzt mal in die Realität zurückkehren, müssen wir uns kurz mit dem Thema Erwartungshaltungen beschäftigen. Der Entscheider hört das oben genannte Versprechen, dass die “No Code” Lösung alle Probleme löst und alles wunderbar einfach ist. Daraus könnte zum Beispiel die folgenden Erwartungen resultieren:

  • Egal, welches Problem vorliegt; Ich kann es einfach selbst lösen
  • Die Lösung des Problems erfolgt schneller & kostengünstiger
  • Die Wartung und der Betrieb ist nicht notwendig - es wird ja alles aus einer Hand angeboten

Solche Aussagen habe ich in der Realität schon öfter von Entscheidern gehört, die gerade aus einem Verkaufsgespräch mit einem entsprechenden Anbieter kamen.

Lass uns diese utopischen Erwartungshaltungen mal in etwas übersetzen, was meiner Meinung nach eher der Realität entspricht:

  • Solange du nur Probleme hast, die von dem System vorgesehen sind, kannst du dir die Lösungen selbst “zusammenklicken”
  • Dein Produkt kommt schnell auf den Markt, aber wenn du später Anpassungen machen möchtest, musst du teilweise viel Zeit und Geld investieren, um deine Wünsche passend umzusetzen. (Sofern das überhaupt möglich ist)
  • Die Wartung und der Betrieb funktionieren so, wie es der Anbieter vorgibt und solange der Anbieter existiert. Du brauchst eine wichtige Wartung? Macht der Anbieter, wenn er Zeit dafür hat

Aber warum sprechen wir hier über “No Code”, wenn es eigentlich um KI gehen soll? Ich finde, es gibt eine unglaublich große Überschneidung zwischen den Versprechungen aus dem Bereich “No Code” und den Erwartungen, die an KI Lösungen gestellt werden.

Der Kern des Problems beruht darauf, dass in der breiten Masse ein vollständig realitätsfernes Bild der Softwareentwicklung vorherrscht. Auch wenn sich das Bild von uns in den letzten Jahren gewandelt hat und wir nicht mehr alle als langhaarige, blasse, unhygienische Nerds gesehen werden, die in irgendwelchen Kellern im dunkeln für sich selbst arbeiten, gesehen werden, gibt es doch sehr wenig Menschen die wirklich einschätzen können, was die Aufgabe der Softwareentwicklung eigentlich ist.

Die Aufgaben eines Softwareentwicklers

In den meisten Fällen sind die Probleme, die wir lösen müssen, im Kern keine technischen Probleme. Es sind Anforderungen, die aus der realen Welt, aus Gesetzgebungen oder aus Marketing Aspekten heraus entstehen. Lass uns dazu mal exemplarisch ein Problem betrachten, wie es in der Realität vorkommen könnte:

Aufgrund von Gesetzesänderungen wird es in einigen Ländern Pflicht, für Produkte anzugeben, aus welchen trennbaren Bestandteilen die Verpackung besteht, aus welchen Materialien diese hergestellt werden und wie diese zu entsorgen sind. Die Entscheider haben bereits mit dem Designer der Verpackung gesprochen. Aufgrund gesetzlicher Vorgaben zur Lesbarkeit der Angaben ist kein Platz mehr auf der Verpackung. Ein zusätzlicher Beipackzettel in der Verpackung ist auch keine Option. Wie können wir dieses Problem lösen?

Und hier setzt die Mentalität eines guten Entwicklers ein. Sobald ich eine solche Anforderung lese, entsteht in meinem Kopf der Wunsch, (man könnte sogar sagen:der “Zwang”) eine Lösung dafür zu erarbeiten. Ich möchte dir im Folgenden einmal versuchen niederzuschreiben, was in meinem Kopf an Fragen, Antworten und Ideen entstehen:

  • Lasst uns einen QR-Code auf die Packung drucken. Zusätzlich drucken wir noch den Link ab, um auch Menschen ohne Smartphone Zugang zu gewähren.
  • Da wir den Link drucken wollen, muss dieser möglichst kurz sein, um noch lesbar zu bleiben.
  • Als Ziel für den Link können wir nicht den bestehenden Online-Shop verwenden, da wir die Informationen auch in Sprachen anbieten wollen, die der Shop nicht unterstützt.
  • Kann es sein, dass für denselben QR-Code verschiedene Informationen angezeigt werden müssen? z. B. gleiche Sprache, aber unterschiedliche Länder
  • Woher kommen die Infos für die Webseite? Eine manuelle Pflege kommt nicht in Frage. Alle Informationen liegen im PIM des Unternehmens vor und müssen entsprechend importiert werden.
  • Was machen wir, wenn beim Design der Verpackung ein Tippfehler in der Artikelnummer vorliegt? Wir sollten von Anfang an ein Weiterleitungssystem vorsehen, mit dem solche Fehler korrigiert werden können.
  • Wie oft ändern sich die Informationen und was ergibt sich daraus für einen Import?
  • Mit welcher Technologie wollen wir die Seite umsetzen und wie wird sie bereitgestellt?
  • Wie können wir sicherstellen, dass die Informationen in China, den USA und Deutschland zuverlässig abgerufen werden können?
  • Welche Art von Überwachung und Tracking müssen wir implementieren, um sicherzustellen, dass die Seite abrufbar ist?
  • Wie bauen wir die URL Struktur auf? Da es auch Produkte gibt, die gruppiert angezeigt werden sollen, haben wir unterschiedliche Arten von Seiten. Eine Struktur wie ”/<artikelnummer” ist damit für die Zukunft unflexibel und wir sollten einen Prefix in die Route einbauen. Also zum Beispiel “/produkt/<artikelnummer>”. Da wir international sein wollen, nehmen wir lieber “/p/<artikelnummer>”
  • Welche Anforderungen ergeben sich für den Datenschutz und wie können wir trotz Datensparsamkeit ein gutes Benutzererlebnis bieten?

Moment! Die ursprüngliche Idee war es doch nur einen QR-Code auf eine Packung zu drucken und plötzlich sind wir bei dutzenden Problemen, die wir lösen müssen. Genau das ist der Punkt, was meiner Meinung nach die Aufgabe eines Softwareentwicklers ist. Du musst erkennen, dass eine vermeintlich einfache Anforderung viele Herausforderungen bereithält, die es zu lösen gilt.

Die Kunst der Softwareentwicklung liegt jetzt darin zu wissen, welche Fragen du stellen musst und welche Aspekte du berücksichtigen musst, um eine Lösung bereitzustellen, die langfristig alle Parteien glücklich macht.

Wenn ich meine Tätigkeiten als Entwickler betrachte, dann kann ich mit Überzeugung sagen, dass ein Großteil meiner Zeit dafür drauf geht, Fragen zu stellen, Probleme zu erkennen und mir über Lösungen Gedanken zu machen. Das tatsächliche Programmieren, also das Schreiben von Code, macht in dieser Betrachtung vielleicht noch 10-20% der Arbeitszeit aus.

Was kann KI leisten?

Wenn ich in diesem Artikel von KI spreche, dann beziehe ich mich auf den aktuellen Hype um “Large Language Models” oder kurz “LLM”, zu denen auch ChatGPT gehört.

In einem Selbstversuch habe ich ChatGPT gebeten, meine Arbeit als Softwareentwickler zu übernehmen und das Vorgehen zu der oben genannten Anforderung zu erarbeiten. Wie so oft war ich im ersten Moment positiv überrascht, wie leistungsfähig dieses Tool ist. Unter anderem wurde mir vorgeschlagen, eine Lösung mit QR-Codes umzusetzen. Ich bräuchte dafür eine Datenbank für Produktinformationen undeine API für externe Systeme. ChatGPT empfahl mir, auf eine benutzerfreundliche Oberfläche zu achten und Tests & Feedback durchzuführen bzw. einzuholen.

Ein toller Anfang, oder?. Aber hier fällt ein ganz wichtiger Aspekt auf, den die KI “vergessen” hat. Vergessen in Anführungszeichen, weil sie sich so verhält, wie die meisten Menschen es sich wünschen. Du gibst ihr eine Aufgabe und dir wird eine passende Lösung präsentiert. Was dabei fehlt? Dir werden keine Rückfragen gestellt und es fehlen Informationen in der Anforderung. Bei aktuellen KI Modellen liegt meiner Meinung nach der Fokus darauf, dir eine Antwort zu liefern, die dich für den Moment zufrieden stellt. Die Antwort beantwortet scheinbar deine Frage oder Anforderung, lässt dabei aber relevante Aspekte außer Acht.

Wenn du nun mit der Erwartungshaltung herangehst und erwartest, dass die KI dein Problem löst, dann bist du schnell in einer Bubble gefangen und kannst auch schnell das Wesentliche aus den Augen verlieren. Ich habe mein Gespräch von oben mit ChatGPT etwas weiter geführt und mir wurde ein Datenbankmodell entworfen, das Code in PHP geschrieben hat, um die Verbindung mit der Datenbank herzustellen und CRUD Operationen auszuführen. Alles tolle Dinge, die ich aber gar nicht brauche. In der konkreten Anforderung würde ich persönlich keine Datenbank einsetzen, da es die Anforderung schlicht nicht notwendig macht. Auch wäre PHP für diese Art von Seite nicht meine favorisierte Lösung.

Es wird Menschen geben, die mir sagen, dass ich einfach nicht die richtigen Prompts geschrieben habe. Und denen möchte ich an dieser Stelle gerne recht geben. Ja, wenn ich die richtigen Prompts geschrieben hätte, hätte ChatGPT mir sicherlich die richtige Richtung aufgezeigt und wäre sicherlich auch eine Unterstützung bei der Umsetzung gewesen.

Was kann KI (noch) nicht leisten?

Wir haben weiter oben festgestellt, dass es das Hauptziel der KI ist, dir eine Antwort zu geben, die dich für den Moment zufrieden stellt. Als Entwickler ist es aber deine Aufgabe, Probleme so zu lösen, dass die Lösung auch längerfristig Bestand hat. Bei der Konzeption musst du Probleme berücksichtigen, von denen du noch nicht weißt, dass sie existieren. Deine Erfahrung wendest du an, um an den richtigen Stellen die Anforderungen so zu erweitern, dass der “Kunde” mit der Lösung zufrieden ist.

Was KI meiner Meinung nach aktuell noch nicht beherrscht, ist den Wahrheitsgehalt von Aussagen zu bewerten. Das Ziel, eine zufriedenstellende Antwort zu verfassen, hat nicht immer eine direkte Überschneidung mit der Anforderung, eine gute Lösung zu erzeugen. Auch wenn die Trefferquote in vielen Fällen hoch ist, bedarf es immer einer zusätzlichen Schicht, die die Qualität der generierten Vorschläge überprüft.

Wenn ich mir beispielsweise das Datenmodell (das wir eigentlich gar nicht brauchen) und den PHP-Code ansehe, die ChatGPT für meine Anforderung erzeugt hat, dann fällt bei kurzer Betrachtung folgendes auf:

Der Code sieht eine Filterung nach Sprache vor, die in der Datenbank aber nicht gespeichert oder abgebildet werden kann. Zusätzlich werden beim Schreiben in die Datenbank Felder beschrieben, die gar nicht existieren.

An diesem Punkt musst du dir natürlich die Frage stellen, ob es für dich einfacher ist, bestehenden Code so umzubauen, dass er irgendwie funktioniert oder ob du gleich einen funktionierende Lösung implementieren möchtest, die auch wirklich zu deinen Anforderungen passt.

Zusammenfassend lässt sich sagen, dass der Anwender dazu in der Lage sein muss, die richtigen Fragen an die KI zu stellen, er muss die Anforderungen und Antworten in Frage stellen und er muss bewerten, ob die Lösungen für die gegebene Anforderung korrekt sind oder nicht.

Wem würdest du das zutrauen, wenn nicht dir als Entwickler?

Ist KI nur ein leeres Versprechen?

Genau wie bei meinem Beispiel mit den “No Code” Lösungen kommt es darauf an, mit welcher Erwartungshaltung du an die Sache herangehst. Erwartest du eine Maschine, die dir selbstständig alle Probleme vom Hals schafft und alle Probleme für dich lösen kann, dann wirst du enttäuscht werden.

Entscheider in Unternehmen müssen verstehen, dass KI ein Werkzeug ist. Ein sehr weit entwickeltes und hochgradig automatisiertes Werkzeug, aber eben doch nur ein Werkzeug. Wenn dir also das nächste Mal jemand versucht, einzureden, dass KI die Softwareentwicklung überflüssig machen wird, dann frag ihn doch einfach mal, ob er auch von einem Hammer verlangt, ein Haus zu bauen?

Aber würdest du den Hammer gleich wegwerfen, weil er kein Haus für dich baut? Möchtest du doch nur einen Nagel einschlagen, ist er mit hoher Wahrscheinlichkeit die richtige Wahl.

Und genauso verhält es sich auch mit KI: KI wird oder ist bereits eines der Werkzeuge in unserem Werkzeugkasten, um uns unsere tägliche Arbeit als Softwarenentwickler einfacher zu machen. Für die Erfüllung unseres Jobs sind und werden wir schlussendlich aber weiterhin selbst verantwortlich sein.