Slide 1

Slide 1 text

Continuous Delivery für Legacy Code Richard Gross @arghrich

Slide 2

Slide 2 text

Grundlage 09.11.18 Richard Gross @arghrich 2 Richard Software Archäologe Sanierungsprojekte Audits Die schlimmste Codebasis die ich je gesehen habe

Slide 3

Slide 3 text

Dylan Beattie @dylanbeattie Legacy Code is code that’s too scary to update and too profitable to delete. Michael Feathers @mfeathers Legacy Code is code without tests. 09.11.18 Richard Gross @arghrich 3

Slide 4

Slide 4 text

Dylan Beattie @dylanbeattie Legacy Code is code that’s too scary to update and too profitable to delete. Continuous Delivery If somebody thinks of a good idea, how do we deliver it to users as quickly as possibly? 09.11.18 Richard Gross @arghrich 4

Slide 5

Slide 5 text

09.11.18 Richard Gross @arghrich 6 Continuous Delivery mit Zuversicht?

Slide 6

Slide 6 text

Problemstellung 09.11.18 Richard Gross @arghrich 7

Slide 7

Slide 7 text

Ideale Architektur 09.11.18 Richard Gross @arghrich 8 UI / API BL DL DB P T C C C /

Slide 8

Slide 8 text

Ideale Business Logik Tests 09.11.18 Richard Gross @arghrich 9 UI / API BL DL DB P T C C / C

Slide 9

Slide 9 text

Legacy Architektur 09.11.18 Richard Gross @arghrich 10 BL/DB in UI / API BL BL in DB P T C C /

Slide 10

Slide 10 text

BL in DB BL BL/DB in UI / API Initiale Legacy Business Logik Tests 09.11.18 Richard Gross @arghrich 11 P T / C C

Slide 11

Slide 11 text

Classic ASP Architektur 09.11.18 Richard Gross @arghrich 12 BL/DB in UI / API BL in DB P T C /

Slide 12

Slide 12 text

Ambitionierte Ziele üSoftware nach 15 Jahren vom Dienstleister übernehmen üEventueller Umzug in die Azure Cloud üWeiterentwicklung ermöglichen üStatt 40, nur 10 Personen im Team üBetrieb für 10 Kunden 09.11.18 Richard Gross @arghrich 13

Slide 13

Slide 13 text

5M 4M Lines of Code Lieferung 09.11.18 Richard Gross @arghrich 14 T-SQL JavaScript VBA C# Asp.NET + C# Classic Asp + VBScript Excel WinForms + C# Fat Client Webservice Database Kein Code geliefert MIA Jobs Website

Slide 14

Slide 14 text

Unsichtbare Aufrufe 09.11.18 Richard Gross @arghrich 15 Excel Webservice Website Fat Client Jobs C C C Database C P T C C C C (BL in) UI / API C BL DB T

Slide 15

Slide 15 text

Connascence 2 elements A,B are connascent if there is at least 1 possible change to A requires a change to B in order to maintain overall correctness Meilir Page-Jones | Jim Weirich‘s “Grand Unified Theory of Software Development” J

Slide 16

Slide 16 text

3-axes of Connascence 10 Strength Level How explicit Locality How close Degree Size of Impact Meilir Page-Jones | Jim Weirich‘s “Grand Unified Theory of Software Development” J

Slide 17

Slide 17 text

10 Kundeninstallationen 09.11.18 Richard Gross @arghrich 19 Frobozz Co. Oceanic Airlines … Umbrella Corp Soylent Corp

Slide 18

Slide 18 text

… Oceanic Airlines Soylent Corp 10x Softwarestände 09.11.18 Richard Gross @arghrich 20 Frobozz Co. Umbrella Corp Gleich C/P Copy/ Paste Feature Copy/Paste

Slide 19

Slide 19 text

10x Softwarestände 10x Datenbankschemata 09.11.18 Richard Gross @arghrich 21 Gleich Gleich

Slide 20

Slide 20 text

Oh Boy 09.11.18 Richard Gross @arghrich 22

Slide 21

Slide 21 text

Empfehlungen Team, Vorgehen 09.11.18 Richard Gross @arghrich 23

Slide 22

Slide 22 text

Signifikante Veränderung im Team und in Kultur notwendig 09.11.18 24

Slide 23

Slide 23 text

Neues Co-located Cross-functional Team mit gemeinsamen Ziel 09.11.18 25 DEV TEST OPS Endkunde

Slide 24

Slide 24 text

09.11.18 26 DEV TEST OPS Endkunde Collective Legacy, Test, Product Ownership

Slide 25

Slide 25 text

Vielleicht besser: Ein „Startup“ für die Legacy Übernahme DEV TEST OPS Endkunde 09.11.18 27

Slide 26

Slide 26 text

Team Tätigkeiten 09.11.18 Richard Gross @arghrich 28 Sanierung Archäologie Infrastruktur aufbauen Konfigurier barkeit herstellen Vollständige Lieferung Verifizieren

Slide 27

Slide 27 text

Version Everything Sollte man nicht sagen müssen, aber leider gilt: • Code – oft nicht versioniert • Config – sehr selten • Deploymentscripte – Fast nie • Infrastruktur - Nie 09.11.18 Richard Gross @arghrich 29

Slide 28

Slide 28 text

Anti-Pattern: Folder Version 09.11.18 Richard Gross @arghrich 30

Slide 29

Slide 29 text

Anti-Pattern: File Version 09.11.18 Richard Gross @arghrich 31

Slide 30

Slide 30 text

Vorgehen: Infrastruktur • Dev/Prod-Parity • Phoenix Server • Jeder Build ist potentielles Release • Unternehmen vom Mehrwert von Infrastructure Automation überzeugen • Standard IA-Tools nutzen • Nicht: Ansible nachbauen mit Powershell Scripten 09.11.18 Richard Gross @arghrich 34

Slide 31

Slide 31 text

Vorgehen: Konfigurierbarkeit •Eine konfigurierbare Software, nicht 10 fest-verdrahtete •z.B.: msdeploy.exe, sqlpackage.exe • (String) replacement bei publish • Umgebungsvariablen 09.11.18 Richard Gross @arghrich 35

Slide 32

Slide 32 text

Anti-Pattern: Branch by Obscurity • Branch by (Un) Comment • Branch by Entity-Id 09.11.18 Richard Gross @arghrich 37

Slide 33

Slide 33 text

Vorgehen: Software-Archäologie https://fs.blog/2013/07/the-difference-between-science-and-engineering/ Archeological Inquiry

Slide 34

Slide 34 text

Lernen mit Inverse Object Mother • Anwendung Starten mit leerer Datenbank und ohne Domain Modell • UseCase klicken • Fehler analysieren • Domain Modell erweitern um Erkenntnis • Benötigten Zustand in DB mit Modell herstellen • Dokumentieren als Test • Repeat 09.11.18 Richard Gross @arghrich 39

Slide 35

Slide 35 text

Inverse BDD ist sehr schwierig • Was will wollte der Anwender • Gherkin wird für Data-Scripting missbraucht • Gherkin bei uns deplatziert und zu teuer 09.11.18 Richard Gross @arghrich 40

Slide 36

Slide 36 text

Vorgehen: Sanierung Prio 1Technisch und/oder fachlich obsoleten Code entfernen 09.11.18 Richard Gross @arghrich 41

Slide 37

Slide 37 text

Obsoleten Code finden • Anwenderumfragen • IDE gibt Vorschläge • grep auf FROM, JOIN, INSERT, UPDATE, DELETE und rein in Excel • Analytics / Activity-Log für Seiten einbauen • Legacy Toggles / Inverse Circuit Breaker • Vergessen Teile zu deployen 09.11.18 Richard Gross @arghrich 42

Slide 38

Slide 38 text

Startpunkt festlegen • Linter • Profiler • CodeMaat https://github.com/ adamtornhill/code-maat • Structure101 http://structure101.com/ • SonarQube https://www.sonarqube.org/ • CodeCharta https://github.com/ MaibornWolff/codecharta Art by Zaufishan

Slide 39

Slide 39 text

Startpunkt festlegen • Linter • Profiler • CodeMaat https://github.com/ adamtornhill/code-maat • Structure101 http://structure101.com/ • SonarQube https://www.sonarqube.org/ • CodeCharta https://github.com/ MaibornWolff/codecharta 09.11.18 Richard Gross @arghrich 44

Slide 40

Slide 40 text

Golden Master für Refactoring 09.11.18 Richard Gross @arghrich 45 Saniertes System Legacy System Input for UI/API/DB Output Output Compare

Slide 41

Slide 41 text

(Refactoring) Branching Strategy • Don‘t Branch • Don‘t Branch • Don‘t Branch • Stop Continuous Isolation Dave Farley

Slide 42

Slide 42 text

Refactoring Big Ball of Mud Isolate • Stable von Unstable • R/W mit Fassaden trennen • Interfaces • Dependency Injection • Table Views Small • Baby Steps • Feathers Techniken • Mob Programming 09.11.18 Richard Gross @arghrich 47 • Branch by abstraction • Parallel Change • Strangler Application Big

Slide 43

Slide 43 text

Strangler Application https://paulhammant.com/2013/07/14/legacy-application-strangulation-case-studies/

Slide 44

Slide 44 text

Commit Compile Unit Tests Code Analysis Package Source Code Version Control Pipeline Stages Artifact Repo Environ- ment V8.4.0 Acceptance Deploy Package Smoke Tests Acceptance Tests Categorization Tests Env & App Config 10x Staging Staging Integration V8.4.0 tag V8.4.0-acc UAT Deploy Package Smoke Tests Manual Tests Env & App Config 10x Staging Staging Staging Self-Service Tester tag V8.4.0-uat/released Production Deploy Package Smoke Tests 10x Staging Staging Production PO Self-Service

Slide 45

Slide 45 text

Deployment Agility 09.11.18 Richard Gross @arghrich 50 • Minimum Time to UAT/Prod 10min 10 minutes for Build • Regular Time to UAT 50min 10: Build | 20: DB Migrate INT | 20: DB Migrate STAGE • Nightly Infrastructure Updates 2h 30: Powershell | 60: DB Create + Init | 20: DB Migrate • Canary Builds & Releases wären besser • Alle 2 Wochen 1w manuelle Testphase • Perspektivisch durch mehr E2E ersetzen

Slide 46

Slide 46 text

Hat sich der Aufwand gelohnt? • Anwender haben sich riesig gefreut • Stabiler als jemals zuvor • Bis heute kann keiner Beschreiben was „so wie vorher“ bedeutet à wie soll man das neu bauen • Hätte man auch mit Anforderungen nicht in einem Jahr neu bauen können • Fließende Übergang à min. Feature Freeze • No Second System-Syndrome 09.11.18 Richard Gross @arghrich 51

Slide 47

Slide 47 text

CD für Legacy Tätigkeiten • Lieferung • Infrastruktur • Konfigurierbarkeit • Archäologie • Sanierung Erfolgsfaktoren • Mut • Team • Infra-Automation • Pipeline • Situativ angehen • Strangler • Mut zum Mob • Connascence 09.11.18 Richard Gross @arghrich 52

Slide 48

Slide 48 text

Done Fragen, Anmerkungen, Mitleid? J 30 Mio 410 Mitarbeiter*innen 9. Jahr 23 Nationen 300 Wochen München, Augsburg, Berlin, Frankfurt

Slide 49

Slide 49 text

Reading • https://trello.com/b/Fdd876S8/continuous- delivery-checklist-template • Uvm. Ich dachte nicht, dass ich diese Folie zeigen werde 09.11.18 Richard Gross @arghrich 54