Unsere IT-Welt dreht sich immer schneller. Egal ob neue Anforderungen, geänderte Rahmenbedingungen oder sich verschiebende Einflussfaktoren - wir müssen schnell darauf reagieren können und dazu in der Lage sein, Software-Systeme ohne aufwändige Abstimmungen und Genehmigungen produktiv zu nehmen. Einfach. Direkt. Automatisch.
Mmh, da war doch was. Ja, richtig! DevOps!
DevOps hilft dabei bestimmt.
Was ist DevOps eigentlich?
Fragt man drei Experten, was DevOps für sie bedeutet, bekommt man vier Antworten und keine davon gleicht der anderen. In einem Punkt sind sich die Experten aber einig: DevOps heißt nicht, dass man Devs - also Developer - und Ops - IT-Operations-Mitarbeiter - in ein Team steckt und damit seine IT-Welt rettet. Und auch nicht, dass man IT-Operations einfach umbenennt und damit auf der DevOps-Welle reitet. Uns gefällt die nachfolgende Beschreibung von DevOps:
DevOps ist eine Kombination von Denkweisen, Praktiken und Tools, mit denen Organisationen schneller und einfacher Anwendungen und Services bereitstellen können. Die Weiterentwicklung und Verbesserung von Produkten gelingt damit in kürzerer Zeit als bei Organisationen, die auf herkömmliche Prozesse für die Softwareentwicklung und die Verwaltung der Infrastruktur bauen. Dank dieses Geschwindigkeitsvorteils können Organisationen ihre Kunden besser bedienen und sich effektiver auf dem Markt durchsetzen. (Amazon AWS: “Was ist DevOps?”)
Fokus auf das Wesentliche: Agil oder DevOps?
Im Kern geht es bei DevOps also darum, schneller und einfacher Anwendungen und Services bereitzustellen. Eine IT-Organisation, die dazu in der Lage ist, kann sich potenziell besser auf ihre eigentlichen Ziele konzentrieren und ihren Nutzern und Kunden schnell und einfach die sinnvollen Funktionen und Features bereitstellen, die sie bei ihren Aufgaben unterstützen. Eine prägnante Einführung findet man bei Microsoft Azure: Was ist DevOps?
Aber wieso sollte ausgerechnet DevOps meine Organisation dabei unterstützen? Das macht man doch heute agil oder so …
Ja, stimmt. Agile Praktiken helfen potenziell dabei, schneller Features an seine Kunden auszuliefern. Das liegt aber in erster Linie daran, dass man die richtigen Dinge tut und sich fokussiert. Mit DevOps geht allerdings noch mehr. Wie das geht, klären wir gleich.
State of DevOps Report
Seit 2013 gibt es mit dem State of DevOps Report (SODOR) eine jährliche Umfrage unter jeweils etwa 3000 IT-Spezialisten, die sich unter anderem mit der Evolution von DevsOps, seiner Durchdringung in der IT, seinem Nutzen und seinen Hindernissen auseinandersetzt. Ein wesentlicher Aspekt der Studie ist zu messen, wie viel leistungsfähiger Teams und Organisationen, die DevOps gut umgesetzt haben, gegenüber Teams und Organisationen sind, die sich damit schwer tun. Eine typische, vereinfachte Auswertung - hier aus dem Jahr 2017 - lautet:
Leistungsfähigere Teams hatten laut Umfrage durchschnittlich eine 46-mal höhere Frequenz von Software-Lieferungen und eine 440-mal kürzere Durchlaufzeit von Änderungen als Teams mit schlechterer DevOps-Umsetzung. Sie hatten außerdem eine durchschnittlich 96-mal schnellere durchschnittliche Wiederherstellungszeit bei Fehlern. Die Fehlerrate bei Änderungen war 5-mal niedriger als bei den schlechteren Teams.
Diese Einschätzung mag für die eine oder andere Organisation ausreichen, um sich genauer mit DevOps zu befassen. Die Höher-weiter-schneller-Erkenntnisse sind aus unserer Sicht aber nicht die wichtigsten Ergebnisse von SODOR.
Nutzen von DevOps
Nicole Forsgren, Gene Kim und Jez Humble - alle zusammen Vorreiter der DevOps-Bewegung - haben die Umfrage für den State of DevOps Report in den Jahren 2013 bis 2017 maßgeblich gestaltet und so die Grundlage dafür geschaffen, auf Basis der erhobenen Daten nach Gemeinsamkeiten im Vorgehen der leistungsfähigen Teams zu forschen. Ihre Ergebnisse haben die Autoren im Buch Accelerate zusammengefasst. Nicole, Gene und Jez haben unter anderem herausgefunden, dass Teams, die DevOps gut umgesetzt haben, nicht nur eine höhere Performance bei der Bereitstellung von Software haben als andere Teams, sondern das diese Teams auch
- eine höhere Jobzufriedenheit besitzen
- weniger unter Burnout leiden
- weniger nacharbeiten müssen
- weniger Hürden bei der Software-Bereitstellung haben (weniger Deployment-Pain)
- sich stärker mit ihrer Arbeit und Organisation identifizieren
- häufiger in einem Umfeld agieren, das eher über eine auf Vertrauen und Zusammenarbeit basierende Unternehmenskultur verfügt
als Teams, denen die Umsetzung von DevOps weniger gut gelingt.
Eigenschaften erfolgreicher DevOps-Teams
Worin unterscheiden sich nun diese leistungsfähigen Teams von anderen Teams? Viele der identifizierten Eigenschaften, die einen Unterschied gemacht haben, kommen aus dem Umfeld von Continuous Integration und Deployment und erscheinen uns logisch:
- Alle Deployment-Prozesse sind automatisiert - wirklich alle, sofern dies gewünscht und im jeweiligen Kontext sinnvoll ist.
- Continuous Integration ist etabliert. Unser Build-System liefert für jeden Check-in Feedback darüber, ob die Änderung qualitativ erfolgreich war oder nicht. Hat eine Änderung im Code eine neue Code-Vulnerability eingeführt oder führt dazu, dass ein Test fehlschlägt, wird die Änderung abgewiesen.
- Der Code aller für die Bereitstellung unserer Software relevanten Artefakte ist in einer Versionsverwaltung abgelegt. Das betrifft unseren Anwendungscode, die Anwendungs- und Systemkonfiguration aber auch alle Skripte für Builds - also Infrastructure as Code.
- Tests sind automatisiert. Dabei handelt es sich um stabile Tests, die echte Fehler finden und nicht nur Code ausführen.
- Continuous Delivery wird gelebt. Unsere Software befindet sich immer in einem bereitstellbaren Zustand.
Andere Eigenschaften leistungsfähiger Teams haben ihre Heimat eher im Lean Management oder agilen Vorgehen:
- Visualisierung unserer Arbeit. Wir nutzen Dashboards, um Fortschritt, Qualität und die Kommunikation im Team zu beobachten.
- Work in Progress begrenzen. So ermöglichen wir, den Durchsatz von Arbeitspaketen zu erhöhen und Störungen im Durchlauf zu identifizieren und zu beheben.
- In kleinen Losgrößen arbeiten. Aufgaben werden so geschnitten, dass sie in weniger als einer Woche abgeschlossen werden können - gern deutlich schneller.
Auch Architektur scheint in einem Punkt ein wesentlicher Einflussfaktor zu sein: Software soll über eine lose gekoppelte Architektur verfügen, die es zulässt, unabhängig voneinander zu entwickeln, zu testen und zu liefern.
Generell die Überwachung unserer Systeme und besonders proaktives Monitoring von Veränderungen der laufenden Systeme sind ebenfalls wesentliche, wenn auch leicht nachvollziehbare Eigenschaften leistungsfähiger DevOps-Teams.
Andere Eigenschaften leistungsfähiger DevOps-Teams können je nach Organisation eine größere Hürde bilden:
- Sicherheit berücksichtigen: Einbinden von Sicherheit in (Test-)Design, Automatisierung von Security Tests, Durchführung von Security Reviews. (Security ist der Fokus des State of DevOps Report 2019)
- Fokus auf trunkbasierte Entwicklung: Im Idealfall maximal drei aktive, parallele Branches verwenden, deren Lebenszeit weniger als ein Tag beträgt. Wir werden mit einfachen Merges und weniger Blockaden z.B. durch Codefreeze belohnt.
Die Organisation ist der Schlüssel
Die Einführung von DevOps verlangt Veränderung - von den Individuen der Organisation, von ihren Teams und von der gesamten Organisation. Nur mit der Hilfe der gesamten Organisation werden weitere Fähigkeiten leistungsstarker DevOps-Teams ermöglicht:
- Zusammenarbeit zwischen Teams: Eine übergreifende Kommunikation zwischen Teams muss befördert werden.
- Lernende Organisation: Lernkultur ist eine Investition und kein reiner Kostenfaktor.
- Teamexperimente fördern und ermöglichen: Neue Ideen, Frameworks, Lösungen müssen ohne formellen Genehmigungsprozess ausprobiert werden können.
- Die richtigen Werkzeuge und Ressourcen zur Verfügung stellen: Nur die besten Tools sind gut genug.
- Transformationale Führung unterstützen. Darunter verstehen wir:
- Vermitteln einer Vision: Verständnis der Organisationsziele und wo die Organisation in fünf Jahren stehen will.
- Inspirierende Kommunikation: Inspirierende und motivierende Kommunikation, auch in einem unsicheren und sich verändernden Umfeld.
- Intellektuelle Anregung: Fordert von Beteiligten, Probleme auf neue Art und Weise zu lösen.
- Unterstützende Führung: Unterstützung/Berücksichtigung der persönlichen Bedarfe und Situationen der Beteiligten.
- Persönliche Anerkennung: Anerkennung von Zielerreichungen und Verbesserung der Arbeitsqualität; Danke sagen.
- Organisationen, die solche Eigenschaften unterstützen können, verfügen oft über eine eher generative Unternehmenskultur und bieten einen guten Nährboden für die Etablierung von DevOps.
Zu guter Letzt
Accelerate beschreibt insgesamt 24 Eigenschaften und Praktiken, die Merkmale leistungsfähiger DevOps-Teams sind. Dieses Blog beschreibt nur einige, wesentliche davon grob.
Die Befähigung von DevOps-Teams, ihre Leistungsfähigkeit mit Hilfe der beschriebenen Eigenschaften zu verbessern, kann nicht losgelöst vom Kontext der jeweiligen Organisation betrachtet werden, in der die betroffenen Teams agieren. Jede Organisation verfügt über für sie bestimmende Rahmenbedingungen und Einflussfaktoren, die es zu berücksichtigen gilt. Mit Beharrlichkeit, Geduld und überzeugenden Ergebnissen aus der Etablierung der DevOps-Eigenschaften können auch die eventuell hieraus entstehenden Hürden überwunden werden.