A Gentle Introduction to Agile
I've been writing and talking about the Agile methodology for the past year, and I've been a practitioner for much longer. In the process, I've encountered some confusion over what Agile is, how it's applied, and where it can be applied. For instance, the first reaction most people have, including myself, when confronted with the option to use Agile is, "Oh that won't work here!" Even for organizations that use Agile, there may be other misconceptions. For instance, some believe it cannot be used for embedded systems development, government work, open-source projects, or in regulated industries. The short answer: It can be used, because Agile is adaptable. These papers discuss Agile for embedded and Agile for systems engineering.
Comparison with Other Processes
When approached with the prospect of using Agile for the first time, many developers and managers cringe at the thought of having to follow yet another process improvement initiative. Other methodologies tend to focus on single qualities such as team productivity, requirements definition, or quality in terms of implementing requirements as stated early in the development cycle. While use of other processes might indeed result in building exactly what the requirements document states, what happens if the requirements were wrong or market conditions have changed?
The creators of Agile examined past methodologies to form a set of best practices. As a result, Agile tends to be far less rigid and more adaptable. In fact, although it's best to have end-to-end adoption of Agile early on in your project, it can be phased in over time, and in limited scope. Agile isn't about tracking a rigid project schedule, passing through gates, generating documents, or working at breakneck pace. It's meant to help you become a smarter organization as you consistently learn from each iteration of your software.
The Agile Manifesto and Principles
Stressing a lightweight process, the creators of the Agile process stated their goals and key values in a mere 68 words, which are:
Manifesto for Agile Software Development
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
As the manifesto states, Agile focuses on the people involved in software (i.e., developers and users) more than tools or a rigid set of procedures. This doesn't mean that tools aren't useful in the Agile approach — quite the contrary — it means that the importance of building good team collaboration and motivation is greater. Likewise, while it's important to document decisions made along the way, the Agile approach prefers building and sharing software artifacts over highly detailed requirements and design documents that are often out of date before they're complete.
With more frequent iterations and releases comes an increase in customer collaboration. Agile encourages working more closely with end users during the development process to be sure what you're building meets their needs. Discovering this earlier in the development process, as opposed to the end, makes it easier to adjust to change.
In a sentence, Agile helps you avoid two big pitfalls found with other processes: integration nightmares that occur at the end of the development cycle, and learning that your customers' needs weren't met after the software is released. As a result, with Agile, organizations and their software are almost always in a state ready to be released with the most up to date customer approved features.
Summary — The Benefits
Agile borrows from the theories of Lean manufacturing, which is a very disciplined process aimed at reducing waste and promoting efficiency. These same Lean principals have been applied to other areas, including software development. As such, Agile itself promotes discipline, planning, record keeping, and collaboration. It's far from the free-for-all, undisciplined approach to development that some people (mis-)perceive it as. Additionally, it's not a magic act. It doesn't guarantee faster delivery of software, but it will help reduce wasted time and effort as your team reacts to changes in requirements and missed requirements quicker. Over the long term, your release progress will accelerate as a result of this gain in efficiency.
Agile helps remove adversarial relationships when customers become collaborators, not simply parties on the other end of a contract. Additionally, IT is no longer considered a rival group, unwilling to deal with change. Working more closely with developers in what's appropriately called DevOps, companies are streamlining their release and support processes as this occurs much more often. No longer are developers simply throwing new software "over the wall" to QA and IT; instead they're working together from the beginning of each sprint to plan each phase of application lifecycle management (ALM).
In conclusion, as your organization becomes more Agile and iterative, with shorter-term release cycles as a result, the headaches involved with big-bang integration efforts that occur at the end of long-term development projects will disappear. Take if from someone who has been involved in large-scale integration efforts, this alone is worth adopting the Agile process.