I feel the need to distinguish the “Agile Indian” from the “Main street Cowboy”.
Agile is an interesting and powerful set of methodologies, but I hate to see the collapsing of more than one term into one, especially to the detriment of Agile. I also hate to compete inside my organisation against Cowboy coding masquerading as Agile.
Let us start by distinguishing “Cowboy” coding.
- Just leap into the project and start programming as fast as you can.
- No thought to testing each function.
- The emergent behaviors and corner cases in the product may not be considered up-front, only when they are proven to be a problem do they get addressed.
- Whack a Mole style development, just hit the problem in front of you.
Then distinguishing “Agile” programming.
A set of methods that allow the following results.
Small / Quick / Short feedback loops:
Allowing any mistake or wrong direction to be quickly and cheaply rectified.
Techniques: continuous testing, client on site, fast iterations, small teams
Optimal process control:
Any process that is not required increases the cost, reduces morale, increases risk.
Techniques: no Quotes, Stories not Endless/Perfect a-priori Requirements, Optimal Metrics, One methodology per project.
I hope this makes sense, comments are encouraged.