Most software projects have a deadline of some kind, and only the very lucky few don’t have a budget. In this landscape that leaves two things you can compromise on: features, or quality.
The temptation is always there to try for as many features as you can. Rush to cram them in. Squeeze, push. Race to the finish line, push it out.
The problem is that when you’re rushing, when you’re cramming, other things tend to get dropped. Unit tests don’t get included. The testing team get new features to test on the last day before release, and can’t really test it completely before it’s released. Defects that would normally be fixed are deprioritised due to time.
Sound familiar? It does to me – I see it every day.
Why do we always let ourselves try to do everything? Instead, why don’t we try thinking about our feature set? Chances are we can survive with a smaller feature set.
Design what can be realistically achieved to the best level of quality in the time you have available. It’s better to launch a half-product, than a half-arsed product.