Künstliche Intelligenz
Warum Softwareentwicklung oft wie ein Escape Room ist
Ich habe vor kurzem eine Analogie gehört, die auf den ersten Blick ungewöhnlich wirkt, sich bei näherem Nachdenken jedoch als erstaunlich treffend erweist:
„Softwareentwicklung ist wie ein Escape Room.“
Golo Roden ist Gründer und CTO von the native web GmbH. Er beschäftigt sich mit der Konzeption und Entwicklung von Web- und Cloud-Anwendungen sowie -APIs, mit einem Schwerpunkt auf Event-getriebenen und Service-basierten verteilten Architekturen. Sein Leitsatz lautet, dass Softwareentwicklung kein Selbstzweck ist, sondern immer einer zugrundeliegenden Fachlichkeit folgen muss.
Je länger ich über dieses Bild nachgedacht habe, desto passender erschien es mir. Und weil ich diesen Vergleich für ausgesprochen gelungen halte, widme ich ihm heute diesen Beitrag. An dieser Stelle übrigens ein herzliches Dankeschön an Jörg für diese großartige Analogie.
Willkommen im Escape Room!
Stellen Sie sich also vor, Softwareentwicklung wäre wie ein Escape Room. Nur eben – ein bisschen anders. Oder genauer gesagt: ganz erheblich anders. Denn in diesem Escape Room hat ihn zuvor niemand für Sie getestet. Es hat Ihnen niemand gesagt, wie viele Räume es überhaupt gibt. Es existiert kein Spielleiter, der Ihnen Tipps gibt. Und es gibt nicht einmal die Garantie, dass überhaupt irgendwo ein Ausgang vorhanden ist. Das Beste daran: Während Sie sich darin befinden, zahlt jemand, der draußen wartet – und zwar auf Stundenbasis.
Empfohlener redaktioneller Inhalt
Mit Ihrer Zustimmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.
Softwareentwicklung ist ein Escape-Room // deutsch
Das Ziel ist natürlich klar: Sie wollen einen Weg nach draußen finden. Im übertragenen Sinne heißt das: Sie möchten, dass die Anwendung live geht, dass das Feature deployed wird, dass die CI/CD-Pipeline grün ist und die Kundin oder der Kunde zufrieden. Nur: Wie genau Sie dorthin gelangen, weiß zu Beginn niemand.
In einem Escape Room erhalten Sie immerhin ein kurzes Briefing, etwa:
„Sie haben 60 Minuten Zeit, hier ist Ihre Geschichte, viel Erfolg!“
Am Ende, egal ob Sie es geschafft haben oder nicht, öffnet jemand die Tür und sagt:
„Immerhin, Sie haben es versucht und ein paar Schlösser geknackt.“
In der Softwareentwicklung läuft das etwas anders:
„Wir benötigen dieses Feature so schnell wie möglich, am besten gestern.“
Wenn Sie dann nachfragen, was das Feature denn genau leisten soll und worum im Detail es gehe, kommt häufig eine Antwort wie:
„Ach, das ist nicht viel, nur ein paar Buttons.“
Das klingt harmlos – bis Sie die Aufgabe genauer betrachten und feststellen, dass dort im Grunde steht:
„Bitte entwickeln Sie uns kurzfristig ein Flugzeug. Nur eben ohne Tragflächen, die können wir später ergänzen. Aber fliegen sollte es schon jetzt.“
Was Sie hinter der Tür erwartet
Dann betreten Sie also Ihren Escape Room. Sie öffnen die erste Tür, stoßen auf das erste Rätsel – zum Beispiel: Welche Schnittstellen benötigen wir? Liefern diese tatsächlich die Daten, die laut Confluence dokumentiert sind? Oder kommt am Ende lediglich ein leeres JSON-Objekt zurück, weil irgendjemand irgendwo ein return
hingeschrieben hat, dabei jedoch den Rückgabewert vergessen hat?
Trotzdem denken Sie sich, dass alles in Ordnung sei und Sie das schon irgendwie hinbekommen werden. Und tatsächlich lösen Sie das erste Rätsel. Sie öffnen die nächste Tür – und stehen plötzlich in einem Raum mit zwölf weiteren Türen, einer Falltür und einem zufällig umherfahrenden Laser, der Ihnen zuerst einmal Ihren gesamten Data-Layer zerschießt.
So geht es weiter. Manchmal lösen Sie ein Problem und sind sicher, es fast geschafft zu haben. Dann öffnen Sie die nächste Tür – und plötzlich bricht die Performance komplett ein. Oder die Security wird zum Problem. Oder Ihre CI/CD-Pipeline stürzt ab. Selbstverständlich nur bei jedem zweiten Durchlauf, mit einer ominösen Meldung wie „exit code 137“, einfach weil Jenkins gerade beschlossen hat:
„Nö, heute mal nicht.“
Vielleicht stellen Sie auch fest, dass das Legacy-System auf der Gegenseite noch auf Java 6 läuft, ausschließlich SOAP spricht und aus unerfindlichen Gründen zufällige Timeouts produziert. (Spoiler: Die Timeouts sind gar nicht zufällig. Das System hasst Sie einfach.)
Typische Probleme
Dann natürlich der Klassiker:
„Also bei mir läuft’s.“
Diesen Satz kennen Entwicklerinnen und Entwickler zur Genüge. Natürlich läuft es bei der Kollegin oder dem Kollegen auf dem Notebook, weil dort die Umgebungsvariable NODE_ENV
auf „chaos“ gesetzt ist und noch fünf Docker-Container von vor drei Jahren laufen, die aber ausschließlich auf diesem einen Rechner jemals funktioniert haben.
Mitunter sieht ein Problem riesig aus, lässt sich dann jedoch in zwei Tagen erledigen, weil irgendeine Library es längst gelöst hat. Manchmal halten Sie es für trivial – und es kostet Sie Wochen, weil Sie plötzlich Merge-Konflikte in Dateien haben, die eigentlich gar nicht mehr existieren (sollten). So nach dem Motto:
„Warum liegt hier eigentlich noch eine package-lock.json von 2018 herum?“
In einem Escape Room hängt immerhin eine Uhr an der Wand. 60 Minuten, dann ist Schluss. In Softwareprojekten hingegen heißt es meist:
„Wir schätzen das auf etwa drei Monate.“
Was, wenn man ehrlich ist, bedeutet:
„Drei Monate plus minus alles.“
Denn Sie wissen schlicht nicht, ob Sie hinter der nächsten Tür ein kleines Zahlenschloss finden oder eine riesige Hydra aus zwanzig Services, die sich gegenseitig aufrufen und natürlich komplett auseinanderfallen, sobald Sie versuchen, auch nur einen davon zu aktualisieren.
Spaß mit Stakeholdern …
Dann treten die Stakeholder auf den Plan. Im Escape Room stehen die wenigstens nicht mit Ihnen im Raum. In Softwareprojekten schon. Oder sie kommen alle fünf Minuten herein und fragen:
„Könnt ihr kurz zeigen, wie weit ihr schon seid?“
Und das, während Sie gerade herauszufinden versuchen, warum Ihr Deployment plötzlich alle Assets verschluckt und der Health-Check Ihrer API neuerdings nur noch den HTTP-Status-Code 418
zurückliefert („I’m a Teapot“). Wie sieht der Fortschritt also aus, den Sie zeigen könnten? Ein komplett rotes Dashboard und ein Entwickler, der seit drei Stunden reglos auf sein Terminal starrt …
… und Anforderungen
Mein persönliches Lieblingsrätsel sind die Anforderungen. Am Anfang heißt es:
„Wir brauchen nur dieses eine Feature.“
Eine Woche später:
„Ach übrigens, könntet ihr das bitte alles Event-basiert umsetzen? Oder doch lieber mit synchronen REST-Calls? Am besten noch mit Dark Mode, Predictive AI und einem Self-Service-Portal, das Forecasts für die nächsten zwölf Monate liefert.“
Klar, warum nicht. Für mich entwickeln sich Requirements oft wie Pokémon: Zuerst ist es nur ein kleiner Button. Dann wird es ein Formular. Und irgendwann mutiert das Ganze zu einem Workflow mit OAuth, Approval-Chain und einem komplexen Dashboard.
„Aber beim Hausbau …“
Wenn man das – vielleicht etwas nüchterner als hier – im geschäftlichen Alltag zu erklären versucht, kommt garantiert jemand und sagt:
„Aber beim Hausbau geht das doch auch.“
Ja, aber wissen Sie was? Beim Hausbau ist auch alles bekannt. Da gibt es einen Plan. Hier stehen die Wände, dort kommen die Fenster hin, fertig. Kein Architekt kommt zwei Monate nach Baubeginn auf die Baustelle und sagt:
„Wir haben uns das noch einmal anders überlegt. Das Dach hätten wir jetzt gern aus Käse.“
In der Softwareentwicklung passiert genau das – und zwar ständig. Entweder, weil die Kundin oder der Kunde merkt, dass eigentlich etwas ganz anderes benötigt wird. Oder weil Sie unterwegs feststellen, dass sich unter dem Fundament noch ein riesiger Sumpf aus Altlasten verbirgt. Oder aus hundert anderen Gründen. Dann sind Sie schon froh, wenn Sie zumindest ein paar stabile Pfosten einziehen können, bevor Ihnen alles absäuft.
Wie geht man damit um? Indem man iterativ arbeitet. Man versucht nicht, den gesamten Escape Room mit allen Rätseln auf einmal zu lösen, sondern nimmt sich ein Rätsel nach dem anderen, Raum für Raum, Tür für Tür. Man testet regelmäßig, schreibt Logs (bevor es knallt), baut Metriken ein, macht Fehler früh sichtbar. Und man hat vor allem keine Angst, einmal das Licht anzuschalten und nachzusehen, was dort wirklich kreucht und fleucht.
Das Team ist entscheidend
Dabei macht das Team einen erheblichen Unterschied. Es ist ein großer Unterschied, ob Sie mit einem eingespielten Team von drei Personen in einem Escape Room stehen, die das schon hundertmal gemacht haben – oder mit einem Haufen planloser und nervöser Menschen, die von nichts eine Ahnung haben. Ein gutes Team erkennt Muster. Ein gutes Team weiß, wo man Tests sofort hinschreibt, statt später hektisch die Coverage zu schönen. Ein gutes Team baut Logging nicht erst dann ein, wenn es bereits brennt. Und es richtet CI/CD nicht fünf Minuten vor Schluss ein, wenn die Kundin oder der Kunde schon danebensteht und fragt, warum auf Staging noch das Feature von letzter Woche läuft.
Aber auch das beste Team kann Ihnen nicht garantieren, dass sich hinter der nächsten Tür nicht ein Monster verbirgt, das sagt:
„Hallo, ich bin Ihr zehn Jahre altes Legacy-CRM. Ich spreche nur EBCDIC und bin fest verdrahtet mit einer Oracle-Version, die offiziell seit 2012 nicht mehr unterstützt wird.“
Wenn Sie auf dieser Datenbank dann einmal ein SELECT
ausführen, erhalten Sie entweder 200.000 Zeilen – oder eben gar nichts. Bei derselben Query, mal so, mal so. Aus Gründen.
Die letzte Tür – geschafft?
Doch irgendwann kommt (hoffentlich) dieser Moment, in dem Sie tatsächlich vor der finalen Tür stehen. Alle Tests sind grün. Die Pipeline läuft. Das Deployment ist sauber. Das fühlt sich ungefähr so an, wie wenn Sie im Escape Room den letzten Schlüssel drehen, die Tür aufspringt und draußen jemand mit einer Konfettikanone auf Sie wartet. Zumindest so lange, bis jemand sagt:
„Könnten wir jetzt noch schnell einen Admin-Bereich einbauen? Am besten bis morgen, das wäre super.“
Das Schöne daran ist: All das gehört irgendwie auch dazu und macht ein Stück weit den Reiz dieses Berufs aus. Softwareentwicklung ist ein Escape Room. Nur größer, chaotischer, unvorhersehbarer. Manchmal extrem nervenaufreibend, manchmal frustrierend, aber immer mit diesem kleinen Kick, wenn Sie ein Rätsel gelöst haben. Wenn Sie eine Tür öffnen und dahinter nicht noch ein Drache wartet, sondern tatsächlich der Ausgang. Dann können Sie hinausgehen, sich kurz schütteln und voller Stolz sagen, dass Sie es geschafft haben. Zumindest bis jemand von hinten ruft:
„Übrigens, wir hätten da noch ein neues Projekt. Dieses Mal mit Machine Learning, IoT und Blockchain. Das sollte jetzt aber schnell gehen, oder?“
(rme)