This week I had an interesting (and heated, of course) conversation on the Northwest C++ Group mailing list, following an Agile/Design Patterns webinar announce by Alan Shalloway.
I responded to the announcement in a sarcastic tone that some people found funny. Some consultants felt offended by the "unfriendly remarks". Boo hoo!
Several people gave examples of how Agile had been misused in real-life projects.
Read the above line again, because that's where the crux of the problem with Agile is: it is more often misunderstood and misused than not (hm, where did I hear that before? "Communism is not bad, it was just incorrectly applied by the Soviet Block").
Defending Agile on such grounds is equivalent to saying that there's nothing wrong with using raw pointers in C and C++, people just have to learn to do it right; hire expensive consultants and trainers to tell them how to avoid dangling pointers and such. What about using smart pointers or a garbage-collected language, then?
Has it not been said of yore that programming languages and APIs should be designed so that they encourage the correct use rather than the other way around?
If Agile encourages incorrect usage, then it is not a well-designed methodology. It needs some serious patching.
I showed the above paragraphs to a friend and he quickly rebutted me: "You criticize Agile yet you do not even know what Agile is. Please define Agile for me".
Awesome point! It greatly explains the misuse of the methodology: people hear the word and go ahead and apply whatever they think Agile is. Like some manager dude who does not allow his developers to fix memory leaks, because such activity is not covered by a "user story" on his cork board.
XP, Agile, Test Driven Development have become anti-brands. These buzzwords have been so badly abused that they are now diluted.
Even worse, Agile is now associated (in many people's minds anyway) with weaselly consultants and incompetent managers.