I just attended Test-Driven Development presentation which represents everything that is wrong about the way Agile advocates are trying to evangelize their practices. I don’t have anything against the presenter in particular, but it’s really time for Agilists to rethink the way they communicate with the real world.
Here are a few comments on his presentation.
One of the first slides that deeply troubled me claimed the following:
- Tests are (executable) specs.
- If it’s not testable, it’s useless.
First of all, tests are not specs. Not even close. Somebody in the audience was quick to give a counter-example to this absurd claim by using a numeric example ("how do you specify an exponentiation function with a test?") but my objection to this claim is much broader than that. Relying on tests as a design specification is lazy and unprofessional because you are only testing a very small portion of the solution space of your application (and of course, your tests can have bugs). Tests also fall extremely short of having the expressiveness needed to articulate the subtle shades that a real specification need to cover to be effective.
This claim is part of a broader and more disturbing general Agilist attitude that is usually articulated like "Your code is your spec", along with some of its ridiculous corollaries such as "Documentation gets out of date, code never does".
Anyone who claims this has never worked on a real-world project. And I’m setting the bar fairly low for such a project: more than five developers and more than 50,000 lines of code. Try to bring on board new developers on this project and see how fast they come up to speed if all they have to understand the code base is… well, just code. And tests.
I am currently getting acquainted with a brand new project that is not even very big, and while I understand Java fairly well, there is no doubt in my mind that for ten minutes I spend trying to understand how a certain part of the application works, a five-line comment would have given me this knowledge in ten seconds.
The second claim, "If it’s not testable, it’s useless" is equally ludicrous and a guarantee that at this point, the audience you are talking to is already looking at you as a crackpot.
Software is shipped with untested parts every day, and just because it’s not entirely tested doesn’t mean it’s bad software or that the untested parts are "useless".
Agilists just don’t understand the meaning of calculated risk.
Early in the development cycle, it’s perfectly acceptable to go for a policy of "zero bugs" and "100% tests". But as the deadline looms, these choices need to be reconsidered all the time and evaluated while keeping a close eye of the final goal. Very often, Agilists simply forget that their job is to produce software that satisfies customers, not software that meets some golden software engineering scale.
Anyway, let’s go back to the presentation, which then proceeded with the implementation of a Stack class with TDD. Before spending thirty minutes on a live demo of the implementation of a Stack class (are you impressed yet?), the presenter warned the increasingly impatient audience that they should "not pay too much attention to the Stack example itself but to the technique".
And that’s exactly the wrong thing to do.
Look, we "get" TDD. We understand it. Frankly, it takes all of ten minutes to explain Test-Driven Development to a developer who’s never heard of it: "Write a test that fails and doesn’t compile. Make it compile. Then make it pass. Repeat".
The hard part is applying it to the real world, and showing the implementation of a Stack will soon have everyone leave the room with the thought "Cute, but useless. Now let’s go back to work".
It was even worse than that, actually: The presenter kept taking suggestions from the crowd but he declined all those that didn’t fit in the neat script that he had in hands at all times. These suggestions were good, by the way:
"What should we test now?"
"How about: if we pop an empty stack, we get an exception"
<a bit embarrassed> "Mmh, no, let’s not do that" <hand waving, look down at notes and proceeds while happily ignoring the other raised hands>
To be honest, I am becoming quite suspicious of Agile practices for that reason: all the presentations I have attended and books that I have read are always using toy implementations as examples. Stack, List, Money, Bowling… enough already! Let’s talk about TDD for code that interacts with clustered databases on laggy connections built on 500,000 lines of code that was never designed to be tested in the first place (and: yes, I read Michael Feathers’ book, it has some good and some bad, but it’s not germane to Java and TDD so I won’t expand on it here).
And please, avoid smug and useless answers such as:
"A lot of the classes I have to test are hard to isolate, do you have any advice regarding mocks?"
"Well, if you had started with TDD in the first place, you wouldn’t be having this problem today".
Fundamentally, I am disturbed by the Agilists’ dishonesty when it comes to presenting their arguments. They offer you all these nice ideas such as Test-Driven Development and Pair Programming but they never — ever — disclose the risks and the downsides. To them, Agility is a silver bullet that is applicable in all cases with no compromises.
The truth is that these practices come at a price, and for a lot of organizations, the price gets high very quickly. Agile development will never go far if its proponents keep ignoring these organizations and make condescending comments to its members.
I like Test-Driven Development. I really do, and I’m fortunate enough to work on a project that lets me use TDD most of the time. But the truth is: at times, I don’t do TDD because implementing a feature quickly is more important than a fuzzy feeling. And I’m also aware that TestNG is an open source project with less than five developers, all of them on the bleeding edge and aware of the latest advances in software engineering.
And this is my main beef with Agilists: I strongly suspect that most of them are spending their time on open source projects with like-minded fellows, but none of them have any experience what companies whose survival depends on shipping software have to go through to organize huge code bases growing thousands of lines of code every day under the combined push of hundreds of a developers, all with their personal background, education and bias.
So here is my advice to Agilists: get real now, or you will become irrelevant soon.
Update: four years after I posted this article, reddit picked it up.
#1 by Danno on June 12, 2006 - 9:11 pm
I won’t claim to be an expert or anything, or to be all that good at doing TDD.
But I will say that on the small set of projects that I’ve done in my time as a student, when we were able to test, things went swimmingly and smoothly and shit got done very, very fast.
When we couldn’t test something (Like a GUI, we didn’t know how, really), or there just wasn’t enough time to test, things got really, really bad very quickly.
I’m not gonna say that my experience is a rule, but I don’t like coding without a safety net of tests anymore. I don’t think I’m good enough to do it.
#2 by FreeThinker on June 13, 2006 - 8:08 am
Open your mind friend… What you are speaking of sounds a little like stumbling around in the dark with a map…
Question:
How do you specify an exponentiation function with a test?
Answer:
Use a known value… run the function and assert that the output matches the known value…
Although most people don’t test the compiler, lol…
#3 by loosenut on June 13, 2006 - 9:00 am
Anyone have a link to the video of the talk?
#4 by FreeThinker on June 13, 2006 - 9:02 am
“enough already! Let’s talk about TDD for code that interacts with clustered databases on laggy connections built on 500,000 lines of code that was never designed to be tested in the first place”
Ok… Think of the code you normally write…
Now… Add tests to verify that it actually works the way you think it does… How is thier any less value?
I mean tests help with:
Debugging… Immediate notification of where in the production code the problem is…
Remembering… What the heck was I thinking 2 years ago?
Changing… Ok, If i make this change I will break… Yep thats what I though…
Designing… Wow, that is totally going to suck, but if I abstract this and that… Ok, here is the test… Ok, Here is the code… Ok, it works… next feature…
Personally I don’t want to wade through 500,000 lines of code unless I absolutely have to… You go right ahead and guess what to fix when it breaks… I will let the tests tell me…
#5 by theory versus practice on June 13, 2006 - 9:51 am
XP, in practice, is about pairing incompetent programmers with competent ones. So the managers of these programmers can have larger teams to justify their bloated programmer/manager salaries (not to mention satisfy Equal oppurtunity laws and such).
Competent programmers make code that works suitable to the users’ needs.
#6 by Reason of Reason on June 13, 2006 - 11:37 am
The truth is, that it doesn’t matter which style of programming you choose. If your a good programmer it’ll change from project to project anyway. The whole belief in Agile programming is no different than MAC vs. PC in that each company and person makes a choice. If you are truly an intelligent person than you’ll pull from all technologies. Some projects just need code and testing and code and testing, etc. But others can’t be tested in all scenerios becuase there are too many to test. But I do feel as though I need to say that if you believe that Agile programming is the only way to program than you are ignorant and should move on to something like knitting, the same to the people who think that Agile programming should never be used.
#7 by Anon on June 13, 2006 - 11:54 am
Bravo for questioning the religion. I would rather question Scientology to Tom Cruise than try to take some of these Test Driven Development people on in a debate. Anyone outside of the deepest tech niches sees that phrase and things… why are tests driving development? What do tests have to do with me making money via technology? And how did 50 years of tech get built without TDD… I guess, according to these people, all that old code must be crap!
The biggest affront to reality that TDD brings forth is that tests should be the focus. They are important – but TDD is one of the biggest tail wagging the doggisms I can think of.
BTW, your project sponsor might want a spec. Test code is not likely to be something that the legal department that is seeing whether you have met the spec at project end wants to use. Most corporate counsel don’t read Java or C#.
#8 by Anon on June 13, 2006 - 11:54 am
Bravo for questioning the religion. I would rather question Scientology to Tom Cruise than try to take some of these Test Driven Development people on in a debate. Anyone outside of the deepest tech niches sees that phrase and things… why are tests driving development? What do tests have to do with me making money via technology? And how did 50 years of tech get built without TDD… I guess, according to these people, all that old code must be crap!
The biggest affront to reality that TDD brings forth is that tests should be the focus. They are important – but TDD is one of the biggest tail wagging the doggisms I can think of.
BTW, your project sponsor might want a spec. Test code is not likely to be something that the legal department that is seeing whether you have met the spec at project end wants to use. Most corporate counsel don’t read Java or C#.
#9 by FreeThinker on June 13, 2006 - 2:11 pm
This is the more one sided view I have ever seen…
I’ve never worked on a “real” Agile project, but I do know one thing – Agile isn’t a panacea, not even close. I work on a project that *can’t* be Agile. We have hundreds of developers spanning dozens of different companies and divisions. Many of the things I’ve seen Agilists attribute to themselves (lots of tests, good customer interaction) are more the hallmarks of a good team, rather than methodology.
Every thing I have ever read about agile has stated is was not a panacea… What the heck did you read buddy…
OBVIOUSLY YOU MUST HAVE ONLY READ THE FIRST CHAPTER OF WHATEVER IT WAS…
Every Project has work that can not be agile, but that does not mean because it does not fit every scenario you throw it out the window or it does not add value…
Don’t be a dork… If you are set in your ways and don’t wanna learn what its all about – and dont give me that “I READ THE BOOK CRAP”
Don’t slam the rest of us for trying to better ourselves and the community…
#10 by Anonymous on June 13, 2006 - 2:12 pm
This is the more one sided view I have ever seen…
I’ve never worked on a “real” Agile project, but I do know one thing – Agile isn’t a panacea, not even close. I work on a project that *can’t* be Agile. We have hundreds of developers spanning dozens of different companies and divisions. Many of the things I’ve seen Agilists attribute to themselves (lots of tests, good customer interaction) are more the hallmarks of a good team, rather than methodology.
Every thing I have ever read about agile has stated is was not a panacea… What the heck did you read buddy…
OBVIOUSLY YOU MUST HAVE ONLY READ THE FIRST CHAPTER OF WHATEVER IT WAS…
Every Project has work that can not be agile, but that does not mean because it does not fit every scenario you throw it out the window or it does not add value…
Don’t be a dork… If you are set in your ways and don’t wanna learn what its all about – and dont give me that “I READ THE BOOK CRAP”
Don’t slam the rest of us for trying to better ourselves and the community…
#11 by FreeThinker on June 13, 2006 - 3:15 pm
I see this over and over in your posts Cedric…
I often wonder if any of the XP people have ever in their lives worked on an application with more than 30,000 lines of code.
I have… For fun…
So what if you wade through lots of code…
So what if you think XP will not work on huge projects… You are wrong!
Maybe XP will not work on my projects is a more accurate statement…. Because obviously you are opposed to anything agile and unwilling and or unable to get it…
#12 by Frank Bolander on June 13, 2006 - 3:49 pm
Jeez,
Methinks you’ve hit a nerve,Cedric.
I have worked on 3 large “Agile” projects, two run by different “agile” guru shops(even mentioned in these posts) and one was a hybrid. The hybrid one was a success but the other two were disasters. For being so agile, these methodologies don’t exactly lend themselves to change or even open to input outside the “agile box”. It’s a feast or famine mentality and when things do go wrong it’s the old “it was done wrong” or “old methodology ruined it” blame game even though these agile groups managed the process. For one, the gurus’ process definitions didn’t even match in their dictionaries. These Agile gurus end up being self-serving poets rather than technologists and engineers.
And the whole “I’ve used TDD used right and it was a success, you must be doing it wrong” strawman argument just pisses me off. Big focking deal. If a process isn’t reproducible across variations in conditions, it’s just mental masturbation. Any process should work if it’s used correctly, a better metric would be how well a process methodology adapts which, contrary to all the hype, agile methods don’t do very easily in real situations. A case in point is offshoring. More time, effort and resources are wasted trying to hammer a round peg in a square hole than admit a deficiency and adapt to the reality. Let’s not forget there were a lot of software projects over the decades that were successes without “agile” methodologies. The “Agilists” make it seem like all projects, except theirs of course, are failures.
Finally, TDD is just one aspect of agile, why is it the only one emphasized in every argument? I do believe in agile overall, but I have to agree with Cedric. It’s turning into a narrow minded religion instead of a toolkit. And it has been sold as a panacea by vendors and Agile consultants so I’ll have to disagree with some of the previous posters also.
#13 by Steve Conover on June 13, 2006 - 4:41 pm
Cedric,
You (and Dave C — great post) make one very important point that we Agile proponents should repeat over and over again to ourselves:
“Very often, Agilists simply forget that their job is to produce software that satisfies customers, not software that meets some golden software engineering scale.”
Agile isn’t the end, the software *product* is. Agile practices are *tools* that interact together to help us achieve the goal. Again, other than in conferences, the goal is not to do Agile.
However you go way too far in discounting TDD (it’s bizarre to me that you drop it under pressure). You shouldn’t do TDD because it’s a “good idea” or “correct” in the abstract, you should do it because it helps you. Every time I deviate, or I see teams deviate from TDD’ing they more than make up for it in debugging time. And there’s no nice regression suite left in their wake.
The higher-pressure the siutation, the more pressure I feel to test-drive. I need the quick incremental feedback. I can’t afford to waste time wondering if what I just wrote actually works, and spending time figuring it out in “big bang” integration.
About large projects: I’ve been directly involved in and continue to be associated with people who are doing Agile at the most prominent internet companies you can name. There are techniques you can use to hive off critical portions of the project and just do Agile there, etc. But I’ve both done it and seen it done successfully – in some cases spectacularly well.
(I’ve seen it fail too – it can’t be emphasized enough that getting your engineering house in order is just one part of the software product equation – Agile engineers, like most engineers, tend to be too heads-down in this respect IMHO).
#14 by Kevin Taylor on June 13, 2006 - 6:48 pm
Real Agile developers deliver value. See my complete response: http://java.about.com/b/a/256853.htm
#15 by Erik on June 14, 2006 - 5:45 am
Cedric – I fear you’re the one who doesn’t (want to?) get it.
You are certainly right when you state that Agility is no silver bullet – there will never be one anyway, so that’s not the issue.
From my experience the “real software world” badly needs agility. Far too much untested (and therefore sometimes hardly usable) software is released every day. The real risk is already there – and so are the real costs of sofware that doesn’t work as it should. For sure you can overdo everything and fail by applying blindly a recipe – but agility is also fundamentally about empowering the team and have it take responsibility for the project (choosing the methodology etc.). So the team must learn modern development techniques – and TDD is one of those – and then choose what’s best here and now to deliver the software with the required functionality and quality at a given date.
Your blog is therefore blind on one eye and provides pseudo arguments to those who reject agile methods because they think it is BAD(TM) or just a hype or because it didn’t work for them the first time (maybe training the team a bit more or really empowering it would have helped) or it would cost too much etc.
I would certainly not recommend to believe everything consultants tell you (whether they advocate agility, RUP, MDD etc.) but I really think you should honestly try it and pick what’s good for you – and my experience is that agility brings a lot that’s good and effective.
#16 by Phran on June 14, 2006 - 6:19 am
I like Test-Driven Development. I really do, and I’m fortunate enough to work on a project that lets me use TDD most of the time. But the truth is: at times, I don’t do TDD because implementing a feature quickly is more important than a fuzzy feeling.
And you do that because you are in your nature agile. You do what you think provides most value at that point
#17 by test on June 14, 2006 - 8:58 am
test
#18 by Hans on June 14, 2006 - 2:20 pm
I think Jeff, Michael, and Robert have shown well that Cedric (once again?) doesn’t know what he’s talking about, or at the least, talks without thinking first.
The quality of this blog software is probably a good example of following Cedric’s “calculated risk” approach to development. I think Cedric would be more honest to call his style “faith based software development”.
#19 by Colonel Nikolai on June 15, 2006 - 10:12 am
Bad presentation aside, I’ve done both XP and what I refer to as basically “everything else”, which whether it is being hailed as CMM processes (PSP/TSP) or not, they basically come down to hacking (or “code-and-fix-and-fix-and-fix”) methodologies. I have found that it is much better to work on an XP project than the other kind by a wide margin.
The best thing I can say about it is “XP is better than not”. It is not a silver bullet.
I have worked at places like you describe where Agile is very difficult because doing a good job is very difficult because everyone is used to doing a poor job and calling it OK. An XP environment causes the bad stuff to come up much faster because it forces people to face reality much sooner. EVERYONE, even customers are forced to recognize where things aren’t working. This is the key.
Sometimes is easier if we just don’t do Agile because nobody wants to admit that what they’ve done is crap, all up and down the ladder. So Agile “fails” in this case.
Which brings me to this question: is it better to have a project fail quickly or fail after several million dollars have been blown? XP will fail faster because it assumes the answer is failing quickly is preferable. Everything else comes from there.
#20 by Michael Bolton on June 15, 2006 - 7:12 pm
As a trainer of testers, I have some sympathy for the complications imposed by the classroom situation. I heard from Cem Kaner (he may or may not have originated the saying), “Toy problems teach contempt for both the problem and the solution.” One of our goals as trainers and advocates of the things that we believe in, should be to work relentlessly at developing exercises that are sufficiently challenging for the skeptics and sufficiently feasible for the novices and the time constraints. That’s a big challenge for us.
I don’t have a whole lot of respect for the extremists (note the absence of a capital) on either side of this debate. What impresses me about this discussion is how, for both sides, it centres around processes and tools and following a plan, and downplays the significance of people and interactions and adapting to change. That is, I don’t think it’s a very Agile discussion. Moreover, it’s sadly typical of spirited debates about Agility.
I’d like to suggest that we could make some sense of it all by going back to the Agile (http://www.agilealliance.com/intro) and Context-Driven http://www.context-driven-testing.com/) Principles , and thinking hard about both lists–in particular, the point in the Context-Driven principles that people, working together, are the most important part of any project’s context.
I’ve seen some remarkable things done very quickly and efficiently with lots of approaches, some Agile, some not. What the successful projects have had in common is this: smart people of good will, working together thoughtfully. Some practices may be helpful, but if they’re implemented poorly by the wrong people, the practices will eventually be perverted into some new way of going through the motions.
I like TDD. I like lots of programmer tests. I like refactoring to make the code more readable (to /people/). I like the XP practices. I like the humanism implicit in the Agile Manifesto more, though. In general, I’d like to see a little more attention paid to the items on the left.
—Michael B.
#21 by Michael Bolton on June 15, 2006 - 7:12 pm
As a trainer of testers, I have some sympathy for the complications imposed by the classroom situation. I heard from Cem Kaner (he may or may not have originated the saying), “Toy problems teach contempt for both the problem and the solution.” One of our goals as trainers and advocates of the things that we believe in, should be to work relentlessly at developing exercises that are sufficiently challenging for the skeptics and sufficiently feasible for the novices and the time constraints. That’s a big challenge for us.
I don’t have a whole lot of respect for the extremists (note the absence of a capital) on either side of this debate. What impresses me about this discussion is how, for both sides, it centres around processes and tools and following a plan, and downplays the significance of people and interactions and adapting to change. That is, I don’t think it’s a very Agile discussion. Moreover, it’s sadly typical of spirited debates about Agility.
I’d like to suggest that we could make some sense of it all by going back to the Agile (http://www.agilealliance.com/intro) and Context-Driven http://www.context-driven-testing.com/) Principles , and thinking hard about both lists–in particular, the point in the Context-Driven principles that people, working together, are the most important part of any project’s context.
I’ve seen some remarkable things done very quickly and efficiently with lots of approaches, some Agile, some not. What the successful projects have had in common is this: smart people of good will, working together thoughtfully. Some practices may be helpful, but if they’re implemented poorly by the wrong people, the practices will eventually be perverted into some new way of going through the motions.
I like TDD. I like lots of programmer tests. I like refactoring to make the code more readable (to /people/). I like the XP practices. I like the humanism implicit in the Agile Manifesto more, though. In general, I’d like to see a little more attention paid to the items on the left.
—Michael B.
#22 by mq on June 16, 2006 - 3:55 am
I had somewhat similar experience of sitting through a presentation by 3 Agile proponents. It quickly became obvious that biggest project they worked on had 3 developers and was fairly mickey-mouse standalone application. It was like being at some religious ceremony; if you questioned anything you were dismissed as unbeliever who’d soon be in hell (unemployable). One of they’re cool ideas was a flashing screen in bright colors everytime continuous build broke and somehow was ‘coolly’ delivered to all dev desktops (not sure if this was they’re own extension to Agile that they hoped to patent and make millions from, but they were very excited about this). ‘Ok, so I’ve got 50 developers who gets this flashing notification of build failure, how does that help productivity?’ The reply ‘It’ll get fixed real fast’. Sure, and they’ll be no build failures for a few hours as everyone goes into a tizzy trying to fix build (or maybe everyone ignores, the process only had been scaled to 3 developers so presenter wasn’t too forthcoming with how it would scale).
Annoyingly they even did lot of presentation using pair-presenting; just appeared to be talking off differnet scripts:-)
I’m not anti-agile; just anti brain dead quasi-religious fanatism.
mq
#23 by Joel on June 16, 2006 - 7:28 pm
As I know it, XP is Agile, Agile is not necessarily XP. I find it a shame the solid messages behind Agile is muddled in the world of quasi-religious debate on ambigious details of a project or an example of interpretation of Agile. It seems the goals of Agile are lost on even Agilists and Cedric and perhaps I am being foolish to continue to believe the noble “Principles behind the Agile Manifesto”:
Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
Business people and developers must work together daily throughout the project.
Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
Working software is the primary measure of progress.
Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
Continuous attention to technical excellence and good design enhances agility.
Simplicity–the art of maximizing the amount of work not done–is essential.
The best architectures, requirements, and designs emerge from self-organizing teams.
At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
….
WTF is Agile now? Are we REALLY talking about Agile here?
#24 by Arnon Rotem-Gal-Oz on June 17, 2006 - 12:21 am
I think TDD is a complementary technique to other design methods and not a replacement esp. in larger projects. There are some problems that you need to analyze in higher levels of abstraction (vs. code).
You can read more @ http://www.ddj.com/blog/architectblog/archives/2006/04/tdd_testing_or.html
#25 by Steven E. Newton on June 17, 2006 - 10:01 am
“how do you specify an exponentiation function with a test?”
Just how would you demonstrate that the code to implement an exponentiation function is correct and works to specification?
(Yes, I stole that question from Bob Martin’s blog.)
Back around 1999 or so, I was as much a skeptic of agile methods (XP) as you are now. I’d be happy to elaborate on the path I took to get to where I’m an advocate now, but the summary is that I put aside my objections and tried it myself.
#26 by Steven E. Newton on June 17, 2006 - 10:02 am
“how do you specify an exponentiation function with a test?”
Just how would you demonstrate that the code to implement an exponentiation function is correct and works to specification?
(Yes, I stole that question from Bob Martin’s blog.)
Back around 1999 or so, I was as much a skeptic of agile methods (XP) as you are now. I’d be happy to elaborate on the path I took to get to where I’m an advocate now, but the summary is that I put aside my objections and tried it myself.
#27 by Steven E. Newton on June 17, 2006 - 10:20 pm
Judging from the number of duplicate comments on this blog entry (my own included, probably because of a spurious error in posting that made me think my comment was NOT posted), I think the blogging software used here could be tested a bit more rigorously.
#28 by Dave Nicolette on June 19, 2006 - 10:46 am
Cedric, your article is timely. Discussions are on the increase about what “agile” methods really are, how to apply them effectively, and whether it’s even worth the effort.
My two cents is that we (meaning the IT profession) are not well served by getting into subjective arguments about the merits of this or that based on assumptions, misinformation, opinion that has not been tempered with experience, or (worst of all) habit.
Surely there is ample evidence that traditional methods of doing software development projects have not worked very well. The Chaos Report consistently finds under 30% of IT projects meet their objectives. The report talks about the other 70+% of projects relatively gently – it calls a project “failed” only if it is cancelled prior to completion, and refers to the rest of the general mess as “challenged.” Personally, I prefer to look at the successful projects and just call the rest of them “failed” – that means traditional methods deliver a success rate under 30%. With that in mind, it’s hard to fathom why so many people defend traditional methods as fervently as they do. Seems to me they would be interested in checking out alternatives.
We do a lot of different kinds of work in IT. Some of it lends itself very nicely to agile methods. I’m not going to point you to an academic study that “proves” the point. I can only say that after 25 years’ experience doing the wrong things better and better each day, I was ready to call it quits and open some kind of small business, far from the IT field.
I discovered I was not alone in questioning whether the work we do is of any value whatsoever, no matter how well we do it. Along with several others at my company, including a senior-level manager who could provide what he called “air cover” for our efforts and a customer who was thorougly disgruntled with the quality of service she had received from the IT department, we decided to look for a better way to get things done. We came across “agile” and it sounded promising, so we decided to give it a try. We gave it an honest try, engaging a consulting firm to come in and show us how to do XP from the ground up. Long story short (if you call this short), it worked very well indeed. I don’t defend agile methods because I read about them on a website and thought they sounded cool. I support agile development because I have personally experienced the difference.
That said, I don’t claim the agile approach works for all classes of problems or all the different types of work we do in our profession. I’m a skeptic by nature, and will be the last person to sign up for a one-size-fits-all approach. But the bottom line is, frankly, the bottom line. What works, works. It isn’t a question of “belief.”
You say agile people don’t get it, yet you (illogically, you know) tar them all with the same brush, and you (illogically again) attribute beliefs to them as a group; beliefs that would suit your own agenda, if they were true. How about we all knock off this nonsense and get back to business?
I had a few words to say to my colleagues involved with agile methods here: http://www.davenicolette.net/agile/index.blog?entry_id=1503348. As you can see, I respect other points of view and I think we need to address the legitimate concerns of those who have doubts about the value of agile methods. To do that we have to be objective and realistic. I don’t have all the answers ready to spew, but I’m very interested in finding them.
Is anyone else, or is this just a mud-slinging fest?
#29 by Dave Nicolette on June 19, 2006 - 10:57 am
Cedric, your article is timely. Discussions are on the increase about what “agile” methods really are, how to apply them effectively, and whether it’s even worth the effort.
My two cents is that we (meaning the IT profession) are not well served by getting into subjective arguments about the merits of this or that based on assumptions, misinformation, opinion that has not been tempered with experience, or (worst of all) habit.
Surely there is ample evidence that traditional methods of doing software development projects have not worked very well. The Chaos Report consistently finds under 30% of IT projects meet their objectives. The report talks about the other 70+% of projects relatively gently – it calls a project “failed” only if it is cancelled prior to completion, and refers to the rest of the general mess as “challenged.” Personally, I prefer to look at the successful projects and just call the rest of them “failed” – that means traditional methods deliver a success rate under 30%. The cancelled projects? Well, having the guts to cut your losses rather than going ahead and delivering a load of crap sounds like a form of success rather than failure, although not complete success. Wouldn’t random change – no methodology at all – yield success in the neighborhood of 50%? With that in mind, it’s hard to fathom why so many people defend traditional methods as fervently as they do. Seems to me they would be interested in checking out alternatives.
We do a lot of different kinds of work in IT. Some of it lends itself very nicely to agile methods. I’m not going to point you to an academic study that “proves” the point. I can only say that after 25 years’ experience doing the wrong things better and better each day, I was ready to call it quits and open some kind of small business, far from the IT field.
I discovered I was not alone in questioning whether the work we do is of any value whatsoever, no matter how well we do it. Along with several others at my company, including a senior-level manager willing to provide what he called “air cover” for our efforts and a customer who was thoroughly disgruntled with the quality of service she had received from the IT department, we decided to look for a better way to get things done. We came across “agile” and it sounded promising, so we decided to give it a try. And we gave it an honest try, too, engaging a consulting firm to come in and show us how to do XP from the ground up. We didn’t just fart around with it a bit and then claim it didn’t work.
Long story short (if you call this short), it worked very well indeed. I don’t defend agile methods because I read about them on a website and thought they sounded cool. I support agile development because I have personally experienced the difference. I’ve received comments from satisfied customers that would be unimaginable in a traditional development project. I’ve followed up with customers two and three years after the fact to see whether the solutions we built had delivered ROI over time, and found out they have done so. It works, and it isn’t necessary to dot every “i” and cross every “t” for agile methods to deliver value, despite what some purists like to say.
That said, I don’t claim the agile approach works for all classes of problems or all the different types of work we do in our profession. One of the reasons our agile projects have been successful is that we have always been careful to select projects that are good candidates for the approach. Most projects in our organization are still done with a waterfall process. I’m a skeptic by nature, and will be the last person to sign up for a one-size-fits-all approach. But the bottom line is, frankly, the bottom line. What works, works. It isn’t a question of “belief.”
You say agile people don’t get it, yet you (illogically) tar them all with the same brush, and you (illogically again) attribute beliefs to them as a group; beliefs they don’t actually hold, by the way, but that sound good to a certain audience. How about we all knock off this nonsense and get back to business?
I had a few words to say to my colleagues involved with agile methods here: http://www.davenicolette.net/agile/index.blog?entry_id=1503348. As you can see, I respect other points of view and I think we need to address the legitimate concerns of those who have doubts about the value of agile methods. To do that we have to be objective and realistic. I don’t have all the answers ready to spew, but I’m very interested in finding them.
Is anyone else, or is this just a mud-slinging fest?
#30 by Dave Nicolette on June 19, 2006 - 11:00 am
I see what you mean about this site messing up posts. I edited mine after thinking the first attempt had not gone through. Read the second, if you’re of a mind to read either.
#31 by Aaron Erickson on June 19, 2006 - 3:30 pm
I can be pretty sure that the reason that 70% of IT projects fail is not due to the great unwashed who have not been trained in Agile yet still having access to IDEs. For those reasons, one need only review Brooks’ The Mythical Man Month, and be slightly aware of what is going on about 2 levels up in the organization, to understand why software projects sometimes fail.
Any process at all, if honestly followed by all stakeholders involved, would probably produce better results, Agile (capitalized) included.
What I find that works… is to do smaller projects. Expect change. Reduce the # of layers, and produce good, easy to read, code, that eliminates any abstractions that you don’t need. I can do that under TDD, but I can also do that using client/server, no TDD, and the waterfall method. And I have exactly as much evidence as the “capital A” Agilists have (as in, it works for me, therefore it works). The only important difference is, I don’t go around to other people’s blogs telling them how wrong they are if they don’t sing from the hymnal.
#32 by Dave Nicolette on June 20, 2006 - 7:28 am
I agree with Aaron that the reason 70% of IT projects fail is not due to IDEs or Agile or “the great unwashed” or any such childish, vapid nonsense. Too bad so many people seem unable or unwilling to rise above that level of discussion. Come to think of it, maybe that fact itself contributes to the problems in our profession.
I think the historical poor performance of IT organizations has to do with the gradual accretion of a thick callus of bureacracy around IT work over a period of decades. There was a time when it was routine for the producers and consumers of IT services to talk directly to each other rather than depending on a pile of formal documents and a bureaucratic layer of intermediaries, called Business Analysts or a similar title, who understand neither the business nor the technology and yet are required (by management edict) to handle all communication between producers and consumers. Under those circumstances, it hardly matters what sort of methodology one uses or how talented and capable the project team may be; they are going to have a hard time delivering real value no matter what they do or how they do it.
The old saw that any process will work as long as good people do their best is all well and good, but unfortunately that’s not the status quo in the IT industry. There are institutionalized barriers to success that can’t be overcome by talent or good intentions alone. It’s time for us to revisit the methods we use in our work and assess them in light of our customers’ needs. If you don’t like the word “agile” then use another word. But don’t dismiss the need for change out of hand just because of a word.
Aaron alludes to the primary barrier to success when he writes, “…if honestly followed by all stakeholders involved.” IT organizations today are characterized by obfuscation, blame-shifting, and avoidance of accountability. People who don’t contribute to the business in any concrete way use process and ritual to justify their continued employment. They concoct myths that become rooted in organizational culture through repetition, such as the myth that it is impossible for a business person and a technical person to understand one another, or that it is impossible to begin writing any code before every detail of a design is codified in a document. The goal of heavyweight IT processes, like government agencies, is to ensure their own continued existence, not to help deliver genuine value. Perhaps that is due in part to the fact that IT organizations, like government agencies, are overhead; they are cost centers, not profit centers. Whatever the cause, the dishonesty inherent in any dense bureaucracy, including the bureaucracy of traditional IT organizations, accounts for the strong emphasis in both the lean and agile movements on the concept of transparency, which boils down to simple honesty. “If honestly followed,” yes indeed. If. Big if.
According to recent survey results, businesses are exploring alternative approaches to IT projects because they are looking for four specific benefits: (a) reducing time to market, (b) improving quality, (c) aligning results with business needs, and (d) reducing cost. Whether you think agile or lean or SOA or some hybrid approach represents a useful way to achieve those goals, as long as you can quantify the value in some objective way then it’s all good. Silly “religious” arguments don’t address the four business drivers that are at the top of our customers’ wish lists these days. I don’t think we’re going to get very far unless we can deliver one or more of those four benefits, one way or another.
Ironically, Aaron offers some very agile suggestions even while disparaging the whole idea of agile development: “…do smaller projects. Expect change. Reduce the # of layers, and produce good, easy to read, code, that eliminates any abstractions that you don’t need.” Makes you wonder who he’s arguing with. A strawman, perhaps.
After he knocks down the strawman – a task that shouldn’t take too long – maybe he’ll join the rest of us in trying to improve our profession. I hope so. With a historical success rate under 30%, we need all the help we can get.
#33 by Aaron Erickson on June 22, 2006 - 8:39 am
Let me respond simply… I loved agile before it became Agile.
#34 by Anonymous on July 2, 2006 - 2:07 am
Oh, ummm, sorry. I was too busy coding; what were you jibbering on about?
#35 by 抛光 on July 5, 2006 - 11:18 pm
抛光
磨料
#36 by Greg Ferguson on August 11, 2006 - 6:07 am
There’s something very important to note here with regards to the anecdotes supplied. Several of the people listing their success with Agile development missed something really important.
“Leaders” are charismatic and able to find ways to make things work. Proponents of Agile are made up of individuals from that leader pool.
In other words, the proponents are not team members – they are team leaders, a role which Agile has discounted with complete hypocrisy.
Agile may be contributing to success of these entrepeneurial people – but when evaluting anecdotes one cannot separate the tool from the team leader.
Saying that “teams failed to apply it” is flat-out a copout. It is the same as admitting THE TOOL FAILED TO BE APPLIED. Why harp on this distinction – rephrasing questions is part of logical discovery, a very important part.
After we ask the question differently, answers begin to suggest themselves. One being it is very possibly because the team is different, even if it is just that one magic person to make it all work was taken away: the individual mattered more than the tool to the group dynamic.
Looking to that team afterwards for success of the next iteration isn’t sufficient either. Impact of an individual lasts a long time. A real teacher can pass on coping strategies that outlast the teacher’s presence.
Use of Agile is getting rid of the manager interference and bureaucracy who otherwise constrain individual talent of such leaders to organize teams, to seek out brilliant but hesistant members and encourage their contribution.
Okay – how about “real world” since this seems to be where all such discussions here go.
Quick example, I’ve met one of the people here who’ve pointed to anecdotal success – Mishkin. He’s smart, a quick thinker and highly personable. He is a leader. He is an entrepeneur. He will be successful no matter what he used.
His involvement may have been the magic, not the tool he used. It doesn’t make Agile the winner – it means he is a winner.
The individual has dynamic effects upon any team. The right person is worth more than a doctrine.
Focussing on what adds value isn’t “owned by Agile”. Involving the customer, quick iterations – yes Agile has promoted these but they are what brings value. Collocating a team has been demonstrated repeatedly to enhance stress levels as noted by elevations of 40% above baseline epinephrine levels in urine samples of members.
Group dynamics under such conditions also show fewer attempts to make ergonomic adjustments and fewere attempts to offer alternatives. In other words, this kills off innovation.
A good leader can continue to infuse life into that environment. It does not make the environment optimal.
I heard somewhere that the IQ of a group can be found by taking its smartest person and dividing by the number of people in that group. While humorous and an obvious joke, it is also food for thought.
#37 by Greg Ferguson on August 11, 2006 - 6:11 am
Something I should also have mentioned…with regards to statistics.
70% of waterfall projects fail.
Two-thirds of companies trying to create Agile teams fail.
Basic math – 2/3 = 67%. 67% and 70% sound an awful lot alike to me…
#38 by Anonymous on August 16, 2006 - 6:59 pm
Greg, your comments present interesting food for thought.
When you talk about charismatic leaders – well, agile development is really supposed to be about the team and not about any given individual. In my experience, that’s been the case. But it’s also been my experience that in order to introduce any sort of alternative to the status quo in a traditional IT shop really does require charismatic leadership. That sort of leadership is necessary to drive change; that would be true regardless of exactly what we wanted to change. It isn’t unique to agile development.
And I must say those teams that functioned well with the agile style of work were not composed of “average” developers. It’s a demanding and intense way to work. Any weaknesses in one’s knowledge or skills is immediately exposed. People who can take that as a learning opportunity do well with agile work, and others might not. I can see how stress levels might be elevated – when people are asked to work that way when it’s not their nature. For those of us who thrive on the approach, the same characteristics of collocation that cause stress in others don’t have the same effect. Instead, it’s invigorating and energizing. I’ll leave the urine samples to you (not my thing), but maybe one conclusion we can draw is that agile work just isn’t for everyone.
At our company we came up with some recruitment guidelines based on personality traits we thought would be compatible with agile work. Later, I informally correlated those traits with the (admittedly old-hat) Myers-Briggs personality type categories. Matching up the compatible types, I found (from a book on the personality type system) that about 14% of humans fit into those particular groups. Obviously that’s not very scientific, but it does suggest that agile development isn’t something we can just substitute, whole-hog, for traditional methods. The majority of people just won’t go for it.
I don’t understand what you mean by “ergonomic adjustments.” It sounds like it might have something to do with adjustable seating, but I have a feeling that isn’t what you meant.
You’re quite right that focusing on value isn’t “owned” by agile. I and others at my company came across agile when we were looking for ways to improve the value we brought to the enterprise. We didn’t start out with any predisposition to use agile. We had never heard of it. We were looking for a good way to bring value, and that’s what we found. It worked in our environment, but not without considerable effort on our part and not without qualified help from an agile consultancy to get us up to speed. It is far from easy to do right, and maybe that’s one of the problems with successful adoption. When it’s done right, it works really well. Whatever problems people are experiencing, I think we do ourselves a disservice if we simply dismiss it all as “agile doesn’t work.”
Regarding the statistics people like to throw around…it occurs to me that a 70% failure rate using methods that have been very well established over the past 4 or 5 decades is a different matter than a 67% learning-curve-difficulty-rate on the part of organizations that are just trying out something new for the first time. They don’t sound an awful lot alike to me. Sure, the numbers are close together, but they don’t represent the same sort of problem.
#39 by Anonymous on August 16, 2006 - 7:00 pm
Greg, your comments present interesting food for thought.
When you talk about charismatic leaders – well, agile development is really supposed to be about the team and not about any given individual. In my experience, that’s been the case. But it’s also been my experience that in order to introduce any sort of alternative to the status quo in a traditional IT shop really does require charismatic leadership. That sort of leadership is necessary to drive change; that would be true regardless of exactly what we wanted to change. It isn’t unique to agile development.
And I must say those teams that functioned well with the agile style of work were not composed of “average” developers. It’s a demanding and intense way to work. Any weaknesses in one’s knowledge or skills is immediately exposed. People who can take that as a learning opportunity do well with agile work, and others might not. I can see how stress levels might be elevated – when people are asked to work that way when it’s not their nature. For those of us who thrive on the approach, the same characteristics of collocation that cause stress in others don’t have the same effect. Instead, it’s invigorating and energizing. I’ll leave the urine samples to you (not my thing), but maybe one conclusion we can draw is that agile work just isn’t for everyone.
At our company we came up with some recruitment guidelines based on personality traits we thought would be compatible with agile work. Later, I informally correlated those traits with the (admittedly old-hat) Myers-Briggs personality type categories. Matching up the compatible types, I found (from a book on the personality type system) that about 14% of humans fit into those particular groups. Obviously that’s not very scientific, but it does suggest that agile development isn’t something we can just substitute, whole-hog, for traditional methods. The majority of people just won’t go for it.
I don’t understand what you mean by “ergonomic adjustments.” It sounds like it might have something to do with adjustable seating, but I have a feeling that isn’t what you meant.
You’re quite right that focusing on value isn’t “owned” by agile. I and others at my company came across agile when we were looking for ways to improve the value we brought to the enterprise. We didn’t start out with any predisposition to use agile. We had never heard of it. We were looking for a good way to bring value, and that’s what we found. It worked in our environment, but not without considerable effort on our part and not without qualified help from an agile consultancy to get us up to speed. It is far from easy to do right, and maybe that’s one of the problems with successful adoption. When it’s done right, it works really well. Whatever problems people are experiencing, I think we do ourselves a disservice if we simply dismiss it all as “agile doesn’t work.”
Regarding the statistics people like to throw around…it occurs to me that a 70% failure rate using methods that have been very well established over the past 4 or 5 decades is a different matter than a 67% learning-curve-difficulty-rate on the part of organizations that are just trying out something new for the first time. They don’t sound an awful lot alike to me. Sure, the numbers are close together, but they don’t represent the same sort of problem.
#40 by Greg Ferguson on August 24, 2006 - 8:59 am
Some valid points there. Though I think they open other cans of worms.
How many of the “failed” waterfall projects brought in people from good waterfall agencies to help them succeed? The same can apply there – waterfall “doesn’t work” is too broad a statement.
Second, sure some of those Agile failures are due to difficult learning curves. However, I NEVER see anyone seriously fault the process. That reeks of subjective discarding of possible problems.
The urine analysis is used as a reference to a REAL number. Not anecdotal. While I appreciate your humour, it also seems something of a dodge.
Stress is chronically elevated as measured relative to waterfall. It’s just not reported and/or recognized. This is confirmed with hard data.
Ergonomic adjustments – yes, I referred to adjustable seating, keyboard placements, etc. All the things known to be required but ignored which are a subtle workplace hazard.
They are also another measure of stress response. Lack of ergonomic adjustment = greater incidence of injury. It also closely correlates with chronic stress.
It is interesting to note that the stress elevations all seem to correlate to radical collocation.
#41 by axvia on August 31, 2006 - 5:01 am
we are doing Agile in India. More info on process and methology is on http://www.xebia.in
#42 by Clarety Consulting on September 14, 2006 - 11:22 am
Agile is lacking the agility to evolve and take on board criticism.
Standard defence of failed projects (of which there are an increasing number) include the following:
1. Wrong or poor implementation.
2. Lack of understanding concerning the manifesto.
3. Half hearted application.
The list is endless.
However, you’ll never find the Agilista’s blaming Agile itself! Vested interests maybe?
Anything or anybody unwilling to learn from bona fide criticism is anything but Agile in nature!
Check out http://www.claretyconsulting.com,
there’s a whole ongoing debate on this at the moment.
Cheers
#43 by Rick on September 19, 2006 - 9:58 pm
My .02: http://rickgaribay.net/posts/292.aspx
#44 by Richard Freytag on October 7, 2006 - 5:32 pm
To the question you support “how do you specify an exponentiation function with a test?” the answer is – with logic programming.
The following is taken from a Prolog tutorial (http://cs.wwc.edu/~cs_dept/KU/PR/Prolog.html)
and gives the following test (rule) defintion of exponentiation:
“Logic programming definition of Exponentiation
% exp(N,X,Z) <- Z is X**N
exp(s(M),0,0) :- natural_number(M).
exp(0,s(M),s(0)) :- natural_number(M).
exp(s(N),X,Z) :- exp(N,X,Y), times(X,Y,Z).
”
So tests can be executable specs.
I would also agree that if you can’t test it its (maybe not useless but), probably random or irreproducable or unreliable.
#45 by Computer Scientist on December 4, 2006 - 6:25 am
Any serious engineer will learn the applicability of their tools to the problem at hand. It is a fundamental concept of being an engineer. Misapplication of a wonderful tool is just as bad as using poor/outdated tools.
#46 by vinothkumar on December 5, 2006 - 4:01 am
My view is, Agile doesnt work all times. It works if you have a perfect team . But not all teams can be perfect.
This is the situation atleast here in india.
software service companies trying get a contract ….
One company says I need 10 resources ( 5 pairs ) . that will cost you 10 * 100$ per day .
The second company says i need 5 resources . that will cost the 5*100$ per day.
Now to which company the contract goes . Unless the IT manager of the company giving the contract knows the advantages of Pair programming which has a probability of 5%. the second company wins the contract. The employees of first company gets fired.
saving the job is more important that following principles.
In india , the trend is Deliver first then fix later. Delivery date will never be changed even if resources reduced, Bugs increased …. and also you will get to see the customer only when he comes for his vacation to india.
TDD stops at the point when there is not even time to type the code for the features.
How can i find time to write test , if i dont find time to not even TYPE(literally) the code .
Agile people dont get it. Anything that is Agile in the world can get out of control easily. Its basic engineering. You change too fast and you burn out . you try to be agile for prolonged time , you will get burnt out.
Regarding the Documentation , in India , people jump jobs every 6 months . Without documentation , its impossible for knowledge sharing . Even the worst Documentations can still help a newbie.
Im not saying agile is bad. Its great but definitely not practical.
Agile Programmers are like scientists . They never understand the cultural , political,economical problems . All they know is Principles and practices.
All Agile People (elite Military generals) , enough speaking about principles and saying “u should have done agile in the first place” , get down to the war field and show us the way .
thanks
vinothkumar
“I ask for a solution , Agile gives me a principle”
#47 by M.SANKAR on January 5, 2007 - 8:29 am
I WANT TO JOIN YOUR TEAM WORKER I AM SCIENCE INTRESTED PERSON
#48 by M.SANKAR on January 5, 2007 - 8:30 am
I WANT TO JOIN YOUR TEAM WORKER I AM SCIENCE INTRESTED PERSON
#49 by kevin brady on March 29, 2008 - 7:10 am
Love the article. I agree with ALL your comments. The long lists of comments looks like gorilla commenting by those members of the Agile Cult all earning fees no doubt on the back of the Agile revolution which is built on the backs of naive developers who are promised golden eggs and release from project managers telling them to deliver to cost time and quality standards. If only Agile could deliver the promises it offers without the potential of financial ruin for those investors in such uncontrolled self assembly projects. Well if only
#50 by Valeri S. on June 12, 2008 - 6:17 pm
I agree with all Cedric’s points. No need to push the whole new methodology. The timely project delivery, high quality code, well designed code, testable & documented code, proper unit tests that cover business logic, efficient customer/business interactions, – all this is normally done if you have a good team. The elitist agile rock stars, who trash other developers who-don’t-get-it, ruin productive team spirit. Project can break in cover-your-ass pieces. These superstars will create only core components (i.e. establishing best practices), leaving the hardest and nastiest parts to other folks, who then have to fix superstar’s code. Try to document the system by creating unit tests for host transactions, database stored procedures, file system dependent configuration code, web services that post messages to 3rd party MQ; and the project is guaranteed to fail. There is no substitute for a good, well though-out and documented architecture AND design, and normal project planning. And there is no substitute for even contribution. Every one in the team must do his own piece of work. Either you do your work, or you don’t, and use agile methodology in very *agile way* to push your work on shoulders of others.