On the other hand, writing testable code can be a perfectly valid and very useful part of the design process - even at its initial stages, when things are just being explored. There is nothing special about writing code compared to scribbling on a piece of paper or just walking around and thinking. Who says that pseudocode must always be written in a pseudo-language?
Incidentally, prototyping also gives rise to a very powerful idea of solving the problem by first creating a domain-specific language in which a solution to the problem can be expressed in the most natural way, and then providing an efficient implementation of that language.
Yes, and often diving into the code works for me, which is why I'm in the habit of doing it, but in this case two or three days of whiteboarding and analysis might have saved me a couple of weeks of going down a dead end.
Sometimes nothing slows you down as much as being in too much of a hurry.