In “TDD Is Not a Silver Bullet” I reproduced part of an interview with Tim, a sharp young corporate developer that I’d paired with very briefly in 2006. In 2008, he sent me an email about his experiences in the interim. Tim’s stories are what prompted me to want an interview with him. Here’s a portion of the email.
Much to my surprise, it is being conveyed from the head of our development that we need to be “stressing” TDD. My surprise was… I thought we already were practicing TDD on an enterprise level. Regardless, I guess they had brought in this guy named [Very Big Agile Name deleted]. (I am sure he runs in your circles.) If you are friends with him, take what I am about to say not as an insult, rather my perception; but if he would have been the expert to introduce me to TDD, I would never even thought of adopting/agreeing with it. And, as it turns out, the teams he consulted felt the same way.
I have been telling my boss about my experiences with you, and told her it would be like night and day. I respected the fact, that while TDD was the stressed point with you, you also provided more than just using TDD as a silver bullet per se. Basic things… like knowing the language, having fun, communicating, and so on.
I got in touch with Tim this week to make sure he was ok with me publishing this stuff four years later. No surprise, Tim is still doing (and presumably enjoying) TDD.
If you’re a “real” programmer, you find coding fun at least some of the time. Of course, it might not necessarily be fun when the code fights you all the way, hiding bugs and throwing nasty dependencies in your path. Still, I happen to enjoy coding always, despite the challenges. Test-driving is fun, too–it’s more code, and it gives me confidence to craft cleaner code, which is even more fun.
Maybe learning doesn’t have to be fun to be effective, but I have to figure sucking the fun out of it on purpose can’t possibly work. (I’m disappointed that a Very Big Agile Guru could do that.) Yes, the sticky challenges of real code mean that you can’t teach TDD with a few trivial, “non-real-world” examples. That’s why I employ a deliberately horked-up, fairly realistic codebase in my training. But the class also learns that it’s only a challenge, not a barrier, and they quickly learn a few simple techniques to surmount the challenge. They have a good time learning TDD.
Ultimately, my students leave the classroom enthusiastic about the prospects for TDD, and confident that they at least have the basic understanding needed to begin tackling their challenges. After that, it’s a matter of their having good support for the practice. (Being the minority in a team, as I’ll relate in a later blog post through Tim’s stories, is a great way to lose that enthusiasm.) When I get to pair with developers to help them through learning TDD, both of us have a good time.
If you’re interested in coming up to speed on TDD, make sure you pick trainers and consultants who don’t suck the fun out of it.
Ray August 21, 2012 at 8:11 am
Being the minority in a team, as I’ll relate in a later blog post through Tim’s stories, is a great way to lose that enthusiasm.
Actually, my enthusiasm for TDD gets a big boost whenever other people on the team are struggling to get their code (that was supposedly already finished) working in a more realistic environment than their dev setup. Especially when I see them spend a lot of time debugging and when their fixes introduce new errors.
Or when they spend a lot of time rewriting a whole bunch of code (because it doesn’t allow for required change) and then have to go through a similar debug/fix/test cycle.
Jeff Langr August 21, 2012 at 8:31 am
That’s where I started with TDD, in 1999–a bit smug about the fact that my code had almost no problems, and the other guys were always late with overly-defective code. So yes, if that helps others see the light, it’s great. (JB Rainsberger suggests that it often doesn’t generate the results we’d like, and I have to sadly agree with him: http://agile2007.agilealliance.org/downloads/handouts/Rainsberger_414.pdf).
In 1999, the problem was that they didn’t give a hoot about my tests, and at that time I had no way of incorporating them into the build. The other devs broke my tests and didn’t care (despite my protestations). Nowadays, the problem I see in too many shops is that builds whose unit tests fail aren’t considered “stop the line” by many teams.