For complex requests, we start developing with unit test classes. Once done, we develop the core classes against those unit test classes.
At Nexgen, we are convinced that this approach drives the design of the development. The developer has to think in smaller units, which leads to more modularized code, also mocking up of objects leads to more looser coupling.
Large numbers of tests help to limit the number of defects in the code. The early and frequent testing helps to catch defects early in the development cycle, preventing them from becoming expensive problems.