Hoje eu escrevo teste para as aplicações, mas não o TDD. Eu costumo fazer meus códigos da seguinte forma.
1 - Escrevo Tudo, sem muita arquitetura, separação de responsabilidade, nem nada disso, apenas codifico um linguição para ver se tudo que foi pensado irá funcionar.
2 - Funcionou tudo que previ, agora começo gerenciar o código (criar services, repositories, dependency injection, middleware se necessário, separar os métodos para unica responsabilidade, etc).
3 - Com os métodos possuindo uma unica responsabilidade começo pensar nos possiveis testes (nesse momento encontro alguns cenários que falha e vou corrigindo o código).
4 - Por fim passando todos os testes está pronto para o PR.