SOFTWARE-MODERNISIERUNG

Mehr als nur "Endlich die neue Plattform".

Wir sind nicht so gut
in Modernisierungen.

Aber deutlich schlechter
in Replacements.

Modernisierungen
früher ... 

  • neue, bessere Technologien stehen zur Verfügung

  • Kompatibilität zur IT-Landschaft muss bereitgestellt werden
  • Verfügbarkeit von Fachkräften wird problematisch

"Four Key Metrics"

auf "adopt"

Modernisierung im Jahr 2022

Deployment Frequency

  • Low: einmal pro 6 Monate 
  • Medium: monatliche oder alle 2-3 Monate
  • High: mehrfach pro Monat oder Woche
  • Top: on-demand, auch mehrfach pro Tag 

Modernisierung
2022

Lead time
for changes

  • Low: mehr als 6 Monate  
  • Medium: zwischen 1 und 6 Monaten
  • High: zwischen einem Tag und einer Woche
  • Top: weniger als eine Stunde

Modernisierung
2022

Time to
restore service

  • Low: mehr als 6 Monate  
  • Medium: zwischen einem Tag und einer Woche
  • High: weniger als ein Tag
  • Top: weniger als eine Stunde

Modernisierung
2022

Change failure rate

  • Low: 16-30%
  • Medium: 16-30%
  • High: 16-30%
  • Top: 0-15%

Modernisierung
2022

https://services.google.com/fh/files/misc/state-of-devops-2021.pdf

Cloud Native

Up to 10 times
faster development.

Cloud Native

Up to 100 times less
infrastructure costs

Wer glaubt das?

Faktor 10?!
Faktor 100 ... ?!

Faktor 100 preiswerter
in Operations?!

"Wir gehen in die Cloud."

Rehosting

A.k.a. "Lift and Shift"

software behalten, hardware wechseln
 

  • Extern:AWS, Azure, Google, Hetzner, Ionos

  • Intern: OpenStack, Vmware, ...

30% billiger als
on-premise!

(sagt Amazon)

Für 85% der Anwendungen teurer als  on-premise!

(sagt Dell)

Replatforming

A.k.a. "Lift, Tinker and Shift"

Scale 2 Zero

Reduktion des effektiven
Hardware-Bedarfs 50-90%

Reduktion des effektiven
Hardware-Bedarfs 50-90%

Container & Lambda

  • Klein genug um es nicht genehmigen zu müssen
  • Standardisiert genug um es verlässlich automatisch behandeln zu können

Self Service & Automation
vs Tickets

Was bleibt bei Self-Service übrig?

Faktor 10 schneller

im Development?!

Der Trick 10 mal schneller zu arbeiten ...

... ist
90% der Arbeit

wegzulassen.

Core Domain Der Grund, warum es die Software gibt - und warum man es selbst bauen sollte.
Supporting Subdomain Unterstützende Funktionen - nicht der Kern der Lösung, aber wichtig damit er funktioniert.
Generic Subdomain Standard-Funktionalität, die man braucht, an der man sich aber nicht unterscheidet - Login, Payment, Billing
Core Domain Eigener Code, flexibel, anpassbar & differenzierbar für Nutzer und Kunden. !Vendor Lock-in, !Vendor-Control
Supporting Subdomain Durch mehrere kleine, spezialisierte oder konfigurierbare Services ersetzbar
Generic Subdomain Als etablierte SAAS/API-Lösungen vielfach vorhanden.

Uncle Bob

reading versus writing is
well over 10 to 1.
We are constantly reading old code as part of the effort to write new code. ...[Therefore,] making it easy to read makes it easier to write.”

98% der Zeit wird mit Verstehen von existierendem Code verbracht.

Aufgabe:
Lesen & Recherche reduzieren

MicroServices

Microservices: Software that fits in your Head

Dan North

Microservices architecture allows us moving complexity into the area where we know how to automate things.

O'Reilly

Serverless

Nur noch die echte Funktionalität wird implementiert.

  • sollte eigentlich "service-full" sein
    • Function as a Service / Lambda /λ
    • Serverless databases / Aurora etc
    • SQS, SNS, ELB, Route53,
  • Funktion als Deploymentebene
  • Pay-as-you-go
  • Skalieren - von 0 bis Milllionen - geht

Faktor 10?
Ok. Kauf ich. 

Aber meine Realität sieht anders aus.

One Week later

Damals, der erste
Prototyp

Grossartige Software!

Aber wir brauchen mehr Features.
Und die bestehenden müssen geändert werden.
Und ein paar Kundenanpassungen.

Um so agiler ich auf Kunden und Markt reagiere, um so schneller altert meine Software

Agiles Paradox

"Big Ball of Mud"

  • Hohe Einarbeitungsaufwände
  • Verschiedene Leute mit verschiedenen Ansätzen
  • Fehlender Gesamtüberblick
  • Ungenutzte Features, toter Code
  • Buffer everywhere: Zeitschätzungen sind unzuverlässig

"Wir würden es am liebsten komplett neu schreiben..."

Also Moderniserung ...

Aber wie gehe ich dabei vor? 

Architektur

"Stuff that is hard to change"

Welches Schweinderl hätten's denn gern 2022

  • Modulare/Moderne/DDD Monolithen
  • MiniService/MacroService/SCS
  • Cloud Native 
  • MicroServices 

 

  • Keine Layered Monolithen
  • Keine SOA/ESB-Architekturen               

Everything in software architecture is a trade-off

First Law of Software Architecture

ATAM 1: Businesstreiber

Business-Treiber ....

  • NFRs: Wartbarkeit, Erlernbarkeit,
    Verlässlichkeit, Security ...
  • Ressourcen: Zeit & Geld
  • Capabilities
    • Flexibilität
    • Austauschbarkeit von Teilen
    • Integrierbarkeit

... als messbare Szenarien.

 

ATAM 2: Lösungsarchitekturen
als Architectural Kata

ATAM 3: TradeOff-Bewertung
auf Basis der Architekturoptionen

Empfehlung: Microservics + Frontend-Monolith

Trade-Offs:

  • mehr Zeitbedarf
  • mehr Ressourcenbedarf
  • längerer Doppel-Betrieb
  • Keine Unabhängigkeit bei der Frontend-Arbeit

ARC41 1: Detailsicht auf die Lösung

DDD: Big Picture Event Storming

Bounded Contexts für den Service-Schnitt, Aggregates & ACLs für API-Design

ARC41 2: Cross-Cutting-Concepts

ARC41 3: Deployment Diagram

Das war der ein

Modernisierung & Migration

Die Strangler Fig

Das Strangler Fig Pattern in Front Controller / API Gateway / Fassade

Das Strangler Fig Pattern bei
einer Divide & Conquer Strategie aussen

Das Strangler Fig Pattern mit
API für Zugriff auf interne Funktionalität

Extraction mit Feature Toggle

Parallel Run als Kompabilitätscheck

Und viele mehr ... 

(Ausschnitt aus unserem Miro-Workshop-Board)

Ok, aber wie komme ich von Alt nach Neu?

(Architectural) Enablers

  • Modernisierungsaufgaben sind oft zu groß für User-Stories
  • Architectural / Infrastructure Enablers aus SAFe 
  • Epics, die für zukünftige Business-Anforderungen benötigt werden.

Enabler im Architectural Runway

  • Schrittwiese Implementierung der Zielarchitektur
     
  • Implementierung der Migrationsdienste - etwa der Strangler-Proxy.
     
  • Aufräumarbeiten - Abbau von alter und temporärer Infrastruktur.

Opportunistische Roadmap

  • Enabler werden unmittelbar nach der Implementierung genutzt
  • Erlaubt parallele Bereitstellung von Business-Requirements
  • Verringert Doppel-
    implementierungen

Tracking & Prediction

  • Die alte Software ist alt und unvorhersehbar
  • die neue Platform ist noch unbekannt 
  • Wie teuer wird es und wann wird es fertig?
  • Nur die Volatität ist verlässlich :-/

Organisation

Die Organisation bis hier erzeugt die Architektur, die jetzt da ist. Also drehen wir das ganze um?

Das Modernisierungs-
Dilemma

  • Die Plattform existiert noch nicht
    • es fehlt die neue Infrastruktur
    • es fehlen Services und Beispiele, die sie nutzen
  • Die alte Plattform muss auch weiterbetrieben werden
  • Die Kollegen kennen die neuen Technologien noch nicht

Ok, und was machen wir da? 

Team Topologies for the Rescue!

Build-run-Teams

  • Sowohl Feature als auch Component-Teams
  • Volle Verantwortung für alle Features von einer Komponente
  • Nur auf Basis von Micro/Mini-Service-Architekturen machbar
  • Kann weitgehend autark agieren - von GUI zu Deploy
  • Mit den anderen Komponenten
    wird über APIs geredet.

Platform Team

  • Eigenständiges Team, das sich um Auswahl, Aufbau und Konfiguration des Basissets von Werkzeugen und Praktiken, die von allen Teams genutzt werden, kümmert.
  • Selbst ein Built-Run-Team für die Platform.
  • Fokus ist sowohl Stabilität der Platform als auch Performance und Arbeitserleichterung für die anderen Teams

Service Delivery

Technical Consulting /
ENABLING Teams

  • Cross-Cutting zu stream aligned teams
  • bandwidth to research
  • develop tools, methodologies etc

Enabling Teams

  • sind in kontinuierlichem, regelmäßigem Kontakt zu Teams
  • bei Bedarf auch Teil der Teams
  • sorgen dafür, dass zukünftige Probleme rechtzeitig mit Tooling, Methoden und Ansätzen gelöst werden können 
  • stützen den Technology Lifecycle im Teams
  • erlaubt es, neue und komplexe Technologien zu verstehen und einzusetzen
    • Training, Workshops, HandsOn-Kooperation

COMPLICATED SUBSYSTEMS

COMPLICATED SUBSYSTEMS

  • Legacy-Systeme sind komplexe Subsysteme!
     
  • Verteilen über mehrere Teams?
  • Als Teilaufgabe in einem Team?
  • Als Feature-Thema in einem Feature-Team?

Schritt 1: Core Team

  • Das erste Team für die neue Platform
  • Drei Deliveries: 
    • die neue Platform
    • Architektur und Beispiele 
    • Bootcamp, Onboarding & Schulung
  • HandsOn-Aufbau der neuen Plattform
  • Geht später in Platform-Team und BR-Teams auf.

Platform- und Built-Run-Team integriert.

Artefakt 1: MVP Platform

  • Wird vom Core Team gebaut
  • Sobald es von anderen nutzbar ist können auch andere Teams darauf aufsetzen
  • nach ca 2 Monaten vorhanden
  • 20%-40% der finalen Plattformfeatures
  • Experimente und PoC gehören dazu.

Start

Legacy Software

Core-Team

Monolith

Platform-
MVP

Erster Service

Ramp-Up

Core-Team

Platform Team

Stream Aligned
Built & Run-Team

Stream Aligned
Built & Run-Team

Stream Aligned
Built & Run-Team

Platform-
MVP

Erster
Service

Zweiter
Service

Platform Team

Stream Aligned
Built & Run-Team

Stream Aligned
Built & Run-Team

Stream Aligned
Built & Run-Team

Platform-
MVP

Erster
Service

Zweiter
Service

Platform Team

Stream Aligned
Built & Run-Team

Stream Aligned
Built & Run-Team

Stream Aligned
Built & Run-Team

Platform-
MVP

Erster
Service

Zweiter
Service

Legacy Software

Monolith

Platform Team

Stream Aligned
Built & Run-Team

Stream Aligned
Built & Run-Team

Stream Aligned
Built & Run-Team

Platform-
MVP

Erster
Service

Zweiter
Service

Legacy Software

Monolith

Migrate

Strangle

Aufgaben 

  • Basisknowhow bereitstellen ( gerne extern ;-) )
     
  • Training jeweils direkt vor der Anwendung
     
  • Fokus auf Developer Experience - Golden Paths mit Tutorials etc
     
  • Perspektive und Plan für die Legacy-Teams bereitstellen

Antipattern

  • Modernisierungs-Almosen statt Modernisierung
     
  • Death by Feature Freeze
     
  • Death by Business Value
     
  • Opportunistischer Dauerläufer

Noch Fragen?

 

Wir haben zumindest schon vieles falsch gemacht und daraus gelernt :-)

Software-Modernisierung Grundlagen

By Johann-Peter Hartmann

Software-Modernisierung Grundlagen

Was ist "state of the art" in der IT? Wie finde ich für mich heraus, wie ich mit meiner eigenen Organisation im Verhältnis dazu stehe? Warum will ich überhaupt diesen Abgleich schaffen? Und letztlich: Was brauche ich, um den Sprung in die moderne Welt zu schaffen

  • 310