A presentation at Øredev in in Malmö, Sweden by Holly Cummins
Holly Cummins @holly_cummins © 2013 IBM Corporation
#automationconfessions @holly_cummins
? #automationconfessions @holly_cummins
#automationconfessions @holly_cummins
#automationconfessions @holly_cummins
Share yours too. #automationconfessions #automationconfessions @holly_cummins
#automationconfessions @holly_cummins
As developers, we have the power to automate. #automationconfessions @holly_cummins
As developers, we have the power to automate. And that’s cool. #automationconfessions @holly_cummins
#automationconfessions @holly_cummins
My team #automationconfessions @holly_cummins
… My team #automationconfessions @holly_cummins
Can that be automated? … My team #automationconfessions @holly_cummins
Alasdair #automationconfessions @holly_cummins
Look at my cool solution! Alasdair #automationconfessions @holly_cummins
Holly, I give you all the worst jobs. Look at my cool solution! Alasdair #automationconfessions @holly_cummins
Holly, I give you all the worst jobs. Look at my cool solution! ?! Why?? Alasdair #automationconfessions @holly_cummins
Holly, I give you all the worst jobs. I know you’ll automate them. Look at my cool solution! ?! Why?? Alasdair #automationconfessions @holly_cummins
It’s not just me. #automationconfessions @holly_cummins
It’s not just me. [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. 1764 Spinning Jenny [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. 1764 Spinning Jenny [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. Washing Machine 1858 1764 Spinning Jenny [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. Washing Machine 1858 1764 Spinning Jenny [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. Washing Machine 1858 1764 Spinning Jenny 1941 Electromechanical Computer [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. Washing Machine 1858 1764 Spinning Jenny 1941 Electromechanical Computer [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. Washing Machine 1858 1764 Spinning Jenny Chef 2012 1941 Electromechanical Computer [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. Washing Machine 1858 1764 Spinning Jenny Chef 2012 1941 Electromechanical Computer [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. Washing Machine 1858 1764 Spinning Jenny Chef 2012 Docker 2014 1941 Electromechanical Computer [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
It’s not just me. More and more is automated. Washing Machine 1858 1764 Spinning Jenny Chef 2012 Docker 2014 1941 Electromechanical Computer [Human history has been slightly simplified. Timeline is not to scale.] #automationconfessions @holly_cummins
So are we living the dream? #automationconfessions @holly_cummins
So are we living the dream? Well. Not quite. #automationconfessions @holly_cummins
#automationconfessions @holly_cummins
Yes, that’s all the exact same image. #automationconfessions @holly_cummins
Why automate? Automate because we are lazy #automationconfessions @holly_cummins
#automationconfessions @holly_cummins
#automationconfessions @holly_cummins
My manager #automationconfessions @holly_cummins
“Sustainable” My manager #automationconfessions @holly_cummins
“Sustainable” Automate for sustainability Automate for efficiency #automationconfessions My manager @holly_cummins
If it’s boring, automate it. #automationconfessions @holly_cummins
Server farms #automationconfessions @holly_cummins
Server farms #automationconfessions @holly_cummins
Server farms Treat your servers like cattle, not like pets. #automationconfessions @holly_cummins
Scale The more of you there are, the more you need to invest in automation #automationconfessions @holly_cummins
Do a task once. Do it a second time and take notes. Do it a third time, automate. #automationconfessions @holly_cummins
Why Automate? #automationconfessions @holly_cummins
Why Automate? #automationconfessions @holly_cummins
Why Automate? Automate because you care #automationconfessions @holly_cummins
If you care about it, automate it. #automationconfessions @holly_cummins
Why Automate? Automate because you care that it happens at all #automationconfessions @holly_cummins
Why Automate? Automate because you care that it happens at all #automationconfessions @holly_cummins
Marvin #automationconfessions @holly_cummins
Marvin Build breaks (including test failures) should be reverted from the stream #automationconfessions @holly_cummins
Marvin Build breaks (including test failures) should be reverted from the stream No one wanted to be the one who did it #automationconfessions @holly_cummins
Marvin Build breaks (including test failures) should be reverted from the stream No one wanted to be the one who did it It didn’t happen #automationconfessions @holly_cummins
Marvin Build breaks (including test failures) should be reverted from the stream No one wanted to be the one who did it It didn’t happen Solution: Automate! #automationconfessions @holly_cummins
Marvin Build breaks (including test failures) should be reverted from the stream No one wanted to be the one who did it It didn’t happen Solution: Automate! #automationconfessions @holly_cummins
End of iteration demos #automationconfessions @holly_cummins
End of iteration demos Automatic generation on story close #automationconfessions @holly_cummins
Automating to improve the outcome rather than to save effort:
Automating to improve the outcome rather than to save effort:
Automating to improve the outcome rather than to save effort: Write the Rational Team Concert plugin (one-off)
Automating to improve the outcome rather than to save effort: Write the Rational Team Concert plugin (one-off) Close the demo task (every story)
Automating to improve the outcome rather than to save effort: Write the Rational Team Concert plugin (one-off) Close the demo task (every story) Actually do the demo (every story)
Automating to improve the outcome rather than to save effort: Write the Rational Team Concert plugin (one-off) Close the demo task (every story) Actually do the demo (every story) But … we get guaranteed demos now.
Why Automate? Automate because you care that it’s done right #automationconfessions @holly_cummins
Why Automate? Automate because you care that it’s done right #automationconfessions @holly_cummins
Linting #automationconfessions @holly_cummins
Linting A computer can notice problems that a human can’t (like misspelled variable names) #automationconfessions @holly_cummins
Linting We Findbugs A computer can notice problems that a human can’t (like misspelled variable names) #automationconfessions @holly_cummins
Deployment #automationconfessions @holly_cummins
Deployment #automationconfessions @holly_cummins
Deployment Should be easy, right? #automationconfessions @holly_cummins
Deployment Should be easy, right? Always one step that gets forgotten … #automationconfessions @holly_cummins
Swapping a Watson Service #automationconfessions @holly_cummins
Swapping a Watson Service Four weeks ago: 3 configuration errors in one week. Oops. #automationconfessions @holly_cummins
Swapping a Watson Service Four weeks ago: 3 configuration errors in one week. Oops. { “name”: “nlc-classifiers”, “credentials”: { “classifiers”:[ {“classifier_id”:”004a12x110-nlc-922”,”includes”:[null],”excludes”:null}, {“classifier_id”:”e82f62x108-nlc-2895”,”includes”:[null],”excludes”:null}, {“classifier_id”:”e3ca6dx107-nlc-3412”,”includes”:[null],”excludes”:null}, {“classifier_id”:”e3ca6dx107-nlc-3413”,”includes”:[“AAA”],”excludes”:null}, {“classifier_id”:”8aff06x106-nlc-11119”,”includes”:[“EEE”],”excludes”:[“BRD”,”FRP”]}, {“classifier_id”:”e82f62x108-nlc-2896”,”includes”:[“XYZ”,”ABC”],”excludes”:null}, {“classifier_id”:”0877dax111-nlc-558”,”includes”:[“WWW”,”SSS”,”YYY”,”FFF”],”excludes”:null}, {“classifier_id”:”8aff06x106-nlc-11121”,”includes”:[“BBB”],”excludes”:null} ] }} #automationconfessions @holly_cummins
Why automate?
Why automate?
Why automate? Automate because it’s fun
Why not automate thanks (for everything!), xkcd.com
Why not automate? Ross
t a d a m o Why not s t I ge I e m i t h c u m w ho automate? d a h I f i e v a s d l cou . e m i t e mor Ross
t a d a m o Why not s t I ge I e m i t h c u m w ho automate? d a h I f i e v a s d l cou . e m i t e mor Ross’s bootstraps Ross
t a d a m o Why not s t I ge I e m i t h c u m w ho automate? d a h I f i e v a s d l cou . e m i t e mor The automation paradox Ross’s bootstraps Ross
Fixing a classpath #automationconfessions @holly_cummins
#automationconfessions @holly_cummins
find something | exec something {} + ; ?! #automationconfessions @holly_cummins
find something | exec something {} + ; ?! for … then sed something; mv $i.bak $i; … ? #automationconfessions @holly_cummins
find something | exec something {} + ; ?! for … then sed something; mv $i.bak $i; … ? sedder.sh and dosed.sh and … ? #automationconfessions @holly_cummins
find something | exec something {} + ; ?! for … then sed something; mv $i.bak $i; … ? sedder.sh and dosed.sh and … ? perl … um .. something? #automationconfessions @holly_cummins
find something | exec something {} + ; ?! for … then sed something; mv $i.bak $i; … ? sedder.sh and dosed.sh and … ? perl … um .. something? #automationconfessions @holly_cummins
#automationconfessions @holly_cummins
Fixing 26 classpaths #automationconfessions @holly_cummins
Fixing 26 classpaths #automationconfessions @holly_cummins
Epilogue perl -pi -w -e ‘s/SEARCH_FOR/REPLACE_WITH/g;’ *.txt #automationconfessions @holly_cummins
Andrew #automationconfessions 14:29, November 9th. Holly @holly_cummins
Holly, you need to stop working on automating this process. Andrew #automationconfessions 14:29, November 9th. Holly @holly_cummins
Holly, you need to stop working on automating this process. Andrew #automationconfessions 14:29, November 9th. But why?! Holly @holly_cummins
Holly, you need to stop working on automating this process. But why?! The contract finished last week. We’re not working for that client anymore. Andrew #automationconfessions 14:29, November 9th. Holly @holly_cummins
Holly, you need to stop working on automating this process. The contract finished last week. We’re not working for that client anymore. Andrew #automationconfessions But why?! But … there’s stuff still to automate. 14:29, November 9th. Holly @holly_cummins
The Dream Superhelpful automation automaton
The Reality
The Reality
The Reality Think about support.
The Reality Think about support.
The Reality Think about support. Think about robustness.
Rosie #automationconfessions @holly_cummins
Rosie ate the world. #automationconfessions @holly_cummins
Rosie ate the world. (Well, my corner of it.) #automationconfessions @holly_cummins
Give hefty automations adorable names #automationconfessions @holly_cummins
Questions to ask before automating #automationconfessions @holly_cummins
Questions to ask before n a c Who s i h automating t n i a t n i a m ? n o i t a m o t u a #automationconfessions @holly_cummins
Questions to ask before n Who can a c Who s i h automating t manage this n i a t n i ma ? n o i t a m o t u a #automationconfessions automation? @holly_cummins
Questions to ask before n Who can a c Who s i h automating t manage this n i a t n i ma ? n o i t a m o t u a automation? How much will it cost? #automationconfessions @holly_cummins
Questions to ask before n Who can a c Who s i h automating t manage this n i a t n i ma ? n o i t a m o t u a How much will it cost? #automationconfessions automation? Will it be robust? What if things change? @holly_cummins
Checkpoint during automation #automationconfessions @holly_cummins
I o Checkpoint during d w Ho e n fi de automation ? s s e c c su #automationconfessions @holly_cummins
I o Checkpoint during d Have I got w o H completion e n fi de automation ? s s e c c su #automationconfessions criteria? @holly_cummins
I o Checkpoint during d Have I got w o H completion e n fi de automation ? s s e c c su criteria? Am I still saving time? #automationconfessions @holly_cummins
I o Checkpoint during d Have I got w o H completion e n fi de automation ? s s e c c su Am I still saving time? #automationconfessions criteria? Is this still worth it? @holly_cummins
Don’t Lose Your Perspective. #automationconfessions @holly_cummins
Remember the bus #automationconfessions @holly_cummins
Remember the bus A clever automation isn’t so clever if only one person understands it… #automationconfessions @holly_cummins
Remember the bus A clever automation isn’t so clever if only one person understands it… #automationconfessions @holly_cummins
Remember the bus A clever automation isn’t so clever if only one person understands it… … and they get hit by a bus. #automationconfessions @holly_cummins
Why not automate #automationconfessions @holly_cummins
Why not automate Should I automate this process… #automationconfessions @holly_cummins
Why not automate Should I automate this process… … or should I change it? #automationconfessions @holly_cummins
The dumbness problem
The dumbness problem It’s dumb to automate dumb things …
The dumbness problem It’s dumb to automate dumb things … … and …
The dumbness problem It’s dumb to automate dumb things … … and … … Automation allows you to do dumb things at a greater speed
Defect screening #automationconfessions @holly_cummins
Ask questions before automatically automating things which don’t actually need to be done. #automationconfessions @holly_cummins
Why not automate
Why not automate
Why not automate Computers don’t always get it right.
https://www.youtube.com/watch?v=hulnz902gWo
Build monitoring #automationconfessions @holly_cummins
DevOps
What is DevOps?
Old way #automationconfessions @holly_cummins
Old way #automationconfessions @holly_cummins
Old way #automationconfessions @holly_cummins
Old way #automationconfessions @holly_cummins
Old way People who break stuff #automationconfessions @holly_cummins
Old way People who break stuff “developers” #automationconfessions @holly_cummins
Old way People who break stuff People who deal with consequences “developers” #automationconfessions @holly_cummins
Old way People who break stuff People who deal with consequences “developers” “ops team” #automationconfessions @holly_cummins
Old way People who break stuff People who deal with consequences “developers” “ops team” #automationconfessions @holly_cummins
Old way People who break stuff People who deal with consequences “developers” “ops team” #automationconfessions @holly_cummins
Old way People who break stuff People who deal with consequences “developers” “ops team” #automationconfessions @holly_cummins
New way People who break stuff People who deal with consequences “dev elopers” “ops team” #automationconfessions @holly_cummins
New way People who break stuff People who deal with consequences “dev elopers” “ops team” #automationconfessions @holly_cummins
New way People who break stuff People who deal with consequences “dev ops team” #automationconfessions @holly_cummins
New way People who break stuff and deal with consequences “dev ops team” #automationconfessions @holly_cummins
New way People who break stuff less and deal with consequences “dev ops team” #automationconfessions @holly_cummins
New way People who break stuff less and deal with consequences “dev ops team” #automationconfessions @holly_cummins
What is DevOps?
What is DevOps? Automation
What is DevOps? 100% Automation
What DevOps is not
What DevOps is not A job title
What DevOps is not A job title for the IT department
What DevOps is not A job title for the IT department A criteria for chatting up job candidates on a train
What DevOps is not A job title for the IT department A criteria for chatting up job candidates on a train The only reason to automate
How to automate #automationconfessions @holly_cummins
How to automate It depends. What are you automating? #automationconfessions @holly_cummins
What can we automate?
What can we automate? Delivery pipeline
What can we automate? Code Push Test Delivery pipeline Live
What can we automate? Code Push Test Delivery pipeline Live
What can we automate?
What can we automate? Infrastructure
What can we automate? Infrastructure should be code.
What can we automate? Infrastructure should be code.
What can we automate? Infrastructure should be code. Machine configuration
What can we automate? Infrastructure should be code. Machine configuration Servers
What can we automate? Infrastructure should be code. Machine configuration Servers Test environments
What can we automate? Infrastructure should be code. Machine configuration Servers Test environments ….
What can we automate?
What can we automate? Some Tests
What can we automate? Some Tests
What can we automate? Some Tests
What can we automate?
What can we automate? Automatically generated
What can we automate? Automatically generated
What can we automate? Automatically generated
What can we automate? Automatically generated Formatting: the most controversial thing one can automate.
What can we automate?
What can we automate? Copyright statements
What can we automate? Maybe. (The second most controversial thing one can automate.) Copyright statements
#automationconfessions @holly_cummins
Tools (an incomplete list) #automationconfessions @holly_cummins
Tools (an incomplete list) #automationconfessions @holly_cummins
Tools (an incomplete list) Shell scripts #automationconfessions @holly_cummins
Tools (an incomplete list) Shell scripts sed #automationconfessions @holly_cummins
Tools (an incomplete list) Shell scripts sed awk #automationconfessions @holly_cummins
Tools (still an incomplete list) Scripting python ruby #automationconfessions @holly_cummins
Tools (still an incomplete list) #!/usr/bin/env node const path = require(‘path’); const fs = require(‘fs’); const cp = require(‘cp’); if (process.argv.length < 3) { console.log(“Usage: usefulScript something somethingElse”); process.exit(1); } // Do something useful #automationconfessions @holly_cummins
Tools (still an incomplete list) #automationconfessions @holly_cummins
Tools (still an incomplete list) Jenkins #automationconfessions @holly_cummins
Tools (still an incomplete list) Jenkins #automationconfessions @holly_cummins
Tools (still an incomplete list) Jenkins Concourse #automationconfessions @holly_cummins
Tools (still an incomplete list) Jenkins Concourse #automationconfessions @holly_cummins
Tools (still an incomplete list) Jenkins Concourse Rational Team Concert #automationconfessions @holly_cummins
Tools (still an incomplete list) Jenkins Concourse Rational Team Concert Bluemix Build and Deploy #automationconfessions @holly_cummins
Tools (yep, still an incomplete list) #automationconfessions @holly_cummins
Tools (yep, still an incomplete list) Chef #automationconfessions @holly_cummins
Tools (yep, still an incomplete list) Chef Puppet #automationconfessions @holly_cummins
Tools (yep, still an incomplete list) Chef Puppet sprout-wrap #automationconfessions @holly_cummins
Tools (you’ll never guess - still an incomplete list) #automationconfessions @holly_cummins
Tools (you’ll never guess - still an incomplete list) #automationconfessions @holly_cummins
Tools (you’ll never guess - still an incomplete list) Docker, VMWare, and Vagrant images #automationconfessions @holly_cummins
It doesn’t have to be fancy #automationconfessions @holly_cummins
It doesn’t have to be fancy #automationconfessions @holly_cummins
Tools (still an incomplete list) #automationconfessions @holly_cummins
Tools (still an incomplete list) An ant. #automationconfessions @holly_cummins
Tools (still an incomplete list) An ant. Not a reindeer. #automationconfessions @holly_cummins
Tools Ant (still an incomplete list) An ant. Not a reindeer. #automationconfessions @holly_cummins
Tools Ant Maven (still an incomplete list) An ant. Not a reindeer. #automationconfessions @holly_cummins
Tools Ant Maven Gradle (still an incomplete list) An ant. Not a reindeer. #automationconfessions @holly_cummins
Tools Ant Maven Gradle Non-Java build tools I don’t know :) #automationconfessions (still an incomplete list) An ant. Not a reindeer. @holly_cummins
Tools (still an incomplete list) #automationconfessions @holly_cummins
Tools (still an incomplete list) Plugins Tasks #automationconfessions @holly_cummins
Tools (still an incomplete list) Plugins Tasks Know your build tool. #automationconfessions @holly_cummins
Tools (still an incomplete list) Plugins Tasks Know your build tool. Extend your build tool. #automationconfessions @holly_cummins
Tools (still an incomplete list) Plugins Tasks Know your build tool. Extend your build tool. #automationconfessions @holly_cummins
Tools (still an incomplete list) #automationconfessions @holly_cummins
Tools (still an incomplete list) Chat integrations #automationconfessions @holly_cummins
Tools (still an incomplete list) #automationconfessions @holly_cummins
Tools (still an incomplete list) Eclipse plugins #automationconfessions @holly_cummins
Tools (still an incomplete list) #automationconfessions @holly_cummins
Tools (still an incomplete list) Web applications #automationconfessions @holly_cummins
Tools (still an incomplete list) Web applications (If a UI is involved, proceed with caution) #automationconfessions @holly_cummins
Rolling your own #automationconfessions @holly_cummins
Rolling your own Beware not-invented-here #automationconfessions @holly_cummins
Rolling your own Beware not-invented-here Are you sure no one else has done this? #automationconfessions @holly_cummins
Rolling your own Beware not-invented-here Are you sure no one else has done this? If not, maybe there’s a good reason? #automationconfessions @holly_cummins
Rolling your own Beware not-invented-here Are you sure no one else has done this? If not, maybe there’s a good reason? Beware fun #automationconfessions @holly_cummins
Rolling your own Beware not-invented-here Are you sure no one else has done this? If not, maybe there’s a good reason? Beware fun But do innovate (and have fun) #automationconfessions @holly_cummins
Finally … #automationconfessions @holly_cummins
Finally … Aren’t we lucky to have careers where automation is not just allowed, but encouraged? #automationconfessions @holly_cummins
Finally … Aren’t we lucky to have careers where automation laziness is not just allowed, but encouraged? #automationconfessions @holly_cummins
Finally … Aren’t we lucky to have careers where automation laziness fun is not just allowed, but encouraged? #automationconfessions @holly_cummins
Why are we here? #automationconfessions @holly_cummins
Why are we here? To make things better. #automationconfessions @holly_cummins
Automate stuff … #automationconfessions @holly_cummins
Automate stuff … … so we can use our power for what really matters. #automationconfessions @holly_cummins
… and then … #automationconfessions @holly_cummins
… and then … … take the love and good luck in our jobs that we have and share it. #automationconfessions @holly_cummins
#automationconfessions @holly_cummins
Any Questions? @holly_cummins www.bluemix.net www.wasdev.net #automationconfessions @holly_cummins
I’ve never seen a job I didn’t want to automate. Sometimes it’s worked out well, sometimes automation has turned a small nuisance into a big, fragile, free-time-eating monster nuisance. In this talk, I’ll explore why we automate, when to automate, the hazards of automation and the – big – rewards of automation. I’m part of the team developing IBM’s WebSphere Liberty application server. We’ve used a mix of off-the-shelf and home-rolled tools and processes to work smarter and more productively. I’ll describe what we’ve learned as WebSphere has transitioned to DevOps and continuous delivery and why I still can’t resist trying to automate all the things.
These are slides from a 2014 presentation at GeekOut UK.