I am a recent convert to Agile methodologies.
Until last year, I worked for a large consulting company that had established a solid reputation using a waterfall approach to deliver solutions.
My current employer is committed to the agile methodology SCRUM. They have developed their own variation of SCRUM and several consultants here have even made a name for themselves delivering presentations on this methodology to customers and at conferences.
So it's only natural that I have been engrossed in SCRUM since joining. Nine months of agile software development have sold me on its benefits.
The biggest advantage I see to SCRUM is the short delivery schedule pushed by the sprints. For those who don’t know, a sprint is a set of features scheduled for delivery in a short period of time (typically 1-4 weeks). A sprint forces (or at least encourages) frequent delivery of working software and provides a great feedback loop to the development team.
When users can actually see, touch and use functioning software, they don't just get value more quickly - they are able to evaluate it more quickly and provide valuable feedback. That feedback might be a rethinking of original assumptions; it might be new ideas sparked by using the software; it might be a reshuffling of priorities, or it might be a clarification of some miscommunication between the users and the developers. It will probably be several of these things.
That miscommunication issue is one that occurs far too often on software projects. Catching these misunderstandings early in the life of an application can save a huge amount of time and money. We all know that the cost of making a change to software goes up exponentially the later that change is made.
By delivering something useable to the customer several times a month, we are providing value to the customer in a timely manner. At best, this value comes in the form of software that enhances their ability to perform their job. At worst, we provide something they didn't ask for. But this worst-case scenario also adds value because we can use the delivery to clarify the misunderstandings and poor assumptions that leaked through the design.
I think back to the last waterfall project in which I was involved. Our team was charged with designing and building an integration layer between an e-commerce web application (that was being designed at the same time) and dozens of backend systems (that were in a state of constant flux). We spent months designing this integration layer. During these months, the systems with which we planned to integrate changed dozens of times. These changes included adding or removing fields; placing a web service in front of an existing interface; and completely redesigning and rewriting backend systems.
Each of these changes forced us to re-examine all the design work we had done and to modify all our documents to match the changed requirements. In some cases, we had to start our design over from scratch.
An agile approach would have helped immensely. Instead of designing everything completely before we started building anything, we could have minimized changes by designing, building, and deploying the integration service to one back-end system at a time. By selecting a single integration point, we might have been able to quickly deliver a single piece of functionality while other backend systems to stabilize.
I'm not going to suggest that agile is the appropriate methodology for every software project or that no other methodologies have value. My former employer delivered countless successful projects using waterfall techniques.
But it pays to recognize when agile will help your project and it is definitely a useful tool for any developer, architect or project manager to have in his or her toolbox.