Tuesday, February 3, 2009

"Getting it done" vs "Doing it right"

After watching the Stack Overflow podcast's Joel Spolsky and Jeff Atwood's laughable comments on TDD go down over the weekend, and seeing Uncle Bob's response and others' in blogs and comments, I noticed a recurring theme that I see a lot.
Before I get to that, though, here's a thought. For anyone who is an experienced TDD (or variant thereof) practitioner, Joel and Jeff's comments are utterly telling of their complete and overwhelming lack of experience and understanding of the underlying concepts of TDD. So, I'll let people who have more patience than I do respond to them. My only statement is that they obviously have no clue what they are talking about, and their opinions are so stale and old that I think all responses should consist of telling them to google their concerns/questions; there are lots of answers already published on them. But, that's not why I'm writing this entry.
Now, on to the thing that I've noticed in the blog posts and comments and tweets about this: "Getting it done" vs "Doing it right." I spoke about this in my last Road Thoughts, but I wanted to make a very simple statement about it (Ron Jeffries makes a much more encompassing statement on this topic, too).

If you find that you are faster doing it in a way that does not conform to what you consider "good" and "right," then you are suffering from a deficiency in your skills. Period. The techniques that you fall back on when the deadline looms are the only techniques that you can call your own; everything else is something you are still learning. How quickly they become 'your own' is a question of how much you practice. If you have a technique that you think is 'better' than how you do it when the deadline looms, you owe it to yourself to practice it.

Notice, nowhere do I mention exactly what techniques I mean. That is for you to decide. If you are interested, I will gladly tell you what the best techniques I've found are (hint: the blue circle in the picture).