Incremental and Iterative
Incremental and iterative are two different approaches for delivering a new software or feature. In both approaches, the software is built in multiple phases. There are some fundamental differences between the two approaches that can lead to different outcomes. Therefore, understanding these differences can help us make the right choices in different situations.
The best way to understand the difference between incremental and iterative delivery approaches is by an example. Say, we want to build a new social media platform. For this, we need to build user registration, login, profile management, search, and news feed features.
In the incremental delivery approach, the software is built in parts in each phase and no working version is available for users until the last phase. In the first phase, one or more features of the software are built with a complete set of functionalities by doing extensive discovery and detailed analysis. Then in the subsequent phases, the remaining features are built similarly. Although different features are built incrementally in different phases, the working software is only available for the users after the final phase. By this time lot of energy and effort have been spent without any actual feedback and there is a risk of a lot of rework and waste.
In the iterative delivery approach, a working version of the software is released at the end of each phase. Instead of building the complete set of functionalities, only a subset of them is built to have working software that users can use and give feedback. Based on the feedback the whole working software is improved with newer versions in the subsequent phases. In the iterative approach, the initial version of the software may seem incomplete and weak. However, the users can experience the software from a very early stage and provide feedback to shape the direction of future versions. This approach minimizes the risk of any wasted effort.
The iterative approach is also useful for delivering multiple new features for a matured product within a tight timeframe with limited resources. Instead of delivering all functionalities, only the essential functionalities can be delivered for the features. This allows for receiving feedback from the broader user base and taking the right decision for the next phase. The iterative approach allows us to respond quickly to market needs without spending too much upfront effort and energy.
In many situations, where the problem domain is well understood and the market is competitive, incomplete and weak software products or features may be perceived negatively and hamper reputation. In such a situation, the incremental approach is the better alternative to deliver a complete set of functionalities, and in this case, there is less risk of wasted effort.
In the real world, where we face competition and juggle multiple priorities, making the right mix of incremental and iterative delivery approaches can help us achieve a better overall outcome.