Kickoff
5 minute read
I didn’t Mean to Break It!
Every time we make an intended change, we have a chance of also making an unintended change. The probability of that unintended change is its risk.
Because these changes are unintended, we often feel they are out of our control. After all, how could I possibly change my intention or be responsible for something I never intended in the first place?
How can I be responsible for something outside of my control?
We can’t control:
- what we are trying to accomplish,
- the many traps in the existing code we are trying to work with, or
- how careful we are.
But we can control:
- the details of how we change code.
And it turns out there are more risky and less risky ways to change code.
Risk doesn’t happen to us. We create or reduce risk by how we work.
TDD is compelling
- Can verify my change
- No regression of past work
- Fast
- Clear next change to make
…But
- My function is 1,000 lines long.
- My funciton calls a DB & a clock
- I write SQL.
- What about integration bugs?
- What about the errors I didn’t think to test for?
- Finding errors is OK, but it would be better to prevent them
Safer Ways to Change Code
Foundations
Work Tiny
Break changes into smaller steps
Call Your Shot
Precisely state your objective before you start
Automatic Changes
Automate changes; don’t edit code
Advanced
Data + Intuition
Make small intuitive leaps grounded in real-world data
Risk Less
Focus on risk over cost or value
Refactor to Isolate
Pull things apart gradually, using safe steps
Engagement Content
Foundations
Work Tiny
Call Your Shot
Automatic Changes
Advanced
Data + Intuition
Risk Less
Refactor to Isolate
Preliminaries (1 week)
Preliminary Phase — agree on purpose and timeline.
- Kickoff.
- Schedule sessions; start learning by doing.
Change (12 weeks)
The initial engagement includes 2 modules.
Testing Well
Naming as a Process (NaaP)
We learn each in 3 steps.
Expand
Introduce new behaviors
- Concrete behavior change.
- One change at a time.
- Learn in real world, not lab.
- Proficiency focus: improve behavior consistency and quality.
Master
Make behaviors habitual
- Integrate all new behaviors.
- Apply to novel situations.
- Fluency focus: make behavior automatic and easy.
Leverage
Integrate into everything
- Reduce other processes.
- Reduce defect spend.
- Pay down defect backlog.
In total, this takes 12 weeks.
Change Phase (12 weeks) — make a lasting change
Week | Activity | Capability |
---|---|---|
Week 1 | Expand | Writing Tests First with Comments |
Week 2 | Expand | Turning Comments to Code |
Week 3 | Expand | Designs Everybody Can Read |
Week 4 | Expand | Testing Existing Code |
Week 5 | Mastery | Testing Well |
Week 6 | Master & Leverage | Testing Well; modify other processes |
Week 7 | Expand | Make an Honest Name |
Week 8 | Expand | Use Obvious Nonsense |
Week 9 | Expand | Add a Fact |
Week 10 | Expand | Refine a Question |
Week 11 | Mastery | Naming as a Process (NaaP) |
Week 12 | Master & Leverage | Naming as a Process (NaaP); modify other processes |
Calendaring
Daily activity schedule for the 12-week change phase
The team will participate in two kinds of activities.
Do your normal work, but integrate the recipe we are practicing.
This work will be accounted for as regular stories in the sprint. This is not in addition to your job; this is part of your job.
Week Number | Mon | Tue | Wed | Thu | Fri |
---|---|---|---|---|---|
1 | Show recipeWriting Tests First with Comments | Practice recipeWriting Tests First with Comments | Refine & expandWriting Tests First with Comments | Practice variationsWriting Tests First with Comments | Share insightsWriting Tests First with Comments |
2 | Show recipeTurning Comments to Code | Practice recipeTurning Comments to Code | Refine & expandTurning Comments to Code | Practice variationsTurning Comments to Code | Share insightsTurning Comments to Code |
3 | Show recipeDesigns Everybody Can Read | Practice recipeDesigns Everybody Can Read | Refine & expandDesigns Everybody Can Read | Practice variationsDesigns Everybody Can Read | Share insightsDesigns Everybody Can Read |
4 | Show recipeTesting Existing Code | Practice recipeTesting Existing Code | Refine & expandTesting Existing Code | Practice variationsTesting Existing Code | Share insightsTesting Existing Code |
5 | ExecuteTesting Well (all 4) | ExecuteTesting Well (all 4) | ExecuteTesting Well (all 4) | ExecuteTesting Well (all 4) | ExecuteTesting Well (all 4)Guide masteryTesting Well |
6 | ExecuteTesting Well (all 4) | ExecuteTesting Well (all 4) | ExecuteTesting Well (all 4) | ExecuteTesting Well (all 4) | ExecuteTesting Well (all 4)Verify masteryTesting Well |
7 | Show recipeMake an Honest Name | Practice recipeMake an Honest Name | Refine & expandMake an Honest Name | Practice variationsMake an Honest Name | Share insightsMake an Honest Name |
8 | Show recipeUse Obvious Nonsense | Practice recipeUse Obvious Nonsense | Refine & expandUse Obvious Nonsense | Practice variationsUse Obvious Nonsense | Share insightsUse Obvious Nonsense |
9 | Show recipeAdd a Fact | Practice recipeAdd a Fact | Refine & expandAdd a Fact | Practice variationsAdd a Fact | Share insightsAdd a Fact |
10 | Show recipeRefine a Question | Practice recipeRefine a Question | Refine & expandRefine a Question | Practice variationsRefine a Question | Share insightsRefine a Question |
11 | ExecuteNaming as a Process (all 4) | ExecuteNaming as a Process (all 4) | ExecuteNaming as a Process (all 4) | ExecuteNaming as a Process (all 4) | ExecuteNaming as a Process (all 4)Guide masteryNaming as a Process |
12 | ExecuteNaming as a Process (all 4) | ExecuteNaming as a Process (all 4) | ExecuteNaming as a Process (all 4) | ExecuteNaming as a Process (all 4) | ExecuteNaming as a Process (all 4)Verify masteryNaming as a Process |