In meinem täglichen Arbeitsalltag dreht sich viel um Optimierung. In der digitalen Wirtschaft ist die Automatisierung von Arbeitsabläufen zu einer Grundvoraussetzung geworden, um das Tagesgeschäft effizient abzuwickeln. Ich versuche, Optimierungen anzustreben, die sich sowohl auf kleinere Details als auch auf die Systeme beziehen, die wir für unsere Kunden betreuen.
Mein eigenes Arbeitsumfeld kann ich einfach selbst optimieren. Das kann unter anderem das Rationalisieren von Termine sein, das Festlegen von Strukturen, oder die Durchführung von Retrospektiven (Rückblicke), um die Arbeit weiter zu verbessern. Aber damit ist noch lange nicht Schluss. Gerade das Automatisieren von Deployment- und Buildprozessen ist eine gute Möglichkeit zur Optimierung der Prozesse in der Softwareentwicklung.

In agilen Prozessen wird gerne von „fail fast, fail often“ gesprochen. Das bedeutet, dass wir etwas so früh wie möglich ausprobieren, damit Fehler schnell auffallen. Sobald Fehler aufgefallen sind, können sie umgehend behoben werden. Durch automatisierte Prozesse können fehlerhafte Änderungen genauso schnell wieder rückgängig gemacht werden (auch Versionierung genannt) oder durch Änderungen und Fehlerbehebungen beseitigt werden.
Voraussetzung dafür ist, dass jeder Mitwirkende seine Änderungen regelmäßig in den Codebestand einträgt und überprüft. Dieses Vorgehen wird als Continuous Integration (CI) bezeichnet und ist Bestandteil der CI/CD Pipeline. Dazu ist eine Versionskontrolle notwendig, die jede Änderung an der Anwendung mit einer Versionsnummer versieht. Dieser Schritt kann automatisiert werden. Die Versionierung ist notwendig, um reproduzierbare Entwicklungsstufen, sogenannte “Builds” zu erstellen. Build-Tools, können dann automatisch den Code kompilieren, wenn ein Entwickler Änderungen vornimmt. Auf diese Weise müssen sich die Entwickler nicht selbst um die Kompilierung kümmern und können sich auf andere Aufgaben konzentrieren.
Um die Schnelligkeit und Effizienz weiter zu erhöhen, können auch in Deployment-Prozessen (Einsatz-/Bereitsstellungs-Prozesse) von neuen Funktionen, die dann in ein bestehendes System integriert werden müssen, Optimierungen vorgenommen werden. Die Automatisierung dieser Prozesse bildet die zweite Hälfte der CI/CD Pipeline. Dies kann vollautomatisch (Continuous Deployment) oder durch einen manuell ausgelösten, skriptgesteuerten Prozess erfolgen (Continuous Delivery).
Test-Automatisierungswerkzeugen können sowohl in Deployment- als auch in Buildprozessen eingesetzt werden und ermöglichen es, Tests für die Software automatisch auszuführen. Auf diese Weise können Entwickler sicher sein, dass die Software ordnungsgemäß funktioniert, ohne jedes Mal manuell Tests durchführen zu müssen.

Wer sich bereits mit diesem Thema beschäftigt hat oder schon Einblicke in die IT-Welt hat, wird Begriffe wie GIT, Jenkins, Terraform und Ansible kennen. Um diese meinen Kindern näher zu bringen, wenn sie mich fragen, was ich eigentlich mache, brauche ich etwas Kreativität, um es ihnen zu erklären. Sie können noch nachvollziehen, dass alles, was sie als App oder Website sehen, erst einmal dorthin gelangen muss. Sie verstehen das Testumgebungen genutzt werden, um alles zu testen, bevor Änderungen in der Realität angewendet werden, aber Optimierungen sind schwerer zu erklären.

Wie ich es meinen Kindern erkläre

Ein Kollege brachte mich auf die Idee einer Analogie, die auch meine Kinder verstehen würden. Der Vergleich mit dem Kochen eines Rezeptes fand bei meinen Kindern sofort Anklang.
Wenn wir ein neues Rezept kochen wollen, können wir ein Rezeptbuch nutzen, welches in der Softwareentwicklung der CI/CD Pipeline entsprechen würde. Dies listet alle Zutaten auf, die wir entsprechend zusammentragen müssen. Terraform stellt in der Entwicklung den Vorratsschrank dar, der alle Zutaten enthält, die wir benötigen. Aufbewahrt und bereit gestellt werden diese von Ansible. Sie liegen dort in unterschiedlichen Aufbewahrungsboxen bereit, um den Überblick zu behalten und damit sich die verschiedenen Bestandteile nicht unbeabsichtigt vermischen.
Um sicherzustellen, dass das Gericht auch wirklich gut wird, müssen wir es testen und eventuell noch Anpassungen vornehmen. Genauso müssen wir bei der Softwareentwicklung Tests durchführen und eventuell noch Änderungen vornehmen, um sicherzustellen, dass das Programm richtig funktioniert. An dieser Stelle können automatisierte Builds und Tests die Quälität der Softwareentwicklung sicherstellen.
Schließlich muss das Gericht serviert werden, entweder an uns selbst oder an andere. Als cleveren Helfer dafür – quasi als “Butler”, haben wir Jenkins an unserer Seite, der dafür sorgt, dass unser leckeres Essen dem Richtigen serviert wird. In der Softwareentwicklung würde dies dem Bereitstellen der Software entsprechen.

Die Automatisierung in der Softwareentwicklung könnte man sich also so vorstellen, als hätten wir eine Küche mit vielen verschiedenen Maschinen, die uns beim Kochen helfen. Statt jeden Schritt manuell auszuführen, können wir Maschinen einsetzen, um viele Schritte automatisch zu erledigen, zum Beispiel das Schneiden von Gemüse oder das Rühren von Teig. Auf diese Weise können wir schneller und effizienter kochen und haben mehr Zeit für andere wichtige Aufgaben.

Automatisierung in der Softwareentwicklung kann dazu beitragen, den Entwicklungsprozess zu beschleunigen und die Qualität der Software zu verbessern, indem sie sicherstellt, dass wichtige Aufgaben schnell und fehlerfrei ausgeführt werden. Wie viele nützliche Küchenhelfer kann sie dabei unterstützen effizienter zu arbeiten und Raum für anspruchsvollere oder kreativere Arbeiten zu schaffen.

Bei der Recherche und Korrektur dieses Artikels haben wir uns von ChatGPT unterstützen lassen. Das Bild wurde von der KI-gestützten Bilderstellungssoftware von midjourney generiert.