Combating Fear Driven Development
2 min readAug 7, 2020
Here’s a list of techniques that help me combat “Fear Driven Development”:
Test Driven Development
Does this code work? Will it work in the future with the rest of my team’s changes? What was I working on or where do I begin?
- Writing a failing test first helps me understand the inputs, outputs, and names of functions that I need to implement.
- Need to walk away briefly? — come back to a failing test.
- If I’m pairing, we don’t have to argue about implementation details, whatever makes the test pass can easily be changed for something better.
- I can easily validate my work with the latest
git pull
.
Type Driven Development
How do I ensure everyone will remember to use and test this piece of logic?
- Encoding logic into the type system means no longer have to worry about missing tests.
- Compilation act as another form of expressive feedback
- I can offload details to the computer and keep my working memory free for more important things.
- Not having to fear that an illegal state may be lurking in the system because I’ve made it unrepresentable by the type system.
Mikado Method
Large structural changes are scary. How do I more effectively break down the problem while making progress?
- I don’t have to spend time guessing how to subdivide the problem, it happens naturally.
- I can easily rotate into another pair or team and have anyone else on the team pick up the work with the context provided by the mikado graph.
- I can more readily answer the question, “how are we progressing and what have we done?”
- I can commit and push smaller structural improvements along the way.
Continuous Integration/Deployment
When can we release a new version to our customers or look at our current progress?
- Repeatable builds and deployments means no snowflakes that hide dependencies
- Important safe guards are automatically executed before each deployment
- All passing tests reassure the team that no breaking changes were introduced
- Easily rollback to a previous build
Functional Programming
Does the code contain any side effects?
- I can refactor code with greater confidence with equational reasoning.
- Code without side effects is more testable.
- Side effects are more readily found and can be pushed to the edges of the system and dealt with a different level of care.