Agile development has become, in the last 20 years, a popular approach to software development. It is an umbrella term used to describe a variety of (agile) methods that promote a set of practices that encourage simpler, more light-weight, faster and nimbler software development that can adapt to the inevitable changes in customer requirements. The continual realignment of development goals with the needs and expectations of the customer aims at software that better serves its purpose.
As seen below in the manifesto, agile development is an approach to software development that puts people and working software at the forefront of the development process.
The movement towards a more agile way of developing software has been gathering momentum for a long time. Many of its proponents were associated, throughout the 1990s, with several approaches known as light-weight in opposition to more prescriptive approaches to software development. In 2001, leading proponents of the agile approach got together and wrote a manifesto (Figure 7).
Agile practices of simpler, lighter-weight, faster and nimbler software development that can adapt to change are best practices that are not new. Iterative and incremental development, for example, has been promoted for a long time in the short history of software development and adopts some of these practices. However what the agile approach does is to promote the implementation of those practices with well-defined rules. The emphasis on the people involved in the development is also common to all agile approaches and is the basis of the sense of fun, motivation and productivity usually associated with it.
The agile movement also has its deprecators and critiques, one of them being that agile methods do not scale up to larger systems. It is however accepted that some old practices of software development sometimes lead to problems and agile practices, although not a panacea, may bring better ways of working.
Extreme programming (XP) (Beck, 2004) is one of the best-known agile methods. It is a light-weight method, based on intensive testing and incremental development. It defines a series of practices about how individuals and teams should work, how the environment should be set up, and how the work should be carried out. These practices include incremental design, test-first programming, programming in pairs, continuous integration, planning for the week, and so on. Scrum (Schwaber and Sutherland, 2011), which is also a popular agile approach, defines a set of roles, events, artefacts and rules. All events are timeboxed and have well-defined rules – scrum events comprise:
- the sprint – a development phase, no longer than a month, that has as a deliverable a useable working increment
- the sprint planning meeting – lasts no more than eight hours
- the daily scrum – a daily meeting, no longer than 15 minutes, looking at what has been done and planning the work for the next 24 hours.
Many of the agile practices are geared to better communication and collaboration among developers.
Several agile practices have been recognised and incorporated in other more prescriptive development processes, in particular the emphasis on people as opposed to process, short iterations and the acceptance that systems change. The term agile can be found now in many contexts, and it is interesting to see, for example, a report from a UK government agency, the National Audit Office, on Governance for Agile Delivery (National Audit Office, 2012).
An agile approach requires experience to be able to pick, choose and adapt the elements of a development process that best suit a real situation. This is often what happens in practice and many development processes get adapted rather than used as mandated. By learning a set of techniques and a process to apply them, and by discussing possible alternatives you will be in a better position to make these decisions. Software development is not an exact science and many factors, such as context, the organisation and the problem will dictate how development proceeds.
We will be using the term agile (with a small ‘a’) to refer to best practices, as opposed to Agile (with a big ‘A’) to refer to specific agile methods. We will use the term plan-driven development to distinguish traditional, more prescriptive approaches to software development from agile development approaches.