Wie Agilität auch durch IT getrieben wird

Servicearchitektur organisiert Entwicklungsteams

17.09.2015
Von 
Dr. Thomas Franz leitet den Technologiebeirat der adesso AG. Er promovierte in einem Teilgebiet der künstlichen Intelligenz, dem "Semantic Web", und verfügt über zehn Jahre Erfahrung in KI-Projekten.
Die „Agilisierung“ ist eine methodische, kulturelle und organisatorische Herausforderung – aber auch eine technologische. In diesem Artikel werden die Zusammenhänge und Wechselwirkungen von Agilität und Softwarearchitektur diskutiert und aufgezeigt, wie auch die Softwarearchitektur die Organisation von Entwicklungsteams, Entwicklungsprozesse und Delivery-Zeiten beeinflusst.

Die "Agilisierung" ist eine methodische, kulturelle und organisatorische Herausforderung ­­- aber auch eine technologische. In diesem Artikel werden die Zusammenhänge und Wechselwirkungen von Agilität und Softwarearchitektur diskutiert und aufgezeigt, wie auch die Softwarearchitektur die Organisation von Entwicklungsteams, Entwicklungsprozesse und Delivery-Zeiten beeinflusst.

Agilität

Agilität bedeutet weit mehr als iterative Softwareentwicklung in kurzen Zyklen - meist Sprints genannt. Agile Unternehmen sind in der Lage, ihr Budget bestmöglich im Sinne der Wertschöpfung einzusetzen. Dazu zählt auch die Fähigkeit, kurzfristig auf Veränderung einzugehen und Planungen anpassen zu können. Agile Unternehmen können Innovationen schnell und in hoher Qualität in ihrem Markt nutzen. Seien es Innovationen für ihre Kunden oder die Steigerung der Wertschöpfung durch die Optimierung interner Prozesse. Insbesondere können sie Neuerungen nicht nur einmalig, sondern ständig in hoher Geschwindigkeit und Qualität umsetzen.

Eine Softwarearchitektur, die Agilität unterstützt, muss ebenfalls agil sein.
Eine Softwarearchitektur, die Agilität unterstützt, muss ebenfalls agil sein.
Foto: iQoncept - shutterstock.com

Im Bereich der Softwareentwicklung gibt es kleine, interdisziplinäre High-Performance-Teams, die diese zügige Umsetzung der Innovationen durch IT bewerkstelligen und verantworten. Sie arbeiten nach agilen Methoden, nutzen Scrum und/oder Kanban und etablieren agile Rollen, die typischen kritischen Aspekten von IT-Projekten Rechnung tragen - beispielsweise der Orientierung an fachlichen Anforderungen, deren Verständnis kritisch für erfolgreiche Softwareentwicklung ist.

Die Performance agiler Teams kann jedoch leicht durch organisatorische und technische Rahmenbedingungen eingeschränkt werden. Zum Beispiel durch Softwarearchitekturen, die agile Vorgehensweisen unzureichend unterstützen. Im Folgenden erläutert der Artikel den Zusammenhang von Agilität und Software-Architektur und neue Ansätze wie Microservices.

Organisation

Eine, zum Beispiel agile, Vorgehensweise beeinflusst beziehungsweise bedingt die Organisation der Personen, die entsprechend einer Vorgehensweise agieren. Gleichfalls beeinflusst und bedingt die Organisation das Resultat von Programmierung - Code - und umgekehrt. Bevor dieser Zusammenhang hergestellt wird, folgt deshalb zunächst ein kurzer Einblick in die Organisation von Code.

Organisation von Code

Software ist das Resultat von Programmierung, das heißt der Auflistung verschiedener Anweisungen, die eine fachliche, geschäftliche oder datenverarbeitende Logik umsetzen. Im Folgenden wird Software daher auch als Programm bezeichnet. Je komplexer und umfangreicher der Sachverhalt, umso komplexer ist auch die Logik und die Menge an Anweisungen, die benötigt wird, um diese abzubilden.

Je komplexer die Logik und je umfangreicher die Menge der programmierten Schritte ist, desto wichtiger ist die Strukturierung eines Programms. Dadurch kann ein Programm schnell überblickt und verstanden werden und Änderungen und Weiterentwicklungen lassen sich zügig umsetzen.

Heutige Programmiersprachen unterstützen die Strukturierung von Programmen, zum Beispiel objektorientierte Programmiersprachen durch die Möglichkeit zusammenhängende Entitäten und Methoden zu definieren, Spezialisierungen und Abstraktionen durch Vererbungsmechanismen zu beschreiben. Die Definitionen erfolgen mittels Sprachkonstrukten der jeweiligen Programmiersprache.Das heißt sie besitzen eine eindeutige Syntax und Semantik. Dadurch können sie von Hilfsprogrammen und sogenannten Werkzeugen, "verstanden" werden. Während der Entwicklung kann also die Modellierung automatisiert genutzt werden, zum Beispiel um die Verfügbarkeit vererbter Methoden zu überprüfen und die Zugehörigkeit zu Paketen/Modulen zu überprüfen.

Weitere Strukturierungsmöglichkeiten bieten Modularisierungskonzepte, die ebenfalls in vielen Programmiersprachen als Sprachkonstrukte umgesetzt sind. Dabei handelt es sich um sogenannte Module und Pakete, die verschiedene Programmiersprachen unterstützen. Sie ermöglichen die nächst gröbere Modellierung, das heißt die Zusammenfassung von Modellen oder Funktionalitäten, die in mehreren Klassen oder Prozeduren programmiert wurden.
Die Strukturierungsmöglichkeiten moderner Programmiersprachen geben dabei keinerlei Strukturierungskriterien vor. Code kann theoretisch nach fachlichen Zusammenhängen, nach Organisationseinheiten, Prozessen oder anderen Merkmalen strukturiert werden.

Organisation von Personen: Bündelung von Kompetenzen

Für die Organisation von Unternehmen besteht eine Organisationsform darin, Kompetenzen zu bündeln. Dahinter verbirgt sich Organisationseinheiten nach der Ähnlichkeit der Aufgaben und dafür benötigter Fähigkeiten zu bilden. Derartigen Organisationsformen entsprechend sind bei der Softwareentwicklung Personen mit Spezialisierungen für zum Beispiel die Entwicklung von Benutzeroberflächen, Geschäftslogik, und Datenhaltungsfragen beteiligt.

Um bei hoher Komplexität und einer großen Menge an Anforderungen an eine Software eine hohe Geschwindigkeit bei der Entwicklung zu erzielen, müssen mehrere Entwickler gleichzeitig programmieren. Es stellt sich also auch hier die Frage nach der Organisation der an der Entwicklung beteiligten Personen. Die Organisation nach Kompetenzen liegt auch für die Organisation von Softwareentwicklungsprojekten nahe.
In der Realität hat sich herausgestellt, dass tatsächlich eine Strukturierung von Software entlang der Kommunikationsstrukturen der beteiligten Organisationseinheiten erfolgt.

Das heißt, die Strukturierung von Programmcode spiegelt die organisatorische Zusammensetzung von Menschen wider. Dieses Phänomen hat Melvin Edward Conway 1968 erforscht und es trägt daher den Namen Conway's Law. Dieser Zusammenhang lässt sich dabei sowohl im Hinblick auf Unternehmensarchitektur herstellen - zum Beispiel Vertriebsabteilungen mit Vertriebssystemen, Finanzbuchhaltungsabteilungen mit Finanzbuchhaltungssoftware - als auch auf die Architektur einzelner Programme. Die verbreitete 3-Schichten-Architektur (vgl. Abbildung 1) beispielsweise lässt sich einfach auf Kompetenzen von Personen übersetzen:

  • Architekturebene Benutzerschnittstelle - IT-Experten für Usability, User Interface Design, Client-seitige Frontend-Entwicklung

  • Architekturebene Geschäftslogik - IT-Experten für serverseitige Frameworks, Application Server, Enterprise-Software-Entwicklung

  • Architekturebene Datenhaltung - IT-Experten für Datenbanken und Datenmodellierung

Abb. 1: 3-Schichten-Architektur mit gebündelten Experten pro Schicht
Abb. 1: 3-Schichten-Architektur mit gebündelten Experten pro Schicht
Foto: adesso AG