Iterative software development is an approach which undermines the division of the project lifecycle into several stages. The development team works on each phase separately, step-by-step. It’s a widely used alternative to the waterfall approach that sees the project as a whole.
In today’s article we are casting light on what iterative development is, when it’s the perfect fit for the project, and its pros and cons. What is Iterative Approach
Iterative approach is a step-by-step software development process. Its name originates from the word ‘iteration', i.e. a repeated action. The iterative approach is also known as evolutionary and incremental. These are synonyms.
Every product is divided into several mini-products. Each of them is a separate part or version of the final software. Each mini-product is functional, even the most basic one. They give an insight into the final software product. Every new iteration involves the functions of a previous one and something more advanced.
Such a model does not call for stating the budget and time frames at once. This approach presupposes that these parameters may change over time. The development team moves forward through trial and error. They analyze interim results, make amendments to the product requirements, and gather feedback from their users.
Here is an example of an iterative project. We are moving from the minimum viable product to the end result.
Let’s Look Into The Iterative Approach Illustrated by Home Construction
Let’s draw an analogy with home construction to dive deeper into the way interative approach works.
The task order. As an example, suppose a client wants to build a three-storey mansion with a garden and swimming pool.
A waterfall approach undermines that the developers go step-by-step through each project stage. Oversight and analysis are carried out at the end of the project, when the product is already done.
Based on the home construction analogy, we mean that all the mansion spaces and systems are designed primarily. The contractor receives all the necessary permissions, calculates the prices of all the elements, visualizes the solution and gets an approval from the client. Later on, the team gets down to building and creating the whole mansion with a swimming pool and garage.
In real life, a waterfall approach is applied to construct buildings. We are viewing the iterativity as a theoretical way of solving this task for clarity.
An iterative approach suggests another project life cycle.
- First things first, a minimal viable product (an MVP) is created. It’s a working prototype of the software with a minimum range of functions. It is needed to get the first feedback from the user side and start forming hypotheses regarding further product development. As an example, a basic housing model is constructed on the client’s site. That’s a little one-storey house.
Feedback from client and getting adjustments to the task order. The client moves in the house and tells the contractor what he likes and dislikes about the house. For instance, «I don’t like the layout of the building and pastel colors on the walls, the windows are way too little, and I would like to build a two-storey house, not a three-storey one».
- The next iteration includes painting the walls dark, expanding the window frames, and constructing the second storey.
Feedback from client and getting adjustments to the task order. The client fancies the house and they negotiate additional features, i.e., a garden and a swimming pool.
- The iteration process is coming to the third stage. The contractor digs a swimming pool and plants trees in the garden. The client is monitoring the process and making amendments to it. Soon, the project is coming to an end, and the client is satisfied.
Let’s take a look at the process, as if the house construction process went according to the waterfall methodology. The contractor would have built a house in accordance with the initial task order, i.e., a three-storey house with narrow window frames and pastel walls. The client would be able to make amendments to it only after seeing the complete house.
Such an approach would have extended the time frames and the budget of the project. The vendor would have to:
- demolish the third storey;
- paint the colors of the walls dark on both storeys, not the only one so the expenses on the painting would double;
- expand the window frames on both storeys.
Apart from that, the client would have to rent a flat while the house is being built. An iterative approach would allow him to settle into the first one-storey house. Iterativity appears to be more beneficial to the client this way.
Iterative Approach: The Six Main Stages
Iterative approach involves six main stages of software development.
- Collecting and analyzing requirements.
The process begins with gathering and analyzing the requirements to the product. The data is systematized and documented. The development team finds out if the client’s budget is enough to make the dream come true, so to say.
- Designing the solution.
The developers receive the full list of requirements to the software and suggest the architecture and design for the solution. They define the level of complexity of the project and the criticality of each requirement.
- Coding the project.
The team writes the code and creates the software functions for the iteration. They compare the result to the initial requirements list. This way, they create the product that is ready to be installed and launched.
- Testing the code.
The QA process is vital since it allows for defining any issues and bugs. Then, they are eliminated as soon as possible.
- Deploying the system.
The software is deployed in the work environment. The team starts collecting feedback from the users.
- Reviewing the outcomes.
The team and the client are analyzing the outcomes and checking if it corresponds to the initial requirements. The development team is asked to make tweaks to the software. Later on, they suggest ways of how the ready-made software can be used as a base for the next iteration and define if the iteration appeared to be efficient enough and what to do next.
Which Projects Benefit from Iterativity
- The software is developed in accordance with Agile methodology.
- The client does not have a clear vision of the final product, only the main requirements are defined.
- The client possesses a clear understanding of what they’d like to achieve, yet keeps changing the task order after starting the development process.
- It is unclear which product features are going to be more or less beneficial to the target audience.
- It is an investment project, so the financial backing terms can be changed all of a sudden.
- The team is acting iteratively in order to study and apply a new technology.
When a Waterfall Approach is The Perfect Fit
- It is vital that the budget is not violated.
- There are tight deadlines.
- The development team is given a detailed task order and they cannot deviate from the course.
- The client is not ready to dive deep into the process. All they want to receive is the result in accordance with the task order.
The Pros of Iterativity
- The model allows the developers to rely on the experience gained from the previous iterations. The longer the process takes, the more specific knowledge and skills the team gains.
- Iterative approach does not call for creating a thorough task order. It is enough to provide a task order for the basic software version for the development process to start. The task order for the second iteration can be prepared, while the code is written for the first one.
- The approach mitigates the risks. As soon as the slightest flaw is discovered in the system, it gets eliminated.
- It leads to efficient communication between the client and their target audience. The development team receives feedback as soon as possible and makes amendments to the product. The user side is satisfied with the product, and the contractor can make tweaks to the existing code without delay.
- The iterative approach gives an opportunity to prioritize certain functions and concentrate on them. It’s a crucial point when it comes to stepping aside from the initial task order. There’s no need to wait for the product to be finalized.
- Iterative approach is a chance to cut the expenses. The development will get less expensive since the bugs are detected and eliminated as soon as possible. The feedback from the users lets the team know which software functionalities are not needed, so they don’t invest their time into it.
- Such a model boosts product quality. New software versions are released regularly so that the most recent one is better than the previous one. The final version contains almost no bugs. The errors are found and eliminated, while a step-by-step process of enhancing the product is going on.
- Iterative model speeds up the release of the product. Developers can simultaneously improve several software features. There’s no need to wait for a part of the team to complete their task and pass the baton to their colleagues.
- Such an approach allows the client to monetize their MVP and invest their profit in the process of software development.
The Cons of Iterativity
The iterative process can frustrate both the developers and the clients since nobody knows how long the development process can take and how many financial resources it is going to take. Such an approach might also cause irrelevant iterations that do not serve the purposes of the project.
Iterativity provokes system architecture issues. It might suffer from frequent changes to the requirements. So, additional resources will be needed to restore it. The development team can even end up changing the architecture of the project several times.
The iterative approach calls for the client to be immersed in the development process. They need to discuss and negotiate all the changes to the project. To sum up
The iterative model undermines the software development process to be divided into several stages. The team suggests a more advanced and elegant solution at the end of each stage. Each of them consists of six points, including collecting and analyzing requirements, designing the solution, coding the project, testing the code, deploying the system, and reviewing the outcomes.
This is the perfect fit for the projects which do not have any fixed timeline, budget and task order. The iterativity is also suitable for an investment project, along with teams who are studying and applying a new technological stack.
Its greatest advantage is the fact that MVP is released to commercial use as soon as possible. The approach allows for identifying and eliminating any bugs in each product version. The client starts getting the revenue from the very first version. The user side gives some feedback, and the team enhances the product. By developing the software iteratively, it can be improved as long as the client is interested in it.
The greatest disadvantage though is the fact that the development process may take far more effort, time and money than planned. The client needs to be negotiating and approving of any changes to the project continuously.