www.buschmais.de
ANWENDUNGSMODERNISIERUNG?
PRAGMATISCH, PRAKTISCH, ERFOLGREICH
MIT ARCHITECTURE DECISION RECORDS!
DevDey 2021
20.04.2021
Stephan Pirnbaum @spirnbaum
Wer wir sind
Dresdner IT-Beratungsunternehmen, gegründet im Jahre 2008
Unsere Schwerpunkte
Architekturberatung und Entwicklung moderner Geschäftsanwendungen
Software-Qualitätsanalysen und -Sicherung
Köpfe hinter jQAssistant: Entwicklung, Trainings, Workshops
Unsere Kunden im Bereich Software-Qualitätsanalyse
u. a. ITZBund, Sächsische Aufbaubank-Förderbank, ASML, GlobalFoundries, Thyssenkrupp Steel
2
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum
www.buschmais.de
ANWENDUNGSMODERNISIERUNG
Modernisierungsdruck durch ext. und int. Faktoren
Neue Anforderungen
Neue Technologien
Neue Konkurrenten
Kostenoptimierung
Prozessoptimierung
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 4
Kontinuierliche Modernisierung der Architektur notwendig
ABER: Funktionale Weiterentwicklung kann nicht
ausgesetzt werden
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 5
Parallele Modernisierung
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 6
feature
master
architecture
Ein typischer Projektverlauf
Parallele Entwicklung an Features und Architektur
Entwickler arbeiten gegeneinander
Steigender Integrationsaufwand
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 7
Endlose Geschichte
Icons made by Kiranshastry from Flaticon
Anwendungsmodernisierung
= Chance für (Re-)Dokumentation
→ AUCH: Notwendigkeit für klare
Dokumentation und Kommunikation
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 8
www.buschmais.de
AD WAS?
Michael Nygard (2011)
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 10
“Documents that assist the
team itself can have value, but
only if they are kept up to date.”
“Large documents are
never kept up to date.”
“Nobody ever reads
large documents,
either.”
Icons made by Kiranshastry from Flaticon
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 11
Warum?
Blind akzeptieren
oder ändern
ist riskant
Icons made by Kiranshastry from Flaticon
Dokumentation muss:
Entscheidungen explizit festhalten
Kontext der Entscheidung darlegen
Auswirkungen auf Entwicklung aufzeigen
Leichtgewichtig sein
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 12
Architecture Decision Records
Ein Dokument je Entscheidung
✓ Klein
✓ Übersichtlich
✓ Fokussiert
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 13
ADR # - …
Status: …
Kontext: …
Entscheidung: …
Konsequenzen: …
Architecture Decision Records
Version mit Status
✓ Nachvollziehbar
✓ Relevant
✓ Aktuell
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 14
Proposed
Accepted Declined
Superseded
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 15
#4
#4
#4
#4
Versionskontrollsystem
Icons made by Kiranshastry from Flaticon
www.buschmais.de
ADRS ❤ MODERNISIERUNG
www.buschmais.de
ADRS ❤ MODERNISIERUNG
Ein Beispiel
Online-Shop
Produktkatalog
Warenkorb
Nutzerkonten
Bestellabwicklung
…
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 18
Bevorstehende Änderung der DB für den Produktkatalog
(Aufgrund Performanz, Pflege, …)
Relationale DB → Dokumentenbasierte DB
Evaluation und Proof of Concept ist bereits erfolgreich umgesetzt
Shop soll entsprechend vorbereitet werden
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 19
Dokumentenbasierte DB erfordert Aggregate im Modell
Deep Linking zwischen Aggregaten ist verboten
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 20
ProductOption ProductOptionValue
<Aggregate>
Category
<Aggregate>
Product
Herausforderungen
Weiterentwicklung vs. Umsetzung der Architekturentscheidung
Planbarkeit der Umsetzung → Aufwand?
Monitoring der Fortschritte
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 21
www.buschmais.de
ADRS ❤ MODERNISIERUNG
Pragmatisch!
Dokumentation mit AsciiDoc
Leichtgewichtig
Versionierbar
Verschiedene Ausgabeformate
= 001 – …
== Status Proposed
== Kontext
* Migration der DB des
Produktkatalogs
== Entscheidung
* Aggregatbildung
** Keine Deep Links
== Konsequenzen
* Alle Entitäten nur durch 1
Aggregat referenziert
** Existierende Deep Links
auflösen
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 23
Prozess möglichst schmal halten
Wichtig: Jeden Beteiligten informieren
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 24
Proposed Accepted
Icons made by Kiranshastry from Flaticon
Vereinfachung der Arbeit mit ADRs durch
Bereitgestelltes ADR-Template
Thematische Unterordner (Struktur, Persistenz, Logging, …)
Klarer Prozess von der Idee zum finalen ADR
Gute IDE-Integration (AsciiDoc-Plugin)
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 25
www.buschmais.de
ADRS ❤ MODERNISIERUNG
Praktisch!
shopizer
jqassistant
adr
001-No-Deep-Linking.adoc
index.adoc
src
pom.xml
Ablage im Repository
Code-nah
Versioniert
Nachvollziehbar
Integration mit z.B.
Maven (Rendering-Plugins)
jQAssistant ☺
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 27
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 28
Rendering der Dokumente
während des Builds
in verschiedenen Formaten
zur Bereitstellung z.B. als
Maven Site
ADR ist nah am Code, ABER:
Wer prüft die Aktualität und Relevanz der Regeln?
Wer weist den Entwickler auf Regelverletzungen hin?
Wer überprüft Fortschritte und zeigt verbleibende Aufwände?
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 29
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 30
Integration mit jQAssistant ermöglicht
Identifikation von Architekturkonzepten im Code
z. B. Aggregate
Überprüfung von definierten Architekturregeln
z. B. kein Deep Linking zwischen Aggregaten
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 31
Konzepte
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 32
Product
:Type:Java
:ANNOTATED_BY
:Annotation
Aggregate
:Type:Java
:OF_TYPE
= 001 – …
…
== Konsequenzen
[[adr:Aggregates]]
[source,cypher,role=concept]
----
MATCH (t:Type)-[:ANNOTATED_BY]->()-[:OF_TYPE]->(a:Type)
WHERE a.name = „Aggregate“
SET t:Aggregate
RETURN t.fqn
----
Es gibt ein jQAssistant
DDD-Plugin dafür ☺
Category
Regeln
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 33
Product
:Aggregate
Product
Option
:DEPENDS_ON
:Entity
:Aggregate
= 001 – …
…
== Konsequenzen
[[adr:Aggregates]]
[source,cypher,role=constraint,requiresConcept=„java-ddd:*“]
----
MATCH (a:Aggregate)-[:DEPENDS_ON]->(e:Entity)
WITH e, collect(a.fqn) AS referencingAggregates
WHERE size(referencingAggregates) > 1
RETURN e.fqn AS Entity, referencingAggregates
----
:DEPENDS_ON
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 34
Rendering der Ergebnisse
in das entstehende HTML
inklusive Query und Status
(Erfolgreich/Fehlgeschlagen)
auch grafisch (PlantUML)
www.buschmais.de
ADRS ❤ MODERNISIERUNG
Erfolgreich!
Leichte Nachvollziehbarkeit der Entscheidungen
Besonders für neue Entwickler
Leichtgewichtige Dokumentation einfach verteilbar
Manifestation von Wissen
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 36
Definition von Architekturkonzepten und -regeln
Kontinuierliches Monitoring der Fortschritte
Genaue Planung der Umsetzung (Abschätzung)
Automatisierte Absicherung der Umsetzung der Entscheidungen
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 37
Beispiele
https://github.com/buschmais/adr-
starter/tree/master/jqassistant/adr
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 38
www.buschmais.de
DANKE !
www.buschmais.de
NOCH FRAGEN?
BUSCHMAIS GbR
Leipziger Straße 93
01127 Dresden
Tel. +49 351 3209230
info@buschmais.com
www.buschmais.de
KONTAKT
Stephan Pirnbaum
stephan.pirnbaum@buschmais.com
Tel. +49 351 320923-22
Twitter: @spirnbaum
DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 41

Dev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung

  • 1.
    www.buschmais.de ANWENDUNGSMODERNISIERUNG? PRAGMATISCH, PRAKTISCH, ERFOLGREICH MITARCHITECTURE DECISION RECORDS! DevDey 2021 20.04.2021 Stephan Pirnbaum @spirnbaum
  • 2.
    Wer wir sind DresdnerIT-Beratungsunternehmen, gegründet im Jahre 2008 Unsere Schwerpunkte Architekturberatung und Entwicklung moderner Geschäftsanwendungen Software-Qualitätsanalysen und -Sicherung Köpfe hinter jQAssistant: Entwicklung, Trainings, Workshops Unsere Kunden im Bereich Software-Qualitätsanalyse u. a. ITZBund, Sächsische Aufbaubank-Förderbank, ASML, GlobalFoundries, Thyssenkrupp Steel 2 DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum
  • 3.
  • 4.
    Modernisierungsdruck durch ext.und int. Faktoren Neue Anforderungen Neue Technologien Neue Konkurrenten Kostenoptimierung Prozessoptimierung DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 4
  • 5.
    Kontinuierliche Modernisierung derArchitektur notwendig ABER: Funktionale Weiterentwicklung kann nicht ausgesetzt werden DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 5 Parallele Modernisierung
  • 6.
    DevDay 2021 -Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 6 feature master architecture Ein typischer Projektverlauf
  • 7.
    Parallele Entwicklung anFeatures und Architektur Entwickler arbeiten gegeneinander Steigender Integrationsaufwand DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 7 Endlose Geschichte Icons made by Kiranshastry from Flaticon
  • 8.
    Anwendungsmodernisierung = Chance für(Re-)Dokumentation → AUCH: Notwendigkeit für klare Dokumentation und Kommunikation DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 8
  • 9.
  • 10.
    Michael Nygard (2011) DevDay2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 10 “Documents that assist the team itself can have value, but only if they are kept up to date.” “Large documents are never kept up to date.” “Nobody ever reads large documents, either.” Icons made by Kiranshastry from Flaticon
  • 11.
    DevDay 2021 -Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 11 Warum? Blind akzeptieren oder ändern ist riskant Icons made by Kiranshastry from Flaticon
  • 12.
    Dokumentation muss: Entscheidungen explizitfesthalten Kontext der Entscheidung darlegen Auswirkungen auf Entwicklung aufzeigen Leichtgewichtig sein DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 12
  • 13.
    Architecture Decision Records EinDokument je Entscheidung ✓ Klein ✓ Übersichtlich ✓ Fokussiert DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 13 ADR # - … Status: … Kontext: … Entscheidung: … Konsequenzen: …
  • 14.
    Architecture Decision Records Versionmit Status ✓ Nachvollziehbar ✓ Relevant ✓ Aktuell DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 14 Proposed Accepted Declined Superseded
  • 15.
    DevDay 2021 -Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 15 #4 #4 #4 #4 Versionskontrollsystem Icons made by Kiranshastry from Flaticon
  • 16.
  • 17.
  • 18.
    Online-Shop Produktkatalog Warenkorb Nutzerkonten Bestellabwicklung … DevDay 2021 -Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 18
  • 19.
    Bevorstehende Änderung derDB für den Produktkatalog (Aufgrund Performanz, Pflege, …) Relationale DB → Dokumentenbasierte DB Evaluation und Proof of Concept ist bereits erfolgreich umgesetzt Shop soll entsprechend vorbereitet werden DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 19
  • 20.
    Dokumentenbasierte DB erfordertAggregate im Modell Deep Linking zwischen Aggregaten ist verboten DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 20 ProductOption ProductOptionValue <Aggregate> Category <Aggregate> Product
  • 21.
    Herausforderungen Weiterentwicklung vs. Umsetzungder Architekturentscheidung Planbarkeit der Umsetzung → Aufwand? Monitoring der Fortschritte DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 21
  • 22.
  • 23.
    Dokumentation mit AsciiDoc Leichtgewichtig Versionierbar VerschiedeneAusgabeformate = 001 – … == Status Proposed == Kontext * Migration der DB des Produktkatalogs == Entscheidung * Aggregatbildung ** Keine Deep Links == Konsequenzen * Alle Entitäten nur durch 1 Aggregat referenziert ** Existierende Deep Links auflösen DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 23
  • 24.
    Prozess möglichst schmalhalten Wichtig: Jeden Beteiligten informieren DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 24 Proposed Accepted Icons made by Kiranshastry from Flaticon
  • 25.
    Vereinfachung der Arbeitmit ADRs durch Bereitgestelltes ADR-Template Thematische Unterordner (Struktur, Persistenz, Logging, …) Klarer Prozess von der Idee zum finalen ADR Gute IDE-Integration (AsciiDoc-Plugin) DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 25
  • 26.
  • 27.
    shopizer jqassistant adr 001-No-Deep-Linking.adoc index.adoc src pom.xml Ablage im Repository Code-nah Versioniert Nachvollziehbar Integrationmit z.B. Maven (Rendering-Plugins) jQAssistant ☺ DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 27
  • 28.
    DevDay 2021 -Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 28 Rendering der Dokumente während des Builds in verschiedenen Formaten zur Bereitstellung z.B. als Maven Site
  • 29.
    ADR ist naham Code, ABER: Wer prüft die Aktualität und Relevanz der Regeln? Wer weist den Entwickler auf Regelverletzungen hin? Wer überprüft Fortschritte und zeigt verbleibende Aufwände? DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 29
  • 30.
    DevDay 2021 -Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 30
  • 31.
    Integration mit jQAssistantermöglicht Identifikation von Architekturkonzepten im Code z. B. Aggregate Überprüfung von definierten Architekturregeln z. B. kein Deep Linking zwischen Aggregaten DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 31
  • 32.
    Konzepte DevDay 2021 -Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 32 Product :Type:Java :ANNOTATED_BY :Annotation Aggregate :Type:Java :OF_TYPE = 001 – … … == Konsequenzen [[adr:Aggregates]] [source,cypher,role=concept] ---- MATCH (t:Type)-[:ANNOTATED_BY]->()-[:OF_TYPE]->(a:Type) WHERE a.name = „Aggregate“ SET t:Aggregate RETURN t.fqn ---- Es gibt ein jQAssistant DDD-Plugin dafür ☺
  • 33.
    Category Regeln DevDay 2021 -Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 33 Product :Aggregate Product Option :DEPENDS_ON :Entity :Aggregate = 001 – … … == Konsequenzen [[adr:Aggregates]] [source,cypher,role=constraint,requiresConcept=„java-ddd:*“] ---- MATCH (a:Aggregate)-[:DEPENDS_ON]->(e:Entity) WITH e, collect(a.fqn) AS referencingAggregates WHERE size(referencingAggregates) > 1 RETURN e.fqn AS Entity, referencingAggregates ---- :DEPENDS_ON
  • 34.
    DevDay 2021 -Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 34 Rendering der Ergebnisse in das entstehende HTML inklusive Query und Status (Erfolgreich/Fehlgeschlagen) auch grafisch (PlantUML)
  • 35.
  • 36.
    Leichte Nachvollziehbarkeit derEntscheidungen Besonders für neue Entwickler Leichtgewichtige Dokumentation einfach verteilbar Manifestation von Wissen DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 36
  • 37.
    Definition von Architekturkonzeptenund -regeln Kontinuierliches Monitoring der Fortschritte Genaue Planung der Umsetzung (Abschätzung) Automatisierte Absicherung der Umsetzung der Entscheidungen DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 37
  • 38.
  • 39.
  • 40.
  • 41.
    BUSCHMAIS GbR Leipziger Straße93 01127 Dresden Tel. +49 351 3209230 info@buschmais.com www.buschmais.de KONTAKT Stephan Pirnbaum stephan.pirnbaum@buschmais.com Tel. +49 351 320923-22 Twitter: @spirnbaum DevDay 2021 - Vortrag "Anwendungsmodernisierung" - Stephan Pirnbaum 41