Da Du diesen Text hier liest, bist Du offensichtlich genau so ein Nerd wie wir. Komm zu uns und bewerbe Dich bei ///\/ DevBoost: https://devboost.com/karriere (https://api.devboost.de)

Evolution von Softwareprodukten

15.11.2022 / Mirko Seifert

Was Softwareprodukthersteller von der Evolutionsbiologie lernen können

Softwareprodukthersteller und ihre Produkte werden oft mit bestimmten Lebewesen wie z. B. Dinosauriern oder Einhörnern verglichen. Dieser Vergleich wirft einige interessante Fragen auf. Wie wird ein Produkt zum Dinosaurier? Ist es damit automatisch vom Aussterben bedroht? Gibt es Einhörner tatsächlich und wenn ja wo leben sie? Wie entstehen sie eigentlich? Welche anderen Organismen existieren noch und welcher Organismus hat die besten Überlebenschancen?

Um uns diesen Fragen zu nähern, wollen wir heute noch einmal unser eingestaubtes Biologiewissen und insbesondere Charles Darwins Evolutionstheorie ausgraben und schauen, was wir daraus für Softwareprodukte lernen können.

Evolution und Softwareprodukte – Wie passt das zusammen?

Im Kern beschreibt die Evolutionstheorie von Charles Darwin, dass sich alle Individuen oder Lebewesen an ihre Umgebung anpassen müssen. Welche Arten sich entwickeln und durchsetzen, wird durch Variation und natürliche Selektion bestimmt. Die Variation erfolgt dabei durch Veränderung (Mutation) der Gene. Die natürliche Selektion erfolgt indem bestimmte Varianten besser an die Umgebung angepasst sind und somit höhere Überlebens- und damit Fortpflanzungschancen haben.

Überträgt man diese Idee auf Softwareprodukte so sind die Parallelen schnell klar. Der Source Code eines Softwareproduktes entspricht der DNA bei Lebewesen. Der Markt entspricht der Umgebung in der Softwareprodukte überleben müssen. Die Variation entsteht durch die Weiterentwicklung von Produkten oder auch durch das Entstehen völlig neuer Produkte (z. B. in Start-ups). Die Vielzahl der Unternehmen, die am Markt teilnehmen, entspricht der Gesamtpopulation. Die natürliche Selektion implementieren die Kunden, indem sie sich für bestimmte Produkte entscheiden und diese auch bezahlen. So überleben (genau wie in der Evolution) langfristig die Produkte, welche am besten an den Markt angepasst sind.

Geht man bei diesem Vergleich noch weiter ins Detail, ergibt sich die spannende Frage. Wie genau sieht das Überleben bzw. der Tod eines Produkts aus? Nimmt man z.B. den Erfolg oder Misserfolg eines Unternehmens als das Kriterium für Überleben oder Tod so ergeben sich sehr lange Evolutionszyklen. Oft dauert es Jahre bis z. B. klar ist, ob ein Start-up und das dazugehörige Produkt am Markt funktionieren oder nicht. Arbeitet man mit solchen Zyklen dauert es sehr lange bis sich neue „Arten“ bilden. In einer Umgebung, die sich sehr schnell ändert, braucht man aber viel kürzere Produktgenerationen, um mit der Veränderung überhaupt Schritt zu halten. In Märken, die sich sehr schnell ändern, wird es so unglaublich schwer überhaupt ein Produkt zu entwickeln. Wie kann das gelingen?

Digitale Natürliche Selektion

Um schnellere Evolutionszyklen zu ermöglichen, müssen wir darüber nachdenken andere Mechanismen für den Tod einzelner „digitalen Individuen“ zu erlauben. Oft hängen wir so sehr an unserer Codebasis, dass wir nicht sehen, dass sie nicht mehr zur Umgebung, d. h. den Bedürfnissen des Marktes und der Kunden passt. Eine bewusste Entscheidung einzelne Produkte oder Produktbestandteile „sterben zu lassen“ indem sie nicht mehr weiterentwickelt werden, kann hier eine Strategie sein, um sich schneller anzupassen und langfristig zu überleben. Um das Überleben des Produkts als Ganzes zu sichern, müssen sich Entwickler auch damit abfinden, dass regelmäßig einzelne Bestandteile „abgeschnitten“ werden müssen und den Organismus „fit zu halten“.

Auch andere digitale Assets müssen die Möglichkeit bekommen ihre Existenz zu beenden. Sehr alte Bug-Tickets oder Feature-Requests passen u. U. nicht mehr zur aktuellen Umgebung und müssen daher (aus)gelöscht werden.

Auch die Frage welche digitalen Organismen überleben und anhand welcher Kriterien wir über das Überleben bestimmen ist sehr interessant. Über die Weiterexistenz eines gesamten Softwareprodukts entscheiden am Ende die Kunden bzw. der von ihnen generierte Umsatz. Der Organismus „Softwareprodukt“ ernährt sich gewissermaßen vom Umsatz. Wird das Softwareprodukt mit Hilfe von Venture Capital (VC) entwickelt, muss man sich bewusst sein, dass hier eine künstliche Umgebung geschaffen wird. Es werden Organismen (Einhörner) künstlich „gefüttert. Sie überleben, obwohl sie ohne Hilfe in der rauen, realen Welt vielleicht sterben würden und entgehen damit zeitweise der natürlichen Selektion. Langfristig wird die Entscheidung über Gedeih und Verderb eines Produkts aber in allen Fällen am Markterfolg festgemacht. Diesen Grundsatz sollten alle Beteiligten berücksichtigen. Anderenfalls pflegt man u. U. eine Kreatur mit viel Aufwand, die unweigerlich dem „Tod am Markt“ geweiht ist.

Die Kriterien für das Überleben kann man aber auch auf einzelne Produktbestandteile (z. B. einzelne Features) beziehen. Auch hier gilt, dass am Ende allein der Kunde entscheiden muss, was überlebt und was nicht. Heute treffen oft Produkt-Manager oder sogar Entwickler diese Entscheidung eher intuitiv. Um sein Produkt allerdings optimal an die Umgebung anzupassen (d. h. genau die Features zu liefern, die Kunden auch nutzen), ist ein Monitoring der Nutzung des Softwareprodukts unabdingbar. Schaut man sich erfolgreiche Softwareprodukte an so findet man auch genau dieses Vorgehen (z. B. detaillierte Anwendungs- und Nutzer-Metriken).

Softwaredinosaurier vs. Softwarekakerlake

Bei der Entstehung von evolutionären Varianten gibt es zwei interessante Modelle. Zum einen können sich existierende Organismen graduell weiterentwickeln und zum anderen können völlig neue Organismen auf der Basis komplett anderer Bestandteile (d. h. Vorfahren) entstehen. Beides können wir auch in der Softwareentwicklung sehen. Etablierte Unternehmen entwickeln ihre gewachsenen Systeme weiter, um am Markt konkurrenzfähig zu bleiben. Start-ups hingegen versuchen mit neuen Softwareprodukten die etablierte Konkurrenz rechts zu überholen – ein Kampf zwischen Dinosaurier und Kakerlaken. Auch hier gilt: Je schneller sich die Umgebung verändert, desto besser sind die Chance für die Kakerlake. Sie hat weniger „evolutionären Ballast“ und kann sich u. U. schneller anpassen.

Der Fakt, dass Kakerlaken die Dinosaurier überlebt haben, spricht für die evolutionären Vorteile kleiner, anpassungsfähiger Systeme. Im Kontext von Softwarearchitekturen geht der Trend definitiv ebenfalls in diese Richtung. Microservices oder Serverless Functions empfehlen komplexe Systeme aus kleineren eigenständigen Produktbestandteilen aufzubauen, mit der Hoffnung, dass diese sich schneller und leichter an neue Anforderungen anpassen können. Die Komplexität großer Systeme bzw. Organismen (siehe Dinosaurier) überfordert uns bei extremen Veränderungen der Umgebung. Das Pendant zum Meteoriteneinschlag kann für ein Softwareunternehmen schon ein einzelner neuer, großer Kunde mit besonderen Anforderungen sein.

Die DNA eines kleinen Organismus ist leichter zu analysieren und zu verstehen. Genau wie eine kleine, abgegrenzte Codebasis sehr viel leichter an neue Anforderungen anpassbar ist. Der Trick besteht hier darin möglichst unabhängige digitale Organismen zu schaffen, die allein überlebensfähig sind. Schneidet man hingegen einen Monolithen (sprich einen Dinosaurier) so ungünstig in Module, dass diese allein keinen Kundennutzen erzeugen, so entstehen keine einzeln überlebensfähigen und weiterentwickelbaren Organismen. Evolutionäre Vorteile bleiben so auf der Strecke.

Wir mutieren unser Softwareprodukt – Aber oft falsch

Eine wichtige Rolle in der Evolution spielen auch Mutationen – Veränderungen der DNA, die „von außen“ erzeugt werden und dafür sorgen, dass sich verbesserte Organismen entwickeln können. Erst durch diese Veränderung wird es möglich sich besser an die Umgebung anzupassen bzw. Veränderung in der Umgebung zu kompensieren. Wir sind bei Softwareprodukten auch auf diese Veränderungen angewiesen. Im Zusammenspiel mit der natürlichen Selektion stellen sie das Überleben sicher.

Natürlich sind alle Änderungen an der Codebasis eines Softwareprodukts Veränderungen „an der DNA“. Jede neue oder veränderte Zeile Sourcecode ist eine Anpassung. Allerdings gestalten wir diese Änderung noch zu selten so, dass natürliche Selektion möglich ist. Wie ändern ein Softwareprodukt, releasen es und schauen dann, ob die neue Version „überlebt“. Eine gleichzeitige und systematische Gegenüberstellung von alter und neuer Version unter Nutzung der natürlichen Selektion  noch zu selten. Wenn wir natürliche Selektion nutzen wollen, müssen wir mehrere Varianten des Softwareprodukts gleichzeitig leben lassen. Unternehmen, die A/B Tests und Feature Toggles benutzen, versuchen genau das – zu lernen welcher Softwareorganismus die besseren Überlebenschancen hat, weil er besser von Kunden angenommen wird.

Das Feedback welches z. B. über A/B Tests in die Produktentwicklung fließt ist, ist essenziell, um kurze Evolutionszyklen zu erlauben. Nur so kann sich der Organismus Softwareprodukt schnell an Änderungen anpassen. Ohne feingranulares Feedback müssen Unternehmen abwarten, ob ihr Produkt über längere Zeit am Markt überlebt. Zu dem Zeitpunkt an dem dann bemerkt wird, dass größere Anpassungen notwendig sind, ist es aber u. U. schon zu spät. Der Dinosaurier kann nicht überleben und stirbt aus.

Ok – Und wie hilft uns das weiter?

Was können wir also zusammenfassend für die Entwicklung von Softwareprodukten aus der Evolutionstheorie bzw. von Charles Darwin lernen?

• Jedes Softwareprodukt muss ständig an die veränderte Umgebung, d. h. den Markt angepasst werden um langfristig zu überleben

• Die Fähigkeit diese Anpassungen schnell und in systematisch Zahl vorzunehmen entscheidet über den Erfolg des Produkts

• Produkte, besser noch einzelne Bestandteile müssen auch aussterben dürfen, wenn sie nicht mehr zur Umgebung, z. B. den Kundenanforderungen passen,

• Experimente mit möglichst vielen Teilnehmern sind wichtig, um statistisch verlässliche Ergebnisse zu erhalten

• Ohne systematische Feedbackmechanismen (Selektion) ist keine zuverlässige Weiterentwicklung in die richtige Richtung möglich

Folgt man diesem Gedankenmodell, besteht ein gutes Softwareprodukt also idealerweise aus einer Vielzahl kleiner „Software-Kakerlaken“, die eigenständig überlebensfähig sind und auch bei extremen Veränderungen der Umgebung (z. B. einem Meteoriteneinschlag verursacht durch einen neuen Kunden) weiterleben können. Die gleichen Überlegungen lassen sich im Übrigen auch auf Organisationen übertragen. Auch hier versuchen viele Unternehmen mit dem Trend zu kleinen, autarken, cross-funktionalen Teams, die unabhängig voneinander Kundenwert erzeugen ihre Überlebenschancen und die Fähigkeiten zur Anpassung zu erhöhen. Wir können also noch einiges von der Evolutionsbiologie lernen – egal ob wir gerade auf einem Dinosaurier einen Einhorn oder einer Kakerlake reiten.

btw: Das hier dargestellte Bild wurde von DALL·E erstellt - unzwar mit dem ins Englische übersetzten ersten Satz diese Artikels.