I've had a lot of trouble with agile projects, though I do think that when it works, it's by far the best way to create working software.<p>My biggest trouble with agile happened when I was dealing with a client who clearly intended to hold my feet to the fire where it came to promised functionality and deadlines, but was absolutely unwilling to consider an alternative approach to a feature or removing functionality to meet an iteration.<p>"Customer collaboration over contract negotiation" is the best way to write good software, but if your client is going to go to your boss and complain that say "hey you promised functionality X by date Y!", you better be careful negotiating that contract!<p>"Responding to change over following a plan" is the best way to write software, but if your client is going to rake you over the coals if you don't meet the deadline that was <i>in. the. plan.</i>, well then you're probably better off just following the plan.<p>Really, agile is a highly effective way of working that requires a tremendous amount of skill and mutual respect (and trust) between all members of a team.<p>Another problem with agile is that just so much has been built up around it. I'm not saying that these things are bad, but they have diluted the original message.<p>I remember once a consultant ambushed me in a meeting and asked "what are your developer velocities?" I didn't know what that meant, and he said (I think he was setting this up) "well, if you don't know your velocities, you aren't agile."<p>For the record, a developer velocity is (as this dude explained it) a way of measuring whether a developer is struggling based on how much of a user "story" is being developed over a particular period of time. It's not a bad way to measure things, but this is a process, a tool, a procedure. As the agile manifesto says, we value these things, but it seems like "agile" has less and less to do with the simple and profound (I mean that without any irony) statements and is starting to become a big mess of consultant and techno babble.<p>We are uncovering better ways of developing
software by doing it and helping others do it.
Through this work we have come to value:<p>Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan<p>That is, while there is value in the items on
the right, we value the items on the left more.<p><a href="http://agilemanifesto.org/" rel="nofollow">http://agilemanifesto.org/</a><p>To me, this is the best way to write software, but it isn't something you can just decide to do. It requires a really major mind shift from everyone. And if it turns out your client values the things on the things on the right more than the things on the left after all,you can find yourself in a very precarious situation as a dev.