Iterative software development is not a single ‘thing’, but an idea or theory, that involves the approach to how software is developed.
Many websites and articles talk about the difference between iterative software development and incremental software development, but the two are not necessarily mutually exclusive.
Of course, it is important to note that iterative software development can be viewed from one of two ways; either from the developer’s perspective or from the developer’s team leader’s perspective. Each provides a substantial and legitimate view, yet different and unique.
But it is rare these days that just one or the other process is used. Most software developers, including those who consider themselves to be purists of iterative software development, are mostly probably using a combination of both. To be specific, iterative software development is focused on steps or phases of software development. One way to describe it is not finishing one feature or component in one go. In other words, you code, get feedback, code, get feedback, etc.
Another, much broader way of describing the process, is that an iteration is a short period that could take one to two weeks or even three to six weeks, where the software development team takes a new idea, be it a customer request or story and implements it as, i.e., builds it as running tested software.
During this period, many things take place: design, testing, analysis, coding, feedback, etc. This is different from incremental development but only slightly, and in actuality it depends on how the software engineers or development team see it for themselves. In other words, the two terms of iterative and incremental software development are not mutually exclusive.
The benefit of using iterative software development, or at least the iterative approach to software development, is that stages of development can overlap. This means that while you are doing end-to-end testing, you can begin to prepare new requirements.
This means essentially that once a version is complete, it can then be tested and put through a review process, which results can be then transformed or rather, rebuilt into a new version (iteration) of the component.
So then what are the real-life benefits of iterative software development?
For one, if done correctly, it allows for measuring progress and keeping planning simple and reliable.
How does this work?
By not scheduling programming tasks in advance, the team or person is forced to plan out what will be done in each iteration (period). Additionally, this will assist in staying abreast of ever-changing user requirements.
Secondly, by sticking to the iteration plans steadfastly, it will be seen immediately, if any task may not be finished on schedule. At that point, it will be easy to re-estimate or redefine and either remove or modify some of the tasks.
What is crucially important is to concentrate the effort on completion of the essential tasks – those defined by your customers – as opposed to those possibly incomplete tasks which were chosen by the developers.
This, in a nutshell, is a very brief insight into the aims and purposes of iterative software development.