Page 76 -
P. 76
3.1 Agile methods 59
and documentation. Agile methods universally rely on an incremental approach to soft-
ware specification, development, and delivery. They are best suited to application devel-
opment where the system requirements usually change rapidly during the development
process. They are intended to deliver working software quickly to customers, who can
then propose new and changed requirements to be included in later iterations of the sys-
tem. They aim to cut down on process bureaucracy by avoiding work that has dubious
long-term value and eliminating documentation that will probably never be used.
The philosophy behind agile methods is reflected in the agile manifesto that was
agreed on by many of the leading developers of these methods. This manifesto states:
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
That is, while there is value in the items on the right, we value the items on the
left more.
Probably the best-known agile method is extreme programming (Beck, 1999;
Beck, 2000), which I describe later in this chapter. Other agile approaches include
Scrum (Cohn, 2009; Schwaber, 2004; Schwaber and Beedle, 2001), Crystal
(Cockburn, 2001; Cockburn, 2004), Adaptive Software Development (Highsmith,
2000), DSDM (Stapleton, 1997; Stapleton, 2003), and Feature Driven Development
(Palmer and Felsing, 2002). The success of these methods has led to some integration
with more traditional development methods based on system modelling, resulting in
the notion of agile modelling (Ambler and Jeffries, 2002) and agile instantiations of
the Rational Unified Process (Larman, 2002).
Although these agile methods are all based around the notion of incremental devel-
opment and delivery, they propose different processes to achieve this. However, they
share a set of principles, based on the agile manifesto, and so have much in common.
These principles are shown in Figure 3.1. Different agile methods instantiate these prin-
ciples in different ways and I don’t have space to discuss all agile methods. Instead, I
focus on two of the most widely used methods: extreme programming (Section 3.3) and
Scrum (Section 3.4).
Agile methods have been very successful for some types of system development:
1. Product development where a software company is developing a small or
medium-sized product for sale.
2. Custom system development within an organization, where there is a clear com-
mitment from the customer to become involved in the development process and
where there are not a lot of external rules and regulations that affect the software.