Coding with TDD, we should proceed by baby steps. Only small things, one by one. When this first thing works, then you create a second test, with a second baby step, and you code it.
This allows the developer to focus on problems one by one. And not to disperse in many problems.
When a bay step is coded wand when all tests succeed, we are able to deliver our code. It may be complete, but everything that's coded works, is documented by steps, and is reliable. We are able to deliver the final product to final users, and they are able to evaluate it. This ability to deliver all the time is required by agile methods.
This may conduct to have a lot of corks in our production code, if developer can not find the the way to make the code right (Make it run, make it correct, make it fast[xp-explained]). But with this corks, the code behaves correctly, according to written unit tests. The corks will disapear in refactoring phase.