Best Practice Agile Software EngineeringAgile software development is an often misunderstood term because
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
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.
The problem is that the Agile Manifesto is a far too specific definition of Agile. From now on we better focus on the following (new) definitions:
Software Developer's Definition of Agile (Best Practice):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 (Best Practice):Agile Project Management means to have a process in place that is to maximize team efficiency, user satisfaction, and maintainability of the product independent of specific persons.
Only this can reduce TOC, satisfy the User, and also bring about commercial success for the developers. Only this is Best Practice Agile Software Engineering
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.
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.
tags: Agile1gegreit Practice1gegreit Definition1gegreit