So you want everything to work out just right; get and keep everything in a perfect and clean state. I think many of us engineering types want everything neat and 100% predictable. I know I tend to be this way. But often, this tendency works against us.
Pushing for perfect, or the complete handling of all contingencies, is often a bridge too far. As engineers, we have strong tendencies to handle ALL situations. This can cause many problems.
- Spending too much time analyzing
- Creating crazy high estimates that handle all scenarios
- Creating designs for the edge cases and not for the core functionality
This comes up for us a lot when scheduling our projects. We at Don’t Panic Labs strongly desire to handle all situations and build slack into our schedules. This is unnecessary because projects are more likely to go long than short. We are better off when we plan for this scenario.
In software development, we bump into this in many ways. One common way involves automated tests. It is easy for engineers to want to cover every single case and make sure everything is thoroughly tested. But for most systems, that is just overkill. In fact, that level of testing could kill a project. We want good solutions that actually get built, not perfect solutions that never see the light of day.
Voltaire has a quote: “The best is the enemy of the good.” Sometimes I have to remind myself that we want good, not perfect. I think it’s something we should all remember.