Software Development; Programming Methodologies; Software Engineering
Incremental development is a software development methodology in which the functionality of the system is divided into multiple, separate modules. The module with the system's core functionality is typically the first deployed. Later modules that add functionality are then deployed and integrated with the system until all required functionality is achieved.
Incremental development is a software development methodology in which the software development life cycle (SDLC) combines aspects of the iterative development and traditional waterfall development models. In incremental development, first a detailed set of specifications and requirements is created to address the functionality required in the completed system. The required functionality is then divided into multiple parts called “modules” or “builds.” Each build is then developed separately.
Usually, the first module developed and placed in production contains the system's core functionality. Once the first module is designed, developed, tested, and deployed, additional modules are built and combined with all earlier builds. This integration process continues until all required functionality has been achieved.
Modules are developed using a multiphase, linear design methodology similar to the waterfall development methodology. Each module typically passes through the phases of design, development, and testing before being deployed and integrated with earlier builds. As this waterfall pattern of ordered phases is repeated multiple times, the SDLC of the incremental method can be thought of as an incremental methodology within an iterative framework.
Incremental development offers many of the benefits of waterfall development while addressing some of its shortcomings. Like the waterfall model, incremental development is easy to understand and manage. Each phase within a build has clear, agreed-upon deliverables and a formal review process, and is completed before the next phase begins. Like projects developed using the waterfall methodology, projects that use the incremental methodology are usually well documented. There is minimal customer and end-user involvement after the initial specifications, requirements, and needed functionality have been determined. Because the design is finalized early in the development cycle and changes little in development, the incremental model works well for projects where systems are integrated with other systems.
Incremental development also offers advantages that address many of the drawbacks to waterfall development. Unlike the waterfall model, the incremental model delivers a functional system early in the SDLC. This can reduce initial delivery time and costs. Later builds offer the chance to reevaluate the project's scope and requirements based on stakeholder feedback and incorporate needed changes. This offers greater flexibility to meet changing circumstances and newly discovered needs. Furthermore, the multiple, smaller modules make builds easier to manage, develop, test, and debug.
However, incremental development does share some of the same disadvantages of the waterfall model. Both models require detailed planning and analysis at the outset to ensure that all project specifications, requirements, and needed functionality have been addressed in the overall system design. Failure to do so can lead to delays and other problems as requirements are redefined and the system is redesigned. For projects with loosely defined requirements that will likely change in development and testing, iterative development models such as rapid application development (RAD) and spiral development may be a more effective choice. On the other hand, if the project is very stable and requirements are fully understood, the waterfall model may be preferable as it has fewer steps and lower overall cost than incremental development.
Incremental development is most effective for projects where the system's specifications and requirements are mostly known at the outset and where a subset of functionality can provide the core experience required by the user. Competitive or financial pressures can also make the incremental model an effective strategy, particularly when the product must be released quickly. A functional system can be delivered early in the project's lifetime and refined later in the SDLC.
For example, a mobile application start-up might have an idea for a game for use on smartphones and tablets. The mobile application (app) industry is highly competitive, with new and established companies releasing thousands of apps a year. Production of a marketable app in the least amount of time provides a key business advantage, as it reduces the time in which a competitor might release a similar app that could take market share. Releasing a functional product quickly therefore helps prevent capital and other resources from being wasted. As incremental development endeavors to provide a system with core functionality in the least amount of time, it is an excellent methodology for use in such cases.
—Maura Valentino, MSLIS
Bell, Michael. Incremental Software Architecture: A Method for Saving Failing IT Implementations. John Wiley & Sons, 2016.
Friedman, Daniel P., and Mitchell Wand. Essentials of Programming Languages. 3rd ed., MIT P, 2008.
Jayaswal, Bijay K., and Peter C. Patton. Design for Trustworthy Software: Tools, Techniques, and Methodology of Developing Robust Software. Prentice Hall, 2007.
MacLennan, Bruce J. Principles of Programming Languages: Design, Evaluation, and Implementation. 3rd ed., Oxford UP, 1999.
Scott, Michael L. Programming Language Pragmatics. 4th ed., Morgan Kaufmann Publishers, 2016.
Van Roy, Peter, and Seif Haridi. Concepts, Techniques, and Models of Computer Programming. MIT P, 2004.
Wysocki, Robert K. Effective Project Management: Traditional, Agile, Extreme. 7th ed., John Wiley & Sons, 2014.