Date post: | 11-May-2015 |
Category: |
Technology |
Upload: | ibm-urbancode-products |
View: | 971 times |
Download: | 2 times |
Pushing the bottleneck
Predicting what will break next in your SDLC
Lead Consultant & Tech Evangelist
Eric is Lead Consultant at IBM UrbanCode Products where I help customers get the most out of their build, deploy and release processes.
Today he works with customers and industry leaders to figure out this DevOps thing.
Eric [email protected]@EricMinick
The plan
Theory of constraints in a nutshell
Finding bottlenecks
Predicting the next bottleneck
Common bottleneck pushing patterns
Q&A
Theory of constraints in a nutshell
A bottleneck is a constraint
Maximum pouring speed
Only by increasing flow through the constraint can overall throughput be increased*
Making the bottlewide down here does
not help
* The Goal: a process of ongoing improvement. Goldratt eta al
Optimize at your constraint
Can pour faster now
Your system must have a measureable goal
My goal is to empty a wine bottle quickly
Simplified five step plan
1. Identify the system’s most severe constraint
2. Decide how to get the most out of the constraint
3. Subordinate everything else to the above constraint
4. Make changes to expand constraint’s capacity
5. Once constraint is relieved, return to step 1
Example: Slow QA cycles
1. Identify the system’s most severe constraint
2. Decide how to get the most out of the constraint
3. Subordinate everything else to the above constraint
4. Make changes to expand constraint’s capacity
5. Once constraint is relieved, return to step 1
1. It takes too long to test our changes. Everyone else waits
2. Testers should focus on exploratory testing
3. Devs help with regression tests. Ops prioritizes QA.
4. Dev & QA work together to automate regression tests
5. Find the next bottleneck
Wait, what’s our goal in software?
Generally: turn ideas into business value
Measuring “business value” hard
Emptying wine bottles only relevant if dev speed is the constraint and you believe in the Ballmer Peak (http://xkcd.com/323/)
Wait, what’s our goal in software?
Generally: turn ideas into business value
Measuring “business value” hard
Features delivered minus bugs is a decent approximation
– …but rewards building useless features.
Emptying wine bottles only relevant if dev speed is the constraint and you believe in the Ballmer Peak (http://xkcd.com/323/)
Three key measures
Lag time: how long from idea to value?
Throughput: how much delivered value per unit time?
Cost: what does it cost to deliver value?
Finding the bottlenecks
Most teams can feel the constraint
What are you waiting on?
Where’s the pain?
Constraints before you in a process feel like not enough
work.
Constraints after you in a process are annoying or
painful
If it hurts, do it more often
Painful processes often grow exponentially worse with large batch sizes.
Examples
– Integration work
– Releases
– Bug Triage
– Updating databases
– Visiting the dentist
http://martinfowler.com/bliki/FrequencyReducesDifficulty.html
Time between doing it
Pain
Use Lean techniques to measure
What does it take to get a change from idea to production?
–At each phase measure wait time and work time
Long wait times indicate large batch sizes or backlogs
image credits: http://commons.wikimedia.org/wiki/File:Diagram_spaghetti_kilka_produktow.PNGhttp://www.michaelnygard.com/blog/2008/02/outrunning_your_headlights.html
Manual fix & verify spaghetti
Bug fix & verify value stream
720
3600
240
2880
720
3600
240
15
15
120
60
15
15
60
Waiting Working
12000 300
1. Feature build
2. Build deployed
3. Bug reported
4. Dev fixes
5. Fix built
6. Fix deployed
7. Tester verifies
Seeing the “next” bottleneck
QA Scenario
Dev Produces a nightly build
Twice weekly, 2 hour deploy
to Test Lab
3 Days to test each drop
Constraint
Dev produces a nightly build
Twice weekly, 2
hour deploy to Test Lab
1.5 Days to test each drop
If we improve test speed, our constraint moves.
New Constraint
Examining a constraint
• Manual process• Limited staff• Production releases have priority
Why can we only deploy twice a week to QA?
Tackling the constraint
• Manual process• Limited staff• Production releases have priority
Why can we only deploy twice a week to QA?
• Automate processes• Hire more staff• Prioritize QA Releases
Options
Imagine a 1 day test cycle
Dev produces a nightly build
2 hour deploy to Test Lab
1.0 Days to test each
drop
¼ day deploy downtime becomes turns 1 day test cycle into two days.
Next Constraint
Tackling the constraint
• Manual process• Limited staff• Production releases have priority
Why can we only deploy twice a week to QA?
• Automate processes• Hire more staff• Prioritize QA deploys
Options
Short term approach
Long term approach
Measuring utilization helps with this prediction
“Feeling” the pain isn’t enough to predict the next constraint
There may be no pain at the next constraint today
When something is free, it is used more
Example: Amazon Prime. For $79/yr, customers get free 2 day shipping on everything.
“…Customers spent as much as 150% more at Amazon after they became Prime members.
Subscribers not only ordered more often … they started buying things at Amazon that they
probably wouldn’t have in the past” *
* http://business.time.com/2013/03/18/amazon-prime-bigger-more-powerful-more-profitable-than-anyone-imagined/
Consider implications of making something free
If builds, deploy, regression tests are free…
We’re going to be testing lots more. Better buy some
hardware.
Common “next bottleneck” patterns
After build, deploy is next
Build guy & deploy guy used to be in sync
A CI server can do hundreds of builds per day
Agile tends to make Operations a constraint
Knowing my stuff compiles at all times is great. I
want to know if it passes functional
tests too.
As tests shift left, expensive tests constrain
Developers run more integration tests
Some tests use expensive resources
–pay per use web services, mainframes, production systems…
Stubbing those resources becomes important
– known as “service virtualization”
Concurrent agile dev requires more test labs
More code is compiling, and set to be released “soon”
Need more environments to test changes in
– Pressure for Platform as a Service
Frequent releases demand fast feedback
Frequent releases enable experimentation
Monitoring of business outcomes required
Architectural pressures to support A/B testing
Stop ignoring difference between features delivered
and value delivered
If we keep chasing constraints, where does it end?
You may end up with Continuous Deployment
Build
Run thousands of tests
Deploy to some servers
Monitor
Deploy to remaining servers
Summary
Optimizations other than at the constraint don’t help
“Breaking” one constraint will expose the next
Patterns or analysis can be used to predict next constraint
Continual Improvement, Continual Improvement, Continual Improvement, Continual Improvement…
IBM will collaborate with you to understand your current situation,
goals and constraints. The Assessment and Planning
Workshop will aim to capture sufficient information to make specific recommendations for
improvement and implementation.
Intended Audience:- Key leadership from practice areas and
stakeholder organizations Value Proposition
- Clear recommendations for capability improvements aligned to your business goals
- Initial Architecture- Adoption roadmap based on proven best
practices Activities
- Workshop planning- Assessment and Planning Workshop- Collaborative discussion on current status, future
goals and adoption requirements- Produce Deliverable
Deliverables- Current Status and Improvement
Recommendations- Architecture - Adoption Roadmap
Assessment and Planning Workshop
More resources
Urbancode.com/resources
Continuous Delivery Maturity Model
Deployment Automation Basics
Applying Lean Principals to Software Delivery
Blogs.urbancode.com
Twitter.com/UrbanCode
Facebook.com/IBMUrbanCodeProducts
SlideShare.net/Urbancode