Jul 17, 2021
TDD forces you to be extremely clear about your requirements. It forces you to take the most direct path to what you want and it allows you to cleanly refactor your codebase while being sure you haven't broken anything.
For point #2 I think "spiking" helps when you don't know how to TDD a feature. Sometimes you don't know how to test something, and you need to spike on it for 30 minutes (do your best to implement it without tests in order to get a better understanding of how it works.) then revert and start over with TDD.