7 ways to fail at microservices Holly Cummins IBM @holly_cummins

fail the murky goal

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

@holly_cummins #IBM

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

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

surely no one would … #IBM @holly_cummins

surely no one would … #IBM @holly_cummins

surely no one would … #IBM @holly_cummins oh.

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

fail microservices envy

microservices! ! #IBM @holly_cummins

microservices are not the goal #IBM @holly_cummins

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

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

#IBM @holly_cummins

distributed monolith #IBM @holly_cummins

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

fail cloudnative spaghetti

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

distributed != decoupled @holly_cummins #IBM

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

Microservice @holly_cummins #IBM

Microservice the goal @holly_cummins Domain #IBM

Microservice the bad case @holly_cummins Domain #IBM

#IBM @holly_cummins

mars climate explorer #IBM @holly_cummins

metric units

metric units imperial units

metric units imperial units distributing did not help

contract test your interactions @holly_cummins #IBM

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@holly_cummins #IBM

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

@holly_cummins #IBM

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

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

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

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

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

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

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 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 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

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

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

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

fail the not-actuallycontinuous continuous integration and continuous deployment

“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

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

fail the ‘someday’ automation

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

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

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

“our release process is manual” @holly_cummins #IBM

“our compliance process is manual” @holly_cummins #IBM

“our monitoring process is manual” @holly_cummins #IBM

fail the uncloudy cloud

#IBM @holly_cummins

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

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

“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

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

® @holly_cummins