Agile software development and the fall of bureaucrats
by Suren Nanayakkara
(Technical Manager, Mazarin (Pvt) Ltd.)
If you ask from a software professional about software development
techniques they will tell you about the waterfall method, the
object-oriented software process or the Rational Unified Process. They
even will go on to explain about the pros and cons of each method. But
little many of them know that there is a new and promising software
development technique picking up momentum and ONLY A FEW popularity in
the IT industry that will radically change the way software development
is done. The technique is known as agile.
The IT industry is currently passing a significant phase, a move from
prescriptive development techniques to agile techniques. Until recently
management often complains that development did not want to follow a
process, not understanding what was wrong with thousands of pages of
procedures they expected everyone to follow. Then came agile software
processes such as extreme programming (XP), feature-driven development,
and agile modeling; and developers embraced them. Unfortunately
management is not willing to use agile techniques and fight against
their being adopted.
The only reason for this is that with agile all heavy management
processes will be thrown away and everyone will have to get involved in
development. Many managers have not got involved in software development
for several years and are out of touch with he latest technology.
Further these managers know that they will loose their bureaucratic
management style which they enforce over their subordinates and will
have to get back to hardcore software development. This is a truly
ironic situation where developers are now demanding to follow proven
software processes but yet are not being allowed to do so. This problem
is evident even in Sri Lanka’s IT industry. But the hope is not totally
lost. There are several new software companies that have successfully
adopted agile techniques and it is gaining speed among other Sri Lankan
software professionals.
Over the years software industry has used many prescriptive processes
in software development. They include but not limited to waterfall
lifecycle characterizes by the ISO 12207 standard, the Object-Oriented
Software Process (OOSP) and the Rational Unified Process (RUP). Firstly,
over the time all these process recorded a significant failure rate
within the industry, indicating that prescriptive processes simply are
not fulfilling their promises. Secondly, many developers do not want to
adopt prescriptive processes and will find ways to undermine any efforts
to adopt them, either consciously or unconsciously. Thirdly, the “big
design up front” (BDUF) approaches to software development are highly
risky since they do not support change. Fourthly, most prescriptive
processes promote activities only slightly related to the actual
development of software . In short the bureaucrats have taken over.
To address these challenges the Agile Software Development Alliance
was formed by a group of 17 methodologists. This alliance is often known
as Agile Alliance. The conclusion of this alliance is that so succeed in
a software development you need to focus o people-oriented issues and
follow development techniques that readily support change. They went on
to write a manifesto defining four values for encouraging better ways of
developing software:
1. Individuals and interactions over process and tools
The most important factors that you need to consider are the people
and how they work together because if you do not get that right the best
tools and processes will not be of any use. Agile will nurture a group
of people who will take collective responsibility for their work.
Collectively they will help each other to deliver software on time.
2. Working software over comprehensive documentation.
The primary goal of software development is to create software, not
documents. Therefore we should concentrate on developing good working
software rather than developing lengthy documents. Documentation too has
its place; written properly and concisely it is a valuable guide for
people’s understanding. Often it is a common practice to develop
software specifications and design documents before the start of
development which sometimes drag onto several months. These documents
become outdated when the actual development gets underway and the
customer changes are not reflected. Instead of such documents it is more
practical to design and deliver small parts of the software in short
time spans. Prototyping, especially paper prototyping, is a good
technique over specifications to capture customer requirements quickly
and accurately.
3. Customer collaboration over contract negotiation.
Only your customer can tell you what they want. They probably do not
know how to explain it to you precisely. Ii is unlikely that they get it
right at first and they will likely change their minds. Having a
contract with your customer is important but it’s not a substitute for
communication. Fix prices are broken promises. Agile advocate not to
negotiate fix prices on software contracts. It is better to estimate on
hourly basic and cost per hour. If the customer insists on a fix price,
then select the most critical and well defined set of functions for the
first release. You can carryout extensive prototype session to reduce
the risk of change. Again paper prototyping is a very economical option
for it.
4. Responding to change over following a plan.
Change is a reality of software development, a reality that your
software process must reflect. People change their priorities for a
variety of reasons, their understanding of the problem domain changes as
they see your work, and the business environment changes, as does
technology. Although you need a project plan, it must be changeable and
it can be very simple.
A good way to think about the manifesto is that it defines
preferences, not alternatives, encouraging a focus on certain areas but
not eliminating others. There are a number of agile software development
methods, such as those promoted by the Agile Alliance. Most agile
methods attempt to minimize risk by developing software in short time
boxes, called iterations, which typically last on to four weeks. Each
iteration is similar to a miniature software project of its own. An
agile software project intends to be capable of releasing new software
at the end of each iteration. The team reevaluates project priorities
after an iteration is complete.
Adopting an agile technique does not happen overnight. It has to be
planned and implemented gradually. Agile methodology advocates to
discarding all bureaucratic processes that do not add value or quality
to the software. Therefore it is important that you adopt industry
proven methodologies and best practices for sustainability.
Extreme Programming (XP) is a good software engineering methodology
that can be used in an agile environment. With XP you reduce the
feedback loop through pair programming as well as by working closely
with your customers. One benefit of working closely with stakeholders is
that they are available to explain their requirements to you, increasing
the chance that you do not mis-reducing the risk of misunderstanding
them, and you can show them your work to get feedback from them, which
enables you to quickly determine whether you have built the right thing
or not. The cost of change is also reduced by an explicit focus on
writing high-quality code and good code refactoring.
Test Driven Development (TDD) is a programming technique that will
benefit agile development. TDD involves writing extensive test cases for
very code piece in the software. TDD is also known as Test First
Development (TFD). With TDD you will first write a test case for your
software code and then implement only the code necessary to pass the
test. TDD requires that an automated unit test is written before each
aspect of
the code. Running the tests gives rapid confirmation of correct
behaviours as the code evolves. This will allow to absorb more changes
accurately and to deliver working software to the clients. Testing
frameworks such as JUnit, NUnit, PHPUnit and CPPUnit are some software
that allow automated test cases.
Use of a source management tools is also a necessity for agile. With
agile you will be releasing working code very often. Therefore it is
important that the source code has proper version control and release
labels. Because changes happen more frequently, such tools will
facilitate reverting back to a working version if a new change breaks
the code.
Continuous build process is a process to perform an automated
continuous build of any software development process. Every time a
developer checks in a change, a tool checks out all the sources, builds
everything, runs all the unit tests and reports back with immediate
feedback. A continuous build framework can be configured into your
source management tool to integrate new code changes. Such a process
will notify any code breaks early to the team. Ideally the build should
be done at least every day.
Use of an Integrated Development Environment (IDE) will reduce
development and testing time immensely. Many plug-ins are available for
the IDEs to integrate unit testing software, to link source management
tools, to deploy to different web/application servers, to run the
software from the IDE and even to document. This has enabled the project
teams to use a single tool to carry out everything they want to code,
unit test, deploy and smoke test, check into the source management and
to generate documentation.
Conversion from prescriptive development techniques to agile
techniques is not easy. There exist many challenges with changing
peoples’ thinking.
In short agile techniques enable speedy delivery of software with
effective and efficient methods and thereby reducing the cost of
development. But in order to achieve its full potential team members
have to be honest in what they do, taking individual responsibility for
their work, work as a team with the notion of “us” rather than “I” and
help each other during problematic situations.
Nurturing an agile mind among all team members is not easy. In the
Sri Lankan context there could be cultural reasons and long standing
organisational and individual practices that may block the adoption. But
if we can surmount these barriers and use agile in our software
development, the benefits that will accrue our IT industry is immense. |