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 reality 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:
- write a test
- write just enough code to make the test pass
- refactor all the code and tests mercilessly
- 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.