Esta pode ser uma pergunta bastante boba, como estou nas minhas primeiras tentativas no TDD. Adorei o senso de confiança que ele traz e a estrutura geralmente melhor do meu código, mas quando comecei a aplicá-lo em algo maior que os exemplos de brinquedos de uma classe, tive dificuldades.
Suponha que você esteja escrevendo uma espécie de biblioteca. Você sabe o que tem de fazer, conhece uma maneira geral de como ela deve ser implementada (arquitetura), mas continua "descobrindo" que precisa fazer alterações em sua API pública à medida que codifica. Talvez você precise transformar esse método privado em padrão de estratégia (e agora precise passar por uma estratégia ridicularizada em seus testes), talvez tenha extraviado uma responsabilidade aqui e ali e dividido uma classe existente.
Quando você está aprimorando o código existente, o TDD parece realmente bom, mas quando você está escrevendo tudo do zero, a API para a qual você escreve testes é um pouco "embaçada", a menos que você faça um grande projeto com antecedência. O que você faz quando já possui 30 testes no método que teve sua assinatura (e para essa parte, comportamento) alterada? São muitos os testes a serem alterados após a adição.