Я бы сказал, что для нормальной разработки TDD работает очень хорошо. Существуют случаи, когда вам может не понадобиться сначала писать тесты (или даже вообще), но они нечасты. Иногда, однако, вам нужно сделать некоторые исследования, чтобы увидеть, что будет работать. Я бы посчитал это «всплеском», и я не обязательно думаю, что TDD абсолютно необходим в этом случае. Я бы, вероятно, не использовал реальный код «шип» в моем проекте. В конце концов, это было просто исследование, и теперь, когда у меня есть лучшее представление о том, как это должно работать, я, вероятно, могу написать лучший код (и тесты), чем мой «всплесковый» код. Если бы я решил использовать свой «всплесковый» код, я бы, вероятно, вернулся и написал для него тесты.
Теперь, если вы обнаружите, что вы нарушили TDD и написали некоторый производственный код перед вашими тестами - это происходит - тогда я тоже вернусь и напишу тесты. Фактически, в тех случаях, когда это происходило со мной, я часто находил вещи, которыми пренебрегал, когда начинал писать тесты, потому что на ум приходит больше тестов, которые не обрабатываются кодом. В конце концов, вы возвращаетесь в ритм TDD (и клянетесь, что никогда больше этого не сделаете).