“Testing is design”; “Unit tests are documentation”; “Tests are specifications”. These are sought-after rewards of developer testing practices, but simply writing tests or even writing tests before writing production code doesn’t make these wishes come true. When we take up unit testing, we initially tend to do things a certain way. Over time we might adopt test-driven development, mock-objects, and ultimately we might adopt the specification and design practices that lead to the lauded benefits of self-documenting code, design through test, and ultimately to a greater level of agility. This presentation walks through some of the principal phases of evolving basic testing skills toward sustainable agility through test-driven, client-driven, and behavior-driven programming, touching on unit-testing, mock objects, test-driven development, behavior-driven development, and domain-specific languages for testing.