As you start to adopt unit testing, you’ll notice that you start to design your code differently. Being able to test your code thoroughly becomes the imperative. And, maybe counter-intuitively, that imperative promotes good design. Some of that good design may not be what you thought was good design before. This post, by Tim Ottinger, is an excellent description of the changes you’ll observe.