Principle
|
Description
|
Customer involvement
|
Customers should be closely involved throughout the development process. Their role is provide and prioritise new system requirements and to evaluate the iterations of the system.
|
Incremental delivery
|
The software is developed in increments with the customer specifying the requirements to be included in each increment.
|
People not process
|
The skills of the development team should be recognised and exploited. Team members should be left to develop their own ways of working without prescriptive processes.
|
Embrace change
|
Expect the system requirements to change, so design the system to accommodate these changes.
|
Maintain simplicity
|
Focus on simplicity in both the software being developed and in the development process. Wherever possible, actively work to eliminate complexity from the system.
|
In practice, however, the principles underlying agile methods are sometimes difficult to realise:
- While the idea of customer involvement in the development process is an attractive one, its success depends on having a customer who is willing and able to spend time with the development team and who can represent all system stakeholders. Frequently, the customer representatives are subject to other pressures and cannot take full part in the software development.
- Individual team members may not have suitable personalities for the intense involvement that is typical of agile methods. They may therefore not interact well with other team members.
- Prioritising changes can be extremely difficult, especially in systems where there are many stakeholders. Typically, each stakeholder gives different priorities to different changes.
- Maintaining simplicity requires extra work. Under pressure from delivery schedules, the team members may not have time to carry out desirable system simplifications.
Another, nontechnical problem, which is a general problem with incremental development and delivery, occurs when the system customer uses an outside organization for system development. Because incremental specification is inherent in agile methods, writing contracts for this type of development may be difficult.
Consequently, agile methods have to rely on contracts where the customer pays for the time required for system development rather than the development of a specific set of requirements. So long as all goes well, this benefits both the customer and the developer. However, if problems arise there may be difficult disputes over who is to blame and who should pay for the extra time and resources required to resolve the problems.
All methods have limits, and agile methods are only suitable for some types of system development. In my view, they are best suited to the development of small or medium-sized business systems and personal computer products. They are not well suited to large-scale systems development with the development teams in different places and where there may be complex interactions with other hardware and software systems. Nor should agile methods be used for critical systems development where a detailed analysis of all of the system requirements is necessary to understand their safety or security implications.
Related Posts :
Software Development Life Cycle
Software Development Process
Waterfall Model
Prototyping Model
Iterative Model
Spiral Model
Software Development Life Cycle
Software Development Process
Waterfall Model
Prototyping Model
Iterative Model
Spiral Model