I ran across Cédric Beust’s article Agile People Still Don’t Get It again, and I just wanted to point one little thing out for you, for him, for everyone. He writes about a presentation he attended that illustrated why agile people still don’t get it:
One of the first slides that deeply troubled me claimed the following: Tests are (executable) specs; (and) If it’s not testable, it’s useless.
Cédric went on to show a number of examples of algorithms that aren’t worth test-driving and useful code that isn’t testable. All very good, all understood, all makes sense; but all in his acerbic, off-putting style.
Cédric, I love you like a brother, but this Bileblog nonsense is wearing thin. We’re not 21 any more; and it’s time to reach a wider audience of more thoughtful people through sensible and reasonable discourse. I’m afraid that, in this case, your conclusion does not at all follow from the hypothesis.
It’s true that there is a steady supply of agile evangelists out there that push agile like a religion, but not only is none of this is news, but it’s a natural part of the evolution of any idea. I went through my proselytizing phase. It was at a time when my primary concern was getting to practice agile, and I thought that if more people liked it, more people would give me the chance to practice it. Instead, I started taking myself more seriously as a business person, made more money, and that has translated to more free time to practice whatever I want to practice. This allowed me to feel more secure about my own agile practice and my own effectiveness as both a practitioner and consultant. Not everyone takes the lead in their careers like I did, so when you see someone lashing out, proselytizing, don’t hate them, but help them. There’s something missing in their lives, and it’s worth offering them a chance to find out what it is and fill the void. People did that for me, and I’m willing to do that for others. Are you?
On the question of the agile religion, you might think Bob Martin is one of the High Priests of Agile, but as early as 2002 (!) he warned us about this behavior, and I take away two key points from his message. I believe it was at a dinner talk at XP/Agile Universe 2002 that he invited us not to make absolute statements about agile.
Those absolute statements served us well to rile up the visionaries (in the Crossing the Chasm sense), but as we reach the mainstream, statements like these hurt more than they help. I prefer to tell people that the more they test, the better their features are; and the more testable their features are, the more easily maintained they are. They seem to respond to that, especially when I show them how that is. I still astonish people, as unexpectedness is a key component of a sticky message, but I prefer not to use divisive, absolute rhetoric to do that. I use different techniques for that now.
I believe it’s become more important to be less overtly provocative, and instead be clearer with our advice. I don’t think most thoughtful agilists will claim that they write production code the way they teach others to do it; but this is not a simple case of “do as I say, but not as I do”, but rather a case of the student needing to learn the lessons by following some useful rules before leaning too much on under-developed judgment. Not everyone agrees that we should give novice rules to novices, but it works well for me, so I do it. This means that I sometimes tell people “delete that code because it isn’t tested” or “stop and refactor the code until it’s testable”. I find it an effective way to help them learn and develop judgment, the skills I believe will serve them best. I tell my students directly:
Do I take tiny steps like this every time I write code? No. Do I think you should take tiny steps like this when you write code? Yes. Why? Not because it’s the best way to write software, but because you learn a lot when you do it and, more importantly, when it’s 2 AM, you’ve been called back from vacation, you’re performing surgery on a production system that’s losing $100,000 per hour of downtime, you’ll be glad you can work in such small steps.
More succinctly, I’m more up-front with people about the pedagogical aspects of what I do. They seem to respond well to that, rather than patting them on the head and saying, “No, trust me, just write the tests. You’ll learn.” I’m sure there are plenty of trainers out there, agile and otherwise, who treat their students like children, rather than adults. They make absolute statements of the type that Cédric is right to complain about. I just wish he wouldn’t make it seem like a uniquely agile problem, and I wish he wouldn’t lump us all in one bucket. I suppose it’s convenient to do that, but it’s not true.
In fact, it feels downright religious to do so.
Eight Years Later
I re-read Cédric's article today. It reads like the most ridiculous hypocrisy so I have to conclude that he meant it partly as satire, primarily because he responds to an "agilist"'s hyperbolic, absolutist style with yet more hyperbolic, absolutist, lazy thinking. Sadly, his style obscures his good points. Even so, I applaud his final line:
So here is my advice to Agilists: get real now, or you will become irrelevant soon.
I believe we did, and we haven't.