The need to create test code that verifies each unit in isolation forces us to decouple the code in ways we might not otherwise think of. Thus, testability is a force that drives the design to a less coupled state. --Agile Software Development Principles, Patterns, and Practices, p. 424, Robert Martin