I’m convinced that blogs are a very self-indulgent forum, a cheap way for people to get up on a soapbox and spout stuff that people wouldn’t pay to read. I’ve never claimed to not be self-indulgent, however, so don’t expect me to shut down this blog. (I did shut down my Agile Java forum because of all the spam jerks out there.)
Going forward, I’m going to try to move these blog entries more into the realm of the provocative and honest. I’ve been challenged with the notion of that I’m a zealot, that I’m an arrogant, elitist agilist. Perhaps some of that’s true.
I’m certain that I’m a bit arrogant. But some of that is necessary in order to have the confidence to run a business on your own. I’m definitely not so arrogant that I would presume what I’m doing is the only right way to do things, and that other people are doing it “wrong.” I’m also pretty humble about my own abilities.
And I’m certain that I’m pretty enthusiastic about TDD. Why? To sell more consulting and/or training? I’d be lying if I said it has nothing to with generating business.
But that’s not really why I promote TDD. I’ve done it for seven years now. Some of that was either short-term consulting or in a training setting. But I’ve also had longer stints during that time span (7 and 12 months) where I did hardcore TDD, and on sizeable systems (500,000-800,000 loc systems). And most of the consulting work I’ve done has been in helping developers work on typical, larger systems in Fortune 500 companies. I say this, because I’ve seen people suggest I’ve never worked on a real project, anything above 30,000 loc. Whatever.
What this work has generally revealed is that most developers are clueless about quality code and good design. But it’s also revealed that these aren’t that difficult concepts–as long as the developer is willing to learn. It only takes a few days before things start clicking with most developers. I worked with one sharp, wonderful guy for about 4 days worth of pairing, doing TDD, and refactoring. I asked for a quote from him about his experience, one that I could take to his VP (and justify my cost). He thought for a minute and said, “I’ve learned more about software development in the past few days than I have in the past two years.”
I’ve also worked with many developers who just don’t care that much about what they do for a living. And I’ve worked with many developers who already know how to build perfect software. Not. There’s some adage about old dogs and new tricks. This industry seems to birth a lot of dogs who happen to already know everything.
Ultimately, I do this because I love developing software. I’ve also learned that my code always starts out sucking, that there’s always a better way to do it, and that I can get to that better way pretty easily–particulary if I’m doing TDD. I’ve also noted that just about everyone I’ve paired with demonstrates the same.
And, here’s my zealot out-of-touch agilist statement: I love doing TDD, because I’ve gotten it to work, for me and for many developers I’ve had the pleasure of doing business with. If you don’t like it, go back to the same old way you’ve always been slogging through code. I don’t give a hoot. And don’t forget to write a self-reassuring blog about how TDD can’t possibly work as well as I’ve touted it.