Incremental or agile development is not always easy to introduce or use, particularly in large companies with standardised engineering procedures and in organisations where software development is outsourced to an external contractor. If development is outsourced, both the client and the contractor usually want to have a complete specification defining what is to be done.
The difficulties that can arise with incremental development and incremental delivery are:
- Management problems Software management structures for large systems are set up to deal with a software process model that generates regular deliverables to assess progress. Incrementally developed systems change quickly so it is not cost-effective to produce lots of system documentation. Furthermore, incremental development may sometimes require unfamiliar technologies to be used to ensure rapid delivery of the software. Managers may find it difficult to use existing staff in incremental development processes because they lack knowledge and experience of these technologies.
- Contractual problems The normal contractual model between a customer and a software developer is based around a system specification. When there is no specification, it may be difficult to design a contract for the system development. Customers may be unhappy with a contract that simply pays developers for the time spent on the project, as this can lead to function creep and budget overruns; developers are unlikely to accept a fixed-price contract because they cannot control the changes requested by the end-users.
- Validation problems In a specification-based process, verification and validation are geared towards demonstrating that the system meets its specification. An independent V & V team can start work as soon as the specification is available and can prepare tests in parallel with the system implementation. Iterative development processes try to minimise documentation and interleave specification and development. Hence, independent validation of incrementally developed systems is difficult.
- Maintenance problems Continual change tends to corrupt the structure of any software system. This means that anyone apart from the original developers may find the software difficult to understand. One way to reduce this problem is to use refactoring (discussed in Chapter 3), where software structures are continually improved during the development process.
- Technology problems If technology (tools and environments) are installed to support incremental development, then the development process relies on continuing support for that technology. If the technology vendor withdraws support or goes out of business, then the incremental development process will be disrupted.