Bei der Software-Modularisierung geht es darum, große monolithische Applikationen in kleinere, wartbare Module aufzuteilen. Die Zielumgebung kann, muss aber keine Containerumgebung sein.
Das Problem mit monolithischen Enterprise-Applikationen
Entgegen der weitverbreiteten Meinung, dass Softwareprojekte nach einem initialen Release fertig sind, wachsen Enterprise-Applikationen kontinuierlich. Das führt oft dazu, dass die Systeme zunehmend träger und komplexer werden und Änderungen oder Erweiterungen immer mehr Zeit benötigen. Um wieder eine effiziente Softwareentwicklung zu erreichen, muss das System in kleinere, autonome Komponenten geteilt werden.
-> lese auch „Warum Software verrostet und wie wir gegen den Verfall ankämpfen.“
Software-Architektur und Organisationsstruktur
Nach dem Gesetz von Conway (Conway’s Law) spiegeln die Strukturen einer Applikation die Kommunikationsstrukturen der Organisation wider, die die Applikation entwickelt. Fundamentale Strukturen einer Applikation können demnach nicht geändert werden, ohne die Strukturen der Entwicklungsorganisation anzupassen.
Für die Modularisierung von Applikationen bedeutet das, dass gemeinsam mit der Aufteilung der Software auch die Neuorganisation von crossfunktionalen Teams einhergehen soll. Ein einfaches Aufteilen der bestehenden Teammitglieder in neue Teams funktioniert oft nicht. Die Herausforderung dabei sind Spezialisten-Rollen, die beispielsweise nur von einer Person ausgefüllt werden. Dafür müssen neue Konzepte für die agile Teamorganisation eingeführt werden. Überlegungen dazu sind nicht Teil dieses Artikels.
Optimale Größe von Software-Modulen: Wie groß ist zu groß?
Eine einzelne Applikation mit mehreren Millionen Codezeilen ist eindeutig zu groß für effiziente Softwareentwicklung, aber auch sehr viele kleine zusammenhängende Komponenten schaffen übermäßige Komplexität. Die Frage ist daher, was ein gutes Maß zwischen zu groß und zu klein ist.
Nach Conway’s Law schaffen Teamgrenzen auch Grenzen in der Software. Daraus leiten wir eine erste Größenordnung für Applikationsmodule ab:
Eine Applikation sollte so groß sein, dass sie von einem agilen Team von 5-9 Personen weitgehend autonom entwickelt werden kann.
Die Zahl von 5-9 Personen ist zum einen eine empfohlene Größe eines Scrum-Teams, ist aber auch konsistent mit Robert Dunbars Circle of Friends.

Modularisierung implementieren: Praktische Umsetzung
Ziel der Software-Modularisierung ist eine grundsätzliche Zuordnung: 1 Domäne – 1 Team – 1 Applikation.
Anmerkung: In der Praxis gibt es immer wieder Gründe, davon abzuweichen. Insbesondere am Beginn einer Modularisierungsinitiative ist diese Aufteilung nicht gegeben.
Am Beginn der Modularisierungsinitiative ordnen wir einer Domäne ein Team zu und beginnen am Monolithen zu arbeiten. Gemäß Conway’s Law erwarten wir, dass dadurch die Aufteilung des Monolithen unterstützt wird. Beim Vorgehen gibt es unterschiedliche Ansätze, die auch kombiniert werden können. Gemeinsam ist allen Ansätzen, dass in kleinen Schritten iterativ mit ständiger Reflexion vorgegangen wird.
Strategische Modularisierung: Top-Down Ansatz

Bei diesem Ansatz werden zuerst kleine Teile aus der bestehenden Applikation als eigenständige Komponenten (z.B. Container, Microservices) herausgebrochen. Danach werden die Komponenten schrittweise erweitert.
Dieser strategische Ansatz ist speziell dann geeignet, wenn:
- Die Domänenaufteilung bereits ausgereift ist
- Viele neue Anforderungen im Greenfield-Bereich bestehen
- Geschäftsprozesse neu entwickelt werden sollen
- Gutes Wissen zur Zielarchitektur (Container, Kubernetes, Cloud-native) vorhanden ist
Taktische Modularisierung: Bottom-Up Ansatz

Bei diesem Ansatz werden zuerst innerhalb der bestehenden Applikation klare Grenzen und Schnittstellen etabliert. Danach werden Komponenten entlang der definierten Grenzen schrittweise herausgelöst.
Dieser taktische Ansatz ist speziell dann geeignet, wenn:
- Domänengrenzen noch nicht klar definiert sind und sich erst entwickeln
- Viel bestehender Legacy-Code vorhanden ist
- Prozesse bereits ausgereift sind
- Wissen über die Zielarchitektur (Container) erst aufgebaut wird oder
- Die technische Architektur nicht grundsätzlich geändert werden soll
- Die Ressourcen beschränkt sind und nur langsames, inkrementelles Vorgehen möglich ist
Langfristige Perspektive: Kontinuierliche Softwaremodernisierung
Wie bei allen Themen der Softwaremodernisierung ist auch Modularisierung kein Einmalprojekt, das nach Fertigstellung abgehakt werden kann. Software-Module wachsen und Teams sind ständigem Wandel unterworfen. Daher sollte dem Modularisierungsaspekt der Software regelmäßig Aufmerksamkeit gewidmet werden und eine kontinuierliche Architektur-Evaluation stattfinden.


