I'm a big Agile fan. I closely follow material written about it, especially Martin Fowler's work. I used to conduct training sessions on the basics of Agile for the new joinees in my previous company. Recently I've started giving talks on Agile, like in PLUG Mash and Barcamp Bangalore.
Here's an excerpt from a paper I wrote; it basically summarizes what I think of Agile (also check out these Agile links):
Agile is a conceptual approach toward software development that is based on certain principles. It is more of a philosophy than a rigid method and any software process that imbibes the prescribed principles can be said to be 'agile'.
It all started when 17 software engineers met in 2001 to discuss how they could unify their respective methodologies under one umbrella. They saw that their methods shared common values; they listed these as the Agile Manifesto.
Agilists say that they value:
My take on Agile methods is that they are about:
Of the above, the last point is the most important. It encompasses the essence of being agile. The just enough approach is just that: doing only as much as needed, not any more, not any less. This is applied to every aspect of software development – requirement gathering, designing, planning, coding, testing and documenting. This allows for flexibility, the ability to accommodate change at any stage of development, even real late. It is a natural outcome as we haven’t already planned or done too much ahead of time and hence hardly any effort is wasted when requirements change.
Examples of Agile methods include Extreme Programming, Scrum, Crystal Clear, ASD, and so on.
Agile is about frequent software builds and releases. This makes continuous integration and testing of the various modules extremely important. Test automation and configuration management help realize this.
Many of the Agile methods suggest a development pattern that involves creating quick and immediate programmatic solutions to the problem at hand and later reviewing and refactoring them as necessary.
This refers to an ideal of having only a single artifact that records a concept and having other artifacts like code, documentation, use cases, etc generated as views from that artifact instead of having them as multiple records of the same concept. This increases maintainability, traceability and consistency. The core artifact usually preferred is the source code.
Even though Agile methods follow the just enough approach, the design should be such that it can easily incorporate changes in requirements.
A component-based architecture provides flexibility, configurability and customisability. New or changing requirements can be handled by simply modifying and/or adding a few components instead of having to rework the entire system.