Here we go again: fans of TDD telling us that their way is the best way, the only way. It is arrogant.
TDD is a bottom-up process. Some people work best that way. But others work better using a reductive process - top down.
When someone gives me a computing problem, I don't ask "what are the inputs and outputs you need?"
Instead, I ask, What are you trying to accomplish.
To me, the inputs and outputs are the last thing I think about - they are an element of the design that I create. They are not a premise.
This is just like the endless rift in the sciences between experimentalists and theorists. They don't understand each other, but we need both.
Experimentalists like to try things, see what happens, and then react - just like in TDD.
Theorists like to step back, and theorize, and figure things out before trying anything. People like Einstein and Newton were theorists. People like Michaelson and Morley were experimentalists. We need both, but they are neurologically different, and they should respect each other, instead of telling the others that there is only one way to be.