Agility in Software Processes
In 2001, as a response to a community that demanded more flexible processes, a group of 17 software development professionals met to discuss alternative software development methodologies. Having a clear vision of the flexible, lightweight and team-oriented software development approach, the 17 practitioners proposed the Manifesto for Agile Software Development that summarized the fundamental principles of the new approach:
“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”
Although triggering a new era in software development, the manifesto was not a pioneer in proposing an agile approach for software development. Actually the history of agile approaches dates back to 1957, when John von Neumann, Geral Weinberg, Bernie Dimsdale, and Herb Jacobs were applying incremental development techniques for software that were built in IBM and Motorola. Although not knowing how to classify the approach, they were practicing, they realized clearly that it was different from the Waterfall Model in many ways. The main contribution of the manifesto was packing a set of existing values and principles and creating a philosophy that has come to be a universal and efficient new way to manage software projects.
How agile works
In traditional waterfall methods, the development approach follows a strict linear order that typically involves the stages: requirement, design, implementation, verification, and maintenance. The business requirements and the project scope are defined at the beginning of the project and the subsequent phases are planned to accommodate these requirements and scope. At the end of the project, the software is delivered to the customers and stakeholders. With agile methodologies, on the other hand, take an iterative approach and software development is conducted through a number of smaller cycles (iterations or sprints). Each cycle is a mini process development instance: it has a backlog and a set of orchestrated tasks organized in stages such as: requirement, design, coding, testing, and deployment. At the end of each development cycle, a potentially shippable piece of software is delivered. Thus, with every iteration, new features are added to the product, which results in the gradual project growth. Given the delivered features are validated early in the development life cycle, the chances of delivering a potentially failed product are lower.
There is no formal agreement on the meaning of the concept of “agile”. However, it is common sense to denote as “agile” those software development processes or methods that are shaped around the values and principles proposed in the Manifesto for Agile Development. These methods include, but are not limited to: XP , Scrum, Crystal Family, Feature Driven Development (FDD), Dynamic Systems Development Method, Adaptive Software Development, and OpenUp. According to the recent 14th State of Agile, “Scrum and related variants are” the most popular of these agile methodologies.
It turns out the agility movement spread to other industries than just software development and nowadays being Agile is a culture promoting and delivering good results at scale. In fact scaling agile initiatives such as SAFe, advocate the whole organization should embrace agile and lean practices.