Agile Software Development

The agile movement attempts to move software development away from large presriptive processes and towards processes that are more responsive to change. Change is a fact of life and a realiy of modern business. We might as well embrace it. A number of methodologies have sprung up, each with their own characteristics.

The agile movement is defined in the Agile Manifesto. They promote short and frequent iterations for rapid feedback and responsiveness. Two techniques in particular have emerged from the agile movement. Refactoring applies successive transformations to the code to keep it as simple as possible while maintaining behavior. Test-Driven Development makes you write a test before the code which it verifies. Together, they have defined a new coding cycle for agile developers:

I'm test-driven!

  1. write a test
  2. write just enough code to make the test pass
  3. refactor all the code and tests mercilessly
  4. repeat

In recent years, a movement for Software Craftsmanship has emerged, with a large intersection with the people in the agile movement.

Here are some of the more widely known methodologies:

eXtreme Programming (XP)
The one that started it all. It takes practices that make sense at first glance, an pushes them to their extreme. Highly controversial, many say that it is only glorified hacking.
Lean Programming
What modern manufacturing can teach software developers. Focus on activities that produce value and aggressively cut down on things that don't add value.
I attended a presentation by lean programming proponent Mary Poppendieck.
Scrum
List features for roughly one month's worth of work, an run with it. For one month, the development team cannot be distracted and works in virtual isolation. Someone called it the planning game from XP without all the other, code-related practices.
Agile Modeling
Agile programming ideas applied to software modeling.