Agile is a software testing methodology that attempts to bridge the competing demands of the business, customers and technology teams, including development and operations.
Traditional project management techniques, such as waterfall for example, often assume a fixed set of deliverables. This allows a coherent design to be produced before doing any development, which is completed before testing and so on. This approach is predictive rather than adaptive, in that we are predicting what the end product will look like far in advance of the final delivery to the customer, and is necessary so that project planning of the work to be done can be completed up front. This approach does not handle changes to requirements during development very well, since the requirements also need to be defined at the start of the project and are assumed to be fixed.
To address some of the problems with traditional project management, Agile methods recognise that projects are often subject to almost constantly changing requirements during the life of the project. With this is mind, Agile aims to deliver the most high-value requirements to the customer as soon as possible and then adapt to and manage subsequent changes as they happen in the most efficient way possible. Agile is very value-driven and attempts to prioritise items in the order of most value to the customer, and then deliver those items first and early in the project.
Agile also tends to be a very collaborative approach. Since value is ultimately determined by the customer, constant feedback is sought on satisfaction with the deliverables so far, and to identify what items will add the most value next.
The Agile Manifesto
The Agile Manifesto was issued in February 2001 and outlined a new approach to software development with the following core values.
|We value these more than the|
items on the right
|We value these, but not as
much as the items on the left
|Individuals and Interactions||Processes and Tools|
|Customer Collaboration||Contract Negotiation|
|Response to Change||Following a Plan|
The 12 Principles of Agile Software
These Agile values are mapped to the 12 Key Principles of the Agile Manifesto which are as follows:
- 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.
List of Agile Methodologies
There are a number of Agile methodologies, here is a list of some of the most popular methods being used today:
- Lean Kanban
- Extreme Programming (XP)
- Dynamic Systems Development Method (DSDM)
- Feature Driven Development (FDD)
- Test Driven Development (TDD)
- Adaptive Software Development (ASD)
- Agile Unified Process (AUP)
- Domain-Driven Design (DDD)
Why Use Agile?
Agile methods were developed to address some of the limitations of traditional project management techniques when applied to software development projects, such as:
- Ongoing changes to requirements, risks, customer needs and other factors throughout the project life-cycle
- Ongoing timelines for different iterations of solutions
- People are not just a resource. Instead, highly creative knowledge work is required to produce innovative and useful solutions to business problems and people need to work collaboratively
- A shift in focus from process and artefacts to customers and solutions
Adaptive Project Management
Agile uses adaptive project management, the aim of which is to deliver more efficient and effective results with a focus on delivering only those things that add value to the business and the customer.
Adaptive project management and adaptive planning recognises that in many fast-paced business environments plans are subject to a lot of change. This volatility can be caused by changes in customer needs or any number of internal or external factors (for example, changes to regulatory requirements).
Agile models use iterative development which provides flexibility and enables projects to respond to changes in features or priority and mitigate risks as they are discovered.
Agile models enable just in-time planning, and allow decisions to be made using the best available information at that point in time in order to focus on the most important activities and defer activities that may be wasteful, or are of a lower value.
Agile models focus on value-driven delivery; that is, they promote the early delivery of those items that offer the highest value to the customer. There is also an emphases on flexibility so that as the project proceeds it can manage changes by adding, removing or changing requirements.
Collaboration and communication is at the heart of the Agile method. There must be consistent feedback on how satisfied the customer is with each incremental delivery, with clear transparency and accountability between all team members and any other key stakeholders.
The Value of People in Agile
In an Agile model, people are recognised as being creative and are trusted to take responsibility for the delivery of the project. Agile promotes a supportive environment in which people operate as self-organized and cross-functional teams who collaborate efficiently.
Different Agile methodologies use a variety of ways to achieve this – such as frequent, short, time-boxed meetings, the use of signboards and co-location to enable team collaboration.
Regular reviews are also held, both to assess that the product delivery meets the customer needs and also to assess the team’s performance and to identify any opportunities to do things better.