This article is also available in English
- Teil 1: Gebäude, Zweck, Ästhetik
- Teil 2: Begriffe
- Teil 3: Aufgaben und Tätigkeiten
- Teil 4: Wer macht was?
- Teil 5: Wie geht es weiter? (dieser Artikel)
Bevor wir aber in dieses Thema einsteigen, möchte ich die Begriffe kompliziert und komplex klären. Das wird uns später helfen, die Rolle der Software- oder IT-Architektur in größeren Projekten zu verstehen. Meine Erläuterungen basiere ich auf dem bekannten Cynefin Framework des britischen Forschers Dave Snowdon.
Kompliziert
Kompliziert (lateinisch complicare, „zusammenfalten“ im Sinne von „verwickelt“)
Komplizierte Systeme bestehen aus vielen Teilen oder Details - deren Zusammenwirken wir aber konkret und exakt vorhersagen. Eine Nähmaschine besteht aus vielen Einzelteilen und Wirkzusammenhängen, ihr Verhalten können wir sehr präzise vorhersagen. Den Umgang mit komplizierten Systemen können Menschen anhand von Regeln und vorgegebenen Handlungsvorschriften erlernen.
Beispiele solcher Systeme sind:
- mechanische Systeme und elektrische Schaltkreise: Hier interagieren Bauteile in festgelegter Weise.
- Computer-Hardware: Wenn etwas nicht funktioniert, können wir über systematische Diagnosen die Ursache eindeutig ermitteln und entsprechend reagieren.
- Einzelne Softwaresysteme sind ebenfalls (nur) kompliziert, d.h. deren Verhalten können wir ziemlich exakt vorhersagen (ok - mal abgesehen von
random()
Funktionen). Arbeit mit und an solcher Software ist in hohem Maße deterministisch.
Für den Umgang mit komplizierten Systeme genügen feste Regeln und Prozesse.
Frühe Software- oder IT-Systeme waren häufig kompliziert, d.h. wir konnten deren Verhalten ziemlich präzise vorhersagen [1]. Nehmen Sie einfache Algorithmen wie QuickSort oder Single-User CRUD-Anwendungen als Beispiel.
Komplex
Richtig - auch kompliziert kann schon ganz schön schwierig sein, aber es geht noch wesentlich schlimmer:
Komplexität (lateinisch complexum) bezeichnet das Verhalten eines Systems mit vielen Elementen, deren Wirkzusammenhänge oft nicht deterministisch und vorhersehbar sind. Das Verhalten solcher Systeme ist kaum vorhersehbar.
Quellen: Wikipedia, Cynefin
Das Gesamtverhalten eines komplexen Systems können wir nicht aus der Summe der Einzelverhaltensweisen vorhersagen. Ergebnisse komplexer Systeme sind daher oft nicht wiederholbar. Komplexe Systeme sind gekennzeichnet von Unvorhersehbarkeit und (scheinbar) zufälligen Einflüssen.
Betrachten wir als Beispiele Finanzmärkte, Ökosysteme oder das mittelfristige Wetter: Für keines davon können wir deterministisch (im Sinne einer Formel) belastbare und konkrete Vorhersagen für die Zukunft machen. Trotz viel Erfahrung und Aufwand können wir für komplexe Systeme höchstens Näherungswerte für zukünftige Zustände ermitteln. Feste Regeln oder Prozesse scheitern hier. Es helfen kurze Feedbackzyklen, Heuristiken und Erfahrung.
In Tabelle 1 fasse ich die wesentlichen Charakteristika komplizierter und komplexer Systeme zusammen und stelle diese gegenüber.
Für komplexe Systeme benötigen wir Erfahrung, Heuristiken und vor allem Feedback.
Kompliziert | Komplex |
---|---|
Viele Einflussfaktoren | Viele Einflussfaktoren |
Stabile, lineare Beziehungen | Dynamische, nicht lineare Beziehungen |
Ursache-Wirkung-Beziehungen sind nicht-trivial, aber deterministisch und verständlich. | Keine unbedingt wiederholbaren Ursache-Wirkung-Beziehungen |
Berechenbar, deterministisch | Nicht berechenbar, nicht deterministisch, |
Planbar | Nicht planbar |
Tabelle 1: Kompliziert versus Komplex [2]
Wozu helfen uns diese Begriffe beim Verständnis der Rolle von Softwarearchitektur?
In größeren Projekten/Systemen lauert Komplexität
Größere Software- oder IT-Projekte mit mehreren Beteiligten erweisen sich als komplexe Systeme mit sehr geringer Planbarkeit. In solchen Systemen müssen die Architekt:innen oftmals viele Faktoren gleichzeitig berücksichtigen, ohne die Konsequenzen ihrer Entscheidungen exakt berechnen oder konkret planen zu können. In Abbildung 3 (inspiriert von Uwe Friedrichsen aus [3]) zeige ich schematisch, dass IT-Projekte heutzutage eher komplexer Natur sind, natürlich mit Sprenkeln von Kompliziertheit: In typischen IT-Projekten gibt es in der Regel Aufgaben, die wir mit schematischem Vorgehen zuverlässig lösen können. Leider halt auch andere…
Architektur enthält Unsicherheit
Architekt:innen größerer (und damit komplexerer) Systeme haben mit erheblichen Unsicherheiten und Unwägbarkeiten zu tun. Der Begriff Größe bezieht sich dabei nicht nur auf den rein technischen Umfang (etwa: Lines of Code) von IT-Systemen, sondern auch auf weitere Elemente, beispielsweise:
- Leistungs- oder Funktionsumfang: Wenige und einfache Anforderungen können Entwicklungsteams manchmal durch “fleißiges Programmieren” umsetzen. Durch viele oder schwierige Anforderungen kommt fast von allein Unsicherheit (also Komplexität) dazu.
- Anzahl der betroffenen Personen oder Organisationseinheiten. Diese haben nämlich (oftmals fast zufällig variierende) Meinungen oder Vorlieben. Beide (Menschen und Organisationen) verhalten sich teilweise irrational und nicht vorhersehbar.
- Inter- und Intra-Team Kommunikation und -verhalten. Schon der Austausch einer einzelnen Person in Entwicklungs- oder Projektteams kann Stimmung, Kommunikation und/oder Leistung des gesamten Teams signifikant beeinflussen.
- Dauer von Entwicklungsvorhaben: Je länger Vorhaben (aka Projekte) dauern, desto höher die Wahrscheinlichkeit, dass einzelne Stakeholder ihre jeweiligen Ziele oder Vorlieben signifikant ändern.
- Innovationsgrad, sowohl bezogen auf die geforderten Funktionen oder Technologien.
- Systemkontext, wie etwa Art und Anzahl der Nachbar-, Außen- oder Fremdsysteme, externe Akteure.
- Randbedingungen wie organisatorisches Umfeld, Entwicklungsprozesse, Umwelteinflüsse, gesetzliche Regularien, Zeit- und Budgetvorgaben
- Nutzung vieler Elemente mit zumindest teilweise nichtdeterministischem Verhalten - etwa große Netzwerk, Internet-Services oder gar (generative) KI.
Erstellen wir eine Zwischenbilanz:
In größeren (komplexeren) Systemen müssen Sie als Architekt:in Entscheidungen unter erheblicher Unsicherheit treffen. Ihre Arbeit besteht in hohem Maße aus der Balance vieler Einflußfaktoren, von denen Sie nur wenige nach Schema-F behandeln können.
Klingt schwierig, was tun?
Korrekt, das klingt alles schwierig, und vermutlich auch schwammig.
Für eher einfache (also lediglich komplizierte) Systeme hatten wir in Folge 3 dieser Serie die Aufgaben der Softwarearchitektur erläutert.
Zur Erinnerung finden Sie die in Abbildung 5 noch einmal. Als Ergänzung habe ich in dieser Version allerdings die Stellen markiert, an denen besondere Risiken für Komplexität drohen.
Mehr Farbe bedeutet auch mehr Risiko.
Zum Glück haben wir in der IT seit einigen Jahren ein probates Mittel zum Umgang mit solchen schwierigen Situationen gelernt und erprobt, nämlich schnelles Feedback und adaptives Verhalten. Sollten Sie als Architekt:in in einem komplexen Entwicklungsvorhaben stecken, und darin wichtige Entscheidungen treffen müssen, dann:
- Erkennen und adressieren Sie Spannungsfelder zwischen Stakeholdern.
- Zeigen Sie Stakeholdern die Konsequenzen von deren Entscheidungen respektive Anforderungen auf.
- Zeigen Sie auf, durch welche Anforderungen oder Randbedingungen zusätzliche Komplexität entsteht.
- Wechseln Sie ab-und-zu in die Vogelperspektive und betrachten Geschäfts- oder Business-Prozesse ganzheitlich. Beraten Sie Stakeholder auch auf dieser hohen Abstraktionsebene[4]. Sicherlich hilft es, wenn in Ihrem methodischen Werkzeugkasten ein Business-Model Canvas auftaucht, oder Sie ein wenig von Betriebswirtschaft und Unternehmensorganisation verstehen.
- Suchen Sie aktiv nach weiteren, bisher möglicherweise vergessenen, Stakeholdern, beispielsweise Fachabteilungen.
- Erweitern Sie Ihren Betrachtungshorizont auch auf Umsysteme oder Nachbarprojekte.
- Stellen Sie den notwendigen Informationsfluss zwischen Stakeholdern sicher.
Insgesamt sollten Sie in solchen Projekten proaktiv arbeiten, und sich eher als Unternehmer:in denn als Befehlsempfänger:in sehen. Der Anteil kommunikativer Tätigkeiten steigt gegenüber einfachen Projekten erheblich an. Gehen Sie davon aus, dass für’s reine Coding keine Zeit mehr bleibt: Das ist ja primär eine komplizierte Aufgabe, die Sie delegieren können.
Fazit
Ein steiniger Weg führt von kleineren (aka komplizierten) zu den ganz großen (aka komplexen) Systemen oder Projekten. Sie brauchen dazu erheblich mehr kommunikative (aka Soft-) Skills, Empathie und Durchsetzungsvermögen bei sehr unterschiedlichen Stakeholdern Kenntnisse in Diplomatie, Unternehmenspolitik, Projektmanagmeent, Enterprise-Architekture-Management und Requirements-Engineering helfen weiter, ebenso ein fundierter Überblick aktueller und weniger-aktueller Technologien[5]. Als Belohnung winken große Verantwortung und erheblicher Einfluss auf langfristige Projekt-/Architekturentscheidungen. Nachteil: Ihr Kontakt zu konkretem Source-Code beschränkt sich in solchen Rollen vermutlich auf Ihre (spärliche) Freizeit.
In diesem Sinne - möge auch im Großen die Macht kluger Entscheidungen mit Ihnen sein.
Danksagung
Danke an Gerrit Beine für Inspiration, “m” für gründliches Review.
Quellen
-
Für die ganz exakten Zeitgenoss:innen: Ja, auch ich kenne die Unentscheidbarkeit des Halteproblems. ↩
-
Dave Snowdon: Cynefin Framework. Konzeptionelles Framework zur Entscheidungsunterstützung, unterscheidet fünf Kategorien (Klar, Kompliziert, Komplex und Chaotisch, Konfus), und versucht für diese Entscheidungshilfen zu geben. Kompakte Einführung bei Wikipedia, Original auf https://thecynefin.co ↩
-
Uwe Friedrichsen: Komplexität – Na und? ↩
-
Gregor Hohpe nennt das Architecture Elevator, und bezeichnet die oberen (Management–) Ebenen als das Penthouse, und die reine Technik als den engine room. Persönlich finde ich fürs Management die Bezeichnung Board Room treffender. Wesentlich: die starke Abstraktion von konkreter Technik, und der enge Bezug zum Business. ↩
-
Falls Sie jetzt an die schöne Metapher der “eierlegenden Wollmilchsau” denken, willkommen. Mir ist auch klar, dass ein solch breites Spektrum an Kenntnissen und Fähigkeiten sehr selten ist, aber was davon wollen Sie weglassen? Falls Ihnen selbst noch einiges davon fehlt, arbeiten Sie auch in größeren Systemen doch als eine kleine Gruppe von Architekt:innen zusammen, in der Folge 4 dieser Serie habe ich unter dem Namen “Architecture Agents” dazu einen Vorschlag unterbreitet. ↩
Mehr zum Thema Softwarearchitekturen? Wir bieten ein 3-Tages-Training an.