Ich verlinkte einen Auszug aus einem Paper, den ich sehr genieße: How Complex Systems Fail
Das Paper ist alt und befasst sich mit Patientensicherheit in Krankenhäusern. Es passt aber (nach allem, was ich lese) wie gespuckt auf solche Dinge wie Energieversorgung, Stadtverwaltung, und Luftfahrzeuge. Einige Dinge würde ich auf noch mehr Bereiche anwenden (warum haben Männer Nippel und warum werde ich meinen Ohrwurm nicht los?) … aber ich schweife ab.
Der Auszug gibt ein paar wichtige Hinweise darauf, wie man komplexe Systeme härtet. Und ich sehe diese Strategien in Energieversorgung, Stadtverwaltung, Luftfahrt … aber ich tue mich schwer, sie in komplexen Software-Systemen zu entdecken!
Noch schwerer tue ich mich damit, das irgendwie in Worte gebacken zu kriegen. Vergebt mir die Wall of Text.
Beispielhaft: Das Paper erklärt gut, warum in meinem Rathaus drei Mal so viele Leute arbeiten, wie man instinktiv denken würde: Von Krankschreibungen über kaputte Drucker und Fremdsprachler bis hin zu abgebrochenen Schlüsseln und Sparmaßnahmen wird jeder Ablauf in der Stadtverwaltung ständig sabotiert. Diese ständigen Failures haben viele Defenses erzwungen, und nichts davon reicht *allein* aus, um meine Stadtverwaltung kollabieren zu lassen. Einige Defenses sehen wie Flaws aus („Warum spreche ich den dritten Sachbearbeiter in drei Tagen?!“) und niemand würde abstreiten, dass das System im Degraded Mode läuft. Auch bewirkt jede Veränderung unvorhergesehene Nebenwirkungen, die die Performance nicht unbedingt verbessern (digitalisiert man die Anträge, wird plötzlich mehr ausgedruckt).
Also, bis der Ransom-Erpresser eures Vertrauens kommt jedenfalls. Denn eine einzelne Ransomware-Attacke reicht allem Anschein nach sehr wohl aus, um das System lahmzulegen. Und obwohl wir solche Angriffe seit Jahrzehnten haben, bilden sich keine Defenses, denn einigen Verwaltungen passiert das ja schon zum zweiten oder dritten Mal. Und die Defenses, die wir haben, reichen offenbar nicht aus, um irgendwas zu retten.
Das finde ich … bemerkenswert.
Ich könnte übrigens auch Hackernews eine Stadtverwaltung von First Principles herleiten lassen, die nur einen Bruchteil der Ressourcen verbraucht, ein Vielfaches schneller ist … und sie wäre garantiert einen Tag nach der Eröffnung an unvorhergesehenen Problemen kollabiert.
Und noch ein Beispiel aus dem anderen Thread: Alle OS-Kernel heutzutage sind komplex und haben gleichzeitig höchste Sicherheitsanforderungen. Nichtsdestotrotz verfolgt man dort eine rigorose Korrektheits-Politik. Die Leute würden auf die Barrikaden gehen, wenn der Linux-Kernel plötzlich dreifach Speicher verbrauchen würde, um alle Datenstrukturen redundant abzuspeichern („wenn nun ein Byte kaputt geschrieben wird, wiegt der Fehler nur noch 33% so schwer“). Es gäbe Shitstorms, wenn der Kernel bei Paging-Fehlern einfachen sagen würde „nun sind die 16 KiB Daten halt weg; egal – der SQL-Prozess wird es schon irgendwie selber erkennen und sich drum kümmern“ statt mit HALT zu dumpen damit man der Ursache auf den Zahn fühlen kann. Aber so ziemlich jedes andere komplexe System (natürlich wie künstlich) hat ganz genau das entwickelt! Augenscheinlich unnötige Redundanz und viel zu viele Schichten!
Natürlich kann Software genau so werden – alle Variablen dreifach an drei verschiedenen Stellen; alle Funktionen fünffach; um jeden Zugriff ein if von dem man nicht weiß, ob es jemals false werden kann – aber ich hatte solche Systeme in der Hand und sie waren unwartbar. Wegschmeißen und neu schreiben.
Was ist an komplexen Software-Systemen anders als an komplexen Systemen in Energieversorgung, Gesundheitsverwaltung, Luft- und Raumfahrt? Warum überleben solche Systeme in anderen Domänen?
Ist digital tatsächlich so viel anders als Analog, dass sich ein Kampf gegen die Entropie mehr lohnt als eine Kapitulation? (Meine CPU kann vier Milliarden Mal pro Sekunde fehlerfrei addieren, 40 Jahre lang – finde mal ein Zahnrad, das sich eine Milliarde Mal fehlerfrei dreht!)
Ich frage auch, weil ich bei Machine Learning / GAI einen Trend zu Redundanz und Degraded Performance beobachte. Sollte sich herausstellen, dass solche Systeme von Natur aus nützlicher sind als das, was gerade auf eurer CPU läuft, möchte ich das lieber jetzt wissen als später. Allein die Implikationen für End-to-End-Tests vs. Unit Tests wären enorm.