Iterative and Incremental Development: Refuse to Choose
Since you joined an Agile team, your head’s been spinning with all the jargon everyone keeps throwing at you.
You’ve been Googling your fingers to the bone and you know a lot more than you did, but it’s hard to keep some things straight.
So, let’s straighten two of them out in this article: iterative and incremental development.
Read on, and you’ll learn what they are, their advantages and drawbacks, their differences, and how they fit in Agile methodology.
What Is Incremental Development?
In incremental development, you design the complete product first. You only leave out details that you can safely decide later. Then you slice it up into chunks and build each separately. When you finish a chunk, aka module, you integrate it with previously completed parts so they work as a whole.
Pure incremental development means replacing a single waterfall project with many, one for each module. To have working software earlier, you can further split the work for a module in iterations. That’ll also help keep the build-up of defects in check.
Note that the design you during implementation is limited to the details that the full overall design left out.
What Are the Benefits of Incremental Development (And Its Drawbacks)?
The benefits of incremental development include:
- Deliver working software early: with the first completed module (iteration).
- Parallel development. Multiple modules can be worked on by different teams.
- Modules can be completed at different times.
- Separation of concerns. Each module is a self-contained chunk of the product.
- Adaptable to changes in scope. Modules can be added to or dropped from the product.
- Risks can be identified and addressed per module.
The drawbacks of incremental development include:
- All requirements need to be known to decompose the product into modules.
- Not as adaptable to changes in requirements unless combined with working in iterations.
- The product won’t be complete until every part is in place.
- Making the parts work together requires extra effort and can be a challenge.
What Is Iterative Development?
Iterative development is a lot like inventing: discovering what and how you need as you go.
You start with a fair idea of what you want the product to accomplish and you use a process of successive approximation to design and build it.
You begin by designing, building, and testing the tiniest version of what you have in mind. When you’re happy, you show it and collect feedback from everybody with a stake in the product.
That’s one approximation. And one iteration.
If what you created was well received, you keep it and expand on it in the next iteration. If what you created got the thumbs down, you discard it and go back to the drawing board.
What Are the Benefits of Iterative Development (And Its Drawbacks)?
The benefits of iterative development include:
- Working software from the start.
- Delivers business value with each iteration.
- Adaptable to changes in requirements throughout development.
- Design effort is expended only for what will be built next.
- Ability to course correct with every iteration.
- Works well with customers that need something to kick around to figure out what they need.
- Easier and simpler risk management. Risks can be identified and addressed per iteration.
The drawbacks of iterative development include:
- System architecture needs proactive attention and may require fundamental changes along the way.
What Is the Difference Between Iterative and Incremental Development
One important difference is whether you specify the requirements upfront (incremental) or discover them as you build your product (iterative).
Another important difference is the focus on separating parts of the product. Modular design is a core characteristic of incremental development, but not of iterative development.
How Do Iterative and Incremental Development Fit in Agile Methodology
It’s pretty clear how iterative development fits with the values of the Agile Manifesto. And, you’d be ill-advised not to involve your customers in each iteration.
Incremental development doesn’t fit quite as neatly with the values. But it’s hard to imagine being responsive to change when your software is not modular. Modularity, separation of concerns, and limiting dependencies all are central to incremental development. They enable you to do the course corrections that come out of the iterative process.
In short, in an Agile setting, you’ll find a process that combines the best of both worlds.
Get the Best of Both Worlds
Now you know what iterative and incremental development are. And you know why Agile Methodology combines them. So, don’t worry too much about the terminology. Chances are you’re doing both.
The summary of the combined process is simple. Start small, divide into functional modules, discover requirements per module, build test and review, and iterate.
It works well in just about any creative process.
So don’t hesitate to get the best of both worlds for any of your projects, at work or at home.