A brief history lesson is in order before we begin.
In the old days of software development, projects followed a waterfall pattern wherein requirements were first drafted, then refined, and handed over to a programmer or team of programmers to implement. Finally, testing was done prior to implementation.
Feedback from the programmers to the software designers in this process is cumbersome and typically leads to delays and cost overruns. After many years of frustration with this process, Agile development has emerged as a lightweight, faster alternative that favors feedback and testing during the development process, not as a separate phase prior to implementation.
What is Agile?
The Agile Manifesto defines twelve principles of Agile Development:
- Customer satisfaction by rapid delivery of useful software
- Welcome changing requirements, even late in development
- Working software is delivered frequently (weeks rather than months)
- Working software is the principal measure of progress
- Sustainable development, able to maintain a constant pace
- Close, daily cooperation between business people and developers
- Face-to-face conversation is the best form of communication (co-location)
- Projects are built around motivated individuals, who should be trusted
- Continuous attention to technical excellence and good design
- Simplicity—the art of maximizing the amount of work not done—is essential
- Self-organizing teams
- Regular adaptation to changing circumstances
For the full details, see the Agile Manifesto.
Agile development itself is an overall term for several development methodologies. Some of the most popular of these are SCRUM, Method-driven development, and XP (Extreme Programming). While each of these is a development discipline in its own right, they all share the same core values of Agile development, by incorporating instant feedback and iteration as a means of continuous software development and refinement, leading to professionally developed software solutions.
In today’s fast moving technology world, software companies are continually pressured to adapt to changing technology and market conditions to deliver high quality software.
Agile development provides the best method for swift and consistent delivery of quality software to the customer, from early on in the project lifecycle through delivery to maintenance. Delivering early working software (even if it’s missing some features early on) is much more useful to a customer than showing plans and slides during meetings. This allows for instant customer feedback into the development process, which in turn allows the programming team to quickly adapt and implement changes to the plan.
Communication and Teamwork
For Agile development to be successful, team communication is critical. Be it email, phone, or face to face whiteboard meetings, having everyone on the team “in the loop” is a primary concern to the success of the project. This favors a flatter approach to teams instead of the usual software team heirarchy
SCRUM — defined as “a flexible, holistic product development strategy where a development team works as a unit to reach a common goal”, SCRUM eschews the traditional, sequential approach to software development in favor of an “All hands on deck!” approach. That is, SCRUM recognizes that the full problem space cannot be totally defined at the beginning of the project, and that it’s critical for all team members to respond to emerging requirements as the project progresses.
Agile Testing — This involves each member of an agile team working at a sustainable pace, with special qualities contributed by experienced testers. This ensures consistent delivery of quality software at frequent intervals to the customer.