A presentation at FlowCon by Holly Cummins
nine ways to fail at cloud native Holly Cummins IBM Garage @holly_cummins
I’m a consultant with the IBM Garage. These are my scary stories #IBMGarage @holly_cummins
fail the magic morphing meaning
what is cloud native? #IBMGarage @holly_cummins
#IBMGarage @holly_cummins
Credit to @bibryam #IBMGarage @holly_cummins
(a great article, btw) #IBMGarage @holly_cummins
(a great article, btw) #IBMGarage @holly_cummins
2019 #IBMGarage @holly_cummins
microservices containers dynamically orchestrated 2019 #IBMGarage @holly_cummins
e v i t a n d u o l c “the n o i t a d n u o f g n i co mput is wrong … .” e v i t a n d u o l c t abo u #IBMGarage Dr Holly @holly_cummins
e v i t a n d u o l c “the n o i t a d n u o f g n i co mput is wrong … .” e v i t a n d u o l c t abo u #IBMGarage Dr Holly @holly_cummins
Dr Holly #IBMGarage @holly_cummins
#IBMGarage @holly_cummins
2020 IBM Garage @holly_cummins
2020 IBM Garage @holly_cummins
IBM Garage @holly_cummins
IBM Garage @holly_cummins
IBM Garage @holly_cummins
IBM Garage @holly_cummins
IBM Garage @holly_cummins
IBM Garage @holly_cummins
born on the cloud IBM Garage @holly_cummins
born on the cloud IBM Garage @holly_cummins
microservices born on the cloud IBM Garage @holly_cummins
born on the cloud IBM Garage microservices @holly_cummins
kubernetes born on the cloud IBM Garage microservices @holly_cummins
born on the cloud IBM Garage microservices kubernetes @holly_cummins
devops born on the cloud IBM Garage microservices kubernetes @holly_cummins
born on the cloud IBM Garage microservices kubernetes devops @holly_cummins
born on the cloud IBM Garage microservices kubernetes devops modern and nice @holly_cummins
born on the cloud microservices kubernetes devops modern and nice IBM Garage @holly_cummins
synonym for ‘cloud’ born on the cloud microservices kubernetes devops modern and nice IBM Garage @holly_cummins
born on the cloud microservices kubernetes devops synonym for ‘cloud’ modern and nice IBM Garage @holly_cummins
?? IBM Garage ?? ?? ?? idempotent ?? ?? @holly_cummins
rerunnable IBM Garage @holly_cummins
born on the cloud kubernetes microservices IBM Garage 12-factor just ‘cloud’ modern and nice rerunnable @holly_cummins
© 2019 IBM Corporation #IBMGarage @holly_cummins
© 2019 IBM Corporation #IBMGarage @holly_cummins
cloud native is not © 2019 IBM Corporation #IBMGarage @holly_cummins
cloud native is not a synonym for ‘microservices’ © 2019 IBM Corporation #IBMGarage @holly_cummins
© 2019 IBM Corporation #IBMGarage @holly_cummins
if ‘cloud native’ has to be a synonym for anything, it would be ‘idempotent’ © 2019 IBM Corporation #IBMGarage @holly_cummins
if ‘cloud native’ has to be a synonym for anything, it would be ‘idempotent’ which definitely needs a synonym © 2019 IBM Corporation #IBMGarage @holly_cummins
2019 #IBMGarage @holly_cummins
microservices stack containers 2019 #IBMGarage @holly_cummins
2020 IBM Garage @holly_cummins
immutable infrastructure microservices exemplify 2020 IBM Garage @holly_cummins
why? #IBMGarage @holly_cummins
© 2019 IBM Corporation #IBMGarage @holly_cummins
build great products faster © 2019 IBM Corporation #IBMGarage @holly_cummins
2020 IBM Garage @holly_cummins
make high-impact changes frequently and predictably with minimal toil 2020 IBM Garage @holly_cummins
what problem are we trying to solve? © 2019 IBM Corporation #IBMGarage @holly_cummins
fail the muddy goal
what problem are we trying to solve? © 2019 IBM Corporation #IBMGarage @holly_cummins
“everyone else is doing it?” #IBMGarage @holly_cummins
wishful mimicry #IBMGarage @holly_cummins
why cloud? #IBMGarage @holly_cummins
cost © 2019 IBM Corporation #IBMGarage @holly_cummins
cost el a s t i c i t y © 2019 IBM Corporation #IBMGarage @holly_cummins
s cost pee d © 2019 IBM Corporation #IBMGarage @holly_cummins
exotic capabilities © 2019 IBM Corporation #IBMGarage @holly_cummins
why cloud native? © 2019 IBM Corporation #IBMGarage @holly_cummins
© 2019 IBM Corporation #IBMGarage @holly_cummins
2011 12 factors © 2019 IBM Corporation #IBMGarage @holly_cummins
2011 12 factors how to write a cloud application so you don’t get electrocuted © 2019 IBM Corporation #IBMGarage @holly_cummins
2010 the dawn of cloud native © 2019 IBM Corporation #IBMGarage @holly_cummins
#IBMGarage @holly_cummins
born on the cloud kubernetes microservices IBM Garage 12-factor just ‘cloud’ modern and nice rerunnable @holly_cummins
are we all agreed on the goal? © 2019 IBM Corporation #IBMGarage @holly_cummins
why are there no microservices in this cloud native app Alice? #IBMGarage @holly_cummins
why is the cloud only saving us money, Alice? #IBMGarage @holly_cummins
fail microservices envy
microservices are not the goal #IBMGarage @holly_cummins
microservices are not the goal they are the means #IBMGarage @holly_cummins
“we’re going too slowly. we need to get rid of COBOL and make microservices!” #IBMGarage @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.” #IBMGarage @holly_cummins
se a b od o g a e r a s r e n i a t con © 2019 IBM Corporation #IBMGarage @holly_cummins
it’s not a competition to see how many you can have © 2019 IBM Corporation se a b od o g a e r a s r e n i a t con #IBMGarage @holly_cummins
distributed monolith #IBMGarage @holly_cummins
distributed monolith but without compile-time checking … or guaranteed function execution #IBMGarage @holly_cummins
reasons not to do microservices small team not planning to release independently don’t want complexity of a service mesh - or worse yet, rolling your own domain model doesn’t split nicely #IBMGarage @holly_cummins
fail cloud-native spaghetti
“every time we change one microservice, another breaks” #IBMGarage @holly_cummins
cloud-native spaghetti is still spaghetti (Image: Cloudy with a Chance of Meatballs.) © 2019 IBM Corporation #IBMGarage @holly_cummins
distributed != decoupled © 2019 IBM Corporation #IBMGarage @holly_cummins
“each of our microservices has duplicated the same object model … with twenty classes and seventy fields” © 2019 IBM Corporation #IBMGarage @holly_cummins
Microservice © 2019 IBM Corporation #IBMGarage @holly_cummins
Microservice Domain © 2019 IBM Corporation #IBMGarage @holly_cummins
Microservice Domain © 2019 IBM Corporation #IBMGarage @holly_cummins
© 2019 IBM Corporation #IBMGarage @holly_cummins
Courtesy NASA/ JPL-Caltech © 2019 IBM Corporation #IBMGarage @holly_cummins
© 2019 IBM Corporation #IBMGarage @holly_cummins
© 2019 IBM Corporation #IBMGarage @holly_cummins
metric units
metric units imperial units
metric units imperial units distributing did not help
microservices need consumer-driven contract tests © 2019 IBM Corporation #IBMGarage @holly_cummins
fail the not-actually-continuous continuous integration and continuous deployment
“we have a CI/CD” #IBMGarage @holly_cummins
CI/CD is something you do not a tool you buy #IBMGarage @holly_cummins
“i’ll merge my branch into our CI next week” #IBMGarage @holly_cummins
“CI/CD … CI/CD … CI/CD … we release every six months … CI/CD …. ” #IBMGarage @holly_cummins
continuous. I don’t think that word means what you think it means. #IBMGarage @holly_cummins
how often should you push to master? #IBMGarage @holly_cummins
how often should you push to master? integrate? #IBMGarage @holly_cummins
how often should you push to master? integrate? every character #IBMGarage @holly_cummins
how often should you push to master? integrate? every character actually continuous … but stupid #IBMGarage @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) actually continuous … but stupid #IBMGarage @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) actually continuous … but stupid #IBMGarage @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) once a day actually continuous … but stupid #IBMGarage @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) once a day once a week actually continuous … but stupid #IBMGarage @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) once a day once a week once a month actually continuous … but stupid #IBMGarage @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) once a day once a week once a month once every six months actually continuous … but stupid #IBMGarage @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) once a day once a week once a month once every six months actually continuous … but stupid #IBMGarage trunk-based development @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) once a day ok actually continuous … but stupid #IBMGarage once a week once a month once every six months trunk-based development @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) once a day ok actually continuous … but stupid #IBMGarage bad once a week once a month once every six months trunk-based development @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) once a day ok once a week once a month once every six months bad bad actually continuous … but stupid #IBMGarage trunk-based development @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) once a day ok once a week once a month once every six months bad bad seriously? actually continuous … but stupid #IBMGarage trunk-based development @holly_cummins
how often should you push to master? integrate? every character every commit (several times an hour) every few commits (several times a day) once a day ok once a week once a month once every six months bad bad my favourite actually continuous … but stupid #IBMGarage seriously? trunk-based development @holly_cummins
how often should you release? every push (many times a day) every user story every epic once a sprint once a quarter #IBMGarage once every two years @holly_cummins
deploy? how often should you release? every push (many times a day) every user story every epic once a sprint once a quarter #IBMGarage once every two years @holly_cummins
deploy? how often should you release? every push (many times a day) every user story every epic once a sprint once a quarter once every two years (need a good handle on feature flags) #IBMGarage @holly_cummins
deploy? how often should you release? every push (many times a day) every user story every epic once a sprint once a quarter ok once every two years (need a good handle on feature flags) #IBMGarage @holly_cummins
deploy? how often should you release? every push (many times a day) every user story every epic once a sprint once a quarter ok (need a good handle on feature flags) #IBMGarage once every two years oldschool @holly_cummins
deploy? how often should you release? every push (many times a day) every user story every epic once a sprint once a quarter ok once every two years sigh (need a good handle on feature flags) #IBMGarage oldschool @holly_cummins
deploy? how often should you release? every push (many times a day) every user story every epic once a sprint once a quarter ok ok once every two years sigh (need a good handle on feature flags) #IBMGarage oldschool @holly_cummins
deploy? how often should you release? every push (many times a day) every user story every epic once a sprint once a quarter ok ok once every two years sigh hardcore (need a good handle on feature flags) #IBMGarage oldschool @holly_cummins
deploy? how often should you release? every push (many times a day) every user story every epic once a sprint once a quarter ok ok once every two years sigh hardcore (need a good handle on feature flags) #IBMGarage my favourite oldschool @holly_cummins
how often should you test in staging? #IBMGarage @holly_cummins
how often should you test in staging? deliver? #IBMGarage @holly_cummins
how often should you test in staging? deliver? every push my favourite #IBMGarage @holly_cummins
“we can’t actually release this.” #IBMGarage @holly_cummins
why? #IBMGarage @holly_cummins
what’s stopping more frequent deploys? #IBMGarage @holly_cummins
“we can’t release this microservice… we deploy all our microservices at the same time.” #IBMGarage @holly_cummins
“we can’t ship until every feature is complete” © 2019 IBM Corporation #IBMGarage @holly_cummins
if you’re not embarrassed by your first release it was too late - Reid Hoffman #IBMGarage @holly_cummins
speed © 2019 IBM Corporation #IBMGarage @holly_cummins
speed © 2019 IBM Corporation #IBMGarage @holly_cummins
what’s the point of architecture that can go faster, if you don’t go faster? © 2019 IBM Corporation #IBMGarage @holly_cummins
what’s the point of architecture that can go faster, if you don’t go faster? © 2019 IBM Corporation #IBMGarage @holly_cummins
how not to drive a car © 2019 IBM Corporation #IBMGarage @holly_cummins
feedback is good engineering © 2019 IBM Corporation #IBMGarage @holly_cummins
feedback is good business © 2019 IBM Corporation #IBMGarage @holly_cummins
deferred wiring #IBMGarage @holly_cummins
feature flags #IBMGarage @holly_cummins
A/B testing canary deploys #IBMGarage @holly_cummins
fail the ‘someday’ automation
“our tests aren’t automated” © 2019 IBM Corporation #IBMGarage @holly_cummins
“we don’t know if our code works” © 2019 IBM Corporation #IBMGarage @holly_cummins
“we don’t know if our code works” © 2019 IBM Corporation #IBMGarage @holly_cummins
systems will behave in unexpected ways © 2019 IBM Corporation #IBMGarage @holly_cummins
dependency updates can change behaviour © 2019 IBM Corporation #IBMGarage @holly_cummins
“we can’t ship until we have more confidence in the quality” © 2019 IBM Corporation #IBMGarage @holly_cummins
microservices need automated integration tests © 2019 IBM Corporation #IBMGarage @holly_cummins
not a good CI/CD indicator a good CI/CD indicator “we don’t know when the build is broken” © 2019 IBM Corporation #IBMGarage @holly_cummins
a good build radiator © 2019 IBM Corporation #IBMGarage @holly_cummins
© 2019 IBM Corporation #IBMGarage @holly_cummins
“oh yes, that build has been broken for a few weeks…” © 2019 IBM Corporation #IBMGarage @holly_cummins
fail the lockeddown totally rigid inflexible un-cloudy cloud
#IBMGarage @holly_cummins
“we’ve configured our network! #IBMGarage @holly_cummins
“we’ve configured our network! you can either access the cloud servers … or access jira. #IBMGarage @holly_cummins
“we’ve configured our network! you can either access the cloud servers … or access jira. to access both you’d need two machines.” #IBMGarage @holly_cummins
“it takes us a week to start coding.” #IBMGarage @holly_cummins
“it takes us a week to start coding.” “two days to get a repo … two days to get a pipeline …” #IBMGarage @holly_cummins
“we’ve scheduled the architecture board review for a month after the project is ready to ship” © 2019 IBM Corporation #IBMGarage @holly_cummins
“this provisioning software is broken” #IBMGarage @holly_cummins
10 minute provision-time what we sold “this provisioning software is broken” #IBMGarage @holly_cummins
what the client thought they’d got 10 minute provision-time what we sold 3 month provisiontime “this provisioning software is broken” #IBMGarage @holly_cummins
what the client thought they’d got 10 minute provision-time the reason 3 month provisiontime 84-step pre-approval process what we sold “this provisioning software is broken” #IBMGarage @holly_cummins
#IBMGarage @holly_cummins
#IBMGarage @holly_cummins
old-style governance isn’t going to work #IBMGarage @holly_cummins
Provider A #IBMGarage @holly_cummins
Provider A Provider B “we’re going to change cloud provider to fix our procurement process!” #IBMGarage @holly_cummins
Provider A Provider B “we’re going to change cloud provider to fix our procurement process!” #IBMGarage @holly_cummins
if the developers are the only ones changing, cloud native is not going to work #IBMGarage @holly_cummins
there is a cost: developers leave #IBMGarage @holly_cummins
fail the mystery money pit
the cloud makes it so easy to provision hardware. IBM Garage @holly_cummins
that doesn’t mean the hardware is free. IBM Garage @holly_cummins
or useful. IBM Garage @holly_cummins
Hey boss, I created a Kubernetes cluster. IBM Garage @holly_cummins
Hey boss, I created a Kubernetes cluster. I forgot it for 2 months. IBM Garage @holly_cummins
Hey boss, I created a Kubernetes cluster. I forgot it for 2 months. … and it’s £1000 a month. IBM Garage @holly_cummins
2017 survey 25% of 16,000 servers doing no useful work #IBMGarage @holly_cummins
2017 survey 25% of 16,000 servers doing no useful work “perhaps someone forgot to turn them off” #IBMGarage @holly_cummins
ouch IBM Garage @holly_cummins
There is surely nothing quite so useless as doing with great efficiency what should not be done at all. — Peter Drucker IBM Garage @holly_cummins
“we have no idea how much we’re spending on cloud.” IBM Garage @holly_cummins
cloud to manage your clouds IBM Garage @holly_cummins
IBM Garage @holly_cummins
FinOps IBM Garage @holly_cummins
fail microservices ops mayhem
SRE #IBMGarage @holly_cummins
site reliability engineering #IBMGarage @holly_cummins
@holly_cummins
make releases deeply boring @holly_cummins
how to brick a spaceprobe Phobos 1 © 2019 IBM Corporation #IBMGarage @holly_cummins
“we couldn’t get the automated checks to work, so we bypassed them” © 2019 IBM Corporation #IBMGarage @holly_cummins
recoverability © 2019 IBM Corporation #IBMGarage @holly_cummins
unrecoverable © 2019 IBM Corporation #IBMGarage @holly_cummins
back in ms no data loss manual intervention bricked fast, but data lost handoffs © 2019 IBM Corporation #IBMGarage @holly_cummins
handoffs bad automation good © 2019 IBM Corporation #IBMGarage @holly_cummins
ways to succeed at cloud native © 2019 IBM Corporation #IBMGarage @holly_cummins
be clear on what you’re trying to achieve © 2019 IBM Corporation #IBMGarage @holly_cummins
optimise for feedback © 2019 IBM Corporation #IBMGarage @holly_cummins
if you automate something, change the processes around that assume that the previously manual process is expensive or error prone. #IBMGarage @holly_cummins
#IBMGarage @holly_cummins
#IBMGarage @holly_cummins
® @holly_cummins 134
As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud native in particular. Their dream is more effort higher up the value chain, more innovation, and greater adaptability. What they really want is to beat their competitors to market, with something that’s better than their competitors, and then evolve it to beat any new competitors. What’s getting in their way isn’t the technology—wrapping something in a docker container (usually) isn’t that hard. Instead, it’s the structures that have been put in place to manage risk and the relationships between teams that trip companies up.
Holly shares stories of customers struggling to get cloud native and explains how IBM applied its methodology to turn things around. You’ll learn the ideal team size, the ideal microservice size, what skills a team needs, the role of architects, how to know if something is ready to ship, and whose fault everything is (joke).
Here’s what was said about this presentation on social media.
Another accessible #tech talk at #flowcon, tonight offered by @holly_cummins (a humble thread from what I understood) pic.twitter.com/uo92jgwXow
— Sara Dufour (@ComSaraDufour) November 20, 2020
So WHAT does "cloud native" actually mean?
— Sara Dufour (@ComSaraDufour) November 20, 2020
Everyone has their definition.
" If #cloud native has to be a synonym for anything, it should be 'idempotent'*. "#flowcon
* That's latin for "having the same power". (I knew this literary background would come in handy someday) pic.twitter.com/AnoTGdBGfM
.@CloudNativeFdn's definition keeps changing, so often that it's now hosted on a Git: https://t.co/fJnAyLJehZ
— Sara Dufour (@ComSaraDufour) November 20, 2020
Bottom line is: something that allows you to "make high-impact changes frequently & predictably with minimal toil, to build great products faster".#ProductManagement pic.twitter.com/dPK2mo3QnK
Holly sees 4⃣ major benefits from a #cloud native architecture:
— Sara Dufour (@ComSaraDufour) November 20, 2020
—money
—elasticity
—speed to market
—exotic capabilities
But very often, a #transformation is social-driven: "everyone's doing it so we should too". Many orgs know they want to be CN but don't know what pb to solve.
And just as anything else, a copy-paste from another organization won't work —it's just wishful mimicry.#frametheproblem#customize#flowcon
— Sara Dufour (@ComSaraDufour) November 20, 2020
#microservices are not a goal—there are a means.#flowcon #CloudComputing #tech pic.twitter.com/tySQZ1h6hT
— Sara Dufour (@ComSaraDufour) November 20, 2020
"#Cloud-Native spaghetti is worse than regular spaghetti!" @holly_cummins
— Sara Dufour (@ComSaraDufour) November 20, 2020
4⃣ reasons NOT to do #microservices ⬇️#flowcon pic.twitter.com/CqlYn8QnVl
The "not-actually-continuous" CI/CD... 😑
— Sara Dufour (@ComSaraDufour) November 20, 2020
CI/CD is a verb —not a tool—, it's something you DO!
Feedback is good #engineering and good #business.#cicd #tech #flowcon #ProductManagement pic.twitter.com/78xok6tgfh
Another reason for failure: lack of automation... #flowcon pic.twitter.com/rIpw7Xrzsc
— Sara Dufour (@ComSaraDufour) November 20, 2020
A locked-down totally rigid inflexible un-cloudy #cloud is not a good option.
— Sara Dufour (@ComSaraDufour) November 20, 2020
If the #developers are the only ones changing, cloud native is not gonna work.#culture #transformation #change #flowcon pic.twitter.com/iBrIgo5hyf
💸 There's also the mystery money pit... #finops #flowcon #tech #CloudNative #climate pic.twitter.com/LRhQbkotea
— Sara Dufour (@ComSaraDufour) November 20, 2020
Old governance won't work. You also need to #change the process around #cloud. #flowcon pic.twitter.com/O42lx3IA5w
— Sara Dufour (@ComSaraDufour) November 20, 2020
🌩️ Going #cloud-native, 5⃣ tips to avoid most common pitfalls:
— Sara Dufour (@ComSaraDufour) November 20, 2020
—Identify the main pain point.
—Align on a clarified goal.
—Look at the whole system.
—Ensure psychological safety.
—Optimize feedback.
Very good talk by @holly_cummins at #flowcon, thank you.
#flowcon Microservices are not the goal, they are the means. @holly_cummins
— Thierry de Pauw (@tdpauw) November 20, 2020
#flowcon What is Cloud Native not? it is not a synonym for 'microservices' @holly_cummins
— Thierry de Pauw (@tdpauw) November 20, 2020
#ContinuousInteration and #ContinuousDelivery is not something you buy, it is something you do! @holly_cummins #flowcon
— Thierry de Pauw (@tdpauw) November 20, 2020
OH: "CI/CD ... CI/CD ... CI/CD ...
— Thierry de Pauw (@tdpauw) November 20, 2020
... we release every six months
... CI/CD ..."
That is not continuous!@holly_cummins #flowcon
reasons not to do micro services
— Thierry de Pauw (@tdpauw) November 20, 2020
- small team
- not planning to release independently
- don't want complexity of service mesh - or worse yet, rolling your own
- domain model doesn't split nicely !!! 👈
#flowcon @holly_cummins
It _could_ be #ContinuousDelivery if your product demand is really 6 months. If it is, you have a constraint in sales/marketing more serious than technology
— Steve Smith (@SteveSmith_Tech) November 20, 2020
#flowcon If cloud native has to be synonym for anything, it would be for 'idempotent' @holly_cummins
— Thierry de Pauw (@tdpauw) November 20, 2020