Friday, October 16, 2009

Agile Development

This post will provide a general overview of the Agile Development methodology. It is based on a presentation I developed a few months ago that is posted to my LinkedIn profile page.

There is a wealth of information available online on this topic, but here is a definition of Agile Development that I found that boils it down to a short list of ideas:

An iterative and incremental (evolutionary) approach to software development
which is performed in a highly collaborative manner
by self-organizing teams within an effective governance framework
with "just enough" ceremony
that produces high quality software
in a cost effective and timely manner
which meets the changing needs of its stakeholders.

The core ideas of Agile development are embodied in the Agile Manifesto. It was created in 2001 by some of the key thought leaders in the software development field. It states:

We are uncovering better ways of developing
software by doing it and helping others do it.
Through this work we have come to value:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

That is, while there is value in the items on
the right, we value the items on the left more.

There are a set of principles that underlie the Manifesto that illustrate some of these ideas:
  • Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  • Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
  • Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
  • Business people and developers must work together daily throughout the project.
  • Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
  • The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
  • Working software is the primary measure of progress.
  • Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
  • Continuous attention to technical excellence and good design enhances agility.
  • Simplicity--the art of maximizing the amount of work not done--is essential.
  • The best architectures, requirements, and designs emerge from self-organizing teams.
  • At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
There are many different types of Agile. Here are the main ones:
  • Adaptive Software Development (ASD)‏
  • Agile Modeling
  • Crystal methods
  • Dynamic System Development Methodology (DSDM)‏
  • eXtreme Programming (XP)‏
  • Feature Driven Development
  • Lean Development
  • Scrum
A great explanation of Agile and some of these different disciplines can be found here and here.

Steven Thomas had developed a Generic Agile Lifecycle that shows at a high level how Agile development projects can be conducted:

The key pieces here are that the development occurs in fixed duration "timeboxes" and that these timeboxes are grouped together into releases. This also has implications for resourcing and general project management as well.

Steven covers the topic of Agile Project Management subject thoughtfully and in detail on his site.

While it might seem that Agile would improve all software development delivery, this is not necessarily the case. In their book
Balancing Agility and Discipline: A Guide for the Perplexed , authors Barry Boehm and Richard Turner summarized the types of projects that were better suited to an Agile or more traditional plan-driven development methodology:

Agile home ground:
  • Low criticality
  • Senior developers
  • Requirements change very often
  • Small number of developers
  • Culture that thrives on chaos
Plan-driven home ground:
  • High criticality
  • Junior developers
  • Requirements don't change too often
  • Large number of developers
  • Culture that demands order
Once the decision is made to adopt Agile methodologies, at some point in the process there is a need for tools to facilitate the process. Here are some attributes/criteria for selecting a tool, and an abbreviated list of some of the tools available:

  • Sprint/ Iteration/ Timebox Planning
  • Backlog Management
  • Testing/ Coordination
  • Resource Planning
  • Documentation
  • Integration (Quality Center, Clearcase, etc.)‏
  • IBM Jazz
  • Microsoft Solutions Framework (MSF) for Agile
  • VersionOne
  • Rally Software
  • Serena Software

Again, this is just a brief overview of a broad subject. Here is a partial list of websites with a wealth of additional information:

Agile Alliance:

Agile Software Development:

Agile Manifesto:

Agile University:

Extreme Programming:

As always, I welcome your comments and feedback.