Every development manager has faced the choices: Ship sooner? Squeeze in an extra feature? Test a little less to cut cost? Invest in infrastructure? Rewrite that problematic code? Virtually every development cycle goes through a similar set of tradeoffs multiple times in the course of getting code out the door. Every time a decision is made, the overall quality, maintainability, complexity, and stability of a software system goes up or down.