A presentation at QCon London in in London, UK by Holly Cummins
Cloud Native is About Culture, Not Containers (how to not fail at cloud native) Austin Copenhagen Dubai London Madrid Melbourne Munich Milan New York Holly Cummins IBM Garage @holly_cummins Nice Raleigh San Francisco São Paulo Singapore Tokyo Toronto
what is cloud native? #IBMGarage @holly_cummins
#IBM #IBMGarage @holly_cummins
Credit to @bibryam #IBM #IBMGarage @holly_cummins
(a great article, btw) #IBM #IBMGarage @holly_cummins
(a great article, btw) #IBM #IBMGarage @holly_cummins
#IBM #IBMGarage @holly_cummins
microservices containers dynamically orchestrated #IBM #IBMGarage @holly_cummins
n o C Q 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 #IBM #IBMGarage @holly_cummins
n o C Q 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 #IBM #IBMGarage Dr Holly @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
why? #IBMGarage @holly_cummins
#IBM #IBMGarage @holly_cummins
build great products faster #IBM #IBMGarage @holly_cummins
what problem are we trying to solve? #IBM #IBMGarage @holly_cummins
“everyone else is doing it?” #IBM #IBMGarage @holly_cummins
why cloud? #IBM #IBMGarage @holly_cummins
cost #IBM #IBMGarage @holly_cummins
el a s t i c i t y #IBM #IBMGarage @holly_cummins
spee d #IBM #IBMGarage @holly_cummins
exotic capabilities #IBM #IBMGarage @holly_cummins
why cloud native? #IBM #IBMGarage @holly_cummins
#IBM #IBMGarage @holly_cummins
12 factors #IBM #IBMGarage @holly_cummins
12 factors #IBM how to write a cloud application so you don’t get electrocuted #IBMGarage @holly_cummins
#IBM #IBMGarage @holly_cummins
#IBM #IBMGarage @holly_cummins
cloud native is not a synonym for ‘microservices’ #IBM #IBMGarage @holly_cummins
#IBM #IBMGarage @holly_cummins
if ‘cloud native’ has to be a synonym for anything, it would be ‘idempotent’ #IBM #IBMGarage @holly_cummins
if ‘cloud native’ has to be a synonym for anything, it would be ‘idempotent’ which definitely needs a synonym #IBM #IBMGarage @holly_cummins
how to fail at cloud native #IBMGarage @holly_cummins
I’m a consultant with the IBM Garage. These are my scary stories #IBMGarage @holly_cummins
fail the magic morphing meaning
so, what is cloud native? #IBMGarage @holly_cummins
IBM Garage so, what is cloud native? @holly_cummins
why are there no microservices in this cloud native app Alice? #IBMGarage @holly_cummins
fail the muddy goal
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
distributed != decoupled © 2019 IBM Corporation #IBMGarage @holly_cummins
cloud-native spaghetti is still spaghetti (Image: Cloudy with a Chance of Meatballs.) #IBM #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 #IBM #IBMGarage @holly_cummins
speed #IBM #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? #IBM #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
“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
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
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
ouch 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
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
® @holly_cummins 114
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).
The following resources were mentioned during the presentation or are useful additional information.
Here’s what was said about this presentation on social media.
This talk by @holly_cummins is so true it hurts 😂 #QConLondon pic.twitter.com/wyBzyXnM4Y
— Crystal Hirschorn (@cfhirschorn) March 4, 2020
Reasons for *not* choosing Microservices:
— Crystal Hirschorn (@cfhirschorn) March 4, 2020
- small team
- not planning to release independently
- don't want complexity of a service mesh - or worse yet, rolling your own
- Domain Model(s) don't split neatly
.@holly_cummins #QConLondon pic.twitter.com/eADry8XUpL
"CI/CD is something you do, not a tool that you buy." - .@holly_cummins #QConLondon pic.twitter.com/muHsHJbLuU
— Crystal Hirschorn (@cfhirschorn) March 4, 2020
I really enjoyed this Cloud Native talk by @holly_cummins at @qconlondon , let's make CI/CD actually continuous 🤔😌 pic.twitter.com/7tkQf4ikA3
— Blanca Rojo 🌍🌎🌏 (@Bla_Rojo) March 4, 2020
Really interesting talk by @holly_cummins about what cloud native really means #qconlondon pic.twitter.com/BaLd75OsQq
— Billy Stack (@bstack) March 4, 2020