Agile Software Development and Its 12 Principles
Agile software development was the response to an issue detected by business owners and developers. In the 90’s there was a proliferation of PC computing in business which led to a software development crisis. This crisis had its roots in time efficiency. At that moment, business software development took around 3 years to be completed but for some industries like aerospace and defense it was up to 25. Extremely difficult hardware and software systems were designed at the time which led to a common frustration among developers. These common feeling led the community of developers to create a way to get out of this crisis, putting in place many ideas and using and software engineering in all the methodologies created within the 70’s and the 90’s.
This idea took life of its own and is now known as waterfall methodology. “This given name revolved around the concept of a waterfall, requirements must be complete before moving on to functional design, functional design complete before detailed design, and so on through the sequence. And like water not following uphill, there are rarely provisions to return to an earlier stage of the process.” We can say that the waterfall method provided planning and documentation but never really helped delivering working software.
It was then when we saw the rapid application development software reponse of James Martin to the urge of time management within software development. A methodology that “reduces the preparation stage and quickly gets into development, so the business could begin to collaborate right away with the development team by seeing a working prototype in just a few days or weeks.”
There was also a move toward so-called iterative software development. “Iterative development is a way of breaking down the software development of a large application into smaller chunks. In iterative development, feature code is designed, developed and tested in repeated cycles.
As a conclusion, the software development community has latched onto the Agile Manifesto and its 12 principles as the definitive statement of the agile software development movement:
The twelve principles of agile development include:
- Customer satisfaction through early and continuous software delivery– Customers are happier when they receive working software at regular intervals, rather than waiting extended periods of time between releases.
- Accommodate changing requirements throughout the development process – The ability to avoid delays when a requirement or feature request changes.
- Frequent delivery of working software – Scrum accommodates this principle since the team operates in software sprints or iterations that ensure regular delivery of working software.
- Collaboration between the business stakeholders and developers throughout the project – Better decisions are made when the business and technical team are aligned.
- Support, trust, and motivate the people involved – Motivated teams are more likely to deliver their best work than unhappy teams.
- Enable face-to-face interactions – Communication is more successful when development teams are co-located.
- Working software is the primary measure of progress – Delivering functional software to the customer is the ultimate factor that measures progress.
- Agile processes to support a consistent development pace – Teams establish a repeatable and maintainable speed at which they can deliver working software, and they repeat it with each release.
- Attention to technical detail and design enhances agility – The right skills and good design ensures the team can maintain the pace, constantly improve the product, and sustain change.
- Simplicity – Develop just enough to get the job done for right now.
- Self-organizing teams encourage great architectures, requirements, and designs – Skilled and motivated team members who have decision-making power, take ownership, communicate regularly with other team members, and share ideas that deliver quality products.
- Regular reflections on how to become more effective – Self-improvement, process improvement, advancing skills, and techniques help team members work more efficiently.
Agile software development changed the course of software development and today we can say there various ways to develop software in really short periods of time depending on the aim of each business.