Agile Development Methodologies

Last modified: October 18th, 2013
Scrum Scrum is a lightweight management framework with broad applicability for managing iterative and incremental projects of all types. Ken Schwaber, Mike Beedle, Jeff Sutherland and others contributed significantly to the evolution of Scrum over the last decade and a half. Over the last few years in particular, Scrum has garnered increasing popularity in the software community due to its simplicity, proven success and improved productivity, and its ability to act as a wrapper for various engineering practices promoted by other agile methodologies.
The Scrum Alliance Website
Scrum (development) (Wikipedia)
Mountain Goat Software
Agile Software Development with Scrum (Ken Schwaber & Mike Beedle)
The Scrum.org Website
(XP) Extreme Programming

XP, originally devised by Kent Beck, has emerged as one of the more popular and controversial agile methods. XP is a disciplined approach to delivering high-quality software quickly and continuously. It promotes high customer involvement, rapid feedback loops, continuous testing, continuous planning, and close teamwork to deliver working software at very frequent intervals, typically every 1-3 weeks.

The original XP recipe is based on four simple values – simplicity, communication, feedback, and courage – and twelve supporting practices: Planning Game, Small Releases, Customer Acceptance Tests, Simple Design, Pair Programming, Test-Driven Development, Refactoring, Continuous Integration, Collective Code Ownership, Coding Standards, Metaphor and Sustainable Pace.

Extreme Programming Website
What is Extreme Programming (xprogramming.com)
Extreme Programming (Wikipedia)
"Extreme Programming Explained - Embrace Change (Kent Beck)
Extreme Programming Detailed (c2.com)
Crystal The Crystal methodology is one of the most lightweight, adaptable approaches to software development. Crystal is actually comprised of a family of methodologies (Crystal Clear, Crystal Yellow, Crystal Orange, etc.) whose unique characteristics are driven by several factors such as team size, system criticality, and project priorities. This Crystal family addresses the realization that each project may require a slightly tailored set of policies, practices, and processes in order to meet the project’s unique characteristics.
Crystal Methodologies (Alistair Cockburn)
Crystal Clear Software Development (Wikipedia)
Crystal Clear: A Human-Powered Methodology for Small Teams (Alistair Cockburn)
(DSDM) Dynamic Systems Development Method

DSDM, dating back to 1994, grew out of the need to provide an industry standard project delivery framework for what was referred to as Rapid Application Development (RAD) at the time. While RAD was extremely popular in the early 1990’s, the RAD approach to software delivery evolved in a fairly unstructured manner. As a result, the DSDM Consortium was created and convened in 1994, with the goal of devising and promoting a common industry framework for rapid software delivery. Since 1994, the DSDM methodology has evolved and matured to provide a comprehensive foundation for planning, managing, executing, and scaling agile and iterative software development projects.

DSDM is based on nine key principles that primarily revolve around business needs/value, active user involvement, empowered teams, frequent delivery, integrated testing, and stakeholder collaboration. DSDM specifically calls out “fitness for business purpose” as the primary criteria for delivery and acceptance of a system, focusing on the useful 80% of the system that can be deployed in 20% of the time.

DSDM Website
DSDM (Wikipedia)
DSDM Explained (CodeProject)
DSDM: Business Focused Development (DSDM Consortium)
(FDD) Feature-Driven Development

FDD was originally developed by Jeff De Luca, with contributions by M.A. Rajashima, Lim Bak Wee, Paul Szego, Jon Kern and Stephen Palmer. The first incarnations of FDD occurred as a result of collaboration between De Luca and OOD thought-leader Peter Coad. FDD is a model-driven, short-iteration process. It begins with establishing an overall model shape. Then it continues with a series of two-week "design by feature, build by feature" iterations. The features are small, "useful in the eyes of the client" results.

FDD designs the rest of the development process around feature delivery using the following eight practices: Domain Object Modeling, Developing by Feature, Component/Class Ownership, Feature Teams, Inspections, Configuration Management, Regular Builds, Visibility of Progress and Results.

Feature Driven Development (Wikipedia)
Feature Driven Development (dedicated site)
A Practical Guide to Feature-Driven Development (Stephen R. Palmer and John M. Felsing)
Lean Software Development

Lean Software Development is an iterative methodology originally developed by Mary and Tom Poppendieck. Lean Software Development owes much of its principles and practices to the Lean Enterprise movement and the practices of companies like Toyota. Lean Software Development focuses the team on delivering value to the customer, and on the efficiency of the "Value Stream," the mechanisms that deliver that value. The main principles of Lean include Eliminating Waste, Amplifying Learning, Deciding as Late as Possible, Delivering as Fast as Possible, Empowering the Team, Building Integrity In, and Seeing the Whole.

Lean eliminates waste by selecting only the truly valuable features for a system, prioritizing those selected, and delivering them in small batches. It emphasizes the speed and efficiency of development workflow, and relies on rapid and reliable feedback between programmers and customers.

Lean Software Development (Wikipedia)
Poppendieck Website
Lean Software Development: An Agile Toolkit for Software Development Managers (Mary Poppendieck and Tom Poppendieck)
Kanban

Kanban as applied to software development is a pull-based planning and execution method.  Rather than planning work items up front and pushing them into the work queue of a team, the team signals when they are ready for more work and pulls it into their queue. 

Kanban historically uses cards to signal the need for an item.  For software development teams, these cards are kept on a Kanban Board which is organized into columns and rows.  The columns represent the different states of a work item, from initial planning through customer acceptance.  The specific columns a team uses should meet the needs of the team and be tailored to their context.  The rows on the Kanban Board represent work items.  Work items are sometimes grouped within areas, such as feature sets and category types.

Kanban focuses on maximizing the throughput of a team.  One of the ways it achieves this goal is through the application of Work-in-Process (WIP) limits in each of the states of a work item.  Under a Kanban (or Lean) approach, queues or inventories of work in any state are seen as waste.  The WIP limits enable a team to focus on the optimal flow of work items through the system, minimizing any associated waste.  Kanban allows teams to achieve process optimizations while respecting and maintaining a sustainable pace.

Kanban (Wikipedia)
Kanban Over Simplified (AgileProductDesign.com - Jeff Patton)
Kanban Applied to Software Development (Kenji Hiranabe for InfoQ)
Kanban (Crisp.se)
What is Kanban? (Kanban Blog)
Kanban at Q Con (David Anderson - presentation slides)
Kanban – Successful Evolutionary Change for Your Technology Business (David Anderson)