Speeding up and slowing down

Heuristics for when to plan less and more

Speeding up and Slowing Down
Speeding up and Slowing Down
Speeding up and Slowing Down
Speeding up and Slowing Down
Speeding up and Slowing Down
Speeding up and Slowing Down
Speeding up and Slowing Down

We drive for the conditions

Speeding up and Slowing Down

Decision making in software is similar

Drive for the conditions

Speeding up and Slowing Down

Speed by default

Slow for hazards

Speeding up and Slowing Down

When to slow down?

Speeding up and Slowing Down

Exercise

Choose a platter and eat what's on it




Speeding up and Slowing Down

Algorithm 1: Look Inside


Speeding up and Slowing Down

Algorithm 1: Look Inside


Speeding up and Slowing Down

Algorithm 1: Look Inside


Speeding up and Slowing Down

Algorithm 1: Look Inside


Speeding up and Slowing Down

Challenge

What if it takes some effort to investigate each option?

Speeding up and Slowing Down

Algorithm 2

Explore Everything

  • Easy to go through a bead door
  • Explore until we find good food
Speeding up and Slowing Down

Challenge

What if exploring one prevents exploring another?

Speeding up and Slowing Down
Speeding up and Slowing Down

Algorithm 3

Research

  • Smell when the doors open
  • Ask a passerby to check for you
  • Send one person of your group through
Speeding up and Slowing Down


  • Algorithm 1: Look inside each
  • Algorithm 2: Explore everything
  • Algorithm 3: Research
Speeding up and Slowing Down

Explore everything

Works well when it's cheap to experiment

Speeding up and Slowing Down

Research

Works well when experimenting is expensive

Speeding up and Slowing Down

The Planning Tradeoff

The higher the cost to experiment, the bigger the budget for research and planning

Speeding up and Slowing Down

Bead Door Examples

  • Choosing a library to transform data
  • Class structure and naming
  • UI layout
Speeding up and Slowing Down

One-way Door Examples

  • Releasing a public API to customers
  • Adopting a library's data format throughout our code
  • Moving customer data into a new database
  • Choosing a translation strategy and using it throughout the UI
Speeding up and Slowing Down

The Planning Tradeoff

The higher the cost to experiment, the bigger the budget for research and planning

Speeding up and Slowing Down

Hack: make 1-way-doors 2-way

  • Pre-release the API to one customer with an agreement that it might change
  • Reduce the scope of the experiment
  • Make it easy to reverse
Speeding up and Slowing Down

Examples: de-risking decisions

  • Wrap the library to convert the library data format to one we choose; couple to our format
    • (This is an anti-corruption layer)
  • Prove the database with sample data (e.g. dual write)
  • Prove the translation strategy with a small part of the UI
    • (i.e. Replace the decision with an experiment)
Speeding up and Slowing Down

Alex's suggestion

  1. Default to fast: assume bead door
  2. Assess how reversible is the decision you're about to make?
    • And act accordingly
Speeding up and Slowing Down

Alex's suggestion

When you identify a hard-to-reverse decision

In this case, "try the first idea" won't make you faster

  1. If possible, reframe the decision as a reversible bead door decision
  2. Otherwise, take time to plan and research before acting
Speeding up and Slowing Down

Things to say in the mob

Speeding up and Slowing Down

Things to say in the mob

  • probing: "If we do X, can we change our mind?"
  • gas pedal: "This looks reversible, can we try something?"
  • pump the breaks: "This seems like a significant decision, can we write a plan?" (Consider writing an ADR.)
  • pump the breaks: "Before we commit, could we run a reversible experiment?"
Speeding up and Slowing Down

Speed by default

Slow for hazards

Speeding up and Slowing Down