Sometimes the saying "a journey starts with a single step" is the best approach to accomplishing a software project. If we could break a project into smaller steps that progressively build on themselves, we would have usable software early on, and the development team could watch the project grow to completion. In practice, this incremental approach to software development is known as the iterative model.

Assumptions

  • Understanding of SDLC phases

What is the Iterative Model?

The iterative model is an approach to software development that focuses on designing, implementing, and testing software in cycles. In each cycle of the process, a hand full of requirements are designed, implemented, and then tested before the cycle begins again with new requirements. The iterative model focuses on making the software application incrementally better with each cycle.

<div style="width:100%; margin:auto;text-align:center;"> <img src="https://www.devmaking.com/img/topics/sdlc/SDLC_iterative_01.png" alt="iterative SDLC model" style="max-width:95%;">

</div>

Once project requirements are established, a hand full of them are selected are designed, implemented, and tested. Once this has concluded, more features are selected to be implemented that adds to the overall functionality of the application. One of the implicit niceties of the iterative model is that it gives developers a "versioning" system. In this way, if there is a problem found in the current cycle and the project needs to be reverted, it can be done more easily than it would be to do otherwise.

Advantages of the Iterative Model

  • Functionality is able to be implemented early in the process as opposed to a traditional waterfall process where no features will be implemented until later in the process.
  • Usually the most difficult features are implemented first, meaning the risk of a project is taken care of mostly up front.
  • It is easy to estimate the progress of a project based on how the cycles are progressing.
  • Incrementally adding and testing features allows for more robust code in practice with fewer defects.
  • Requirements can be adjusted as the project progresses without a total rewrite of requirements and design being needed as they can be done in a separate cycle. However, it should be noted this isn't entirely suitable for requirements that change often.
  • The client is able to see the software as it is being produced, giving them a better idea of what the end product will be, and make any notes where they might see adjustments needed.

Disadvantages of the Iterative Model

  • Feature creep can begin to appear near the end of the project; where more and more features are added that take away from the core purpose of the software.
  • Requires more skill to manage than a waterfall model.
  • Can be a bit overkill for small projects that wouldn't benefit from multiple iterations.
  • Changing requirements are not always recommended, even though they can be managed somewhat effectively with the iterative model.

When to use the Iterative Model

  • Moderate to large project scope.
  • The requirements are mostly known and clearly defined.
  • When the team is working with newer technology that may not be well understood; iteratively tackling requirements allows time for the team to tinker and learn, and to change any requirements or designs as they gain more understanding.
  • Experimental features are planned that should be taken care of first to ensure the software is feasibly possible to implement correctly.