Iterative Development is an approach to delivery based on the understanding that with complex work products, it’s not possible to get it right the first time. Thus, iteration, or product refinement, is needed to support the delivery team in discovering better solutions over time.
An old paradigm of delivery is called waterfall development. This is where people believe that it’s possible to conceptualize and construct the right solution that will solve the business problem in one go. However, this is rarely the case – and what happens is that the product doesn’t fully meet the customer’s requirements. A costly mistake in project management.
What is Iterative Development?
Iterative means progressive refinement. Essentially, iteration means that the delivery team builds an iteration of the product. Then, they evaluate how that product meets the customer requirements. Does it fully satisfy it? How can we improve it?
When we see the product iteration, we might get ideas and say, “We could refine this product this way. Now that we see it implemented, wow, we have so many new ideas for how to make it even better.” There can be a cost-effective reset or change before the last delivery date.
The more traditional approach of waterfall, or fixed delivery, usually creates suboptimal or inadequate products. Something it meets the needs on paper but it misses the mark in terms of usability and how it functions. There are no changes or fixes until after the product is delivered, wasting time and money.
From “Blah” to “Amazing”
Organizations that want to build products that delight customers should use iterative development. This allows them to make the changes needed to go from an okay product to one that’s amazing. Even more importantly, it’s not just about the shift from blah to amazing; it’s more about a shift from something that does not meet the requirements to something that actually does.
The “waterfall” mindset, which says, “We’re going to conceptualize it, spec it out, design it, build it, and test it – in that order” doesn’t actually work for 98% of all products.
It’s About Learning
It doesn’t matter how smart your people are: working with complex products requires learning. Iterative development is all about accelerating the rate of learning. Learning about the business requirements, customer needs, and technical risk as well as learning about how this group of people can function together as a team.
There are many dimensions of learning that have to happen as a team comes together to build a product. Smart teams focus on learning in early iterations so that they can reduce the cost of learning – but the learning needs to be there either way. What iterative development allows you to do is capture that learning and have it lead to amazing products in a very effective way.
Iterative Development vs Incremental Development
Iterative development and incremental development are closely related, but they’re different. Incremental development means we’re going to build a large product in small pieces, called increments. We’ll baby-step our way to success. Good teams will not only build things in increments, but they’ll also iterate on those increments.
Healthy teams are going to figure out, “Some things we can just deliver, and we’ll get it right the first time. We don’t need to iterate on it, and we can be very effective that way. In other parts, we’re going to need to do a little or a lot of iteration.”
It’s totally natural to mix incremental delivery and iterative delivery to create the best outcome at the lowest cost. High performance teams deliver in increments and iterate when it adds value.
Iterative Development Done Right
If you’re new to iterative development, it can be easy to make avoidable mistakes. Follow these instructions for success.
Build in Time for Iterations
All too often, plans make no space for iteration. There are only plans to increment, and there is no space or time in the project plan to learn from what’s working. However, time for iteration is critical to finish the product properly.
Iterate Early and Often
When you start building something, if it needs more work, do it right away while that idea or product is still fresh in people’s minds. Don’t leave it for a later date – do it as early as you can. Usually, if you’re doing sprints or iterations, it’s best to do the next iteration immediately.
If you’re using an approach like Agile, you do a product review or a sprint review at the end of the iteration. The team and the users of that product sit together and say, “This is what was built. How does it serve our needs? Can we use it exactly the way it is or does it need changes?”
Advanced teams might start to do usability testing with built product features and ask, “Is this really meeting our needs? Is it creating the level of usability we’re looking for in this product?” There might be a post-build phase, where there’s some advanced testing.
Good teams do evaluation. Instead of saying, “Oh, it’s built – check mark, we’re done,” they look at the product and say, “Is this really done or would more work benefit the project?” Ultimately, evaluation and testing before delivery leads to greater success for the team
Smart teams incrementally deliver finished products and iterate on parts they’re building to make them better. As a team matures, it becomes more natural to know when to increment and when to iterate to build the best products possible.