October 31, 2006
Agile is a means to an end, not the end itself
Agile software practices are a tool. They're a means to an end, not an end themselves.
The goal of any project team is delivering business functionality with high quality and low cost. The manner in which you achieve these goals varies depending on the people you have on the team, the company's management structure and style, and the project's goals.
Just because the team is pair programming, adaptively planning, and driving development with tests does not mean it will achieve the business goal. If the team is programming solo and doing big up front design it does not mean the team will fail.
I advocate Agile practices; they are generally a better way to get software written.
Too often, however, Agile zealots insist that their ideas on how a project should be run must be unquestionably followed. They disregard the client's wishes, processes and management style. They do not consider the team members' abilities and wishes.
These zealots end up damaging the project more than they help. They strain relationships with the client and are too quick to change project practices.
Remember, you must always ask yourself: is this practice I am suggesting going to allow us to deliver more business value faster, cheaper, and with better quality? If the answer is yes, then talk to your teammates about making the change.
If they aren't appropriate, don't advocate the practice just because "it is Agile."