A useful mental model I recently learned is enumerating the ‘left ditch’ and ‘right ditch’ solutions.
Imagine we’re steering a vehicle along a winding road and each turn is a new challenge. We want to avoid under-correcting to end up in the left ditch, and over-correcting to end up in the right ditch.
For example, say a software component has recently become unreliable, with frequent bugs and performance issues. A ‘left ditch’ under-correction may be to repeatedly add one-off “band-aid” bug fixes to each issue. A ‘right ditch’ over-correction may be a complete rewrite the component. A ‘just right’ solution may be introducing a new design pattern to the component that improves correctness, scalability, maintainability, etc, and gradually migrate the entire component to that new pattern.
At Glossier, we called this finding the ‘stage appropriate’ solution, and it’s a generalization of the spectrum of involvement. I’ve found it helpful to explicitly discuss what a ‘left ditch’ and ‘right ditch’ solutions would be, to open up the middle path for a ‘just right’ solution.