Incremental development is a method of building software products in which a system is built piece-by-piece. The final requirement specification is clear from the beginning, and everyone knows the end result clearly. The system is broken down into small sub-systems which are designed, built and tested independently. This allows partial utilization of the product, but the full system isn't usable unless until the development is entirely done.
A good analogy to understand this model is looking at how a mason builds a wall. How the final wall should look like is already clear in their mind, and starting from zero they lay out the wall brick by brick. The wall becomes fully usable only when the construction is entirely done.
What are the advantages of Incremental Development?
- Since sub-systems of a product are gradually built over time, if development takes longer than expected, what has been built so far can be released. This helps put part of the software in user's hands faster.
- It is relatively easy to ensure the quality of sub-systems because development efforts are concentrated only on a small system at a time.
- Users of the software can respond to features and provide feedback early.
- Since the entire scope is known and frozen at the outset and the development happens on sub-systems, it becomes very critical to design the overall system architecture and interface definitions between sun-systems well. Failure to do so results in delays due to re-work needed on already built systems.
- The final cost of the entire system can well exceed the initial cost projected.