TDD presents a paradox that requires split-brain thinking: when writing a test, you pretend to forget what branch of code you are introducing, and when writing a branch, you pretend to forget you already knew the solution. It is annoying as hell. You CAN indeed cover all your branches with tests afterwards. You can even give that a fancier name, like "Exploratory Testing". Of course it may be more boring or tedious,…
TDD requires you to write FUNCTIONAL test first, not unit tests you are talking about.
TDD workflow is fine; it's not thinking about the pink elephant (the source code) idea that bugs me.