Agile development is a type of software development approach which involves the collaboration of end-users and cross-functional teams to deliver business solutions and products in a flexible and nimble way. The use of an agile development methodology provides organizations with early delivery and continuous improvement to support rapid and flexible changes to the requirements. If you want to understand what is the agile methodology, then a good place to start is with the Agile Manifesto and the associated Twelve Principles. These were first published in 2001 and continue to define the approach. They include a full set of principles and values for agile development and provide the best agile methodology definition available today.
Responding to change
In essence, such a development approach provides the capability to create and respond to change. It is a way of dealing with, and ultimately succeeding in, an uncertain and turbulent environment. That type of environment has always existed but is even more prevalent in today’s business world. Agile development approaches provide a way of thinking and not rigid structures. This has prevented agile development from becoming rigid and frozen in time. Adopters and the wider community have always supported, encouraged, and embraced the development of new ideas and concepts.
Agile Development: Different Methodologies
Some people think that there is only one agile development approach, the scrum methodology. While this is one of the types of agile methodology and was the first widespread incarnation in software development and, for some, is still the best agile development methodology, today, there are many more types available. Common themes that exist in all of the agile methodologies for development include:
- Small amounts of functionality are delivered incrementally in frequent iterations.
- Small development teams, typically 5-7 people.
- Continual collaboration between teams and the customers.
- Focus on beneficial customer outcomes.
Agile development encourages the creation of self-sufficient, self-determining teams, empowered to develop solutions, ways of working, and resolution to issues themselves. Each team member should have multiple skill sets, with the ability to work confidently as an individual or with other team members, depending on the requirements at the time.
Embracing the concepts
One of the best ways to learn agile methodology concepts is to become part of an agile development team. The learning will also require an open mind that is receptive to being guided by ideas and concepts, instead of rigid frameworks and processes. This is best nurtured by being part of a team that has already embraced the necessary changes to attitude, behavior, and culture. Agile methodology training can also be useful but can be a wasted investment unless the concepts are soon applied to real-life situations.
Transforming how developments are tested
One example of how agile development has continued to evolve is in the application of the concepts to how software is tested. Most waterfall methodologies defined the tests in the design stage, ensuring that every requirement had an associated test. The testing was then carried out by a separate team, as it was believed that this independent view would eliminate any bias in assessing test results.
Agile development, however, has a completely contrasting view. An agile testing methodology recognizes that testing is not a separate phase but is an integral part of software development. In fact, it should be done by the same people who did the coding. All members of the team ‘own’ the code and are collaboratively responsible for its success, providing a “whole-team” approach to ensuring quality in the delivered products. Testing and coding are done incrementally and interactively, building up each feature until it provides enough value to release to production.
A good testing methodology will include several types of tests, both functional and non-functional. The scope of these tests should include:
- Code testing
- Module testing
- System testing
- Integration testing
- End-to-end transaction testing
- Failure mode testing
- Security testing
- Scalability testing
- Load testing
- Usability testing
- Regression testing
Testing is seen as a key aspect of delivery and something that must never be bypassed just to hit timescales. Tests should be comprehensive and cover both testing new functionality and ensuring that previously existing functionality continues to work as expected. A good agile development methodology will also use automated tests, with the number of ‘use cases’ being tested increasing over time, capturing and re-playing how the product is used by customers. Tools are available that can provide suitable test harnesses. The environment used for testing must be as live-like as possible.
One useful concept is ‘canary’ testing. This is where a change is deployed to a small part of the infrastructure and is very closely monitored after release. If any issues are found then, it can be quickly isolated from the rest of the users. The phrase comes from the use of canaries in cages in mines to verify the existence of poisonous gases.
Agile Development: Conclusion
Since its inception, agile has transformed how software development is done. Today there are very few software development teams that haven’t taken up some if not all of the concepts. Agile development has become the norm, rather than the exception that it was in the early days. Thanks to new thinking about how to apply the values and principles, software is now developed and released in timescales measured in minutes instead of months. Organizations can react quickly to changes, meet new demands, and respond to competition. Software development is now seen as an enabler to business agility, not the hindrance that it was previously. Agile development has come of age but is still as exciting and vibrant as it was when it was first envisaged. If you are one of the few that hasn’t already embraced it, then now is the time to make the change.