What Agile Software Development Really Means
Goal and true Definition of Agile Software Engineering
Agile software development is an often misunderstood term because the Agile Manifesto is a far too specific definition of how to be agile.
For defining Agility in Software Engineering
we should focus on the goal of Agile
rather than on the misleading way suggested by the Manifesto: Please read
and work according to the following definitions:
Developer's Definition of Agile:
Agility means to have a process in place that will allow us (and urge us)
to react on changing business requirements as soon as possible:
Accept that the project's goal is a moving target.
Project Manager's Definition of Agile:
Agile Project Management means to have a process in place
that is to maximize team efficiency,
and maintainability of the product independent of specific persons.
Only Agile Software Engineering in this sense
can reduce TCO, satisfy the User,
and bring about commercial success for the developers.
NOTE: To accept that the project's goal is a moving target is no excuse for not to have an always up to date requirements specification. To have it is mandatory
— especially if you promised a fixed price
for the product to develop.
To accept that the project's goal is a moving target is going to cost money.
Only accept a contract where this money will come from your client.
Clients should understand that the developer's promise to promptly react on updated requirements is a value well worth to be payed for.
Suggestions to re-focus Agile in this sense are Agile Principles 2011 and the SST (Specify, Subcontract, Test) process for software development.
You may ask yourself how the above definitions of agile transform to a specific type of development process. A most appropriate answer was given by
a taskforce advising the British Government:
Agile means adopting an approach to IT that emphasises flexibility, responsiveness to change and innovation.
This is achieved through modular and iterative development based on user involvement and feedback:
Compared with traditional tools and methods, agile offers a fundamentally different approach to tackling business problems (see the picture below):
Where the traditional approach favours complete solutions developed in a linear fashion, agile encourages a modular approach using short iterations to learn and adapt.
Instead of trying to lock down requirements and minimise changes up-front, agile encourages continuous experimentation, improvement and reprioritisation.
The approach to user involvement also differs fundamentally.
The traditional approach favours heavy user engagement up-front to determine and lock down detailed specifications and at the end to test the final product.
In contrast, agile embeds users in the process for the duration of the project, making them an integral part of the development team rather than a constituency to be consulted.
Always keep in Mind:
The Agile methodology is meant to deliver IT projects flexibly, in iterations.
It's meant to involve customers more directly and adapt quickly to their changing needs.
This means the final system only emerges gradually.
It means customers don't pay a fixed price for a complete project:
They pay for a commitment of resources.
Gone are the days when we contracted to develop a large piece of software and then had to wait months or even years for a fully tested and fully functional application to be implemented.
Agile design, that is designing software in smaller pieces, is rapidly becoming the standard.
In an age where technology and also requirements change so rapidly, itís vital that an application be implemented quickly and can be adapted as it grows.
In the information age, a year can be a lifetime.
Becoming agile isnít about using this method or that method.
Its about creating solutions to guarantee a businessí leadership.
And never should agile development be confused with a specific project management technique (e.g. SCRUM, KANBAN, etc) or with specific techniques (such as those described or referred to
in most books or blogs on Agile or in Joel's list of 14). The fact that most programmers do confuse Agile with agile techniques —
especially with techniques recommendable for small projects only — is a serious problem.
Agile is not a specific process. Agile is about the collective state of mind of the team and an organization as a whole:
Being Agile means that you are open to change. That you embrace change. That you promise to be flexible.