When designing a system, the main goal is to achieve a working system, which will be easy to maintain and to extend. We want the current solution to work correctly; our design is aimed at making the system flexible enough to minimize the cost of change. However, when analyzing the cost of change factors, we usually see that the need to verify nothing has been broken at the end (regression) is actually what costs us the most. A suite of automated regression tests, like those written when using test-first approach, is probably the most effective way to reduce regression costs.

Gil Zilberfeld, InfoQ.com