7 ways to fail at microservices

A presentation at QCon Plus in November 2021 in by Holly Cummins

Slide 1

Slide 1

7 ways to fail at microservices Holly Cummins IBM @holly_cummins

Slide 2

Slide 2

fail the murky goal

Slide 3

Slide 3

what problem are we trying to solve? #IBM @holly_cummins

Slide 4

Slide 4

@holly_cummins #IBM

Slide 5

Slide 5

my problem is there aren’t enough containers yet? @holly_cummins #IBM

Slide 6

Slide 6

my problem is my CV looks so boring? #IBM @holly_cummins

Slide 7

Slide 7

surely no one would … #IBM @holly_cummins

Slide 8

Slide 8

surely no one would … #IBM @holly_cummins

Slide 9

Slide 9

surely no one would … #IBM @holly_cummins oh.

Slide 10

Slide 10

“everyone else is microservices-ing?” #IBM @holly_cummins

Slide 11

Slide 11

fail microservices envy

Slide 12

Slide 12

microservices! ! #IBM @holly_cummins

Slide 13

Slide 13

microservices are not the goal #IBM @holly_cummins

Slide 14

Slide 14

microservices are not the goal they are the means #IBM @holly_cummins

Slide 15

Slide 15

microservices are not the goal they means theyare arethe a means #IBM @holly_cummins

Slide 16

Slide 16

#IBM @holly_cummins

Slide 17

Slide 17

distributed monolith #IBM @holly_cummins

Slide 18

Slide 18

distributed monolith but without compile-time checking … or guaranteed function execution #IBM @holly_cummins

Slide 19

Slide 19

fail cloudnative spaghetti

Slide 20

Slide 20

“every time we change one microservice, another breaks” #IBM @holly_cummins

Slide 21

Slide 21

distributed != decoupled @holly_cummins #IBM

Slide 22

Slide 22

“each of our microservices has duplicated the same object model … with twenty classes and seventy elds” #IBM fi @holly_cummins

Slide 23

Slide 23

Microservice @holly_cummins #IBM

Slide 24

Slide 24

Microservice the goal @holly_cummins Domain #IBM

Slide 25

Slide 25

Microservice the bad case @holly_cummins Domain #IBM

Slide 26

Slide 26

#IBM @holly_cummins

Slide 27

Slide 27

mars climate explorer #IBM @holly_cummins

Slide 28

Slide 28

Slide 29

Slide 29

Slide 30

Slide 30

Slide 31

Slide 31

metric units

Slide 32

Slide 32

metric units imperial units

Slide 33

Slide 33

metric units imperial units distributing did not help

Slide 34

Slide 34

contract test your interactions @holly_cummins #IBM

Slide 35

Slide 35

the problem with mocks @holly_cummins our code #IBM their code

Slide 36

Slide 36

the problem with mocks @holly_cummins our code #IBM our mock

Slide 37

Slide 37

the problem with mocks our code tests ✔ @holly_cummins #IBM our mock

Slide 38

Slide 38

the problem with mocks our code our mock tests ✔ @holly_cummins #IBM our code their actual code

Slide 39

Slide 39

the problem with mocks our code our mock tests ✔ reality ✘ @holly_cummins #IBM our code their actual code

Slide 40

Slide 40

the problem with mocks @holly_cummins our code #IBM their code

Slide 41

Slide 41

the problem with mocks @holly_cummins our code #IBM contract test their code

Slide 42

Slide 42

mock the problem with mocks @holly_cummins our code #IBM contract test their code

Slide 43

Slide 43

mock the problem with mocks @holly_cummins our code #IBM functional test contract test their code

Slide 44

Slide 44

mock the problem with mocks our code functional test contract test our tests ✔ their tests ✔ reality ✔ @holly_cummins #IBM their code

Slide 45

Slide 45

mock the problem with mocks @holly_cummins our code #IBM functional test contract test their code

Slide 46

Slide 46

mock the problem with mocks our code functional test contract test our tests ✔ their tests ✘ reality ✘ @holly_cummins #IBM their code

Slide 47

Slide 47

mock the problem with mocks @holly_cummins our code #IBM functional test contract test their code

Slide 48

Slide 48

mock the problem with mocks our code functional test contract test our tests ✘ their tests ✔ reality ✘ @holly_cummins #IBM their code

Slide 49

Slide 49

@holly_cummins #IBM

Slide 50

Slide 50

fail the enterprise hairball forgetting the back, front, and glue

Slide 51

Slide 51

@holly_cummins #IBM

Slide 52

Slide 52

our layer (“business logic”) @holly_cummins #IBM

Slide 53

Slide 53

our layer (“business logic”) @holly_cummins #IBM

Slide 54

Slide 54

front-end layer our layer (“business logic”) @holly_cummins #IBM

Slide 55

Slide 55

front-end layer our layer (“business logic”) database layer @holly_cummins #IBM

Slide 56

Slide 56

front-end layer our layer (“business logic”) integration layer (“panicked sandwich”) database layer @holly_cummins #IBM

Slide 57

Slide 57

front-end layer our layer (“business logic”) integration layer (“panicked sandwich”) database layer @holly_cummins oh wait … every change needs a front-end change too #IBM

Slide 58

Slide 58

front-end layer our layer (“business logic”) integration layer (“panicked sandwich”) database layer @holly_cummins oh wait … every change needs a front-end change too #IBM

Slide 59

Slide 59

uh… we can’t release our cool new stuff because we’re dependent on a change in the integration layer front-end layer our layer (“business logic”) integration layer (“panicked sandwich”) database layer @holly_cummins oh wait … every change needs a front-end change too #IBM

Slide 60

Slide 60

uh… we can’t release our cool new stuff because we’re dependent on a change in the integration layer we can’t make progress because we need a change to the database front-end layer our layer (“business logic”) integration layer (“panicked sandwich”) database layer @holly_cummins oh wait … every change needs a front-end change too #IBM

Slide 61

Slide 61

we can’t make progress because we need a change to the database what are that ^&! *(&!! integration team even doing with their time? front-end layer our layer (“business logic”) integration layer (“panicked sandwich”) database layer @holly_cummins oh wait … every change needs a front-end change too #IBM uh… we can’t release our cool new stuff because we’re dependent on a change in the integration layer

Slide 62

Slide 62

we can’t make progress because we need a change to the database what are that ^&! *(&!! integration team even doing with their time? front-end layer our layer (“business logic”) integration layer (“panicked sandwich”) database layer @holly_cummins oh wait … every change needs a front-end change too #IBM uh… we can’t release our cool new stuff because we’re dependent on a change in the integration layer

Slide 63

Slide 63

we can’t make progress because we need a change to the database what are that ^&! *(&!! integration team even doing with their time? front-end layer our layer (“business logic”) integration layer (“panicked sandwich”) database layer @holly_cummins oh wait … every change needs a front-end change too #IBM uh… we can’t release our cool new stuff because we’re dependent on a change in the integration layer

Slide 64

Slide 64

fail the not-actuallycontinuous continuous integration and continuous deployment

Slide 65

Slide 65

“we can’t actually release a microservice without the release board and all the other microser vices need to be released at the same time and the manual QA cycle and the release checklist and the incantations and the death march and the sacrificing a goat and the spreadsheet and the moon being in the right phase and…” #IBM @holly_cummins

Slide 66

Slide 66

“we made our pipeline enforce releasing all our microservices at the same time.” #IBM @holly_cummins

Slide 67

Slide 67

fail the ‘someday’ automation

Slide 68

Slide 68

“our tests aren’t automated” @holly_cummins #IBM

Slide 69

Slide 69

“we don’t know if our code works” @holly_cummins #IBM

Slide 70

Slide 70

if you’re going to be spaghetti, at least be tested spaghetti @holly_cummins #IBM

Slide 71

Slide 71

“our release process is manual” @holly_cummins #IBM

Slide 72

Slide 72

“our compliance process is manual” @holly_cummins #IBM

Slide 73

Slide 73

“our monitoring process is manual” @holly_cummins #IBM

Slide 74

Slide 74

fail the uncloudy cloud

Slide 75

Slide 75

#IBM @holly_cummins

Slide 76

Slide 76

old-style governance isn’t going to work #IBM @holly_cummins

Slide 77

Slide 77

“we’re going too slowly. we need to get rid of COBOL and make microservices!” #IBM @holly_cummins

Slide 78

Slide 78

“we’re going too slowly. we need to get rid of COBOL and make microservices!” “… but our release board only meets twice a year.” #IBM @holly_cummins

Slide 79

Slide 79

be careful when you wish for a decomposed application #IBM @holly_cummins

Slide 80

Slide 80

® @holly_cummins