SlideShare a Scribd company logo
1 of 140
Download to read offline
Software Rewrite Cycle
How to Break
the
Start%
Over%
Unmaintainable%
So0ware%
CTO, New Iron
Janelle Klein
©2015 New Iron Group
My Career
Maintenance Team
My First Project
Rewrite Team
The Next Generation
My Career
Maintenance Team
My First Project
Rewrite Team
The Next Generation
My Career
My 2nd Project
Third Generation Rewrite
My Career
My 3rd Project
I Kicked Off the Rewrite!!
My Career
My 4th Project
3rd Generation Rewrite
Start%
Over%
Unmaintainable%
So0ware%
Consulting...
My Career
Does anyone not have this challenge?
We Start with the Best of Intentions
High Quality Code
Low Technical Debt
Easy to Maintain
Good Code Coverage
Stages of Escalating Project Risk
Product Owner: “We’ve got more important things to do.”
Deferring(
Problems(
Deferring(
Problems(
Painful(
Releases(
Manager: “Good job everyone! Keep up that great work ethic!”
Stages of Escalating Project Risk
Deferring(
Problems(
Painful(
Releases(
Thrashing)
Manager: “We need to go faster! Let’s hire more developers.”
Stages of Escalating Project Risk
Deferring(
Problems(
Painful(
Releases(
Thrashing)
Project(
Meltdown(
Developer: “I give up. I don’t care anymore if the project fails.”
Stages of Escalating Project Risk
The further down the path,
the more tempting it is...
With invisible problems and business pressure that doesn’t let up,
we just keep repeating the same cycle.
RESET
Start%
Over%
Unmaintainable%
So0ware%
Software Rewrite Cycle
RESET
“A description of the goal is not a strategy.”
-- Richard P. Rumelt
What’s wrong with our current strategy?
Our “Strategy” for Success
High Quality Code
Low Technical Debt
Easy to Maintain
Good Code Coverage
RESET
“A good strategy is a specific and coherent response to—
and approach for overcoming—the obstacles to progress.”
-- Richard P. Rumelt
The problem is we don’t have a strategy...
RESET
So what are the biggest obstacles that
cause the software rewrite cycle?
What specific approach are we going to take
to overcome the obstacles?
RESET
How I turned my project around...
We did all the “right” things.
RESET
How I turned my project around...
We did all the “right” things.
...and brought down production 3x in a row.
Technical Debt Mistakes
I thought the main obstacle was
Technical Debt
Mistakes
?
Most of our mistakes were in the
most well-written parts of the code.
We made significantly more mistakes
in code that we didn’t write ourselves.
Lower
Familiarity
More
Mistakes=
There had to be more to the story...
Complex(
So*ware(
...pain...
This is what I knew...
What made development feel painful?
Unexpected
Behavior
Problem
Resolved
Tracking Painful Interaction with the Code (Friction)
Troubleshooting
Progress
5 hours and 18 minutes of troubleshooting...
PAINFUL
The Amount of PAIN was Driven By...
Likeliness(of((
Unexpected(
Behavior(
Cost(to(Troubleshoot(and(Repair(
High(Frequency(
Low(Impact(
Low(Frequency(
Low(Impact(
Low(Frequency(
High(Impact(
PAIN(
What Causes Unexpected
Behavior (likeliness)?
What Makes Troubleshooting
Time-Consuming (impact)?
What causes PAIN?
Familiarity Mistakes
Stale Memory Mistakes
Semantic Mistakes
Bad Input Assumption
Tedious Change Mistakes
Copy-Edit Mistakes
Transposition Mistakes
Failed Refactor Mistakes
False Alarm
Non-Deterministic Behavior
Ambiguous Clues
Lots of Code Changes
Noisy Output
Cryptic Output
Long Execution Time
Environment Cleanup
Test Data Generation
Using Debugger
What Causes Unexpected
Behavior (likeliness)?
What Makes Troubleshooting
Time-Consuming (impact)?
What causes PAIN?
Familiarity Mistakes
Stale Memory Mistakes
Semantic Mistakes
Bad Input Assumption
Tedious Change Mistakes
Copy-Edit Mistakes
Transposition Mistakes
Failed Refactor Mistakes
False Alarm
Non-Deterministic Behavior
Ambiguous Clues
Lots of Code Changes
Noisy Output
Cryptic Output
Long Execution Time
Environment Cleanup
Test Data Generation
Using Debugger
What Causes Unexpected
Behavior (likeliness)?
What Makes Troubleshooting
Time-Consuming (impact)?
What causes PAIN?
Familiarity Mistakes
Stale Memory Mistakes
Semantic Mistakes
Bad Input Assumption
Tedious Change Mistakes
Copy-Edit Mistakes
Transposition Mistakes
Failed Refactor Mistakes
False Alarm
Once we understood causes, most problems were avoidable.
Non-Deterministic Behavior
Ambiguous Clues
Lots of Code Changes
Noisy Output
Cryptic Output
Long Execution Time
Environment Cleanup
Test Data Generation
Using Debugger
An Avoidable Problem
7:01
Iterative Validation with Unit Tests
7:010:00
14:230:00
Skipping Tests and Validating at the End
7:01
Iterative Validation with Unit Tests
7:010:00
14:230:00
Skipping Tests and Validating at the End
Urgency Leads to High-Risk Decisions
If I make no mistakes I save ~2 hours.
If I make several mistakes I lose ~8 hours.
An Avoidable Problem
Product(
Requirements( So1ware(Task(
Possible(Decision(Paths(
So1ware(
Software is a Reflection of our Decisions
Product(
Requirements( So1ware(Task(
High%Risk%
Decision%Habits%
So1ware(
(and(all(our(problems)(
(
RESET
Software is a Reflection of our Decisions
Product(
Requirements( So1ware(Task(
High%Risk%
Decision%Habits%
So1ware(
(and(all(our(problems)(
(
Technical Debt is just a Symptom of the Problem
Software is a Reflection of our Decisions
How much work does it take to mop the floor?
How much work does it take to mop the floor?
How much work does it take to mop the floor?
How much work does it take to
complete a software task?
=
Side-Effects from
Ignoring the Risk
Trade-off Decisions
Writing Unit Tests Troubleshooting Mistakes
Direct Cost Indirect Costs
or
We make high-risk decisions because the indirect costs are hard to quantify.
Likeliness of Event
Potential Impact
x=
Risk
Troubleshooting Learning Rework
Side-Effects in Software
Troubleshooting Risk
Likelihood)of))
Unexpected)
Behavior)
Cost)to)Troubleshoot)and)Repair)
High)Frequency)
Low)Impact)
Low)Frequency)
Low)Impact)
Low)Frequency)
High)Impact)
PAIN)
Learning Risk
Likelihood)of))
working)with)
Unfamiliar)
Code)
Cost)to)Learn)
High)Frequency)
Easy)to)Learn)
Low)Frequency)
Easy)to)Learn)
Low)Frequency)
Hard)to)Learn)
PAIN)
Rework Risk
Likelihood)of))
making)a))
Bad)Assump4on)
Cost)to)Correct)Decisions)
High)Uncertainty)
Low)Delay)
Low)Uncertainty)
Low)Delay)
Low)Uncertainty)
High)Delay)
PAIN)
Deferring(
Problems(
Painful(
Releases(
Thrashing)
Project(
Meltdown(
Stages of Escalating Project Risk
Ignore Tango
(risk not obvious)
Escala&ng)
Risk)
Time)
Pressure)
Defer)
Problems)
Increase)
Risk)&)Impact)
of)Extra)
Work)
More)Frequent)
Bugs)and)
Higher)
Task)Effort)
Cycle of
Escalating
Risk
Ignore
Risk
Tangos
Multiply
Escala&ng)
Risk)
Time)
Pressure)
Defer)
Problems)
Increase)
Risk)&)Impact)
of)Extra)
Work)
More)Frequent)
Bugs)and)
Higher)
Task)Effort)
Cycle of
Escalating
Risk
Ignore
Risk
More Mopping
Work
Escala&ng)
Risk)
Time)
Pressure)
Defer)
Problems)
Increase)
Risk)&)Impact)
of)Extra)
Work)
More)Frequent)
Bugs)and)
Higher)
Task)Effort)
Cycle of
Escalating
Risk
Ignore
Risk
Further Behind on
Deliverables
Escala&ng)
Risk)
Time)
Pressure)
Defer)
Problems)
Increase)
Risk)&)Impact)
of)Extra)
Work)
More)Frequent)
Bugs)and)
Higher)
Task)Effort)
Cycle of
Escalating
Risk
Productivity plummets because of the overwhelming side-effects
Ignore
Risk
I can’t go
any faster!
Case Study 1:
Healthy project about 10 months old
Troubleshooting
Progress
Learning
Rework10-20% friction
Effects of Escalating Risk
Case Study 2:
Thrashing project about 18 months old
Troubleshooting
Progress
Learning
Rework40-60% friction
0:00 28:15
12:230:00
Effects of Escalating Risk
Case Study 3:
Post-meltdown project about 12 years old
Troubleshooting
Progress
Learning
Rework60-90% friction
7:070:00
0:00 19:52
Effects of Escalating Risk
Case Study 1
Case Study 2
Case Study 3
1 day
2 days
1 day
3 days
1 day
3 days
We can’t see these effects by measuring velocity or task lead-time.
Effects of Escalating Risk
What specific approach are we going to take
to overcome the obstacles?
Obstacle: Business Pressure
“We aren’t given time to work on improvements!”
(nobody understands the problems)
Developers are stuck because they don’t have control.
What are we supposed to do?
Management is stuck because they don’t have visibility.
Organizational Deadlock
1. Don’t ask for Permission
2. State your Goal
"I want to make the business case to management for fixing things around
here. No more chaos and working on weekends, this needs to stop. But I
need data to make the case so I need everyone's help."
3. State the Plan
"Here's what I'm thinking. I want to run an experiment to record data for one
month on all the time we spend troubleshooting. We can look at the data
together and identify our biggest problems, then I’ll write it up and present
the case to management to get things fixed.”
4. Enlist the Team
“Will you guys help me make this happen?”
Make the Decision to Lead
1. Don’t ask for Permission
2. Make the Goal Clear to Your Team
"I want to make the business case to management for fixing things around
here. No more chaos and working on weekends, this needs to stop. But I
need data to make the case so I need everyone's help."
3. State the Plan
"Here's what I'm thinking. I want to run an experiment to record data for one
month on all the time we spend troubleshooting. We can look at the data
together and identify our biggest problems, then I’ll write it up and present
the case to management to get things fixed.”
4. Enlist the Team
“Will you guys help me make this happen?”
Make the Decision to Lead
1. Don’t ask for Permission
2. Make the Goal Clear to Your Team
"I want to make the business case to management for fixing things around
here. No more chaos and working on weekends, this needs to stop. But I
need data to make the case so I need everyone's help."
3. State the Plan
"Here's what I'm thinking. I want to run an experiment to record data for one
month on all the time we spend troubleshooting. We can look at the data
together and identify our biggest problems, then I’ll write it up and present
the case to management to get things fixed.”
4. Enlist the Team
“Will you guys help me make this happen?”
Make the Decision to Lead
1. Don’t ask for Permission
2. Make the Goal Clear to Your Team
"I want to make the business case to management for fixing things around
here. No more chaos and working on weekends, this needs to stop. But I
need data to make the case so I need everyone's help."
3. State the Plan
"Here's what I'm thinking. I want to run an experiment to record data for one
month on all the time we spend troubleshooting. We can look at the data
together and identify our biggest problems, then I’ll write it up and present
the case to management to get things fixed.”
4. Enlist the Team
“Will you guys help me make this happen?”
Make the Decision to Lead
Share the PAIN!
Over the last month,
we’ve spent ~50% of our time troubleshooting
Troubleshooting JavaScript Errors
Share the PAIN!
With 25 developers on the team, rushing to save a couple hours
caused over 1000 hours of developer downtime
Blame the System...
Developer(
Knowledge(of(
So0ware(Risks(
Product(Owner(
Actual(So0ware(Risks(
interacts((
with(
Actual(Customers(
interacts((
with(
Knowledge(of(
Customers(
Trade@off(
Decisions(
depend(on(depend(on(
The likelihood of mistakes
and the potential impact
is difficult to quantify
and explain.
The product owner
can’t help making
ill-informed decisions.
Blame the System...
Escala&ng)
Risk)
Time)
Pressure)
Defer)
Problems)
Increase)
Risk)&)Impact)
of)Extra)
Work)
More)Frequent)
Bugs)and)
Higher)
Task)Effort)
“...we keep deferring the problems and taking risks
because we get stuck in a cycle of urgency.”
Constant
Urgency
Blame the System...
Likelihood)of))
Mistakes)
Cost)to)Troubleshoot)and)Repair)the)Problems)
High)Frequency)
Low)Impact)
Low)Frequency)
Low)Impact)
Low)Frequency)
High)Impact)
Us)
“...now the problems are out of control.”
Take Responsibility
Dedicated resources (1 or 2 developers)
Control of all decisions for improvement work
Make a commitment to show results in 3 months
Ask for a 3-Month Trial
Now the challenge is getting results.
Obstacle: Knowing What to Fix
Idea Flow Learning Framework
“Idea Flow” is a metaphor for the
human interaction in software development
Idea Flow Map
Idea Flow Learning Framework
Troubleshooting Learning Rework
Strategy for improving software predictability
by optimizing developer experience.
Input: 
Task + Constraints
Target: Optimal Idea Flow
Output: Actual Friction
Need a Feedback Loop...
Input: 
Task + Constraints
Target: Optimal Idea Flow
Output: Actual Friction
1.
Visibility
2.
Clarity
3.
Awareness
Mentorship Process
Idea Flow Learning Framework
1. Make the Problems Visible
2. Understand the Problems
3. Improve Decision Habits
Strategy for improving software predictability
by optimizing developer experience.
1. Make the Problems Visible
2. Understand the Problems
3. Improve Decision Habits
Idea Flow Learning Framework
Strategy for improving software predictability
by optimizing developer experience.
2.#Record#an#Idea#Flow#Map#
So#ware(Task(
Strategy((
Talk(
Reflec3on(
Talk(
Iden3fy(Improvements(
1.#Clarify#the#Strategy#
So#ware(Task(
3.#Reflect#on#Decisions#
Lessons(Learned(
Mee3ng(
4.#Share#Lessons#Learned#
Visibility Framework
Visibility helps us Identify and the Problems
2. Record an Idea Flow Map
Idea Flow Mapping Commands
Troubleshooting
Progress
Learning
Rework
2. Record an Idea Flow Map
Troubleshooting
Progress
Learning
Rework
2. Record an Idea Flow Map
Troubleshooting
Progress
Learning
Rework
2. Record an Idea Flow Map
Troubleshooting
Progress
Learning
Rework
2. Record an Idea Flow Map
3. Reflect on Decisions
Learn to Read the Visual Indicators in Idea Flow Maps
Le#$Atrium$
Le#$Ventricle$
Right$Ventricle$
Right$Atrium$
What’s$causing$this$pa7ern?$
Similar to how an EKG helps doctors diagnose heart problems...
...Idea Flow Maps help developers diagnose software problems.
Problem-Solving
Machine
Learn to Read the Visual Indicators in Idea Flow Maps
3. Reflect on Decisions
= Solution Strategy
The “Heart” of Software Development
(the problem-solving machine)
= Solution Strategy
The “Heart” of Software Development
(the problem-solving machine)
= Solution Strategy
The “Heart” of Software Development
(the problem-solving machine)
= Solution Strategy
The “Heart” of Software Development
(the problem-solving machine)
= Solution Strategy
The “Heart” of Software Development
(the problem-solving machine)
Depending on where the disruptions are in the process,
we see a different effect in Idea Flow.
"How did you evaluate the possible options and choose a strategy?"
"What was wrong with the different strategies you tried?"
"What was the discovery that made you choose a different direction?"
Problems with Evaluating Alternatives
"Were you working with something that you were unfamiliar with?"
"Did you run into code that was noisy, ambiguous, or misleading?"
"What do you think made it difficult to learn?"
Problems with Modeling
"Did your task involve changes to complex code or business rules?"
"Were there a lot of details that you had to keep in your head?"
"What was causing the complexity in the validation cycles?"
Problems with Refining
"What experiments did you run to troubleshoot the problem?"
"How many times did you run the experiment?"
"How long did it take to get through each experiment cycle?"
Problems with the Validation Cycle
"Was there something in the code that made these changes especially mistake-prone?"
"How familiar were you with the language and tools you were working with?"
"Were you tired or distracted when you did the work?"
Problems with Execution
1. Make the Problems Visible
The goal of visibility is to ask the right questions
so we can identify problems with our strategy.
2.#Record#an#Idea#Flow#Map#
So#ware(Task(
Strategy((
Talk(
Reflec3on(
Talk(
Iden3fy(Improvements(
1.#Clarify#the#Strategy#
So#ware(Task(
3.#Reflect#on#Decisions#
Lessons(Learned(
Mee3ng(
4.#Share#Lessons#Learned#
Visibility Framework
Visibility helps us Identify and the Problems
Idea Flow Learning Framework
1. Make the Problems Visible
2. Understand the Problems
3. Improve Decision Habits
Strategy for improving software predictability
by optimizing developer experience.
Brainstorming a List
“Technical Debt” Backlog
Our improvements don’t make much difference
Clarity Framework
Understand what’s Causing your Biggest Problems
Failed'
Experiments'
1.  Choose(a(Focus( 3.(Run(Strategy(
Experiments(
4.(Learn(What(Works(
Successful'
Experiments'
Repeat'
Weekly'
Focus'Mee:ng'
2.(Breakdown(the(PaCerns(
Failed'
Experiments'
1.  Choose(a(Focus( 3.(Run(Strategy(
Experiments(
4.(Learn(What(Works(
Successful'
Experiments'
Repeat'
Weekly'
Focus'Mee:ng'
2.(Breakdown(the(PaCerns(
Understand what’s Causing your Biggest Problems
Clarity Framework
1. Choose a Focus
Highest
Impact Optimal
Focus
Highest
Uncertainty
Fastest
Feedback
Categorize the problem by type to see the impact
Focus on the problem with the highest friction
1. Choose a Focus
Tags: #problemtag
Categorize the problem by type
1. Choose a Focus
“But what problem categories do we use?”
The Ten Pains of Software Development
The Ten Pains of Software Development
Design-Fit Pain - When the new feature doesn’t
fit well into the existing design.
The Ten Pains of Software Development
Requirements Pain - Bad assumptions about
what functionality to build
The Ten Pains of Software Development
Collaboration Pain - Challenges collaborating with
other developers on the team.
The Ten Pains of Software Development
Modeling Pain - When it’s difficult to build a
conceptual model of the existing software.
The Ten Pains of Software Development
Cognitive Pain - Challenges with complexity
and intense thinking
The Ten Pains of Software Development
Alarm Pain - Challenges with false alarms and
test maintenance
The Ten Pains of Software Development
Experiment Pain - Challenges with getting
feedback by running experiments
The Ten Pains of Software Development
Execution Pain - When changing the code is
highly mistake-prone
The Ten Pains of Software Development
Have an amplifying effect on other problems
Add up Friction by Pain Type
100 hours
50 hours
Troubleshooting
Learning
Rework
Focused Improvements Visible Feedback
Failed'
Experiments'
1.  Choose(a(Focus( 3.(Run(Strategy(
Experiments(
4.(Learn(What(Works(
Successful'
Experiments'
Repeat'
Weekly'
Focus'Mee:ng'
2.(Breakdown(the(PaCerns(
Understand what’s Causing your Biggest Problems
Clarity Framework
Failed'
Experiments'
1.  Choose(a(Focus( 3.(Run(Strategy(
Experiments(
4.(Learn(What(Works(
Successful'
Experiments'
Repeat'
Weekly'
Focus'Mee:ng'
2.(Breakdown(the(PaCerns(
Understand what’s Causing your Biggest Problems
Clarity Framework
Create a Vocabulary of Patterns
Pain
Types
Problem
Types
Strategy
Types
Symptoms Causes Fixes
2. Breakdown the Patterns
2. Breakdown the Patterns
What Causes Experiment Pain?
100 hours
50 hours
Create a Vocabulary of Patterns
Why did it take an hour
to find a typo?
Slow Feedback Loop - Ran experiments by firing up application and sending email
Numerous Feedback Loops - Problem was tricky to trackdown, sent 23 emails
Tags: #ExperimentPain
What Causes Experiment Pain?
Experiment*Pain*
!Numerous!Feedback!Loops!
Itera&ve(Narrowing(
Ambiguous(Clue(
Non6determinis&c(
Lots(of(Test(Cases(
Lots(of(Bugs(
Bad(Input(Assump&on(
Uncertainty(
Difficult(to(Interpret(
Experiment*Pain*
!Slow!Feedback!Loops!
Long%Execu+on%
Noisy%Output%
Limited%Output%
Complex%Behavior%
Non<determinis+c%Behavior%
Lots%of%Code%Changes%
Difficult%to%Interpret%
Test%Input%Genera+on%
Environment%Setup%
Environment%Cleanup%
Have%to%significantly%modify%a%test%
Debugger%
What Causes Experiment Pain?
What Strategies Do We Use?
Iterative Unit Testing
Vertical Slices
Talk to the Familiar
Incremental Integration Test
Intelligent Logging
Isolate Hard-to-Test Code
Tight Control
State Controller
Front Load the Risk
Failed'
Experiments'
1.  Choose(a(Focus( 3.(Run(Strategy(
Experiments(
4.(Learn(What(Works(
Successful'
Experiments'
Repeat'
Weekly'
Focus'Mee:ng'
2.(Breakdown(the(PaCerns(
Understand what’s Causing your Biggest Problems
Clarity Framework
Failed'
Experiments'
1.  Choose(a(Focus( 3.(Run(Strategy(
Experiments(
4.(Learn(What(Works(
Successful'
Experiments'
Repeat'
Weekly'
Focus'Mee:ng'
2.(Breakdown(the(PaCerns(
Understand what’s Causing your Biggest Problems
Clarity Framework
How do we know if we’re making things better?
What does “better” really mean?
“Better” following best practices
“Better” solving the problems
Best Practices
(solution-focused)
Decision Principles
(problem-focused)
What’s a “Decision Principle”?
Answers two questions:
How do we evaluate our situation?
What are we trying to optimize for?
Decision Principles
“You know that thing that happens when you make too many changes at once
and it's really hard to troubleshoot problems? We want to avoid that.”
“If I decide to skip the unit tests, how will that affect my haystack size?”
Haystack Effect
The number of unvalidated changes
has a huge impact on the
difficulty of tracking down a problem.
“You know when you run an experiment and it’s really hard to figure out what’s
going on? We want to avoid that.”
“How can I design my code sandwich to make this easier to troubleshoot?”
Setup the Inputs
Interpret the Outputs
Code Sandwich
By reducing the
thickness of my code sandwich
I can reduce diagnostic difficulty.
Decision Principles
We can learn what works by running
“Strategy Experiments”
3. Run Strategy Experiments
1.
2.3.
1. Decide on a Strategy
2. Predict the effects in Idea Flow
3. Explain the results
Strategy(
Predic-on(Explana-on(
3. Run Strategy Experiments
“I’m going to use Iterative Unit Testing to mitigate the risk of a big haystack."
Prediction: My strategy of #IterativeUnitTesting seemed successful,
troubleshooting should take <15m
3. Run Strategy Experiments
Prediction: My strategy of #IterativeUnitTesting seemed successful,
troubleshooting should take <15m
Explain Why? Situation Pattern:
#HeavyIntegrationLogic
“I’m going to use Iterative Unit Testing to mitigate the risk of a big haystack."
Failed'
Experiments'
1.  Choose(a(Focus( 3.(Run(Strategy(
Experiments(
4.(Learn(What(Works(
Successful'
Experiments'
Repeat'
Weekly'
Focus'Mee:ng'
2.(Breakdown(the(PaCerns(
Understand what’s Causing your Biggest Problems
Clarity Framework
2. Understand the Problems
The goal of understanding the problems
is to identify the “critical few”
that will make the biggest difference.
Pareto’s Law - (80/20 Rule)
Idea Flow Learning Framework
1. Make the Problems Visible
2. Understand the Problems
3. Improve Decision Habits
Strategy for improving software predictability
by optimizing developer experience.
Clarity without Awareness...
“Well that was a stupid thing to do. Clearly, I shouldn’t have created a big
haystack because troubleshooting would obviously be difficult.”
We have to
be aware in the moment
we make the decision.
Stop and Think
Practice asking the right question at the right time
“What does your code sandwich look like for this experiment?”
“What are you planning to observe in order to understand the behavior?”
“What parts of the system are you trying to manipulate in order to see
variations in behavior?”
Situation
Developer struggling with an experiment
(poke the developer)
Ask Questions
Awareness Framework
So#ware(Task(
So#ware(Task(Strategy((
Talk(
Thinking(checklists(in((
key(situa5onal(contexts(
Evaluate(Decision(Principles(
!(
!(
!(
!(
!(
!(
!(
!(
!(
Reflec5on(
Talk(
!(
!(
Refine(
Thinking(
Checklists(
Thinking(checklist(
to(mi5gate(risk(
+(
!(
!(
!(
Think: What questions could I ask my future self to
recognize this problem in the future?
Ask the right question at the right time
3. Improve Decision Habits
The goal of improving decision habits is to
make the improvements permanent.
Input: 
Task + Constraints
Target: Optimal Idea Flow
Output: Actual Friction
1.
Visibility
2.
Clarity
3.
Awareness
Idea Flow Learning Framework
(Software Control = Predictability)
So how do we break the software rewrite cycle?
Start%
Over%
Unmaintainable%
So0ware%
We Learn.
Thank you!
If you liked the talk,
please tweet about #ideaflow!
Free e-book if you sign up
by July 15th!
@janellekz
janelle@newiron.com
Twitter:
Email:

More Related Content

Viewers also liked

Npd idea generation & idea screening & concept testing tools
Npd idea generation & idea screening & concept testing toolsNpd idea generation & idea screening & concept testing tools
Npd idea generation & idea screening & concept testing tools
Omid Aminzadeh Gohari
 
Complexity Theory and Software Development
Complexity Theory and Software DevelopmentComplexity Theory and Software Development
Complexity Theory and Software Development
Tim Berglund
 
Top 8 driver supervisor resume samples
Top 8 driver supervisor resume samplesTop 8 driver supervisor resume samples
Top 8 driver supervisor resume samples
tonychoper3705
 

Viewers also liked (13)

Barriers to Innovation (Steve Baty at Enterprise UX 2016)
Barriers to Innovation (Steve Baty at Enterprise UX 2016)Barriers to Innovation (Steve Baty at Enterprise UX 2016)
Barriers to Innovation (Steve Baty at Enterprise UX 2016)
 
Innovation Barriers
Innovation BarriersInnovation Barriers
Innovation Barriers
 
Npd idea generation & idea screening & concept testing tools
Npd idea generation & idea screening & concept testing toolsNpd idea generation & idea screening & concept testing tools
Npd idea generation & idea screening & concept testing tools
 
Complexity Theory and Software Development
Complexity Theory and Software DevelopmentComplexity Theory and Software Development
Complexity Theory and Software Development
 
Why Team work is important?
Why Team work is important?Why Team work is important?
Why Team work is important?
 
AUTOMATIC FACE NAMING BY LEARNING DISCRIMINATIVE AFFINITY MATRICES FROM WEAKL...
AUTOMATIC FACE NAMING BY LEARNING DISCRIMINATIVE AFFINITY MATRICES FROM WEAKL...AUTOMATIC FACE NAMING BY LEARNING DISCRIMINATIVE AFFINITY MATRICES FROM WEAKL...
AUTOMATIC FACE NAMING BY LEARNING DISCRIMINATIVE AFFINITY MATRICES FROM WEAKL...
 
Top 8 marketing administrative assistant resume samples
Top 8 marketing administrative assistant resume samplesTop 8 marketing administrative assistant resume samples
Top 8 marketing administrative assistant resume samples
 
Tkml
TkmlTkml
Tkml
 
Cyber security specialist performance appraisal
Cyber security specialist performance appraisalCyber security specialist performance appraisal
Cyber security specialist performance appraisal
 
Top 8 driver supervisor resume samples
Top 8 driver supervisor resume samplesTop 8 driver supervisor resume samples
Top 8 driver supervisor resume samples
 
Media and Telecommunications Forum 2016
Media and Telecommunications Forum 2016Media and Telecommunications Forum 2016
Media and Telecommunications Forum 2016
 
ZakirHussain
ZakirHussainZakirHussain
ZakirHussain
 
02. Пачатак Вялікага княства Літоўскага
02. Пачатак Вялікага княства Літоўскага02. Пачатак Вялікага княства Літоўскага
02. Пачатак Вялікага княства Літоўскага
 

More from Arty Starr

Let's Make the PAIN Visible!
Let's Make the PAIN Visible!Let's Make the PAIN Visible!
Let's Make the PAIN Visible!
Arty Starr
 
Stop Getting Crushed By Business Pressure
Stop Getting Crushed By Business PressureStop Getting Crushed By Business Pressure
Stop Getting Crushed By Business Pressure
Arty Starr
 
Reviewing a Developer Experience
Reviewing a Developer ExperienceReviewing a Developer Experience
Reviewing a Developer Experience
Arty Starr
 
The Art of Better
The Art of BetterThe Art of Better
The Art of Better
Arty Starr
 

More from Arty Starr (9)

The Ultimate Metric
The Ultimate MetricThe Ultimate Metric
The Ultimate Metric
 
The Ultimate Metric
The Ultimate MetricThe Ultimate Metric
The Ultimate Metric
 
Let's Make the PAIN Visible!
Let's Make the PAIN Visible!Let's Make the PAIN Visible!
Let's Make the PAIN Visible!
 
Make a F.O.C.O.L. Point!
Make a F.O.C.O.L. Point!Make a F.O.C.O.L. Point!
Make a F.O.C.O.L. Point!
 
Stop Getting Crushed By Business Pressure
Stop Getting Crushed By Business PressureStop Getting Crushed By Business Pressure
Stop Getting Crushed By Business Pressure
 
Reviewing a Developer Experience
Reviewing a Developer ExperienceReviewing a Developer Experience
Reviewing a Developer Experience
 
Open Mastery: Let's Conquer the Challenges of the Industry!
Open Mastery: Let's Conquer the Challenges of the Industry!Open Mastery: Let's Conquer the Challenges of the Industry!
Open Mastery: Let's Conquer the Challenges of the Industry!
 
The Art of Better
The Art of BetterThe Art of Better
The Art of Better
 
Top 5 Reasons Why Improvement Efforts Fail
Top 5 Reasons Why Improvement Efforts FailTop 5 Reasons Why Improvement Efforts Fail
Top 5 Reasons Why Improvement Efforts Fail
 

Recently uploaded

%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 

Recently uploaded (20)

%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 

How to Break the Software Rewrite Cycle

Editor's Notes

  1. I’ve been a developer for about 15 years, then got into consulting, and now I’m CTO@New Iron, a software-niche recruiting company that specializes in technical assessment and software mentorship. Despite our best efforts with agile best practices, every few years we end up sitting around a conference table, talking about what went wrong. Wondering, should we scrap the entire system and start over? Or just deal with the problems and keep on going? Who’s been there!? It’s a pattern across our industry. Why don’t we get the results we’re looking for? We’ve been talking about the same problems for decades. How many of you guys are working on a rewrite effort right now? How many of you guys are working on a project that’s a rewrite of a project before? Look around the room. Does it surprise you that so many hands are up? Why not?
  2. First of all, I’m not saying you shouldn’t rewrite your software. The cause of your problems may not be what you think. And the good thing about turning a project around instead of starting over is that you already know what your problems are. So in this talk, I’m going to tell you my story of project failure, what I learned from how to turn the project around, and the major lessons I’ve learned which I’ve been working on codifying into a learning framework - which I could title, how to figure out what your problems are.
  3. If we don’t make time to deal with emerging risks and emerging risks, we will never get out of this cycle.
  4. If we don’t make time to deal with emerging risks and emerging risks, we will never get out of this cycle.
  5. If we don’t make time to deal with emerging risks and emerging risks, we will never get out of this cycle.
  6. If we don’t make time to deal with emerging risks and emerging risks, we will never get out of this cycle.
  7. We were building this factory automation system that was responsible for detecting manufacturing problems then shutting down the tool responsible. I’d been on the project about 6 months, we were working through the final testing of a major release, tied a bow on it, shipped to production.
  8. Later that night we were on this conference call with IT. And I hear this guy just screaming in the background. Apparently, we had shut down every tool in the factory. So we rolled back the release and tried to figure out what happened. There was a configuration change that didn’t quite make it to production. We all felt terrible, but there wasn’t much we could do at this point. So we fixed the problem, and shipped to production... again.
  9. Back on the conference call with IT. And guess what... the same thing happened. What were we supposed to say… oops? So once again, we rolled back the release.
  10. We couldn’t reproduce the problem. We spent months trying to figure it out, and we were just completely stumped. We tried everything we could think of. Meanwhile, our development team was pretty much idle so management just told them to go ahead with the next release. Everyone was just working like nothing was wrong, but we couldn’t ship anything. We had a whole nother release in the queue before we finally figured it out. Guess what was wrong? We were scared to death to try again, but we didn’t really have a choice. So we cross our fingers, and shipped to production again.
  11. Back on the conference call with IT. We were all watching these real time activity charts and holding our breath. Finally everything seemed to be ok. I was so relieved that things would finally be back to normal again. And then about 3am, my phone rang. It was my team lead calling... he asked me about some code that I’d wrote and I knew exactly what happened. I’d made some “improvements”, refactored a few things, rearranged the design. Made the code better. I did TDD! Apparently I introduced a memory leak too. My changes ground the system to a screeching halt. Only this time the rollback failed. Not only did I bring the system down, we couldn’t get it out of production.
  12. We didn’t end up shipping again for another year. Our customers were scared to install our software. How could you blame them. Fully ramped semiconductor factory. 50k wafer starts a day. Completely offline. My fault. I felt so horrible. I was in my bosses office, just sobbing.
  13. What are the questions we ought to be asking ourselves?
  14. Because we were all so focused on technical debt.
  15. Here’s what I’ve learned in turning a project around. I’ve been working on codifying what I’ve learned into a learning framework. I’ve got a limited number of data points right now, so I’m looking for guinea pigs that would be willing to try it. It’s not easy, but it works.
  16. Since best practices are solution-focused, we’re always start with the hammer and looking for the nail. Test automation is our favorite hammer. Instead we need to be characterizing all the different types of nails,
  17. ©2014 New Iron Group
  18. ©2014 New Iron Group
  19. ©2014 New Iron Group
  20. ©2014 New Iron Group
  21. We’d always get a different set of bugs. What would you do?
  22. I thought the main obstacle was all the technical debt building up in the code base that was causing us to make mistakes. and if we made changes in the code that had more technical debt, we’d be more likely to make mistakes. So I got this idea to build a tool that could detect high-risk changes, and tell us where we needed to do more testing -- but what I found wasn’t what I found wasn’t what I expected at all.
  23. Our bugs were mostly in the code written by the senior engineers on the team where the design actually got the most scrutiny. It’s not like we didn’t have any awful crufty code -- but that’s not where the bugs were. The correlation I did find in the data was this...
  24. [read] And while that made some sense, I couldn’t help but think, there had to be more to the story...
  25. When I had to work with complex code, it was really painful. [read]
  26. So I started keeping track of all my painful interaction with the code and visualizing it on a timeline like this. The pain started [] when I ran into some unexpected behavior and ended [] when I had the problem resolved. So that was 5 hours and 18 minutes of troubleshooting, I think everyone would agree that’s pretty painful.
  27. The amount of pain was driven by two factors...
  28. So If I wanted to know what was causing the pain I needed to understand the things that caused these 2 factors. A lot of the problems had more to do with human factors than anything going on with the code. Stale Memory mistakes, Ambiguous Clues. But once I understood what was causing the pain, [read -- most of the problems were easy to avoid] For example...
  29. So If I wanted to know what was causing the pain I needed to understand the things that caused these 2 factors. A lot of the problems had more to do with human factors than anything going on with the code. Stale Memory mistakes, Ambiguous Clues. But once I understood what was causing the pain, [read -- most of the problems were easy to avoid] For example...
  30. So If I wanted to know what was causing the pain I needed to understand the things that caused these 2 factors. A lot of the problems had more to do with human factors than anything going on with the code. Stale Memory mistakes, Ambiguous Clues. But once I understood what was causing the pain, [read -- most of the problems were easy to avoid] For example...
  31. We’d always get a different set of bugs. What would you do?
  32. Since best practices are solution-focused, we’re always start with the hammer and looking for the nail. Test automation is our favorite hammer. Instead we need to be characterizing all the different types of nails,
  33. A typical improvement effort usually starts with brainstorming a list [slow] We think about the things that bugged us recently, how we’re not following best practices, or the code that just makes us feel shameful. [] -- Then all that goes into our technical debt backlog, and we chip away at improvements for months. But just because a problem comes to mind, doesn’t mean it’s an important problem to solve When we’re brainstorming, [] we can easily miss our biggest problems then [our improvements don’t make...]. [] Don’t do this.
  34. Find out what the substitution thing is called.
  35. Find out what the substitution thing is called.
  36. When it comes to solving these really complex problems, our intuition is just wrong. It leads us astray.
  37. The pain isn’t something inside the code, pain occurs during the process of interacting with the code.
  38. I realized that pain occurs during the process of extending the software. In other words, the problem is here [] , not here. [] We’d been looking inside the code to find our problems, but that’s not where the problems were! This process needed a name, so I called it Idea Flow. All that really matters is how it affects our experience and our ability to deliver.
  39. Avoiding Pain
  40. Software projects don’t run on a little island where we can make perfect decisions -- we have to operate within the context of a business system. A lot of our problems have nothing to do with the code -- their the effects of the organizational structure and everyone operating within the bounds of their role. We incentivize individuals with goals that undermine the system. We put the whole business at risk because we don’t understand the consequences of our decisions.
  41. When we fall into urgency mode, we start compromising safety for speed. We make decisions that don’t seem like a big deal at the time, but they create a hazardous work environment. Instead of taking a little more time to put our toys away, we end up falling down the stairs and in the hospital.
  42. Troubleshooting Risk we’ve already talked about, it’s driven by the likelihood...
  43. Learning Risk is driven by the likelihood... Things like... lots of 3rd party libraries, complex frameworks, a really large code base, or high turn-over rate -- all these things can cause extra learning work.
  44. Rework Risk is driven by the likelihood... Things like... bad assumptions about the architecture or design or bad assumptions about customer requirements. The longer we delay before making corrections, the greater the rework.
  45. This is from a project about 10 months old where we actively focused on reducing troubleshooting time. With our everyday problem-solving effort, we still spent about 10-20% of our time on friction.
  46. This second example is from a rewrite effort about 18 months old, under a lot of pressure to hit feature parity. [slow] About 40-60% of their time was spent troubleshooting problems and nothing was being done about it.
  47. This 3rd example is from a huge project about ~2.5 million lines of code where all the original developers have left. On a typically task a developer would spend 90% of their time figuring out what to do, and 10% of their time changing the code.
  48. Now I want to point out something. For all three projects, these tasks all took one to three days. Generally speaking, as the problems build, we can still break down the work into bite-sized chunks. but what we work on during that time dramatically changes. [read] even when the problems are severe. So if you thought about how much time you spend doing troubleshooting, learning and rework. What percentage of time do you think it would be? Which do you think is the biggest? What do you think the biggest causes are of troubleshooting time?
  49. I know this takes a fair amount of work. I’m not going to lie. But we can
  50. Since best practices are solution-focused, we’re always start with the hammer and looking for the nail. Test automation is our favorite hammer. Instead we need to be characterizing all the different types of nails,
  51. If we don’t make time to deal with emerging risks and emerging risks, we will never get out of this cycle.
  52. The pain isn’t something inside the code, pain occurs during the process of interacting with the code. The problems I focused on fundamentally changed.
  53. If I write a little code then validate with unit tests as I go, even if I make a lot of mistakes, troubleshooting is usually fairly quick. But If I’m in a hurry I might decide “eh, I’ll skip the tests” [] -- and then I spend all day troubleshooting mistakes. Raise your hand if you’ve done this before?
  54. When we’re under pressure to work as fast as we can, we make a lot more high-risk decisions. If I make no mistakes [], skipping the unit tests does save time -- I can probably save a couple hours. But if I make lots of mistakes [], I end up in troubleshooting hell and can easily lose the whole day. Under constant urgency, we don’t stop and think and these high-risk decisions become a habit.
  55. [slow] Our software is a reflection of our decision-making habits. Our decisions are the cause of our pain.
  56. When we get in the habit of making high-risk decisions, we get unmaintainable software as a result. If we rewrite our software [], but don’t fundamentally change the way we make decisions, [] our problems just keep coming back.
  57. [continue] We’ve been blaming the code for causing the pain, but [read].
  58. From the outside it looks like we’re trying to drive a car without a steering wheel. We line up the car’s trajectory based on our ideals, then close our eyes and floor the gas pedal.
  59. From the outside it looks like we’re trying to drive a car without a steering wheel. We line up the car’s trajectory based on our ideals, then close our eyes and floor the gas pedal.
  60. If I write a little code then validate with unit tests as I go, even if I make a lot of mistakes, troubleshooting is usually fairly quick. But If I’m in a hurry I might decide “eh, I’ll skip the tests” [] -- and then I spend all day troubleshooting mistakes. Raise your hand if you’ve done this before?
  61. See the pain
  62. But that wasn’t enough either… despite those things, he was still struggling.
  63. But that wasn’t enough either… despite those things, he was still struggling.
  64. Since best practices are solution-focused, we’re always start with the hammer and looking for the nail. Test automation is our favorite hammer. Instead we need to be characterizing all the different types of nails,
  65. N
  66. Rework Risk is driven by the likelihood... Things like... bad assumptions about the architecture or design or bad assumptions about customer requirements. The longer we delay before making corrections, the greater the rework.
  67. Rework Risk is driven by the likelihood... Things like... bad assumptions about the architecture or design or bad assumptions about customer requirements. The longer we delay before making corrections, the greater the rework.
  68. We optimize for execution time, even when the time spent on human cycles can completely dwarf the execution time. Why do you think that is?
  69. We optimize for execution time, even when the time spent on human cycles can completely dwarf the execution time. Why do you think that is?
  70. Used thinking checklists to codify a decision-making process… let me show you what I mean.
  71. Focus on one decision principle until you have it down.
  72. It’s not that best practices are bad, or wrong, they’re just backwards.
  73. Since best practices are solution-focused, we’re always start with the hammer and looking for the nail. Test automation is our favorite hammer. Instead we need to be characterizing all the different types of nails,
  74. If our feedback loop is broken, we don’t respond.
  75. Human system design is a lot like software design. If you think the roles and responsibilities like objects, that interact with various parts of the environment, that collect data, perform tasks, and communicate. This is the kind of stuff you can see. Draw a picture.
  76. Human system design is a lot like software design. If you think the roles and responsibilities like objects, that interact with various parts of the environment, that collect data, perform tasks, and communicate. This is the kind of stuff you can see. Draw a picture.
  77. Risk management in software development is an extremely complex problem. Just like it takes time to figure out the right product to build, it takes time to figure out the right improvements. We have to gather requirements.
  78. Too uncomfortable. Team doesn’t want to leave their comfort zone. Feeling exposed by the data. Feeling incompetent. (I don’t want to know) Shared focus of the team. Too much urgency to deliver features.
  79. So... [read] We’re actually in a state of Organizational Deadlock -- Everyone is waiting for a resource they don’t have. [] -- [read] Here’s how you get time to work on improvements.
  80. First, make the decision to lead. Step 1. [read] Leadership is not a title bestowed upon on you, it’s a choice to take responsibility. Nike’s got some good advice -- Just do it.
  81. [read]
  82. [read]
  83. [read]
  84. Next, you’ll need to make the case to management that change [read] The key to success is focusing on the risks not estimating how much longer things will take. If it’s just more work, it sounds like we can throw more money at it, but working harder won’t solve the problem -- we have to work smarter.
  85. We make decisions that save a few hours that lead to side effects that cost several hours. When we try to go faster, we do things that increase the likelihood of mistakes and the cost to recover when things go wrong. We’ve been in this pattern for the last 2 years, and now we’re here.
  86. Share your Idea Flow Maps. There’s nothing like showing powerpoint slides with lots of red on them that gets managers to move. To do the work, we had to setup data in the database, setup a new reporting template, then run the entire system at once to test the reports. When there’s a bug, it’s really hard to tell where the problem is and takes countless hours to track down the bugs.
  87. This is a graph showing how often our development environment has been broken over the last month. Red dots are completely down. Blue dots are some features not working. Whenever the environment is broken, it doesn't just impact one person. It usually impacts the entire team. The red dots are the times the environment has been completely down. In the one I circled. []
  88. So If I wanted to know what was causing the pain I needed to understand the things that caused these 2 factors. A lot of the problems had more to do with human factors than anything going on with the code. Stale Memory mistakes, Ambiguous Clues. But once I understood what was causing the pain, [read -- most of the problems were easy to avoid] For example...
  89. I know we have a big deadline coming up, and we've been hurrying to get everything done, but in trying to go faster, we've dramatically increased risk. Now, it's so expensive when things go wrong that trying to go faster is actually slowing us down. If we rush to get the features completed, we're likely to arrive at the finish line with a lot of things broken. On the other hand, if we focus on reducing the risk, we’ll end up in much better shape.
  90. We’ve been collecting lots of data and have identified our biggest problems. I think we can dramatically reduce risk with some focused effort. I'd like to propose a 3-month trial [] with one person working full-time on these problems. The team will make decisions on the improvement work, and I’ll share our progress and lessons learned with you each month. I know we can do this, but I need your help. Will you help me make this happen?
  91. Since best practices are solution-focused, we’re always start with the hammer and looking for the nail. Test automation is our favorite hammer. Instead we need to be characterizing all the different types of nails,
  92. Iterative clarify then implement “better”
  93. Iterative clarify then implement “better”
  94. Iterative clarify then implement “better”
  95. Creation Date: 9/13/2015