Keine Angst vor Komplexität
Warum Unternehmen offen für neue Technologien sein sollten
Autor: Peter Diefenthäler*
Motivation
Die Softwareentwicklung im 21. Jahrhundert bringt viele neue Herausforderungen mit sich:
- neue Plattformen, die auf Cloud-Technologien aufbauen
- moderne Architekturen, die auf diesen Plattformen gut funktionieren
- eine neue Entwicklerkultur, die auf DevOps-Paradigmen basiert
Mit diesen Herausforderungen steigt auch der Grad an Komplexität in allen drei genannten Dimensionen. Ein Blick auf neue Technologien kann helfen, die Komplexität zu meistern oder sie zumindest beherrschbar zu machen.
Wie heißt es so schön im agilen Manifest: Embrace Change!
Komplexität
Geht es Ihnen auch so, dass beim Begriff der Komplexität immer so ein negativer Unterton mitschwingt?
Schaut man sich die Definition an, hört sich das alles doch erst mal ganz gut an:
Komplexität (lateinisch complexum, Partizip Perfekt von complecti „umschlingen“, „umfassen“ oder „zusammenfassen“) bezeichnet das Verhalten eines Systems oder Modells, dessen viele Komponenten auf verschiedene Weise miteinander interagieren können, nur lokalen Regeln folgen und denen Instruktionen höherer Ebenen unbekannt sind.
Wikipedia
Liest man sich den Satz ein zweites Mal durch, stößt man auf folgende Formulierungen:
- viele Komponenten
- verschiedene Interaktionsmuster
- verborgene lokale Regeln
So kommt es wahrscheinlich dazu, dass man mit komplex oft kompliziert assoziiert!
Komplexe Systeme sind in der Regel anspruchsvoll, aber sie sind nicht per se kompliziert. Wir müssen aber durchaus lernen, mit Komplexität umzugehen.
Komplexität hat im Wesentlichen zwei Dimensionen:
- Komplexität der Organisation
(Größe, Struktur, Ökosysteme, formale und informale Prozesse, Firmenkultur, …) - Komplexität im Zusammenwirken mit Technologie
(Plattformen, Programmiersprachen, Frameworks, Werkzeuge, Tools, Dienste, …).
Auf der Ebene der Organisation ist Komplexität sehr viel schwieriger zu adressieren als auf der technischen. Das bekannte Mantra „KISS – Keep it simple, stupid“ sollte zwar auch auf Organisationen anwendbar sein, diese sind aber über die Zeit gewachsen und zu dem geworden, was sie heute sind. Es bedarf viel Fingerspitzengefühl, Verständnis und Durchsetzungsfähigkeit, um Komplexität auf dieser Dimension anzugehen.
Es gibt im Wesentlichen zwei erfolgsversprechende Strategien, um Komplexität in den Griff zu bekommen:
- Komplexität kann man durch Weglassen, Bündeln und Standardisieren von Produkten, Aufgaben und Prozessen verringern. Hier ist Augenmaß gefordert, denn es können schnell neue Abhängigkeiten entstehen und die Individualität einzelner Kunden oder Alleinstellungsmerkmale der Organisation bleiben auf der Strecke.
- Ein anderer Ansatz im Umgang mit Komplexität besteht darin, Produkte und Dienste modular aufzubauen. Das erreicht man auf einer hohen Abstraktionsebene mit sogenannten Baukastenlösungen, die man geschickt kombiniert. Auf einer niedrigen Abstraktionsebene gelingt das mit geeigneten Technologien.
Neue Technologien können der Schlüssel sein, Komplexität zu verringern und IT-Systeme und damit letztendlich auch die Organisation weniger kompliziert zu machen.
Neue Technologien
Technologie allein löst keine Probleme! Wählt man sie unüberlegt aus, kann sie neue Probleme schaffen. Daraus resultiert oft die Angst vor neuen Technologien, denn sie können Komplexität erhöhen und alles noch komplizierter machen. Moderne Architekturen und Plattformen basieren auf neuen Technologien und versprechen Abhilfe zu schaffen. Schaut man sich zum Beispiel eine Architektur an, die auf Microservices aufbaut, stellt man fest, dass sie viel Flexibilität beim Einsatz neuer Technologien bietet. Das Risiko wird dadurch minimiert, dass man viele „kleine“ Services baut, diese auf Fachlichkeit ausrichtet und mit passenden Technologien implementiert. Diese sogenannten polyglotten Systeme werden von kleinen Teams mit überschaubarem Aufwand entwickelt und betrieben und es tut nicht besonders weh, wenn man bei der Auswahl einer Technologie in eine Sackgasse gerät und gegebenenfalls von vorne beginnen muss.
Die Idee des MVP (Minimum Viable Product) ist eine weitere Methode, neue Technologien zu verproben und sicherzustellen, dass die Fachlichkeit passt und die Akzeptanz bei der Zielgruppe hoch ist. Entwirft ein Architekt einen neuen Gebäudekomplex, entsteht für den Wettbewerb in der Regel erst mal ein Modell, welches die Gebäude in ihrer Form und Anordnung im Ensemble idealisiert darstellt.
Wird der Wettbewerb gewonnen oder ein Auftrag erteilt, geht es in die Detailplanung der Gewerke. Die Entscheidungen werden dann individuell für die einzelnen Gebäudearten getroffen: welche Baumaterialien stehen zur Verfügung, soll alles unterkellert sein, wie erfolgen Energieversorgung und Heizung, wo liegen Eingänge und wie kommt Licht in die Gebäude.
All diese Probleme muss man auch bei der Umsetzung von Softwarearchitekturen lösen. Allerdings haben wir in der IT einen entscheidenden Vorteil: Flexibilität!
Ist ein Hochhaus erst einmal errichtet, kann man es nicht einfach wieder abreißen, oder einen Keller daruntersetzen. In der IT ist dies sehr viel einfacher möglich. Klar kostet das auch Geld und Zeit, aber nicht in dem Maße mit dem Materialeinsatz und den Auswirkungen auf die Umwelt. Die Einführung oder der Schwenk auf neue Technologien bringt oft einen echten Mehrwert und Applikationen lassen sich einfacher betreiben oder auf einen neuen Stand bringen. Die Konsumenten der Services merken nichts vom eigentlichen Technologiewechsel und profitieren im Idealfall von schnelleren Entwicklungszyklen, höherer Qualität und besserer Performance.
Sind jetzt neue Technologien das Allerheilmittel?
Sagen wir es mal so: Neue Technologien können komplexe Systeme weniger kompliziert machen. Das erkauft man sich aber durch eine steilere Lernkurve und die Gefahr, auf ein falsches Pferd zu setzen. Schließlich müssen Anwendungen auch gewartet werden und dafür müssen Wissensträger für den eingesetzten Technologie-Stack verfügbar bleiben.
Um das Risiko bei der Auswahl neuer Technologien gering zu halten, lohnt sich der Blick auf die Cloud Native Computing Foundation[1] und den Technology Radar von Thoughtworks[2]. Das sind gute Anlaufpunkte, Technologien zu identifizieren und sicherzustellen, dass es auch eine Community und damit Unterstützer gibt, die einem mit Rat und Tat zur Seite stehen.
Fazit
Hat man einmal gesehen, wie elegant Probleme mit funktionaler Programmierung, Microservice-Architekturen und Event-basierter Kommunikation gelöst werden können, findet man schnell Geschmack daran, neue Technologien auszuprobieren. Die modernen Plattformen ermöglichen schnelle Entwicklungszyklen und unterstützen durch ihren hohen Grad an Automatisierung die DevOps-Prozesse und agiles Vorgehen. Das alles macht es heutzutage leicht, neue Technologien auszuprobieren, ohne Angst haben zu müssen, mit einmal getroffenen Entscheidungen in eine Sackgasse zu geraten. Es gibt also wirklich keine guten Gründe mehr, nicht auf neue Technologien zu setzen – aber bitte mit Augenmaß ;=)
Über den Autor:
Peter Diefenthäler arbeitet als Softwarearchitekt bei der ARS Computer und Consulting GmbH in München. Mit vielen Jahren Erfahrung in der Produktentwicklung auf dem Mainframe bis hin zu aktuellen verteilten Anwendungen, beschäftigt er sich heute mit den Schwerpunkten Cloud-native Entwicklung, Migration großer Softwaresysteme sowie Digitale Transformation und hält Trainings und Schulungen in diesen Bereichen.
E-Mail: peter.diefenthaeler@ars.de
[2] https://www.thoughtworks.com/de-de/radar
Bildquelle / Lizenz Aufmacher: Unsplash / Zhu Hongzi