How Test-Driven Development Helps Programmers Write Better Code