A presentation at QCon Plus by Holly Cummins
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
We all know the promise of microservices - organisational, agility, decoupling, pizza lunches, autonomy, fewer meetings. Some organisations actually achieve this. Others … don’t. It turns out dividing an application up across multiple containers isn’t enough. Distributed is not a synonym for decoupled. A decomposed application may just be a health hazard. Cloud native spaghetti isn’t something you want. Continuous deployment doesn’t mean ‘every six months’. And have you spoken to your release board and QA team about all this?
Here are some of the anti-patterns Holly will discuss:
Here’s what was said about this presentation on social media.
Yay! I'm (virtually) at @QCon Plus, along with my messy desk. There's a cuddly sheep and a hair elastic and an iPad pencil just out of view. 😳 pic.twitter.com/rA75oArXly
— Holly Cummins (@holly_cummins) November 2, 2021
7 ways to fail at microservices with @holly_cummins at #QConPlus going live now. Deep-diving to the anti-patterns and real-world examples: https://t.co/27t0Al8oRd#Softwareconference #Virtualevent #Microservices #CloudNative pic.twitter.com/22Y7ukM3PG
— QCon Software Development Conferences 2006-2021 (@QCon) November 2, 2021
It was a great talk today. Thanks!
— yaron pdut (@yaronPdut) November 2, 2021
#QConPlu7s Day 2 - Let's begin the day. 7 ways to fail at #micro #services bu @holly_cummins. Looking forward to it. Let's go. :)
— Akhilesh Sharma (@iAkhileshS) November 2, 2021