Blog

Antifragilität mit DevOps steigern

JUN 17, 2020

Hin und wieder kommt ein unerwartetes Ereignis, das uns auf eine Weise fordert, auf die wir uns weder vorbereitet noch die wir je in Betracht gezogen hätten. Für uns ist dieses Ereignis die Covid-19-Pandemie. Sie stellt Nationalstaaten, die globale Wirtschaft und Unternehmen jeder Größe auf die Probe. Organisationen in der Softwareentwicklung bilden da keine Ausnahme.

Tuomas Keränen

Tuomas, Eficode's Cloud Product Manager, has a 15 years of work experience in project, program & product management positions. He is a rapid and enthusiastic learner and always ready for new challenges.

Da derzeit alle angewiesen sind, von zu Hause aus zu arbeiten, sind unsere Systeme und Prozesse einer neuen Art von Belastung ausgesetzt. Praktisch über Nacht mussten wir von der Zusammenarbeit Seite an Seite im Büro auf Remote-Arbeit und Alleinarbeit umstellen. Systemische Schwachstellen in unserer Arbeitsweise, die zuvor offen zutage lagen und dennoch unbemerkt blieben, werden jetzt sichtbar. 

Im Büro war alles leicht zugänglich. Plötzlich haben wir Schwierigkeiten, auf kritische Informationen oder Systeme zuzugreifen – darunter Projektdokumentation, Quellcode, Testfälle und die Testumgebung. Haltet einen Moment inne und überlegt, wie diese Dinge in eurer Organisation dokumentiert und geteilt werden. Wenn ihr jetzt darauf zugreifen müsstet – wie würdet ihr vorgehen? Und was ist mit allen anderen im Team? Haben sie Zugriff? 

Antifragilität vs. Robustheit

Wenn ihr keine Systeme für den Umgang mit Störungen eingerichtet habt, kann ein unerwartetes Ereignis wie die Covid-19-Pandemie eure Softwareentwicklung zum Stillstand bringen. Damit kommen wir zur Frage von Antifragilität und Robustheit. 

Ein schlecht dokumentiertes und gewartetes System ist ebenso fragil wie ein Weinglas – beide vertragen nur eine geringe Belastung. Organisationen, die vielleicht mit dem Ausfall von ein oder zwei Mitarbeitern hätten umgehen können, müssen nun mit dem Ausfall weitaus mehrerer Mitarbeiter zurechtkommen. Das fragile System bricht zusammen.  

Das kann auch auf scheinbar „robuste“ Systeme zutreffen, denn Antifragilität und Robustheit sind nicht dasselbe. Ein robustes System verträgt zwar mehr Belastung als ein fragiles System, doch beide haben eine feste Belastungsgrenze. Ein antifragiles System hingegen wird stärker, je mehr Belastung es ausgesetzt ist. Das bedeutet nicht, dass wir kein robustes System wollen – natürlich wollen wir das! – aber was wir wirklich wollen, ist Antifragilität. 

Antifragilität aufbauen

DevOps bereitet eure Organisation auf den Umgang mit belastenden Ereignissen vor – ein wesentlicher Aspekt beim Aufbau von Antifragilität. Jedes Mal, wenn ihr eine Krise erfolgreich bewältigt und die gewonnenen Erkenntnisse nutzt, um eure Organisation oder Systeme zu verbessern, steigt eure Antifragilität. DevOps hilft euch dabei, ein System aufzubauen, das sowohl robust ist als auch durch die Reaktion auf Krisen stärker wird. 

Doch wie sieht das in der Praxis aus? Wie machen wir eine bestehende Entwicklungsorganisation mit DevOps antifragiler? Dabei sind drei zentrale Aspekte zu berücksichtigen: die Software-Produktionslinie, die Menschen, die sie betreiben, und die Überwachung ihrer Leistung.

1. Produktionslinie

Eine zentrale Plattform, auf der alle wichtigen Tools jedem im Team bekannt sind, ist eine Voraussetzung für Antifragilität. Fällt ein einzelnes Teammitglied aus, kann jemand anderes dessen Arbeit leicht übernehmen, weil alle mit den Tools vertraut sind. So lassen sich Ressourcen sehr einfach neu zuweisen. 

Eure Organisation braucht eine Software-Produktionslinie, die die Erstellung von Dokumentation als notwendigen Nebeneffekt ermöglicht. Alle Anforderungen und Workflows sollten in Lösungen für Dokumentation und Ticketmanagement enthalten sein. Quellcode, Umgebungen und Testfälle sollten vollständig versionskontrolliert sein, während die Binärdateien in separaten Repositories liegen sollten.

Wenn jedes Team eigene Tools nutzt und eigenen Praktiken folgt, ist es sehr schwer, Antifragilität im gesamten Unternehmen aufzubauen. Eine konsistente, gut aufgebaute Produktionslinie ist von Grund auf antifragil und sollte das Erste sein, was ihr aufbaut. Wenn jedes Teammitglied die Produktionslinie bei einer Störung ändern und verbessern kann, sorgt jede Änderung dafür, dass das System künftigen Störungen besser standhält. 

2. Menschen

Sobald ihr über eine zentrale Produktionslinie verfügt, müsst ihr sicherstellen, dass jeder auf alles zugreifen kann, was er benötigt. Außerdem solltet ihr sie so optimieren, dass sie Entwicklern das Leben so einfach wie möglich macht. 

Zunächst bedeutet das, dass die Anforderungen und Workflows jedes Projekts die jeweiligen Tools der Produktionslinie nutzen müssen. Es ergibt keinen Sinn, eine zentrale Plattform einzurichten und einzelnen Projekten anschließend zu erlauben, neue Tools einzuführen, die für den Rest der Organisation nicht sichtbar sind. Damit macht ihr plötzlich viel gute Arbeit zunichte und verringert eure Antifragilität. In einigen Fällen ist Flexibilität bei den Tools jedoch notwendig, etwa bei der Test- und Deployment-Automatisierung. Die Herausforderung besteht darin, die richtige Balance zwischen gemeinsamen Lösungen und teamsspezifischen Lösungen zu finden. 

Die Konsistenz der Tools muss gewahrt bleiben, und ihre Nutzung sollte weitgehend automatisiert sein. Ihr solltet darauf abzielen, alle kritischen Projektdokumentationen „as code“ in der Versionskontrolle zu speichern und dem gesamten Team offen zugänglich zu machen. Leicht skalierbare Cloud-Umgebungen sollten ebenso wie Testautomatisierung verfügbar sein, um Continuous Delivery zu ermöglichen. Der Automatisierungscode erhöht die Robustheit, indem er selbst als Dokumentation dient. Dadurch verringert sich der Bedarf an separater schriftlicher Dokumentation, die häufig vernachlässigt wird. 

Eine hohe Transparenz sollte ebenfalls gegeben sein – nicht nur für eure eigene Entwicklung, sondern auch für die aller anderen. Statusinformationen sollten automatisch aus der Produktionslinie erfasst werden, ohne dass manuelle Berichte erforderlich sind. Viele gängige Tools bieten diese Funktion.  

Indem ihr jedem Teammitglied das Leben so einfach wie möglich macht, erhöht ihr eure Antifragilität. Wenn eure Produktionslinie leicht zugänglich ist und ihr möglichst viele manuelle Aufgaben automatisiert, könnt ihr euch bei einer Krise einfach anpassen. Treten Störungen auf, kann die Organisation Kurskorrekturen vornehmen und ihre Belastbarkeit weiter verbessern. 

3. Monitoring

Der Aufbau von Antifragilität erfordert eine kontinuierliche Verbesserung der Art und Weise, wie ihr Software entwickelt. Doch worauf solltet ihr eure Verbesserungsmaßnahmen ausrichten? Woher wisst ihr, wo mögliche Schwachstellen liegen? Deshalb braucht ihr Monitoring. Es ist der dritte Aspekt von DevOps, den ihr nutzen solltet, um euer System widerstandsfähiger zu machen. 

Es ist wichtig zu überwachen, wie Software entwickelt wird. Ebenso wichtig ist es aber, zu beobachten, wie sie bereitgestellt wird und wie sie tatsächlich in der Produktionsumgebung genutzt wird. Durch das Monitoring der Entwicklung erkennt ihr, welche Projekte und Personen die vereinbarten Arbeitsweisen einhalten. Außerdem erhaltet ihr Einblicke in neue gute Gewohnheiten und Best Practices, die sich auf andere Projekte übertragen lassen. Wenn jedes Projekt die Stärken aller anderen übernimmt, werden sie alle gleich stark. So lassen sich viele einzelne Schwächen in der gesamten Organisation ausgleichen und die Antifragilität steigern.

Monitoring in Ops dient als Frühwarnsystem, indem es Probleme erkennt, bevor sie außer Kontrolle geraten. Es ist natürlich deutlich besser, Probleme selbst zu erkennen, als von Nutzern darauf hingewiesen zu werden. Eure Deployments sollten in Monitoring-Tools und die Analyse von Logs integriert sein, damit ihr umfassende Informationen über den Zustand des Produkts erhaltet. Mit ausreichend Monitoring könnt ihr häufig die Ursache einer Reihe von Problemen ermitteln, statt nur die Symptome eines einzelnen Problems zu behandeln. Auch das trägt erheblich zu eurer Antifragilität bei.

Nach dem Deployment solltet ihr das Verhalten der Nutzer überwachen, wenn sie neue Features erhalten. Steigert das neue Feature den Traffic, die Conversions und letztlich den Umsatz? Die nach dem Deployment erhobenen Daten lassen sich zusammen mit Design Thinking, A/B-Tests und Verhaltenspsychologie nutzen, um zukünftige Releases zu optimieren.

Wie antifragil ist eure Organisation?

Der unerwartete Charakter des aktuellen COVID-19-Ausbruchs führt dazu, dass viele Organisationen gerade in Echtzeit herausfinden, wie antifragil sie sind. Diejenigen, die die Krise überstehen, werden gut aufgestellt sein, um auf künftige Ereignisse zu reagieren. In vielerlei Hinsicht ist dies der ultimative Stresstest und eine ausgezeichnete – wenn auch unerwünschte – Lernchance.

Antifragilität aufzubauen bedeutet, darauf zu achten, wie wir auf Krisen reagieren. Indem ihr die zentralen Tools eurer Softwareentwicklung zentralisiert und ein zugängliches, einheitliches Toolset nutzt, seid ihr bereits auf dem Weg zu mehr Antifragilität. Es wäre jedoch ein Fehler zu glauben, dass ein zentralisiertes System allein jedes Problem löst. Ohne gezielte Wartung beeinträchtigt ein zentralisiertes System die Antifragilität, weil die gesamte Organisation von einem einzigen, schlecht gewarteten System abhängig ist. Für manche Tool-Auswahlen müssen zudem Ausnahmen gemacht werden. Entscheidend ist, flexibel zu sein, wenn die Situation es erfordert.

Auch die Kultur ist von entscheidender Bedeutung. Wenn ihr eure Teammitglieder befähigt und Gewohnheiten zur kontinuierlichen Verbesserung fördert, gewinnt euer gesamtes System mit jedem noch so kleinen Problem ein Stück mehr Antifragilität.

  • DevOps
  • Eficode ROOT

Subscribe to our newsletter