I wonder where Frank learned his test-first? I suspect that he hasn't ever sat down and paired for a significant time with a master of the art. It is a skill and can't be picked up just from reading about it and having a bit of a go. Also, test-first is only a transitional practice to test-driven, which is where the big wins come from.
In any case, I find Frank's appeal to the theory of flow to explain why he doesn't enjoy test-first programming rather bizarre. He quotes Csikszentmihalyi on some of the characteristics of flow:
And suggests that they are in conflict somehow with the practice of test-first. I find the exact opposite, and I'm not alone in that. I'm going to talk more about TDD than merely test-first, because I don't practice the one without the other any more.
- The activity must present just the right amount of challenge: If the activity is too hard, we become frustrated; if too easy, boredom ensues.
- There must be clear and unambiguous goals in mind.
- There needs to be clear-cut and immediate feedback about the activity's success.
- Finally, our focus during the activity must center on the present - the activity itself.
I find that test-driven development is the way that I turn programming into an activity with the right amount of challenge. I'm just not smart enough to program any other way. I did somehow manage to get paid to program in the days before I adopted TDD, but I no longer understand how that can possibly have happened. YMMV.
In writing a TDD test I am explicitly setting an clear an unabiguous goal for the next few minutes programming.
The red bar -> green bar -> refactor cycle provides very clear-cut and very immediate feedback on my programming activity.
And, as Frank rightly points out, test-first works best on a very small scale. In fact, TDD encourages you to program in very small steps (and, perhaps counterintuitively, the smaller the steps the faster you make progress). So I find that writing the tests first encourages me to center on the present.
Fascinating that two people can have such utterly opposed experience with the same technique.