What is Agile Software Development?
In the late 1990’s several methodologies began to get increasing public attention. Each had a different combination of old ideas, new ideas, and transmuted old ideas. But they all emphasized close collaboration between the programmer team and business experts; face-to-face communication (as more efficient than written documentation); frequent delivery of new deployable business value; tight, self-organizing teams; and ways to craft the code and the team such that the inevitable requirements churn was not a crisis.
Agile software development is a group of software development methodologies based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams.
The Agile Manifesto
In February 2001, 17 software developers met at a ski resort in Snowbird, Utah, to discuss lightweight development methods. They published the “Manifesto for Agile Software Development” to define the approach now known as agile software development. Some of the manifesto’s authors formed the Agile Alliance, a nonprofit organization that promotes software development according to the manifesto’s principles.
The 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.
The Twelve Principles of Agile Software
We follow these principles:
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- Business people and developers must work together daily throughout the project.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- Working software is the primary measure of progress.
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- Continuous attention to technical excellence and good design enhances agility.
- Simplicity–the art of maximizing the amount of work not done–is essential.
- The best architectures, requirements, and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Agile vs Waterfall
Agile methods are sometimes characterized as being at the opposite end of the spectrum from “plan-driven” or “disciplined” methods, it focus on adapting quickly to changing realities. When the needs of a project change, an adaptive team changes as well. An agile team will have difficulty describing exactly what will happen in the future. The further away a date is, the more vague an adaptive method will be about what will happen on that date. An agile team cannot report exactly what tasks are being done next week, but only which features are planned for next month. When asked about a release six months from now, an agile team may only be able to report the mission statement for the release, or a statement of expected value vs. cost.
Waterfall methods, in contrast, focus on planning the future in detail. The team can report exactly what features and tasks are planned for the entire length of the development process. Waterfall teams have difficulty changing direction. The plan is typically optimized for the original destination and changing direction can require completed work to be started over. Waterfall teams will often institute a change control board to ensure that only the most valuable changes are considered.
The waterfall model is suited for development of programs that are already stable. That is, their design does not need a major makeover. In situations where the designers of software can accurately predict the flaws that may arise can be developed through a waterfall model. Despite all its flaws, a waterfall model design is easier to manage and the development costs can be ascertained beforehand.
Agile models are applicable in every area of software development. It depends a lot more on the team effort of above average programmers, than relying on a few expert programmers. It is best suited for web based applications where its iterative nature helps in incorporating and correcting the various bugs that arise over time.