Top Banner
Presentado por: Janelle Klein How to Break the Software Rewrite Cycle
231
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: How to Break the Software Rewrite Cycle

Presentado por:Janelle Klein

How to Break the

Software Rewrite Cycle

Page 2: How to Break the Software Rewrite Cycle

Software Rewrite CycleHow to Break

the

Start%Over%

Unmaintainable%So0ware%

CTO, New IronJanelle Klein

©2015 New Iron Group

Tuesday, May 12, 15

Page 3: How to Break the Software Rewrite Cycle

We Start with the Best of Intentions

High Quality Code

Low Technical Debt

Easy to Maintain

Good Code Coverage

Tuesday, May 12, 15

Page 4: How to Break the Software Rewrite Cycle

Stages of Escalating Project Risk

Deferring(Problems(

Tuesday, May 12, 15

Page 5: How to Break the Software Rewrite Cycle

Stages of Escalating Project Risk

Product Owner: “We’ve got more important things to do.”

Deferring(Problems(

Tuesday, May 12, 15

Page 6: How to Break the Software Rewrite Cycle

Deferring(Problems(

Painful(Releases(

Stages of Escalating Project Risk

Tuesday, May 12, 15

Page 7: How to Break the Software Rewrite Cycle

Deferring(Problems(

Painful(Releases(

Manager: “Good job everyone! Keep up that great work ethic!”

Stages of Escalating Project Risk

Tuesday, May 12, 15

Page 8: How to Break the Software Rewrite Cycle

Deferring(Problems(

Painful(Releases(

Thrashing)

Stages of Escalating Project Risk

Tuesday, May 12, 15

Page 9: How to Break the Software Rewrite Cycle

Deferring(Problems(

Painful(Releases(

Thrashing)

Manager: “We need to go faster! Let’s hire more developers.”

Stages of Escalating Project Risk

Tuesday, May 12, 15

Page 10: How to Break the Software Rewrite Cycle

Deferring(Problems(

Painful(Releases(

Thrashing) Project(Meltdown(

Stages of Escalating Project Risk

Tuesday, May 12, 15

Page 11: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 12: How to Break the Software Rewrite Cycle

The further down the path,the more tempting it is...

RESET

Tuesday, May 12, 15

Page 13: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 14: How to Break the Software Rewrite Cycle

Start%Over%

Unmaintainable%So0ware%

Software Rewrite Cycle

Tuesday, May 12, 15

Page 15: How to Break the Software Rewrite Cycle

RESET

What’s wrong with our current strategy?

Tuesday, May 12, 15

Page 16: How to Break the Software Rewrite Cycle

RESET

What’s wrong with our current strategy?

Tuesday, May 12, 15

Page 17: How to Break the Software Rewrite Cycle

RESET

“A description of the goal is not a strategy.”

-- Richard P. Rumelt

What’s wrong with our current strategy?

Tuesday, May 12, 15

Page 18: How to Break the Software Rewrite Cycle

Our “Strategy” for Success

High Quality Code

Low Technical Debt

Easy to Maintain

Good Code Coverage

Tuesday, May 12, 15

Page 19: How to Break the Software Rewrite Cycle

RESET

The problem is we don’t have a strategy...

Tuesday, May 12, 15

Page 20: How to Break the Software Rewrite Cycle

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...

Tuesday, May 12, 15

Page 21: How to Break the Software Rewrite Cycle

RESET

So what are the obstacles that cause the software rewrite cycle?

Tuesday, May 12, 15

Page 22: How to Break the Software Rewrite Cycle

RESET

So what are the obstacles that cause the software rewrite cycle?

What specific approach are we going to take to overcome the obstacles?

Tuesday, May 12, 15

Page 23: How to Break the Software Rewrite Cycle

RESET

My Project...

We did all the “right” things.

Tuesday, May 12, 15

Page 24: How to Break the Software Rewrite Cycle

RESET

My Project...

We did all the “right” things.

then we brought down production 3x in a row.

Tuesday, May 12, 15

Page 25: How to Break the Software Rewrite Cycle

Technical Debt Mistakes

I thought the main obstacle wasTechnical Debt

Tuesday, May 12, 15

Page 26: How to Break the Software Rewrite Cycle

Technical Debt Mistakes

I thought the main obstacle wasTechnical Debt

Tuesday, May 12, 15

Page 27: How to Break the Software Rewrite Cycle

Mistakes?

Most of our mistakes were in the most well-written parts of the code.

Tuesday, May 12, 15

Page 28: How to Break the Software Rewrite Cycle

We made significantly more mistakesin code that we didn’t write ourselves.

LowerFamiliarity

MoreMistakes=

Tuesday, May 12, 15

Page 29: How to Break the Software Rewrite Cycle

We made significantly more mistakesin code that we didn’t write ourselves.

LowerFamiliarity

MoreMistakes=

There had to be more to the story...

Tuesday, May 12, 15

Page 30: How to Break the Software Rewrite Cycle

Complex(So*ware(

...pain...

This is what I knew...

Tuesday, May 12, 15

Page 31: How to Break the Software Rewrite Cycle

Complex(So*ware(

...pain...

This is what I knew...

What made development feel painful?

Tuesday, May 12, 15

Page 32: How to Break the Software Rewrite Cycle

Tracking Painful Interaction with the Code (Friction)

Troubleshooting

Progress

Tuesday, May 12, 15

Page 33: How to Break the Software Rewrite Cycle

UnexpectedBehavior

Tracking Painful Interaction with the Code (Friction)

Troubleshooting

Progress

Tuesday, May 12, 15

Page 34: How to Break the Software Rewrite Cycle

UnexpectedBehavior

ProblemResolved

Tracking Painful Interaction with the Code (Friction)

Troubleshooting

Progress

Tuesday, May 12, 15

Page 35: How to Break the Software Rewrite Cycle

UnexpectedBehavior

ProblemResolved

Tracking Painful Interaction with the Code (Friction)

Troubleshooting

Progress

5 hours and 18 minutes of troubleshooting...

PAINFUL

Tuesday, May 12, 15

Page 36: How to Break the Software Rewrite Cycle

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(

Tuesday, May 12, 15

Page 37: How to Break the Software Rewrite Cycle

What Causes UnexpectedBehavior (likeliness)?

What Makes TroubleshootingTime-Consuming (impact)?

What causes PAIN?

Tuesday, May 12, 15

Page 38: How to Break the Software Rewrite Cycle

What Causes UnexpectedBehavior (likeliness)?

What Makes TroubleshootingTime-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

Ambiguous Clues

Non-Deterministic Behavior

Lots of Code Changes

Noisy Output

Cryptic Output

Long Execution Time

Environment Cleanup

Test Data Generation

Using Debugger

Tuesday, May 12, 15

Page 39: How to Break the Software Rewrite Cycle

What Causes UnexpectedBehavior (likeliness)?

What Makes TroubleshootingTime-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

Ambiguous Clues

Non-Deterministic Behavior

Lots of Code Changes

Noisy Output

Cryptic Output

Long Execution Time

Environment Cleanup

Test Data Generation

Using Debugger

Most of the problems were easy to avoid.Tuesday, May 12, 15

Page 40: How to Break the Software Rewrite Cycle

An Avoidable Problem

7:01

Iterative Validation with Unit Tests7:010:00

Tuesday, May 12, 15

Page 41: How to Break the Software Rewrite Cycle

An Avoidable Problem

7:01

Iterative Validation with Unit Tests7:010:00

14:230:00

Skipping Tests and Validating at the End

Tuesday, May 12, 15

Page 42: How to Break the Software Rewrite Cycle

7:01

Iterative Validation with Unit Tests7:010:00

14:230:00

Skipping Tests and Validating at the End

Urgency Leads to High-Risk Decisions

An Avoidable Problem

Tuesday, May 12, 15

Page 43: How to Break the Software Rewrite Cycle

7:01

Iterative Validation with Unit Tests7: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.

An Avoidable Problem

Tuesday, May 12, 15

Page 44: How to Break the Software Rewrite Cycle

7:01

Iterative Validation with Unit Tests7: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

Tuesday, May 12, 15

Page 45: How to Break the Software Rewrite Cycle

Product(Requirements( So1ware(Task(

Possible(Decision(Paths(

So1ware(

Software is a Reflection of our Decisions

Tuesday, May 12, 15

Page 46: How to Break the Software Rewrite Cycle

Product(Requirements( So1ware(Task(

High%Risk%Decision%Habits%

So1ware((and(all(our(problems)(

(

Software is a Reflection of our Decisions

Tuesday, May 12, 15

Page 47: How to Break the Software Rewrite Cycle

Product(Requirements( So1ware(Task(

High%Risk%Decision%Habits%

So1ware((and(all(our(problems)(

(

RESET

Software is a Reflection of our Decisions

Tuesday, May 12, 15

Page 48: How to Break the Software Rewrite Cycle

Product(Requirements( So1ware(Task(

High%Risk%Decision%Habits%

So1ware((and(all(our(problems)(

(

Software is a Reflection of our Decisions

Tuesday, May 12, 15

Page 49: How to Break the Software Rewrite Cycle

Product(Requirements( So1ware(Task(

High%Risk%Decision%Habits%

So1ware((and(all(our(problems)(

(

Software is a Reflection of our Decisions

Tuesday, May 12, 15

Page 50: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 51: How to Break the Software Rewrite Cycle

Tuesday, May 12, 15

Page 52: How to Break the Software Rewrite Cycle

How much work does it take to mop the floor?

Tuesday, May 12, 15

Page 53: How to Break the Software Rewrite Cycle

How much work does it take to mop the floor?

Tuesday, May 12, 15

Page 54: How to Break the Software Rewrite Cycle

How much work does it take to mop the floor?

Tuesday, May 12, 15

Page 55: How to Break the Software Rewrite Cycle

How much work does it take to mop the floor?

Tuesday, May 12, 15

Page 56: How to Break the Software Rewrite Cycle

How much work does it take to mop the floor?

Tuesday, May 12, 15

Page 57: How to Break the Software Rewrite Cycle

How much work does it take to complete a software task?

Tuesday, May 12, 15

Page 58: How to Break the Software Rewrite Cycle

How much work does it take to complete a software task?

Likeliness of Event

Potential Impactx=

Risk

Tuesday, May 12, 15

Page 59: How to Break the Software Rewrite Cycle

How much work does it take to complete a software task?

= Side-Effects fromIgnoring the Risk

Likeliness of Event

Potential Impactx=

Risk

Tuesday, May 12, 15

Page 60: How to Break the Software Rewrite Cycle

How much work does it take to complete a software task?

= Side-Effects fromIgnoring the Risk

Trade-off Decisions

Writing Unit Tests Troubleshooting MistakesDirect Cost Indirect Costs

or

Likeliness of Event

Potential Impactx=

Risk

Tuesday, May 12, 15

Page 61: How to Break the Software Rewrite Cycle

How much work does it take to complete a software task?

= Side-Effects fromIgnoring the Risk

Trade-off Decisions

Writing Unit Tests Troubleshooting MistakesDirect Cost Indirect Costs

or

We make high-risk decisions because the indirect costs are hard to quantify.

Likeliness of Event

Potential Impactx=

Risk

Tuesday, May 12, 15

Page 62: How to Break the Software Rewrite Cycle

Troubleshooting Learning Rework

Side-Effects in Software

Tuesday, May 12, 15

Page 63: How to Break the Software Rewrite Cycle

Troubleshooting Risk

Likelihood)of))Unexpected)Behavior)

Cost)to)Troubleshoot)and)Repair)

High)Frequency)Low)Impact)

Low)Frequency)Low)Impact)

Low)Frequency)High)Impact)

PAIN)

Tuesday, May 12, 15

Page 64: How to Break the Software Rewrite Cycle

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)

Tuesday, May 12, 15

Page 65: How to Break the Software Rewrite Cycle

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)

Tuesday, May 12, 15

Page 66: How to Break the Software Rewrite Cycle

Deferring(Problems(

Painful(Releases(

Thrashing) Project(Meltdown(

Stages of Escalating Project Risk

Tuesday, May 12, 15

Page 67: How to Break the Software Rewrite Cycle

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 ofEscalating

Risk

IgnoreRisk

Tuesday, May 12, 15

Page 68: How to Break the Software Rewrite Cycle

TangosMultiply

Escala&ng)Risk)

Time)Pressure)

Defer)Problems)

Increase)Risk)&)Impact)

of)Extra)Work)

More)Frequent)Bugs)and)Higher)

Task)Effort)

Cycle ofEscalating

Risk

IgnoreRisk

Tuesday, May 12, 15

Page 69: How to Break the Software Rewrite Cycle

More MoppingWork

Escala&ng)Risk)

Time)Pressure)

Defer)Problems)

Increase)Risk)&)Impact)

of)Extra)Work)

More)Frequent)Bugs)and)Higher)

Task)Effort)

Cycle ofEscalating

Risk

IgnoreRisk

Tuesday, May 12, 15

Page 70: How to Break the Software Rewrite Cycle

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 ofEscalating

Risk

IgnoreRisk

I can’t go any faster!

Tuesday, May 12, 15

Page 71: How to Break the Software Rewrite Cycle

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 ofEscalating

Risk

Productivity plummets because of the overwhelming side-effects

IgnoreRisk

I can’t go any faster!

Tuesday, May 12, 15

Page 72: How to Break the Software Rewrite Cycle

Case Study 1: Healthy project about 10 months old

Troubleshooting

Progress

Learning

Rework10-20% friction

Effects of Escalating Risk

Tuesday, May 12, 15

Page 73: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 74: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 75: How to Break the Software Rewrite Cycle

Case Study 1

Case Study 2

Case Study 3

1 day

2 days

1 day

3 days

1 day

3 days

Effects of Escalating Risk

Tuesday, May 12, 15

Page 76: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 77: How to Break the Software Rewrite Cycle

What specific approach are we going to take to overcome the obstacles?

Tuesday, May 12, 15

Page 78: How to Break the Software Rewrite Cycle

Idea Flow Learning Framework

“Idea Flow” is a metaphor for the human interaction in software development

Idea Flow Map

Tuesday, May 12, 15

Page 79: How to Break the Software Rewrite Cycle

Idea Flow Learning FrameworkStrategy for improving software predictability

by optimizing developer experience.

Tuesday, May 12, 15

Page 80: How to Break the Software Rewrite Cycle

Idea Flow Learning Framework

Troubleshooting Learning Rework

Strategy for improving software predictability by optimizing developer experience.

Tuesday, May 12, 15

Page 81: How to Break the Software Rewrite Cycle

The First Obstacle“We aren’t given time to work on improvements!”

(nobody understands the problems)

Tuesday, May 12, 15

Page 82: How to Break the Software Rewrite Cycle

Developers are stuck because they don’t have control.

Tuesday, May 12, 15

Page 83: How to Break the Software Rewrite Cycle

Developers are stuck because they don’t have control.

Management is stuck because they don’t have visibility.

Tuesday, May 12, 15

Page 84: How to Break the Software Rewrite Cycle

Developers are stuck because they don’t have control.

Management is stuck because they don’t have visibility.

Organizational Deadlock

Tuesday, May 12, 15

Page 85: How to Break the Software Rewrite Cycle

Developers are stuck because they don’t have control.

If we want things to change, we have to step outside the bounds of our role.

Management is stuck because they don’t have visibility.

Organizational Deadlock

Tuesday, May 12, 15

Page 86: How to Break the Software Rewrite Cycle

Make the Decision to Lead

Tuesday, May 12, 15

Page 87: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 88: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 89: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 90: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 91: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 92: How to Break the Software Rewrite Cycle

Next, Make the CaseChange is a safer decision than staying the course.

Tuesday, May 12, 15

Page 93: How to Break the Software Rewrite Cycle

Next, Make the CaseChange is a safer decision than staying the course.

Focus on the Risks

Tuesday, May 12, 15

Page 94: How to Break the Software Rewrite Cycle

Next, Make the CaseChange is a safer decision than staying the course.

The project is more likely to fail if you stay on the current path.

Focus on the Risks

Tuesday, May 12, 15

Page 95: How to Break the Software Rewrite Cycle

Next, Make the CaseChange is a safer decision than staying the course.

The project is more likely to fail if you stay on the current path.

Focus on the Risks

The indirect costs are more expensivethan mitigating the risk.

is safer than

Tuesday, May 12, 15

Page 96: How to Break the Software Rewrite Cycle

Take Responsibility

Tuesday, May 12, 15

Page 97: How to Break the Software Rewrite Cycle

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

Tuesday, May 12, 15

Page 98: How to Break the Software Rewrite Cycle

The next challenge is getting results.

Tuesday, May 12, 15

Page 99: How to Break the Software Rewrite Cycle

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.

Tuesday, May 12, 15

Page 100: How to Break the Software Rewrite Cycle

1. Make the Problems Visible

2. Understand the Problems

3. Improve Decision Habits

Idea Flow Learning FrameworkStrategy for improving software predictability

by optimizing developer experience.

Tuesday, May 12, 15

Page 101: How to Break the Software Rewrite Cycle

Reflection FrameworkVisibility helps us Identify the Problems

2.#Record#what#Happens#

So#ware(Task(Strategy((Talk(

Reflec3on(Talk(

Iden3fy(Problems(

1.#Clarify#the#Strategy#

So#ware(Task(

3.#Ask#Ques?ons#

Tuesday, May 12, 15

Page 102: How to Break the Software Rewrite Cycle

1. Clarify the StrategyDraw a “solution strategy” diagram

Tuesday, May 12, 15

Page 103: How to Break the Software Rewrite Cycle

1. Clarify the StrategyDraw a “solution strategy” diagram

Tuesday, May 12, 15

Page 104: How to Break the Software Rewrite Cycle

1. Clarify the StrategyDraw a “solution strategy” diagram

1. Talk through the strategy with a peer

2. Reflect on the strategy when we finish

It’s Easier to...

Tuesday, May 12, 15

Page 105: How to Break the Software Rewrite Cycle

2. Record What HappensCreate an Idea Flow Map

Tuesday, May 12, 15

Page 106: How to Break the Software Rewrite Cycle

Troubleshooting

Progress

Learning

Rework

2. Record What HappensCreate an Idea Flow Map

Tuesday, May 12, 15

Page 107: How to Break the Software Rewrite Cycle

Troubleshooting

Progress

Learning

Rework

2. Record What HappensCreate an Idea Flow Map

Tuesday, May 12, 15

Page 108: How to Break the Software Rewrite Cycle

Troubleshooting

Progress

Learning

Rework

2. Record What HappensCreate an Idea Flow Map

Tuesday, May 12, 15

Page 109: How to Break the Software Rewrite Cycle

Troubleshooting

Progress

Learning

Rework

2. Record What HappensCreate an Idea Flow Map

Tuesday, May 12, 15

Page 110: How to Break the Software Rewrite Cycle

3. Ask QuestionsLearn to Read the Visual Indicators in Idea Flow Maps

Tuesday, May 12, 15

Page 111: How to Break the Software Rewrite Cycle

3. Ask QuestionsLearn 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...

Tuesday, May 12, 15

Page 112: How to Break the Software Rewrite Cycle

...Idea Flow Maps help developers diagnose software problems.

Problem-SolvingMachine

Learn to Read the Visual Indicators in Idea Flow Maps

3. Ask Questions

Tuesday, May 12, 15

Page 113: How to Break the Software Rewrite Cycle

= Solution Strategy

The “Heart” of Software Development(the problem-solving machine)

Tuesday, May 12, 15

Page 114: How to Break the Software Rewrite Cycle

= Solution Strategy

The “Heart” of Software Development(the problem-solving machine)

Tuesday, May 12, 15

Page 115: How to Break the Software Rewrite Cycle

= Solution Strategy

The “Heart” of Software Development(the problem-solving machine)

Tuesday, May 12, 15

Page 116: How to Break the Software Rewrite Cycle

= Solution Strategy

The “Heart” of Software Development(the problem-solving machine)

Tuesday, May 12, 15

Page 117: How to Break the Software Rewrite Cycle

= Solution Strategy

The “Heart” of Software Development(the problem-solving machine)

Tuesday, May 12, 15

Page 118: How to Break the Software Rewrite Cycle

Depending on where the disruptions are in the process,we see a different effect in Idea Flow.

Tuesday, May 12, 15

Page 119: How to Break the Software Rewrite Cycle

Problems with Evaluating Alternatives

Tuesday, May 12, 15

Page 120: How to Break the Software Rewrite Cycle

"How did you evaluate the possible options and choose a strategy?"

Problems with Evaluating Alternatives

Tuesday, May 12, 15

Page 121: How to Break the Software Rewrite Cycle

"How did you evaluate the possible options and choose a strategy?"

"What was wrong with the different strategies you tried?"

Problems with Evaluating Alternatives

Tuesday, May 12, 15

Page 122: How to Break the Software Rewrite Cycle

"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

Tuesday, May 12, 15

Page 123: How to Break the Software Rewrite Cycle

Problems with Modeling

Tuesday, May 12, 15

Page 124: How to Break the Software Rewrite Cycle

"Were you working with something that you were unfamiliar with?"

Problems with Modeling

Tuesday, May 12, 15

Page 125: How to Break the Software Rewrite Cycle

"Were you working with something that you were unfamiliar with?"

"Did you run into code that was noisy, ambiguous, or misleading?"

Problems with Modeling

Tuesday, May 12, 15

Page 126: How to Break the Software Rewrite Cycle

"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

Tuesday, May 12, 15

Page 127: How to Break the Software Rewrite Cycle

Problems with Refining

Tuesday, May 12, 15

Page 128: How to Break the Software Rewrite Cycle

"Did your task involve changes to complex code or business rules?"

Problems with Refining

Tuesday, May 12, 15

Page 129: How to Break the Software Rewrite Cycle

"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?"

Problems with Refining

Tuesday, May 12, 15

Page 130: How to Break the Software Rewrite Cycle

"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

Tuesday, May 12, 15

Page 131: How to Break the Software Rewrite Cycle

Problems with the Validation Cycle

Tuesday, May 12, 15

Page 132: How to Break the Software Rewrite Cycle

"What experiments did you run to troubleshoot the problem?"

Problems with the Validation Cycle

Tuesday, May 12, 15

Page 133: How to Break the Software Rewrite Cycle

"What experiments did you run to troubleshoot the problem?"

"How many times did you run the experiment?"

Problems with the Validation Cycle

Tuesday, May 12, 15

Page 134: How to Break the Software Rewrite Cycle

"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

Tuesday, May 12, 15

Page 135: How to Break the Software Rewrite Cycle

Problems with Execution

Tuesday, May 12, 15

Page 136: How to Break the Software Rewrite Cycle

"Was there something in the code that made these changes especially mistake-prone?"

Problems with Execution

Tuesday, May 12, 15

Page 137: How to Break the Software Rewrite 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?"

Problems with Execution

Tuesday, May 12, 15

Page 138: How to Break the Software Rewrite 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

Tuesday, May 12, 15

Page 139: How to Break the Software Rewrite Cycle

1. Make the Problems Visible

The goal of visibility is to ask the right questions so we can identify problems with our strategy.

Tuesday, May 12, 15

Page 140: How to Break the Software Rewrite Cycle

Reflection Framework

2.#Record#what#Happens#

So#ware(Task(Strategy((Talk(

Reflec3on(Talk(

Iden3fy(Problems(

1.#Clarify#the#Strategy#

So#ware(Task(

3.#Ask#Ques?ons#

Visibility helps us Identify the Problems

Tuesday, May 12, 15

Page 141: How to Break the Software Rewrite Cycle

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.

Tuesday, May 12, 15

Page 142: How to Break the Software Rewrite Cycle

Brainstorming a List

Tuesday, May 12, 15

Page 143: How to Break the Software Rewrite Cycle

Brainstorming a List

“Technical Debt” Backlog

Tuesday, May 12, 15

Page 144: How to Break the Software Rewrite Cycle

Brainstorming a List

“Technical Debt” Backlog

Tuesday, May 12, 15

Page 145: How to Break the Software Rewrite Cycle

Brainstorming a List

“Technical Debt” Backlog

Our improvements don’t make much difference

Tuesday, May 12, 15

Page 146: How to Break the Software Rewrite Cycle

Brainstorming a List

“Technical Debt” Backlog

Our improvements don’t make much difference

Tuesday, May 12, 15

Page 147: How to Break the Software Rewrite Cycle

Modeling Framework

Failed'Experiments'

1.   Find'the'biggest''problem'

3.'Run'experiments'to'test'understanding'

4.'Clarify'Decision'Principles'

Successful'Experiments'

Repeat'Weekly'

Focus'Mee:ng'

2.'Model'the'causes'of'the'problem'

Understand what’s Causing your Biggest Problems

Tuesday, May 12, 15

Page 148: How to Break the Software Rewrite Cycle

Modeling Framework

Failed'Experiments'

1.   Find'the'biggest''problem'

3.'Run'experiments'to'test'understanding'

4.'Clarify'Decision'Principles'

Successful'Experiments'

Repeat'Weekly'

Focus'Mee:ng'

2.'Model'the'causes'of'the'problem'

Understand what’s Causing your Biggest Problems

Tuesday, May 12, 15

Page 149: How to Break the Software Rewrite Cycle

1. Find the Biggest ProblemCategorize the problem by type

Focus on the problem with the highest friction

Tuesday, May 12, 15

Page 150: How to Break the Software Rewrite Cycle

Tags: #problemtag

1. Find the Biggest ProblemCategorize the problem by type

Tuesday, May 12, 15

Page 151: How to Break the Software Rewrite Cycle

“But what problem categories do we use?”

Tuesday, May 12, 15

Page 152: How to Break the Software Rewrite Cycle

The Ten Pains of Software Development

Tuesday, May 12, 15

Page 153: How to Break the Software Rewrite Cycle

The Ten Pains of Software Development

Design-Fit Pain - When the new feature doesn’t fit well into the existing design.

Tuesday, May 12, 15

Page 154: How to Break the Software Rewrite Cycle

The Ten Pains of Software Development

Requirements Pain - Bad assumptions about what functionality to build

Tuesday, May 12, 15

Page 155: How to Break the Software Rewrite Cycle

The Ten Pains of Software Development

Collaboration Pain - Challenges collaborating with other developers on the team.

Tuesday, May 12, 15

Page 156: How to Break the Software Rewrite Cycle

The Ten Pains of Software Development

Modeling Pain - When it’s difficult to build a conceptual model of the existing software.

Tuesday, May 12, 15

Page 157: How to Break the Software Rewrite Cycle

The Ten Pains of Software Development

Cognitive Pain - Challenges with complexity and intense thinking

Tuesday, May 12, 15

Page 158: How to Break the Software Rewrite Cycle

The Ten Pains of Software Development

Alarm Pain - Challenges with false alarms and test maintenance

Tuesday, May 12, 15

Page 159: How to Break the Software Rewrite Cycle

The Ten Pains of Software Development

Experiment Pain - Challenges with getting feedback by running experiments

Tuesday, May 12, 15

Page 160: How to Break the Software Rewrite Cycle

The Ten Pains of Software Development

Execution Pain - When changing the code is highly mistake-prone

Tuesday, May 12, 15

Page 161: How to Break the Software Rewrite Cycle

The Ten Pains of Software Development

Have an amplifying effect on other problems

Tuesday, May 12, 15

Page 162: How to Break the Software Rewrite Cycle

Add up Friction by Pain Type

100 hours

50 hours

Troubleshooting

Learning

Rework

Tuesday, May 12, 15

Page 163: How to Break the Software Rewrite Cycle

Add up Friction by Pain Type

100 hours

50 hours

Troubleshooting

Learning

Rework

Focused Improvements Visible Feedback

Tuesday, May 12, 15

Page 164: How to Break the Software Rewrite Cycle

High Resistance to Change

Software(start)

Software(end)

friction

Tuesday, May 12, 15

Page 165: How to Break the Software Rewrite Cycle

High Resistance to Change

Software(start)

Software(end)

friction

Friction is always relative to the movement of the system.

Tuesday, May 12, 15

Page 166: How to Break the Software Rewrite Cycle

High Resistance to Change

Software(start)

Software(end)

friction

Friction is always relative to the movement of the system.

If there is no movement, there is no friction.

Tuesday, May 12, 15

Page 167: How to Break the Software Rewrite Cycle

High Resistance to Change

Software(start)

Software(end)

friction

Friction is always relative to the movement of the system.

If there is no movement, there is no friction.

Different areas of code will move in different ways.

Tuesday, May 12, 15

Page 168: How to Break the Software Rewrite Cycle

Last 3 Months of Friction by Functional Area

What’s going on with theReporting Engine?

Troubleshooting

Progress

Learning

Rework

Tuesday, May 12, 15

Page 169: How to Break the Software Rewrite Cycle

Last 3 Months of Friction by Functional Area

What’s going on with theReporting Engine?

Troubleshooting

Progress

Learning

Rework

Tuesday, May 12, 15

Page 170: How to Break the Software Rewrite Cycle

% Friction versus Upcoming Demand

The Reporting Engine isn’t moving.

Troubleshooting

Progress

Learning

Rework

Tuesday, May 12, 15

Page 171: How to Break the Software Rewrite Cycle

% Friction Grouped by Functional Area Familiar versus Unfamiliar

Lack of Familiarity(amplifier)

Especially Painful toUnfamiliar Developers

Tuesday, May 12, 15

Page 172: How to Break the Software Rewrite Cycle

WARNING:

This does not mean you improved!!!

Before

After

Tuesday, May 12, 15

Page 173: How to Break the Software Rewrite Cycle

WARNING:

This does not mean you improved!!!

Before

After

Tuesday, May 12, 15

Page 174: How to Break the Software Rewrite Cycle

Instead, Focus on the Biggest Problem-Solving Pain

100 hours

50 hours

Tuesday, May 12, 15

Page 175: How to Break the Software Rewrite Cycle

Instead, Focus on the Biggest Problem-Solving Pain

100 hours

50 hours

We can compare examples of the same pain type between tasks

Tuesday, May 12, 15

Page 176: How to Break the Software Rewrite Cycle

Modeling Framework

Failed'Experiments'

1.   Find'the'biggest''problem'

3.'Run'experiments'to'test'understanding'

4.'Clarify'Decision'Principles'

Successful'Experiments'

Repeat'Weekly'

Focus'Mee:ng'

2.'Model'the'causes'of'the'problem'

Understand what’s Causing your Biggest Problems

Tuesday, May 12, 15

Page 177: How to Break the Software Rewrite Cycle

Modeling Framework

Failed'Experiments'

1.   Find'the'biggest''problem'

3.'Run'experiments'to'test'understanding'

4.'Clarify'Decision'Principles'

Successful'Experiments'

Repeat'Weekly'

Focus'Mee:ng'

2.'Model'the'causes'of'the'problem'

Understand what’s Causing your Biggest Problems

Tuesday, May 12, 15

Page 178: How to Break the Software Rewrite Cycle

2. Model the Causes of the Problem

What Causes Experiment Pain?

100 hours

50 hours

Tuesday, May 12, 15

Page 179: How to Break the Software Rewrite Cycle

Tags: #ExperimentPain

What Causes Experiment Pain?

Tuesday, May 12, 15

Page 180: How to Break the Software Rewrite Cycle

Why did it take an hourto find a typo?

Tags: #ExperimentPain

What Causes Experiment Pain?

Tuesday, May 12, 15

Page 181: How to Break the Software Rewrite Cycle

Why did it take an hourto find a typo?

Slow Feedback Loop - Ran experiments by firing up application and sending email

Tags: #ExperimentPain

What Causes Experiment Pain?

Tuesday, May 12, 15

Page 182: How to Break the Software Rewrite Cycle

Why did it take an hourto 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?

Tuesday, May 12, 15

Page 183: How to Break the Software Rewrite Cycle

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?

Tuesday, May 12, 15

Page 184: How to Break the Software Rewrite Cycle

Modeling Framework

Failed'Experiments'

1.   Find'the'biggest''problem'

3.'Run'experiments'to'test'understanding'

4.'Clarify'Decision'Principles'

Successful'Experiments'

Repeat'Weekly'

Focus'Mee:ng'

2.'Model'the'causes'of'the'problem'

Understand what’s Causing your Biggest Problems

Tuesday, May 12, 15

Page 185: How to Break the Software Rewrite Cycle

Modeling Framework

Failed'Experiments'

1.   Find'the'biggest''problem'

3.'Run'experiments'to'test'understanding'

4.'Clarify'Decision'Principles'

Successful'Experiments'

Repeat'Weekly'

Focus'Mee:ng'

2.'Model'the'causes'of'the'problem'

Understand what’s Causing your Biggest Problems

Tuesday, May 12, 15

Page 186: How to Break the Software Rewrite Cycle

3. Run Experiments to Test Understanding

Tuesday, May 12, 15

Page 187: How to Break the Software Rewrite Cycle

3. Run Experiments to Test Understanding

Decision(

Predic,on(Experiment(

1.

2.3.

Tuesday, May 12, 15

Page 188: How to Break the Software Rewrite Cycle

3. Run Experiments to Test Understanding

Decision(

Predic,on(Experiment(

1.

2.3.

1. Make a decision

Tuesday, May 12, 15

Page 189: How to Break the Software Rewrite Cycle

3. Run Experiments to Test Understanding

Decision(

Predic,on(Experiment(

1.

2.3.

1. Make a decision

2. Predict the effects in Idea Flow

Tuesday, May 12, 15

Page 190: How to Break the Software Rewrite Cycle

3. Run Experiments to Test Understanding

Decision(

Predic,on(Experiment(

1.

2.3.

1. Make a decision

2. Predict the effects in Idea Flow

3. See if you get the result you were expecting... ask why.

Tuesday, May 12, 15

Page 191: How to Break the Software Rewrite Cycle

“I’m going to run final testing by firing up the app. I’ve written good unit tests along the way,

so I predict that troubleshooting will be quick.”

Example Experiments

Tuesday, May 12, 15

Page 192: How to Break the Software Rewrite Cycle

“I’m going to run final testing by firing up the app. I’ve written good unit tests along the way,

so I predict that troubleshooting will be quick.”

Example Experiments

Troubleshooting took 4 hours... why?

Tuesday, May 12, 15

Page 193: How to Break the Software Rewrite Cycle

“I’m going to run final testing by firing up the app. I’ve written good unit tests along the way,

so I predict that troubleshooting will be quick.”

“I’m going to skip writing unit tests and run the report manually.Since it’s a slow feedback loop,

I predict that troubleshooting will take a long time.”

Example Experiments

Troubleshooting took 4 hours... why?

Tuesday, May 12, 15

Page 194: How to Break the Software Rewrite Cycle

“I’m going to run final testing by firing up the app. I’ve written good unit tests along the way,

so I predict that troubleshooting will be quick.”

“I’m going to skip writing unit tests and run the report manually.Since it’s a slow feedback loop,

I predict that troubleshooting will take a long time.”

Example Experiments

Troubleshooting took 4 hours... why?

All troubleshooting took 2 minutes or less... why?

Tuesday, May 12, 15

Page 195: How to Break the Software Rewrite Cycle

“I’m going to run final testing by firing up the app. I’ve written good unit tests along the way,

so I predict that troubleshooting will be quick.”

“I’m going to skip writing unit tests and run the report manually.Since it’s a slow feedback loop,

I predict that troubleshooting will take a long time.”

Example Experiments

Experiments help us correct bad assumptions about what is a “better” decision

Troubleshooting took 4 hours... why?

All troubleshooting took 2 minutes or less... why?

Tuesday, May 12, 15

Page 196: How to Break the Software Rewrite Cycle

Modeling Framework

Failed'Experiments'

1.   Find'the'biggest''problem'

3.'Run'experiments'to'test'understanding'

4.'Clarify'Decision'Principles'

Successful'Experiments'

Repeat'Weekly'

Focus'Mee:ng'

2.'Model'the'causes'of'the'problem'

Understand what’s Causing your Biggest Problems

Tuesday, May 12, 15

Page 197: How to Break the Software Rewrite Cycle

Modeling Framework

Failed'Experiments'

1.   Find'the'biggest''problem'

3.'Run'experiments'to'test'understanding'

4.'Clarify'Decision'Principles'

Successful'Experiments'

Repeat'Weekly'

Focus'Mee:ng'

2.'Model'the'causes'of'the'problem'

Understand what’s Causing your Biggest Problems

Tuesday, May 12, 15

Page 198: How to Break the Software Rewrite Cycle

What does “better” really mean?

Tuesday, May 12, 15

Page 199: How to Break the Software Rewrite Cycle

What does “better” really mean?

“Better” following best practices

Tuesday, May 12, 15

Page 200: How to Break the Software Rewrite Cycle

What does “better” really mean?

“Better” following best practices

“Better” solving the problems

Tuesday, May 12, 15

Page 201: How to Break the Software Rewrite Cycle

What does “better” really mean?

“Better” following best practices

“Better” solving the problems

Best Practices(solution-focused)

Decision Principles(problem-focused)

Tuesday, May 12, 15

Page 202: How to Break the Software Rewrite Cycle

What’s a “Decision Principle”?

Answers two questions:

Tuesday, May 12, 15

Page 203: How to Break the Software Rewrite Cycle

What’s a “Decision Principle”?

Answers two questions:

How do we evaluate our situation?

Tuesday, May 12, 15

Page 204: How to Break the Software Rewrite Cycle

What’s a “Decision Principle”?

Answers two questions:

How do we evaluate our situation?

What are we trying to optimize for?

Tuesday, May 12, 15

Page 205: How to Break the Software Rewrite Cycle

4. Clarify Decision Principles

Tuesday, May 12, 15

Page 206: How to Break the Software Rewrite Cycle

4. Clarify 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.”

Tuesday, May 12, 15

Page 207: How to Break the Software Rewrite Cycle

4. Clarify 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.”

Haystack Effect

The number of unvalidated changeshas a huge impact on the

difficulty of tracking down a problem.

Tuesday, May 12, 15

Page 208: How to Break the Software Rewrite Cycle

4. Clarify 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 changeshas a huge impact on the

difficulty of tracking down a problem.

Tuesday, May 12, 15

Page 209: How to Break the Software Rewrite Cycle

4. Clarify Decision Principles

“You know when you run an experiment and it’s really hard to figure out what’s going on? We want to avoid that.”

Tuesday, May 12, 15

Page 210: How to Break the Software Rewrite Cycle

4. Clarify Decision Principles

“You know when you run an experiment and it’s really hard to figure out what’s going on? We want to avoid that.”

Setup the Inputs

Interpret the Outputs

Code Sandwich

Tuesday, May 12, 15

Page 211: How to Break the Software Rewrite Cycle

4. Clarify Decision Principles

“You know when you run an experiment and it’s really hard to figure out what’s going on? We want to avoid that.”

Setup the Inputs

Interpret the Outputs

Code Sandwich

By reducing thethickness of my code sandwichI can reduce diagnostic difficulty.

Tuesday, May 12, 15

Page 212: How to Break the Software Rewrite Cycle

4. Clarify Decision Principles

“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 thethickness of my code sandwichI can reduce diagnostic difficulty.

Tuesday, May 12, 15

Page 213: How to Break the Software Rewrite Cycle

Modeling FrameworkUnderstand what’s Causing your Biggest Problems

Failed'Experiments'

1.   Find'the'biggest''problem'

3.'Run'experiments'to'test'understanding'

4.'Clarify'Decision'Principles'

Successful'Experiments'

Repeat'Weekly'

Focus'Mee:ng'

2.'Model'the'causes'of'the'problem'

Tuesday, May 12, 15

Page 214: How to Break the Software Rewrite Cycle

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)

Tuesday, May 12, 15

Page 215: How to Break the Software Rewrite Cycle

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.

Tuesday, May 12, 15

Page 216: How to Break the Software Rewrite Cycle

Decision(Habits(

Pa#erns(Across(Developer(Experiences(

Tasks(Tasks(Tasks(

Observe(&(Adjust(

High-Risk Decisions are the Root Cause of our Problems

Improve Decision Habits

Tuesday, May 12, 15

Page 217: How to Break the Software Rewrite Cycle

Decision(Habits(

Pa#erns(Across(Developer(Experiences(

Tasks(Tasks(Tasks(

Observe(&(Adjust(

High-Risk Decisions are the Root Cause of our Problems

Improve Decision Habits

“But how do we change decision habits?”

Tuesday, May 12, 15

Page 218: How to Break the Software Rewrite Cycle

Tuesday, May 12, 15

Page 219: How to Break the Software Rewrite Cycle

Stop and ThinkPractice asking the right question at the right time

Tuesday, May 12, 15

Page 220: How to Break the Software Rewrite Cycle

Stop and ThinkPractice asking the right question at the right time

Situation

Developer struggling with an experiment(poke the developer)

Tuesday, May 12, 15

Page 221: How to Break the Software Rewrite Cycle

Stop and ThinkPractice asking the right question at the right time

Situation

Developer struggling with an experiment(poke the developer)

Ask Questions

Tuesday, May 12, 15

Page 222: How to Break the Software Rewrite Cycle

Stop and ThinkPractice asking the right question at the right time

“What aspects of the behavior are you trying to observe?”

Situation

Developer struggling with an experiment(poke the developer)

Ask Questions

Tuesday, May 12, 15

Page 223: How to Break the Software Rewrite Cycle

Stop and ThinkPractice asking the right question at the right time

“What aspects of the behavior are you trying to observe?”

“What aspects of the behavior are you trying to manipulate?”

Situation

Developer struggling with an experiment(poke the developer)

Ask Questions

Tuesday, May 12, 15

Page 224: How to Break the Software Rewrite Cycle

Stop and ThinkPractice asking the right question at the right time

“How can you reduce the thickness of your code sandwich?”

“What aspects of the behavior are you trying to observe?”

“What aspects of the behavior are you trying to manipulate?”

Situation

Developer struggling with an experiment(poke the developer)

Ask Questions

Tuesday, May 12, 15

Page 225: How to Break the Software Rewrite Cycle

Stop and Think 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(

+(!(!(!(

Training Wheels for Improving Decision-Habits

Tuesday, May 12, 15

Page 226: How to Break the Software Rewrite Cycle

Stop and Think 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?

Training Wheels for Improving Decision-Habits

Tuesday, May 12, 15

Page 227: How to Break the Software Rewrite Cycle

3. Improve Decision Habits

The goal of improving decision habits is tomake the improvements permanent.

Tuesday, May 12, 15

Page 228: How to Break the Software Rewrite Cycle

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.

Tuesday, May 12, 15

Page 229: How to Break the Software Rewrite Cycle

Work our Way to Software Happiness!

Start%Over%

Unmaintainable%So0ware%

Software Happiness!

Tuesday, May 12, 15

Page 230: How to Break the Software Rewrite Cycle

Free e-book! (summer)

Thank you!If you liked the talk, please tweet about #ideaflow!

Interested? Send me an email!

Tuesday, May 12, 15

Page 231: How to Break the Software Rewrite Cycle

Free e-book! (summer)

Thank you!

[email protected] @janellekz

If you liked the talk, please tweet about #ideaflow!

Interested? Send me an email!

Tuesday, May 12, 15