You've heard the buzz: Agile development is all about solving the problems associated with traditional software development. The Agile Manifesto
states, "We are uncovering better ways of developing
software by doing it and helping others do it." But just what is better about Agile development?
As a software development manager, I've had to consider this very question as we've progressed from testing the Agile waters to a full-blown implementation of Agile across our organization in the past few years. My thinking and this list are the result of my personal experience with Agile, numerous conversations, training, and plenty of reading on the subject of Agile development written by other experienced, very capable practitioners.
1) Superior ROI
With many software projects, the business is forced to wait for the completion of the entire project before it can begin deriving a benefit from that investment. Given the challenges in meeting software schedules, those on the business side of the house not only have to wait for delivery of the software, they have the potential to be disappointed in a couple of ways:
a) Features are trimmed from the final delivery.
b) Quality trade-offs are made.
(There are other ways to be disappointed, and many are addressed in this list.)
Agile emphasizes delivering early and often, enabling the business to begin generating a return on its investment much earlier. Agile does ask for discipline and participation from the business as part of the deal, such as rigorously prioritizing the features and being available to answer questions during the development cycle. In return, the business gets its highest-valued features delivered early, and delivered with quality.
2) Business agility is embraced
In order to capitalize on opportunities, the capability for a business to adapt and respond to change is critical. Software development practices shouldn't run counter to business needs by forcing the business to choose and adhere to a set of pre-determined features that will be delivered months, if not years, into the future.
Agile development welcomes and adapts to change. Because software is delivered in short iterations (measured in a few weeks) from a prioritized backlog of features, Agile development projects are able to easily adapt in accordance with changing business conditions.
3) Agile development reduces risk
There are a number of risks (a.k.a., challenges) with every software project. Schedules, budgets, scope creep, and one of the most demoralizing for everyone involved - particularly if you've exceeded your planned schedule and budget - delivery of software where the users "got what they asked for, but it isn't what they wanted" because the requirements were not understood in the first place. (This sometimes masquerades as "changes in requirements.")
Agile development seeks to avoid these issues with frequent delivery of working software that allows the business users the opportunity to provide feedback based on frequent inspection. This permits the team to make immediate corrections if there was a misunderstanding.
The frequent delivery of working software also keeps schedules and budgets in check. There is complete transparency and certainty about the progress of the team because the features delivered slice vertically through the architectural layers. This eliminates the late-stage integration and quality issues suffered with software projects that use different delivery mechanisms.
Finally, the business has the option of discontinuing further investment and retaining what has been delivered at any time, instead of being forced to make a full (or greater) investment in order to build out the software to a state where it is suitable for use.
4) Agile development increases productivity
Producing software that meets the needs of the business requires the involvement of knowledge workers from a variety of disciplines - business and technical - to work together. Agile development focuses the team's attention like a laser on delivering the highest-priority, highest-valued features in short increments of time using the most productive mechanisms to accomplish the work.
As part of this delivery, Agile development goes beyond using directed teams that are in reality nothing more than a collection of individuals working on assigned tasks. Agile teams embrace collaboration in the truest sense of the word; there are shared goals, shared knowledge, shared learning, shared progress, and a shared responsibility by the team to meet its commitments.
Another productivity increase comes from teams operating autonomously, where the teams make informed decisions about their day-to-day work without the need for constant managerial direction. Not only does this expedite certain decisions by keeping them localized, employees who have more control over their day-to-day work are more energized and engaged about their work.
When an autonomous, highly collaborative, multi-disciplinary team is firing on all cylinders, the productivity gains can be extraordinary.
5) Agile development creates a sustainable development environment
Software projects rarely meet their initial schedule. Overtime with the mandate to "work harder" is frequently used as it becomes apparent that a project will be running longer than anticipated. Often times, frustrated managers feel justified in holding those who provided the estimates at fault for not meeting their commitments -- in spite of the fact that an estimate is supposed to be an approximation and not a precise figure.
There are a number of problems with the regular use of overtime, including more mistakes being made by tired employees, risk of costly turnover, and the simple fact that a constant overtime model is not sustainable in the long run.
Agile development sizes User Stories in points and tracks team velocity -- the User Story points that are completed in each 2-4 week iteration. Over a period of time, it becomes crystal clear how much work can be realistically accomplished by a team on a sustainable basis. The goal then becomes one of working smarter to improve, not harder.