s we near the fifth anniversary of the Agile Manifesto
, the shift from Waterfall software development to Agile methodologies and practices continues to gain momentum. At this year's Agile 2006 Conference in Minneapolis, MN, there was much discussion about whether Agile had "crossed the chasm" yet (a la the book "Crossing the Chasm" by Geoffrey A. Moore), but there was no debate about whether Agile had reached the chasm. Because proper application of Agile techniques and processes is demonstrating success in greater numbers all the timeespecially in the most difficult situationsinterest in adopting Agile is at an all time high.
But once an organization decides to adopt an Agile development regimen, there is still plenty of difficult research and decision-making to be done. In particular, navigating the various Agile methodologies available can be confusing to the Waterfall-minded. The most popular Agile methodologies in use today appear to be Extreme Programming (XP), Scrum, Feature Driven Development (FDD), Lean Software Development, Agile Unified Process (Agile UP or AUP), Crystal, and Dynamic Systems Development Method (DSDM). This two-part article will briefly explore the Agile value system, and analyze how these methodologies manifest these values. Particular care will be taken to highlight the similarities and differences between each methodology and we will conclude with a brief analysis of the varying business contexts that may make one methodology more appropriate than others. (Read part 2 here.)
Agile software development is a style of software development characterized by an emphasis on people, communication, working software, and responding to change. Its principles are summarized in its seminal declaration, the Manifesto for Agile Software Development. One of the most notable characteristics of this manifesto is that it is worded as a value statement and not a concrete plan or process. This underscores Agile's nature as a style of development consistent with the values laid out in the manifesto.
All Agile methodologies engage in an iterative workflow and incremental delivery of working software in short time-boxed iterations. An iteration is essentially a small release of software. Generally during each iteration many activities will occur in parallel, such as requirements, coding, and testing. Iterations are typically a fixed length (although this length varies between the methodologies) and thus are referred to as time-boxed. The time allocated to each iteration is sometimes referred to as a cycle time.
Agile methods also differ in the activities and artifacts that they produce. Methodologies that have many artifacts (or work products) and steps along the way are referred to as higher ceremony. Conversely, methodologies with less emphasis on these are referred to as lower ceremony. The number of people involved and the number of "sign offs" also helps to define the amount of ceremony around a particular methodology. It is important to strike an appropriate balance between the two in any given context.