Excellent article. I think TDD is absolutely not debatable as an example of this. I actually had this very conversation yesterday with a colleague.
"When you write the tests first, you are asking yourself (in code) what does this code need to produce in order to accomplish its task. When you write the tests afterward, the question they may or may not* answer for you is 'Does this code do what I thought it should?' While that question is a good question to ask, it's not nearly as useful as the first question."
* Often tests written after the fact don't test what the writer thought they were testing and sometimes they don't test anything at all.