The art of test-driven development