"The act of writing a unit test is more an act of design than of verification."
"Agile Software Development, Principles, Patterns, and Practices" by Robert C. Martin
Writing test-first forces me to design in discrete units that are separately testable. That sounds small, but in truth it's a momentous change. It requires not only starting with a vision for a coherent application; but also envisioning each piece and how they will interact with each other. It takes more time upfront, and can be mentally taxing. But the end product is something that can be evolved, fixed, optimized, and documented fearlessly.