In der letzten Dekade hat die Komplexität von Software immer stärker
zugenommen. Oftmals war der Beginn harmlos: eine Hand voll Entwickler,
eine Kerndomäne, das Leben war einfach. Doch dann passierte etwas
Schreckliches: Das Produkt wurde erfolgreich. Und mit diesem Erfolg wurde die Entwicklungsmannschaft größer und größer, Subdomäne um Subdomäne kam hinzu und mehr und mehr Features wurden angefragt.
Mittlerweile gibt es viele dieser "historisch gewachsenen" Projekte und
die Arbeit an ihnen ist nicht einfach. Einerseits sind sie die "Cash
Cows" mit dutzenden oder hunderten an Personenjahren, welche in die
Entwicklung investiert wurden. Andererseits sind sie mittlerweile der
typische "Big Ball of Mud". Patterns werden inkonsistent verwendet,
alles scheint von allem abzuhängen und neue Features oder Bugfixing
verschlingen wahnsinnige Mengen an Budget.
Wir wissen wo wir hinwollen: modulare Systeme, die es erlauben, Teile
unabhängig voneinander weiterzuentwickeln. Aber wie kommen wir vom
aktuellen Stand aus dort hin? Wenn sich Tausende von falschen
Abhängigkeiten eingeschlichen haben? Und wir kontinuierlich Bugs fixen
und Features entwickeln müssen? Wir können die Entwicklung nicht für ein Jahr komplett unterbrechen um die kaputten Strukturen zu reparieren. In diesem Vortrag erzählen wir über unsere Erfahrungen bei der Weiterentwicklung eines > 5 Mio. LOC Monolithen an welchem ca. 60
Entwickler parallel arbeiten. Wir werden Wege aufzeigen um solch einen
"schwer navigierbaren Frachter" in eine bessere Zukunft zu steuern.
Der Vortrag wird nicht nur Methodik erläutern, sondern auch ganz konkret anhand der Open-Source-Library ArchUnit (https://www.archunit.org) Muster vorstellen, die man in einem derartigen Umfeld einsetzen kann.
Ein Umfeld der Art, dass jede Architekturregel, die man tatsächlich
prüft, hunderte oder tausende von Verletzungen aufweist, so dass man
diese unmöglich spontan reparieren kann. Wir werden sehen, wie
man solch einen Monolithen reparieren und langsam, aber stetig, hin zu
einem "Modulithen" mit sauberen Abhängigkeiten transformieren kann. Und das, ohne dabei die tägliche Entwicklung unterbrechen zu müssen oder versehentlich die bisher gewonnenen Erfolge im Zeitdruck des nächsten Releases zu zerstören.
Der Vortrag wird einige Live-Examples enthalten, welche kurz in ArchUnit
einführen, sich dann aber konkret mit detaillierten Patterns für die
Restauration von gewachsenen Systemen beschäftigen.