When Elon Musk founded SpaceX with a dream to colonize Mars, few believed that in ten years the company would disrupt the whole industry. SpaceX used an iterative development process to build increasingly complex rockets.
Falcon 1 became the company’s Minimum Viable Product (MVP). Its first launch ended in disaster. The rocket blew up over the launch site on Omelek Island. Following two more failures, Falcon 1 became the first privately-built rocket to deliver payload into orbit.
The lessons learned from early failures helped develop Falcon 9, which in turn became a part of Falcon Heavy. Its maiden launch was a tremendous success with two side boosters landing simultaneously at Kennedy Space Center and Musk’s personal Tesla Roadster flying off into orbit.
Source: giphy.com
Instead of developing a huge (and expensive) spaceship that could take humans to the Red Planet, Musk chose to build a smaller rocket and iterate on the design. This is similar to what we do in the software industry.
MindK deals with all sorts of clients, from innovative startups to decades-old recruitment agencies and construction firms. For most of them, we recommend an Agile iterative approach. Here’s how it looks like.
Table of contents:
- What is the iterative development process?
- Why iterative development is our go-to choice for 2022
- How to succeed with iterative development?
What is the iterative development process?
Iterative model is a development approach that suggests gradual improvement. It focuses on quickly releasing a working, yet imperfect version of software. Engineers work in small cycles to gradually rework the product or add new functionality. Frequent releases allow to collect user feedback and improve the product to meet all requirements. The iterative process includes 5 phases:
1. Requirements analysis
Iterative development doesn’t need a full list of requirements to get started. The first iteration usually focuses on the smallest number of features needed for an MVP.
At the start of each iteration, business analysts gather new requirements and update product specifications for everyone engaged in the development process.
2. Design
The team translates user stories into technical specifications. They include the choice of necessary tools, frameworks, database models, APIs, and so on. Meanwhile, designers come up with the app’s look and feel. Rapid prototyping creates a model of the future application. You can show it to stakeholders or potential users.
3. Coding
Now, programmers have to write code that satisfies the cycle requirements. Developers also create unit tests that check the smallest pieces of code. This allows finding bugs as early as possible and reduces the costs to fix them.
To deliver value more often, software development companies often employ Continuous Integration/Delivery (CI/CD). Each time a programmer commits a change to the code, the system automatically tests it and deploys to production. These micro-releases allow developers to quickly detect bugs and isolate them in the code. A high degree of automation increases development speed and shortens the feedback loop.
4. Testing
QA engineers design and run various kinds of tests to discover any bugs in the app’s code. The tests performed in the current iteration become a part of the next cycle’s regression suite. Iterative testing ensures new functionality doesn’t undermine existing features. As a result, test coverage grows with each new release. The use of automated testing further increases coverage, allowing more tests at lower costs.
Your regression suite will grow with each new release.
5. Evaluation
The product is now functional enough to satisfy initial requirements and there are no critical bugs. The application is ready for a release. It can either be public or internal (where only a limited number of people get access to the application). Either way, you’ll get valuable feedback that will help improve the product in next iterations.
If the release passes evaluation, it becomes the starting point of the next iteration. Customer feedback is used to define the next cycle’s requirements and make necessary changes. UI and requirements are most prone to revisions. Architecture, code, and even technologies can be altered if this benefits the project.
If an iteration fails evaluation, the stakeholders can either discard it or start over.
Iterative development is a vital part of the Agile methodology, along with incremental delivery. The latter means rereleasing the product in small chunks, each adding a complete feature that is visible to users. Neither approach is sufficient by itself. Only by combining them with a flexible mindset that welcomes change can you truly become an Agile organization.
Why iterative development is our go-to choice for 2022
MindK has been using iterative methodologies for 7 years. Since the start of the pandemic, Agile has become a worldwide phenomenon. It is now favored by leading teams in dozens of niches, from marketing to law. In the recent Annual State of Agile report, 64% of companies mention faster delivery as the main benefit of iterative development, along with:
- Easier management of changing priorities.
- Greater team productivity.
- Reduced risk of failure and easier risk mitigation.
- Early feedback to improve the product.
- Higher software quality.
- Faster ROI, and so on.
To understand these benefits, we must first talk about how Agile differs from the traditional way to build software. The old-school Waterfall model has the same phases as iterative development. The difference is that the team has to gather complete requirements for the whole project. They build the entire app, then test a huge codebase, fix all bugs, and release the product to end-users. Each phase can only start after the previous one is complete and approved by all stakeholders.
The whole app is built in one go, which means a longer time-to-market. What’s more, it’s often impossible to know all the requirements when you start building an app. Many key aspects of the project only emerge later in development, requiring significant changes to the plans.
And this is exactly what happened on one of our recent projects. Our clients wanted to build a SaaS-based recruiting app. It would allow American companies to open offshore R&D offices. The app had to include an automated recruiting pipeline, interview scheduling, in-app chat, invoicing, and office equipment management.
In 2019, the founders secured enough funding to start development. But then everything changed. Borders got closed overnight. People had to start working from home. Many projects were paused or closed as the business climate became unpredictable.
Canceled projects that follow a Waterfall model receive non-working solutions with zero value. With an Agile project ceased midway, you still get half the features in a working state.
Fortunately, the project went on. After releasing an MVP, the feedback we got from users showed they needed quite a different product than planned initially. Agile’s flexible change process allowed us to continue developing the product according to user feedback. By choosing an iterative approach, the founders:
- Proved the demand and validated product assumptions.
- Got a working product that allowed them to attract additional funding.
- Wasted relatively little time and money on unproven ideas.
How to succeed with iterative development
Agile is not a silver bullet. Like other approaches, you’ve got to understand how to use it. We recommend iterative development when requirements are incomplete or likely to change over time. This is typical of fast-changing markets and innovative products.
Agile also shines in situations where time-to-market is critical to success. For example, one of the largest construction companies in Norway needed an interactive portal for selecting interior materials and furniture. Their competitors were already developing similar products. Their customers were ready to pay for the solution. So our decision was to release an MVP as soon as possible and let the users influence the development process.
Agile is perfect for situations where your goals and requirements will be shaped by user input. Our Product Owner would regularly distribute surveys among the early users asking for feedback on features. This way we learned that customers didn’t really understand one of the app’s key functionalities. It allowed users to visualize all their expenses on real estate purchases, furniture, electricity, and so on. Turns out, few people were comfortable sharing this information with third parties. A flexible Agile approach allows you to discover surprising insights about users and incorporate their feedback into the project.
Iterative development also allows you to test new technologies or learn more about an unfamiliar domain. This was one of the top reasons why we chose Agile when developing a social networking app for one of our German clients. The project used a whole range of unusual technologies. From a graph database ArangoDB to a D3.js library for visualization of social connections. This approach allowed our engineers to master the new tech stack while minimizing project risks.
On the other hand, if you simply need to automate existing business processes or know all the requirements upfront, you can succeed with a traditional Waterfall approach.
So, now that you know when to use iterative development, here’s a list of tips on how to apply it successfully:
- Release on time at a consistent pace. Keep iterations consistent in length. Then you can plan your deliveries with more accuracy.
- Iterative process changes the way stakeholders interact with the team. So stay involved at all stages of development, adjusting requirements and helping to prioritize features on the product backlog.
- Change is welcome at any point in time. You can control the scope by freezing requirements for the current iteration. All the changes and wishes are added to a product backlog. Later, they can become requirements for a new iteration.
- You may accept a change mid-iteration if it’s small enough and doesn’t contradict the iteration’s goal. However, late changes can disrupt development flow and lead to feature creep. Moreover, constant changes might corrupt the system, making refactoring a necessity.
These reasons make Agile more challenging for the development team. You need to have experienced developers with strong autonomy and a sense of ownership over the product. They should be ready to adapt to frequent changes, make an accurate risk analysis, and provide servant leadership.
Conclusions
With most projects, there is a compromise between budget, deadlines, and features. Iterative development offers a way to build large projects on a tight budget. It allows you to quickly release a core product and improve it from user feedback.
To succeed with an iterative development process, you need to involve people from across your product team. This approach will provide faster ROI, greater flexibility, and higher product quality.
If you need some advice or assistance to implement the iterative approach, you can always rely on MindK. We have been following Agile for more than 7 years. It runs through every aspect of our work. We’ll gladly share our experience with your company. Just fill the contact form to get a free consultation with our Agile experts.