Professional Documents
Culture Documents
5. Agile Development
5. Agile Development
5. Agile Development
As already pointed out, though the iterative waterfall model has been very popular during the
1970s and 1980s, developers face several problems while using it on present day software
projects. The main difficulties included handling change requests from customers during
product development, and the unreasonably high cost and time that is incurred while
developing customised applications. Capers Jones carried out research involving 800 real
life software development projects, and concluded that on the average 40 per cent of the
requirements is arrived after the development has already begun. In this context, over the last
two decade or so, several life cycle models have been proposed to overcome the important
shortcomings of the waterfall based models that become conspicuous when used in modern
software development projects.
In the following, a few reasons why the waterfall-based development was becoming difficult
to use in project in recent times:
In the traditional iterative waterfall-based software development models, the requirements
for the system are determined at the start of a development project and are assumed to
be fixed from that point on. Later changes to the requirements after the SRS document has
been completed are discouraged. If at all any later requirement changes becomes
unavoidable, then the cost of accommodating it becomes prohibitively high. On the
other hand, accumulated experience indicates that customers frequently change their
requirements during the development period due to a variety of reasons.
Over the last two decades or so, customised applications (services) has become common
place and the sales revenue generated worldwide from services already exceeds that of the
software products. Clearly, iterative waterfall model is not suitable for development of
such software. Since customization essentially involves reusing most of the parts of an
existing application and consists of only carrying out minor modifications by writing
minimal amounts of code. For such development projects, the need for more appropriate
development models was deeply felt, and many researchers started to investigate in this
direction.
Waterfall model is called a heavy weight model, since there is too much emphasis on
producing documentation and usage of tools. This is often a source of inefficiency and
causes the project completion time to be much longer in comparison to the customer
expectations.
Waterfall model prescribes almost no customer interactions after the requirements
have been specified. In fact, in the waterfall model of software development, customer
interactions are largely confined to the project initiation and project completion stages.
The agile software development model was proposed in the mid-1990s to overcome the
serious shortcomings of the waterfall model of development identified above. The agile
model was primarily designed to help a project to adapt to change requests quickly. Thus, a
major aim of the agile models is to facilitate quick project completion. But, how is agility
achieved in these models? Agility is achieved by fitting the process to the project, i.e.
removing activities that may not be necessary for a specific project. Also, anything that that
wastes time and effort is avoided.
A few popular agile SDLC models are the following:
Crystal
Atern (formerly DSDM)
Feature-driven development
Scrum
Extreme programming (XP)
Lean development
Unified process
What is Agility?
Agile is a software development methodology to build software incrementally using short
iterations of 1 to 4 weeks so that the development process is aligned with the changing
business needs.
An agile team is a nimble (quick and light) team able to appropriately respond to changes.
Change is what software development is very much about. Changes in the software being
built, changes to the team members, changes because of new technology, changes of all
kinds that may have an impact on the product they build or the project that creates the
product. Support for changes should be built-in everything we do in software, something we
embrace because it is the heart and soul of software. An agile team recognizes that software
is developed by individuals working in teams and that the skills of these people, their ability
to collaborate is at the core for the success of the project.
In the agile model, the requirements are decomposed into many small parts that can be
incrementally developed. The agile model adopts an iterative approach. Each incremental
part is developed over an iteration. Each iteration is intended to be small and easily
manageable and lasting for a couple of weeks only. At a time, only one increment is
planned, developed, and then deployed at the customer site. No long-term plans are made.
The time to complete an iteration is called a time box. The implication of the term time box
is that the end date for an iteration does not change. That is, the delivery date is considered
sacrosanct (too important). The development team can, however, decide to reduce the
delivered functionality during a time box if necessary. A central principle of the agile model
is the delivery of an increment to the customer after each time box.
Agile Process
Any agile software process is characterized in a manner that addresses a number of key
assumptions about the majority of software projects:
1. It is difficult to predict in advance which software requirements will persist and which
will change. It is equally difficult to predict how customer priorities will change as the
project proceeds.
2. For many types of software, design and construction are interleaved. That is, both activities
should be performed in tandem (one behind other) so that design models are proven as they
are created. It is difficult to predict how much design is necessary before construction is
used to prove the design.
3. Analysis, design, construction, and testing are not as predictable.
Given these three assumptions, an important question arises: How do we create a process that
can manage unpredictability? The answer, as we have already noted, lies in process
adaptability (to rapidly changing project and technical conditions). An agile process,
therefore, must be adaptable.
Agility Principles
Agility principles for those who want to achieve agility:
1. Our highest priority is to satisfy the customer through early and continuous delivery of
valuable software.
2. Welcome changing requirements, even late in development. Agile processes harness
change for the customer’s competitive advantage.
3. Deliver working software frequently, from a couple of weeks to a couple of months, with
a preference to the shorter timescale.
4. Business people and developers must work together daily throughout the project.
5. Build projects around motivated individuals. Give them the environment and support
they need, and trust them to get the job done.
6. The most efficient and effective method of conveying information to and within a
development team is face-to-face conversation.
7. Working software is the primary measure of progress.
8. Agile processes promote sustainable development. The sponsors, developers, and users
should be able to maintain a constant pace.
9. Continuous attention to technical excellence and good design enhances agility.
10. Simplicity—the art of maximizing the amount of work not done—is essential.
11. The best architectures, requirements, and designs emerge from self– organizing teams.
12. At regular intervals, the team reflects on how to become more effective, then tunes and
adjusts its behaviour accordingly.
Not every agile process model applies these 12 principles with equal weight, and some
models choose to ignore (or at least downplay) the importance of one or more of the
principles.