Slide 1

Slide 1 text

@CYRIUX BREAK THE MONOLITH! CHALLENGES & OPPORTUNITIES @CYRIUX @AROLLAFR Cyrille Martraire

Slide 2

Slide 2 text

@cyriux @arollafr You must be able to deploy anytime!

Slide 3

Slide 3 text

@cyriux @arollafr You have to scale the delivery!

Slide 4

Slide 4 text

@cyriux @arollafr You have to be full cloud- native!

Slide 5

Slide 5 text

@cyriux @arollafr You have to go full microservices!

Slide 6

Slide 6 text

@cyriux @arollafr If only it was THAT simple…

Slide 7

Slide 7 text

@cyriux @arollafr If only I didn’t have this big monolith!

Slide 8

Slide 8 text

@CYRIUX BREAKING A MONOLITH? @CYRIUX @AROLLAFR

Slide 9

Slide 9 text

SINCE 1999 CYRILLE MARTRAIRE @CYRIUX @AROLLAFR CO-FOUNDER & CTO AROLLA DEVELOPER, CONSULTANT, TRAINER FOUNDER PARIS SOFTWARE CRAFTERS SPEAKER & AUTHOR

Slide 10

Slide 10 text

arolla.fr @arollafr TDD | BDD | DDD

Slide 11

Slide 11 text

arolla.fr @arollafr crafting architecture

Slide 12

Slide 12 text

@CYRIUX BREAKING A MONOLITH? @CYRIUX @AROLLAFR

Slide 13

Slide 13 text

@CYRIUX BREAKING A MONOLITH? @CYRIUX @AROLLAFR

Slide 14

Slide 14 text

MONOLITH = 1

Slide 15

Slide 15 text

@CYRIUX 1 COMPONENT {;}

Slide 16

Slide 16 text

@CYRIUX 1 TEAM

Slide 17

Slide 17 text

@CYRIUX 1 GROUP?

Slide 18

Slide 18 text

@CYRIUX 1 REPO #Commit

Slide 19

Slide 19 text

@CYRIUX DEPLOY AT ONCE #GoLive

Slide 20

Slide 20 text

@CYRIUX INITIALLY: SMALL

Slide 21

Slide 21 text

@CYRIUX INITIALLY: HAPPINESS

Slide 22

Slide 22 text

@CYRIUX …

Slide 23

Slide 23 text

@CYRIUX EVENTUALLY: LARGE #sad

Slide 24

Slide 24 text

@CYRIUX EVENTUALLY: FRUSTRATION #sad

Slide 25

Slide 25 text

@CYRIUX MANY RESPONSIBILITIES IN ONCE PLACE #notSRP {;} {;} {;} {;} {;}

Slide 26

Slide 26 text

@CYRIUX TOO MANY PEOPLE

Slide 27

Slide 27 text

@CYRIUX INTERFERING ON EACH OTHER’S WORK

Slide 28

Slide 28 text

@CYRIUX OR TOO MUCH COORDINATION #TooManyMeetings

Slide 29

Slide 29 text

@CYRIUX SLOW DELIVERY #Slow

Slide 30

Slide 30 text

@CYRIUX MANY OTHER ISSUES #scaling-as-1-piece #not-cloud-native #excessive-coupling

Slide 31

Slide 31 text

@CYRIUX FRUSTRATION #sad

Slide 32

Slide 32 text

@CYRIUX BUT MONOLITH IS NOT A DIRTY WORLD

Slide 33

Slide 33 text

@CYRIUX NOTHING’S WRONG WITH A SMALL MONOLITH Laårk Boshoff

Slide 34

Slide 34 text

@CYRIUX NOTHING’S WRONG WITH A STRUCTURED MONOLITH Paul Hanaok a

Slide 35

Slide 35 text

@CYRIUX LARGE AND ENTANGLED IS THE ISSUE

Slide 36

Slide 36 text

@CYRIUX BREAK THE MONOLITH @CYRIUX @AROLLAFR

Slide 37

Slide 37 text

@CYRIUX MAKING THE MONOLITH MORE MODULAR @CYRIUX @AROLLAFR

Slide 38

Slide 38 text

WHY BREAKING A MONOLITH? TOO BIG FOR ONE TEAM TOO BIG TO SCALE WELL TOO BIG FOR THE CLOUD SCALING TEAMS SCALING RUNTIME CLOUD-FRIENDLY

Slide 39

Slide 39 text

@CYRIUX MANY MODULES @CYRIUX TOO BIG FOR ONE TEAM {;} {;} {;} {;}

Slide 40

Slide 40 text

@CYRIUX MANY TEAMS @CYRIUX TOO BIG FOR ONE TEAM

Slide 41

Slide 41 text

@CYRIUX GRANULAR SCALING @CYRIUX S XXL M XL TOO BIG TO SCALE WELL

Slide 42

Slide 42 text

@CYRIUX GRANULAR ELASTICITY @CYRIUX 0..1 1-∞ managed (function) TOO BIG FOR THE CLOUD managed reserved 3

Slide 43

Slide 43 text

WHY BREAKING A MONOLITH? TOO BIG TO REWRITE TOO BIG TO FIT IN YOUR HEAD PROGRESSIVE MODERNIZATION BETTER IMPACT ANALYSIS

Slide 44

Slide 44 text

@CYRIUX GRANULAR MODERNIZING @CYRIUX partial rewrite TOO BIG TO REWRITE partial rewrite partial rewrite partial rewrite

Slide 45

Slide 45 text

@CYRIUX HUMAN-SIZED @CYRIUX small TOO BIG TO FIT IN YOUR HEAD small small small #less-to-learn #fewer bugs

Slide 46

Slide 46 text

@CYRIUX @CYRIUX TOO BIG TO FIT IN YOUR HEAD HUMAN-SIZED

Slide 47

Slide 47 text

@cyriux @arollafr Ok, now split it into modules!

Slide 48

Slide 48 text

@cyriux @arollafr If only it was THAT simple…

Slide 49

Slide 49 text

@CYRIUX @CYRIUX ?

Slide 50

Slide 50 text

@cyriux @arollafr @cyriux

Slide 51

Slide 51 text

@CYRIUX @CYRIUX

Slide 52

Slide 52 text

@CYRIUX @CYRIUX

Slide 53

Slide 53 text

@CYRIUX @CYRIUX

Slide 54

Slide 54 text

@CYRIUX @CYRIUX #EvenMoreMeetings

Slide 55

Slide 55 text

@cyriux @arollafr @cyriux

Slide 56

Slide 56 text

@cyriux @arollafr @cyriux

Slide 57

Slide 57 text

@CYRIUX @CYRIUX #AutonomyByDesign

Slide 58

Slide 58 text

@CYRIUX HOW TO DECIDE THE BOUNDARIES?

Slide 59

Slide 59 text

@cyriux @arollafr @CYRIUX

Slide 60

Slide 60 text

BOUNDED CONTEXTS @CYRIUX

Slide 61

Slide 61 text

BOUNDED CONTEXTS @CYRIUX since 2003

Slide 62

Slide 62 text

BOUNDED CONTEXTS @CYRIUX before it was cool

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

in autonomy

Slide 65

Slide 65 text

@CYRIUX HOW NOT TO HOW TO @CYRIUX

Slide 66

Slide 66 text

@cyriux @arollafr NO

Slide 67

Slide 67 text

@cyriux @arollafr YES

Slide 68

Slide 68 text

@CYRIUX HOW NOT TO @CYRIUX

Slide 69

Slide 69 text

Split by layer W eb Logic Dao DB EASY & WRONG

Slide 70

Slide 70 text

Split by tech Mongo Postgres Elastic EASY & RANDOM

Slide 71

Slide 71 text

Split by entity Client Purchase Product EASY & WRONG

Slide 72

Slide 72 text

Split by Screen EASY & WRONG Hom e My Account DrillDow n

Slide 73

Slide 73 text

Split by Billable unit EASY & WRONG Core Prem ium

Slide 74

Slide 74 text

@CYRIUX HOW TO @CYRIUX

Slide 75

Slide 75 text

Split by Functional Area aym ent atalogue hipping Billing NOT SO EASY

Slide 76

Slide 76 text

TECHNICAL DECISION Functional areas

Slide 77

Slide 77 text

TECHNICAL DECISION Functional areas

Slide 78

Slide 78 text

TECHNICAL DECISION Functional areas

Slide 79

Slide 79 text

@CYRIUX Focus on the language @CYRIUX

Slide 80

Slide 80 text

Payment Event Anomaly Agent Transaction Transaction Status Account Basket Items Recent Baskets

Slide 81

Slide 81 text

Payment Event Anomaly Agent Transaction Transaction Status Account Basket Items Recent Baskets

Slide 82

Slide 82 text

Payment Event Anomaly Agent Transaction Transaction Status Account Basket Items Recent Baskets Shopping Cart Payment Payment Fraud Detection

Slide 83

Slide 83 text

Payment Event Anomaly Agent Transaction Transaction Status Account Basket Items Recent Baskets Shopping Cart Payment Payment Fraud Detection purpose = be Paid purpose = Sell purpose = Avoid loss

Slide 84

Slide 84 text

@CYRIUX Focus on the purpose @CYRIUX Sub-domain names as verbs made into nouns: often end in -ing or -tion or -ment

Slide 85

Slide 85 text

Payment Event Anomaly Agent Transaction Transaction Status Account Basket Items Recent Baskets

Slide 86

Slide 86 text

THE SAME THING IN THE REAL WORLD (EG A CUSTOMER) FOR DIFFERENT PURPOSES BECOMES DIFFERENT THINGS

Slide 87

Slide 87 text

DIFFERENT THINGS purpose = Sell purpose = Avoid loss Potential Fraudster ”Wanna be buyer”

Slide 88

Slide 88 text

@CYRIUX Mixing All Your Mental Models @CYRIUX Interviews. Code reviews. Collaborative workshops.

Slide 89

Slide 89 text

EVENT STORMING

Slide 90

Slide 90 text

Pre-Negotiation Listing) B2BOrdering Fraud Détection Payment Sourcing Distribution Rates Grid RealTime Prices Gift Cards Content & Comparators Sales Promotion Acquisition TV Campaigns Online Ads Company Rating Product Reviews Shopping Cart Catalogue Search Categories Tags Partnerships Secondary Listing Internal Purchasing Rates CrossSales Navigation SEO Marketing MAPPING THE POTENTIAL BOUNDED CONTEXTS

Slide 91

Slide 91 text

Sub-Domain A sub-sub domain A1 sub-sub domain B1 sub-sub domain C1 Domain Sub-Domain B Sub-Domain C sub-sub domain A2 sub-sub domain C2 Customers Experience X1 Customers Experience X2 Customers Experience X3 Generic enabler Audience Experiences Business (Sub)- Domains Domain- agnostic Enablers Collaborators Experience X4 Very specific Generic Specific audience Domain- Specific Domain- Agnostic Volatile Stable MAPPING THE POTENTIAL BOUNDED CONTEXTS

Slide 92

Slide 92 text

@cyriux @arollafr

Slide 93

Slide 93 text

@CYRIUX NOW THAT WE FOUND THE BOUNDARIES, WHAT ARE WE GONNA DO WITH THEM?

Slide 94

Slide 94 text

@CYRIUX BREAK THE MONOLITH FOR REAL! @CYRIUX @AROLLAFR

Slide 95

Slide 95 text

Sub-Domain A sub-sub domain A1 sub-sub domain B1 sub-sub domain C1 Domain Sub-Domain B Sub-Domain C sub-sub domain A2 sub-sub domain C2 Customers Experience X1 Customers Experience X2 Customers Experience X3 Generic enabler Audience Experiences Business (Sub)- Domains Domain- agnostic Enablers Collaborators Experience X4 Very specific Generic Specific audience Domain- Specific Domain- Agnostic Volatile Stable SpringBoot Postgres / Elastic Search RabbitMQ Microservice MODULE = MICROSERVICE (BACKEND)

Slide 96

Slide 96 text

MODULE = MODULE IN MONOLITH Sub-Domain A sub-sub domain A1 sub-sub domain B1 sub-sub domain C1 Domain Sub-Domain B Sub-Domain C sub-sub domain A2 sub-sub domain C2 Customers Experience X1 Customers Experience X2 Customers Experience X3 Generic enabler Audience Experiences Business (Sub)- Domains Domain- agnostic Enablers Collaborators Experience X4 Very specific Generic Specific audience Domain- Specific Domain- Agnostic Volatile Stable Modular Monolith ”Majestic Monolith”

Slide 97

Slide 97 text

Sub-Domain A sub-sub domain A1 sub-sub domain B1 sub-sub domain C1 Domain Sub-Domain B Sub-Domain C sub-sub domain A2 sub-sub domain C2 Customers Experience X1 Customers Experience X2 Customers Experience X3 Generic enabler Audience Experiences Business (Sub)- Domains Domain- agnostic Enablers Collaborators Experience X4 Very specific Generic Specific audience Domain- Specific Domain- Agnostic Volatile Stable Node.js Elastic Search RabbitMQ BFF MODULE = FRONT MICROSERVICE (BFF)

Slide 98

Slide 98 text

Sub-Domain A sub-sub domain A1 sub-sub domain B1 sub-sub domain C1 Domain Sub-Domain B Sub-Domain C sub-sub domain A2 sub-sub domain C2 Customers Experience X1 Customers Experience X2 Customers Experience X3 Generic enabler Audience Experiences Business (Sub)- Domains Domain- agnostic Enablers Collaborators Experience X4 Very specific Generic Specific audience Domain- Specific Domain- Agnostic Volatile Stable (Function) (Function) (Function) Serverless store Serverless bus FaaS / BaaS / SaaS MODULE = FUNCTIONS / SERVERLESS SERVICES

Slide 99

Slide 99 text

Mapping the Potential Bounded Contexts Sub-Domain A sub-sub domain A1 sub-sub domain B1 sub-sub domain C1 Domain Sub-Domain B Sub-Domain C sub-sub domain A2 sub-sub domain C2 Customers Experience X1 Customers Experience X2 Customers Experience X3 Generic enabler Audience Experiences Business (Sub)- Domains Domain- agnostic Enablers Collaborators Experience X4 Very specific Generic Specific audience Domain- Specific Domain- Agnostic Volatile Stable legacy components not aligned (at all)

Slide 100

Slide 100 text

@CYRIUX GUIDING DELIVERY PROJECTS @CYRIUX Don’t split for the sake of it. Split Opportunistically when needed. Never fully done.

Slide 101

Slide 101 text

@CYRIUX (Like Cellular Division)

Slide 102

Slide 102 text

@CYRIUX (Like Cellular Division)

Slide 103

Slide 103 text

@CYRIUX LIMITS & CONSEQUENCES

Slide 104

Slide 104 text

@cyriux @arollafr But modules work with each other!

Slide 105

Slide 105 text

@CYRIUX @CYRIUX Contracts Everywhere STABLE CONTRACTS ENABLE BOTH SIDES TO CHANGE FREELY

Slide 106

Slide 106 text

@cyriux @arollafr If they work together, they must be coupled!

Slide 107

Slide 107 text

@CYRIUX microservices Event-Driven Architecture API’s Smart Endpoints, Dumb Pipes @CYRIUX Choreography over Orchestration Change-Ready Architecture

Slide 108

Slide 108 text

Event Bus / Observer pattern Ticke t Booked Bookin g Service Bookin g Confirmed Inventor y Service Bookin g Cancelled Capacit y Updated Ticketin g Service CHANGE IN ONLY 1 PLACE

Slide 109

Slide 109 text

Event Bus / Observer pattern Ticke t Booked Bookin g Service Bookin g Confirmed Inventor y Service Bookin g Cancelled Capacit y Updated Ticketin g Service Notificatio n Service CHANGE IN ONLY 1 PLACE

Slide 110

Slide 110 text

Event Bus / Observer pattern Ticke t Booked Bookin g Service Bookin g Confirmed Inventor y Service Bookin g Cancelled Capacit y Updated Ticketin g Service CHANGE IN ONLY 1 PLACE

Slide 111

Slide 111 text

@cyriux @arollafr But it’s silos again!?

Slide 112

Slide 112 text

HIGH-LEVEL ALIGNMENT OWN INTELLIGENCE + LOCAL KNOWLEDGE TO ACT COMPANY VISION & GOALS HIGH- LEVEL STRATEGY (HIGH LEVEL)

Slide 113

Slide 113 text

@cyriux @arollafr But the global optimum isn’t the sum of local ones!

Slide 114

Slide 114 text

@CYRIUX @CYRIUX ‘FINE TUNING’ CONTROL LOOPS LOW-FREQUENCY

Slide 115

Slide 115 text

@cyriux @arollafr But we already moved to the cloud!

Slide 116

Slide 116 text

@cyriux @arollafr fedakv.medium.com/ GRANULARITY MATTERS

Slide 117

Slide 117 text

@CYRIUX MORE OPPORTUNITIES…

Slide 118

Slide 118 text

Modularity opens options @CYRIUX

Slide 119

Slide 119 text

MODULAR PERSONAL COMPUTER

Slide 120

Slide 120 text

@CYRIUX GLOBAL OPTIONS @CYRIUX

Slide 121

Slide 121 text

@CYRIUX GLOBAL OPTIONS @CYRIUX A

Slide 122

Slide 122 text

@CYRIUX GLOBAL OPTIONS @CYRIUX A’

Slide 123

Slide 123 text

@CYRIUX GLOBAL OPTIONS @CYRIUX A’ X

Slide 124

Slide 124 text

@CYRIUX @CYRIUX ”PAIN AU CHOCOLAT” LOCAL OPTIONS ”CHOCOLATINE”

Slide 125

Slide 125 text

@CYRIUX @CYRIUX EXTREME PROGRAMMING LOCAL OPTIONS KANBAN SCRUM

Slide 126

Slide 126 text

@CYRIUX @CYRIUX LOCAL OPTIONS POSTGRES POSTGRES POSTGRES POSTGRES

Slide 127

Slide 127 text

@CYRIUX @CYRIUX TDD, BDD, DDD, 90+ COVERAGE LOCAL OPTIONS CHANGE CHEAP, 40% TESTS FROM NOW ON KEEP AS-IS, TEST MANUALLY AS USUAL

Slide 128

Slide 128 text

CRAFT IS NOT EVERYWHERE, ALL THE TIME?!

Slide 129

Slide 129 text

BE CAT-MATIC NOT DOG-MATIC

Slide 130

Slide 130 text

@CYRIUX Escape the Tyranny of ONE @CYRIUX Everything is contextual. No one-size- fits-all.

Slide 131

Slide 131 text

@cyriux @arollafr Fraud Détection Payment Gift Cards n mpany ting Review Shopping Cart EVENT-SOURCED HEXAGONAL ARCHITECTURE CRUD SaaS

Slide 132

Slide 132 text

@cyriux @arollafr Fraud Détection Payment Gift Cards n mpany ting Review Shopping Cart POstgres POSTGRES S3+RDS Elastic

Slide 133

Slide 133 text

@cyriux @arollafr Fraud Détection Payment Gift Cards n mpany ting Review Shopping Cart Azure API APP on-premise Azure/WEbapp SaaS Azure FUNCTIONS Azure ML

Slide 134

Slide 134 text

@CYRIUX GRANULAR EVERYTHING @CYRIUX S XXL M XL TOO BIG TO BENEFIT FROM THE CLOUD

Slide 135

Slide 135 text

@cyriux @arollafr Fraud Détection Payment Gift Cards n mpany ting Review Shopping Cart REWRITE outsource KEEP AS-IS KEEP EXTRACT EXTRACT AS LIB

Slide 136

Slide 136 text

@CYRIUX GRANULAR SCALING @CYRIUX repair rewrite extract rewrite TOO BIG TO REWRITE

Slide 137

Slide 137 text

@CYRIUX EVEN MORE OPPORTUNITIES

Slide 138

Slide 138 text

REPORTING À LA MAP-REDUCE REDUCE MAP MAP MAP MAP REDUCE REDUCE REDUCE REDUCE LOCALLY COMPUTED LOCAL METRICS AGREGATED GLOBAL METRICS

Slide 139

Slide 139 text

BOUNDED CONTEXTS IN A VALUE CHAIN Sub-Domain A sub-sub domain A1 sub-sub domain B1 sub-sub domain C1 Domain Sub-Domain B Sub-Domain C sub-sub domain A2 sub-sub domain C2 Customers Experience X1 Customers Experience X2 Customers Experience X3 Generic enabler Domain- agnostic Enablers Collaborators Experience X4 Very specific Generic Specific audience Domain- Specific Domain- Agnostic Volatile Stable Self-care ratio Conversion rate acquisition cost Average Basket Amount Turnover = Traffic x conversion rate x average basket

Slide 140

Slide 140 text

@CYRIUX MODULAR COMPANY @CYRIUX

Slide 141

Slide 141 text

@CYRIUX @CYRIUX MODULAR SYSTEM PLATFORM VALUE- ADDED SERVICES INNO- VATION

Slide 142

Slide 142 text

@CYRIUX @CYRIUX ECO-SYSTEM PLATFORM VALUE- ADDED SERVICES INNO- VATION EXTERNAL BUSINESSES EXTERNAL INNOVATIONS

Slide 143

Slide 143 text

@CYRIUX @CYRIUX MERGER, ACQUISITION PLATFORM VALUE- ADDED SERVICES INNO- VATION BEST-OF-CLASS, BY SUB-DOMAIN BUY INNOVATION

Slide 144

Slide 144 text

@CYRIUX @CYRIUX SPIN-OFFS PLATFORM VALUE- ADDED SERVICES INNO- VATION

Slide 145

Slide 145 text

@CYRIUX @CYRIUX PIVOT PLATFORM VALUE- ADDED SERVICES INNO- VATION FOCUS HERE GIVE UP GIVE UP

Slide 146

Slide 146 text

GREGOR HOHPE ”ARCHITECT ELEVATOR”

Slide 147

Slide 147 text

CONNECT BUSINESS STRATEGY TO TECH & VICE-VERSA

Slide 148

Slide 148 text

@cyriux BUY MY BOOK!

Slide 149

Slide 149 text

@cyriux BUY our BOOK!

Slide 150

Slide 150 text

@CYRIUX WHY AND HOW WOULD YOU BREAK YOUR MONOLITH THEN?

Slide 151

Slide 151 text

@CYRIUX THE END THANK YOU @AROLLA @LESINGECUIVRE