Introduction
This article presents Agile
Software development - an alternative approach to software project management
that is quite different from the traditional models. It promises to bring
agility to your software development processes and promotes a new, evolutionary
change in how software projects are managed. The article aims at providing its
readers a broad level overview on this latest methodology.
What is Agile Software Development?
Agile is basically an
alternative approach to the software project management that is quite different
from the traditional waterfall model that is mostly practiced by software farms
globally. We are now coming across various hot methods like Crystal, Extreme
Programming (XP), Scrum, Adaptive Software Development, etc. All of these team
up to form the agile software development. Agility is important not only for
the software development methodologies, but also concerning any organization.
Agility is the keyword for survival of the organizations in the near future.
Agile methods are based on
real time communication between the programming team and its customers. The
customers normally include project managers, analysts, and actual customers.
All of them communicate face-to-face without putting much emphasis on written
documentations. This is a key emphasis area for Agile Development and is a
point of criticism. The team resides in an arrangement or enclosure wherein
they can freely communicate with each other. The enclosure also may contain
Quality Assurance Engineers, Graphics Designers and respective managers.
Most of the agile software
development methods call for minimizing the risk by developing software in
short modular boxes called iterations. Each of these iterations is by itself a
mini software project and follows all the standard phases of the software
project life cycle, such as project planning, requirement analysis, system
design, code generation, testing and documentation. Completion of any iteration
is followed by review of the project priorities by the project team.
Looking back in time
Agile development is an
effect of the negative reaction against the commonly practiced software
development models of the olden days, namely the waterfall model. It started
becoming a popular and practical mode of development approach since the mid
1990's. Agile development came into existence due to the fact that theoretical
approach of the waterfall model came out to be quite different from the
practical methodologies followed by the developers to successfully design and
develop any software solution. During initial days of programming, agile
development methods have been referred to as “light weight” methods. In the
year 2001 the agile community adopted the name “agile methods.” In the past
there have been several agile development methods available to the software
industry and each of these are having its own significance and importance to
its followers and the community is consistently working towards effective
utilization of these methods by the software development world.
The Agile Development Standards
Agile development is based
on some standards outlined in this section.
Continuous involvement of
customer - The need for involvement of an end user throughout the project
lifecycle in agile development is very important. An end user has to be made
available throughout the project development lifecycle and interact with the
developers and help them achieve their project goals. They also need to
verbally communicate on a regular basis to make the project lively and free of
any bugs arising from misconceptions.
Team members should take
important decisions - The project development team should possess enough power
to take important decisions in collaboration with the end user (customer). The
team members need not always wait for their higher authorities to take
important decisions for taking the project ahead. This can be done when
absolutely needed and can be avoided in general. The team members can very well
take proper decisions in collaboration with the customer contacts that are in
collaboration. They should, however, know to manage the customer’s expectations
optimally.
Requirement analysis, a
continuous process - In traditional models, the requirements are normally
analyzed and fixed at the very initial level of the project lifecycle. Whatever
the case may be, the emphasis is given to capture as much requirements as
possible and to streamline the project scope. Any future changes are normally
taken care of as a separate activity under “change request management.” Agile
development works on a philosophy that is very much different from traditional
software development methodologies.
Agile development
methodology can address the evolving requirements over time. How? The time
period for any project is kept fixed and the requirements are allowed to come
in during the project lifecycle. Therefore, the project team and also the end
user (the customer) need to include or remove any requirement keeping in mind
the fixed time period. As a result, they may need to adjust this new work with some
other comparable work within the project to put up this change.
Project requirements are
visual and adequately drawn - Agile project requirements are drawn mostly at
high level and are optimal and visual in nature. These requirements are mostly
drawn bit by bit and help to develop the software for any specific feature or
module. The visual representation of the requirements helps the agile
developers to develop the solution closest to accuracy against its actual
requirements. The requirements are sufficient in volume so as to provide that
much input that is required for developing and testing the feature or module.
This also enables reasonable efficiency. The objective behind this approach is
to minimize the time taken for secondary activities in the project lifecycle
that are always required to take ahead the project, but are certainly not a
part of the end product or the solution.
Development produces small,
incremental releases with iterations - In traditional software development
methodologies the requirements for the whole software are collected at the very
beginning, analyzed and then the software is developed with all its components
and finally testing is done for the entire solution followed by its release.
Agile software development approach supports a different cycle in terms of
analysis, development and testing. The agile development projects are produced
in separate pieces with small, “incremental releases.” Each of the features in
the whole solution is separately treated and each of these features has its own
three phases or steps (analysis, development, and testing). Once this feature
is developed, the next feature is developed in succession following similar
phases. Hence, the methodology enables doing each of these steps for each
feature, with one feature at a time.
Recurrent product delivery
– Agile development methodology supports recurrent delivery of any software
product. It enables the breakup of the product into several modular features
and delivers each feature incrementally on a regular basis.
Fullest completion of each
feature – Agile development ensures fullest completion of each of its isolated
features in terms of analysis, development, testing and release. Only then is
the next feature or module in succession taken up. Care is taken to fully
complete the functionalities within each feature (a mini project by itself) and
then proceed on to the next feature that is another mini project and is in
succession.
The 80/20 Rule – The law of
distribution and the similarity in distribution curve amongst many things are
defined in the Pareto’s law which is also known as the 80/20 rule. The law
defines that 20% of the efforts put in can bring out 80% of results. The
percentages may vary in various situations, but overall it means that the optimum
amount of very important efforts can be identified and put in to bring out the
bulk of the desired results. Hence, agile development emphasizes smart
development wherein the team focuses on identifying the most important “20%”
efforts to bring out the greater part of the results.
Continuous testing – Agile
development encourages regular testing throughout the project lifecycle. It
does not normally encourage a separate all new testing phase as such. The team
does the unit testing exercise while developing the feature in phases. This not
only ensures developing software of great quality, but also helps in the
iterative, incremental releases of the software. The automated repeatable unit
tests ensure that all the modular features are working as per expectations each
time while creating a build. Regular builds are created and integration is also
done as the development progresses. The primary objective for this approach is
to ensure the software to be available in release condition at all times
throughout the development cycle.
Collaborative and
cooperative development approach – Agile development is strongly based on
effective collaboration and cooperation amongst all its team members and also
the end users (clients). Agile development focuses on keeping sleek but
effective requirements and documentation that needs great collaboration at all
times. Requirements need to be clarified in the right time. The team members
and the end users should always be updated equally throughout the development
to understand and appreciate the status of work in progress and the goals to be
attained.
The Agile Development Methods
There are several agile
methods currently available out of which few have gained greater importance in
real-time practice. We will elaborate on a few of the popular agile methods,
such as Scrum, Extreme Programming (XP), Crystal Clear, and DSDM (Dynamic
Systems Development Methods). The other methods available are Agile Unified
Process (AUP), Agile Modeling, Adaptive Software Development, FDD (Feature Driven
Development), and Lean Software Development.
Let us take a look into a
few commonly practiced agile methods in the following sections.
Scrum
Scrum development has its
inception during 1986 and had the objective to present a highly iterative
development methodology. The popular developers behind its successful
initiation are Jeff Sutherland, Ken Schwaber, and Mike Beedle.
Scrum has its primary focus
on the management part of the software development, dividing the whole
development period into small iterations (of thirty days) called
"sprints." This helps in administering the process better and also to
control the development with daily team meetings. The engineering practices are
less important in scrum development. The users, however, can merge the
engineering practices of other popular agile methods with the project
management aspects of scrum.
There is a Scrum Master who
acts as a facilitator in scrum development and removes the obstacles that the
team faces while attaining its sprint goals. The scrum development team is
generally located in the same place, very well organized and encourages in
extensive communication amongst each other regarding the project development
aspects. These help in effective error-free progress and help them to attain
the sprint goals. Scrum development takes its credit in addressing the
fundamentally empirical challenges by appreciating the fact that any software
problem is not defined fully during its inception and by maximizing the team’s
efforts in rapid delivery and faster response to up-and-coming requirements.
Extreme Programming (XP)
Extreme Programming is said
to be the most popular and important of the various agile development
methodologies available to date. Extreme Programming owes its inception to the
Smalltalk community during the late 1980's. The popular developers behind its
successful initiation are Kent Beck and Ward Cunningham who also took up the task
of enhancing the XP practices to provide a software development methodology
that is people-centric and highly adaptive. Kent Beck authored the popular book
on this methodology called "Extreme Programming Explained" which came
out in the market during October 1999. The book still provides good references
to the followers of this software development practice.
Extreme Programming
recommends a set of daily practices for its team members. These practices can
be seen as traditional software development practices taken to its highest
productivity level. This effort helps in providing greater and faster response
to the customers which is in contrast to the traditional methods. It also helps
produce software solution of better quality. XP in line with other agile development
methods also believes that requirements can come up during any time throughout
the project lifecycle (instead of getting defined at the very beginning), and
the team has to be highly adaptive to these up-and-coming requirements and make
effective this realistic approach through energetic response.
Crystal Clear
One of the great exponents
of agile community Alistair Cockburn developed the crystal family of software
development approaches meant for teams of different sizes. All of these methods
have similar features and properties. Important properties are Frequent
Delivery, Reflective Improvement, and Close Communication. Crystal requires
lesser discipline as compared to XP and has reduced chance of failure.
Crystal Clear is an
important variant of crystal methodologies that is ideal for a team of about 6
to 8 developers located in the same venue and working on light weight systems.
It has its emphasis on people and not on processes. Important properties of
crystal clear are as follows.
·
Usable Code should be
regularly delivered to the users
·
Improvements are insightful
·
Regular effective verbal
communication between co-located team members
·
Ease of accessibility to
the expert users
Dynamic Systems Development Methods (DSDM)
DSDM is a RAD (Rapid
Application Development) based framework that follows a user driven,
incremental approach in an iterative development for designing and developing
software on time, satisfying all its business needs and strict budget. This
agile methodology has its inception at the United Kingdom during the 1990's by
DSDM Consortium (a non-profit organization). DSDM is an extension of RAD and it
emphasizes information systems projects that are having steep deadlines and
strict budgets. DSDM can be integrated to other agile methods in typical cases.
So, should we go agile?
Agile development and its
usage belong to a specific group of people who clearly understand its
significance. Agile development has its own set of drawbacks and may not be
suitable for any type and size of software project, but can be successfully
used for reasonably sized projects with a maximum team size of around 100
developers. However, agile development should be taken up by any organization
in steps and can be started with a small project that can fall in line with the
agile methods. Agile development is also a boon in providing customers who are
so collaborative and act as stakeholders in a project development all through,
along with the developers. Agile methods are still very young to draw the
boundary conditions effectively for a software project. The decision for
choosing agile methods should ideally go to the people primarily who are the
best ones to decide whether they can suffice to the excellent collaborative
project development. If not, it is better not to follow any agile methods as
lack of the desire for adapting this development may ruin the project. However,
with all its pros and cons, agile development is gaining immense popularity
amongst organizations across the globe that believe in simplicity in designing
and developing software with great and effective collaboration between the
project stakeholders.
No comments:
Post a Comment