Zurück zur Übersicht

Architektur Redesign einer monolithischen Echtzeitanwendungen

Architektur
Domain Driven Design
Clean Architecture
API-Design
Erhöhung der Wartbarkeit
Refactorings

Projektkontext

Unser Kunde aus der Mobilitäts- und Logistikbranche benötigt für eines seiner Softwareprodukte die Entwicklung und Umsetzung einer nachhaltigen Architektur zur Erhöhung der Wartbarkeit und zur Beschleunigung der Weiterentwicklung für eine monolithische Echtzeit-Anwendung. Die Anwendung wird von zwei agilen Teams mit ~15 Entwicklern nach dem Scaled Agile Framework (SAFe) entwickelt. Gleichzeitig wird die Anwendung fachlich weiterentwickelt.
In der Rolle als Software Architekten unterstützt StepBeyond die Teams in enger Zusammenarbeit, die technische Perspektive der Software mitzugestalten.

Lösungsansatz

architecture

Zuerst wurde ein initiales Abhängigkeitsdiagramms basierend auf dem aktuellen Code-Stand als Diskussionsgrundlage erstellt. Der entstandene Abhängigkeitsgraph wurde anschließend schrittweise vereinfacht. Identifizierung fachlicher Zusammenhänge ("Bounded Context", siehe DDD), auf deren Basis Architekturworkshops mit Fach- und Technikexperten durchgeführt wurden. In den Workshops wurde gemeinsam ein Zielbild entwickelt und gegebenenfalls in kleinere Schritte unterteilt. Ebenfalls wurden technische Refactorings identifiziert, die nur bedingt Einfluss auf fachliche Abhängigkeiten (Abhängigkeitsgraph) haben.

Alle Schritte wurden anschließend in einer Aufwand-Nutzen-Matrix sortiert, um darauf basierend gemeinsam mit dem Management eine Priorisierung vorzunehmen. Dieser Prozess wurde monatlich durchgeführt, wodurch das Bild der Zielarchitektur kontinuierlich geschärft wurde.

Anhand der Priorisierung wurden die Schritte nach und nach mit dem Entwicklungsteam in Stories abgebildet und weiter verfeinert, sodass Refactoring-Aufgaben anschließend in die Sprints eingeplant werden konnten. Erkenntnisse aus der Implementierung flossen direkt in die konzeptionelle Arbeit zurück.

Herausforderungen

  • Identifizierung von fachlichen Kontexten
  • Auflösung von fachlichen und technischen Abhängigkeiten
  • Komplexer Code durch fehlende Trennung von fachlichen und technischen Bausteinen
  • Fehlende Architekturdokumentation
  • Abstraktion der hohen fachlichen Komplexität
  • Darstellung und Vermittlung technischer Probleme an das Management
  • Koordination und Abstimmung der Architektur mit beiden Teams
  • Kommunikation auf unterschiedlichen Abstraktionen

Ergebnis

  • Abgestimmtes und transparentes Backlog zur Erreichung der dokumentierten Zielarchitektur
  • Iterativer Plan für die Entwicklung hin zu einer wartbaren und skalierbaren Software-Architektur
  • Etablierung eines Prozesses zur stetigen Weiterentwicklung der Architektur

Learnings

  • Grafische Aufbereitungen technischer Problemstellungen sind für das Management extrem wichtig
  • Entwicklung einer ambiguous Language mit Fachbereich, Entwicklern und Architekten
  • Die richtigen Fragen und eine gute Moderation helfen den Kollegen, die richtige Lösung selbst zu finden

Weitere Case Studies

Deine Mission könnte hier beginnen.

Bist du bereit, den nächsten Schritt zu machen und deine eigene Erfolgsgeschichte zu schreiben?