Komplexität
Komplexität ist ganz einfach ausgedrückt ein Maß für die Anzahl von Beziehungen zwischen Entitäten. Je mehr Beziehungen zwischen Entitäten existieren oder existieren können, desto komplexer ist ein System. Die folgende Grafik zeigt wie die Komplexität (K) mit zunehmender Anzahl von Entitäten (E) und deren Beziehungen zunimmt:
Allgemein ausgedrückt lässt sich die Komplexität über folgende Formel berechnen (wobei n die Anzahl der Entitäten ist):
Geplottet auf einem Graphen zeigt sich, dass die Komplexität sehr schnell wächst, wenn die Anzahl der Entitäten zunimmt (x-Achse: Anzahl der Entitäten, y-Achse: Komplexität):
Was bedeutet höhere Komplexität?
Die zunehmende Komplexität hat Folgen für die Entitäten - seien es Menschen, die miteinander sprechen oder Maschinen, die Daten austauschen:
- Die Geschwindigkeit der Abstimmung im System sinkt
- Die Kommunikationsaufwände steigen
- Die Flexibilität, Dinge zu ändern, sinkt
Komplexität & Agile Effizienz
Setzen wir die Komplexität nun ein um die Kommunikationsbeziehungen einer Gruppe von Menschen abzubilden, lässt sich daraus ihre Effizienz berechnen unter der Annahme, dass wir andere Faktoren ausblenden. Daraus ergibt sich die Formel für agile Effizienz:
Komplexität in die Formel eingesetzt:
Agile Effizienz als Graph
Tragen wir die agile Effizienz in einen Graphen ein, ist deutlich sichtbar, dass sie abnimmt mit je mehr Menschen sich ein Team abstimmen muss. Der Idealwert bei einem Team mit 5 Personen liegt links oben (bei 100%). Muss sich das Team mit 15 weiteren Menschen (insgesamt also 20 Personen) abstimmen, dann sinkt die agile Effizienz auf nur noch 5,26%. Sind Abstimmungen zwischen so vielen Menschen für ein Projekt tatsächlich nötig, sollte man gut überlegen ob man das Projekt tatsächlich agil durchführt.
Gute Architektur
Wie kann an dieser Stelle eine gute IT-Architektur helfen? Die Architektur eines Systems und die Kommunikationsbeziehungen derjenigen, die das System aufbauen, beeinflussen sich gegenseitig (siehe auch: Gesetz von Conway. Eine wohlüberlegte Architektur kann also dazu beitragen, dass die notwendigen Kommunikationsbeziehungen zwischen Menschen und diejenigen zwischen Systemen niedrig gehalten werden. Dies senkt die Komplexität und steigert somit die agile Effizienz.
„Organisationen, die Systeme entwerfen, […] sind gezwungen, Entwürfe zu erstellen, die die Kommunikationsstrukturen dieser Organisationen abbilden.“
– Melvin E. Conway
Schlechte Architektur
Folgendes Schaubild zeigt eine Architektur ohne Begrenzungen, wie sie bei agilen Projekten gerne mal entstehen kann. Die Kommunikationsbeziehungen zwischen den Entitäten (in diesem Fall Anwendungen, Systeme oder Komponenten) entwickeln sich weitgehend willkürlich und erreichen so schnell einen hohen Wert an Komplexität und einen geringen Wert an Effizienz. Änderungen an einem solchen System werden also mit jeder Iteration aufwändiger und langsamer.
Bessere Architektur
Eine durchdachte Architektur kann an dieser Stelle Abhilfe schaffen um eine Systemlandschaft nachhaltig wartbar und zukünftige Projekte schnell und effizient zu machen. Hierfür zieht der Architekt Grenzen in dem Gesamtsystem ein (z.B.: Schichten, Domänen, etc.) und legt Regeln für die Kommunikation fest. Dadurch wird die Komplexität reduziert und die agile Effizienz bleibt erhalten.
Fazit
Die hier gezeigten Umstände sollen deutlich machen, dass eine agile Organisation keinesfalls auf Architekten und von ihnen aufgestellte Begrenzungen verzichten kann, sondern sie umgekehrt unbedingt benötigt um langfristig schnell und effizient zu sein.