A couple of weeks ago I had an interesting conversation with a co-worker about iterative vs. incremental development and what he felt the differences are. (I'm going to talk about what and how things were discussed, just to let people think about it.)
Iterative developement is where you keep on going over what you have done before and improve, refactor, and build upon what you have done before. Each iteration (should be) better than the one you had before, even if you don't add features. This is important. This (like in XP), requires you have the courage to look at what you did before and refactor what you did before in order to make the app better.
Incremental developement on the other hand is where you keep on adding on what you did before. This is the subtle difference. In incremental you don't go back and refactor what you have done before, you only focus on adding new features and not on improving existing ones. It's a focus on feature count instead of quality.
Needless to say that incremental doesn't sound very good, but I can see how it's possible to get squeezed into that mindset (?) if the customer's only focus is on the number of features they get per $. This isn't "big picture" thinking, nor is it a place that any developer wants to be. I just thought that this is an interesting anti-pattern that would be good to share. It's better to know the bad patterns before you find yourself in them.
It's not just the customer that you need to worry about falling into the incremental development trap. Unfortunately, trying to get other team members and project managers to get out of this mind-set can be just as hard.
ReplyDeleteTo me "iterative" and "incremental" are the same thing. Apparently Wikipedia agrees:
ReplyDeletehttp://en.wikipedia.org/wiki/Iterative_and_incremental_development
I'm not sure there are "official" definitions for either, so it's hard to say for sure. Then the issue becomes how people arbitrarily attach the names to some process.
The process you describe as "incremental" isn't realistic. You can't make a piece of software by only adding to it, that's just silly. I can't tell if you're trying to convey this silliness in your post or seriously comparing the two.
Basically, we are just talking about development. You can't do development without iteration and incrementalism. Iteration means that you go over what you already did, to improve on it or fix bugs. You never get anything right the first time around. Hopefully you get it right (or right enough) by the time you release it. Incrementalism means that you develop in stages. You don't try to do everything at the same time, and then throw it all together at the end. You build your features on in stages, making sure it all works together as you go along.
ReplyDeleteI still don't see the difference...
ReplyDeleteKibbee: I don't see any difference in your explaination... that's not what I was getting at.
ReplyDeleteRyan: no, "incremental" that I talked about isn't really realistic, but it's a flawed mindset that I wanted to highlight. I don't think that you can ever "do a feature" and not have it affect other existing features. Each feature you compleate may require to rethink and redo the existing archtecture.
However, if someone else budgets the time for a feature, not looking at the big picture and you only spend the amount of time to "add" and not "refactor", that's what I was calling "incremental" developement. (note: the person doing the work should always have buy-in for the estimates)
Iterative would require that you go back and look at the whole system...
I'm not sure if I am explaining it any better (or differently)... does that make sense? Should I take a stab at it again tomorrow?
OK, that makes more sense to me now.
ReplyDeleteI think iterative development is when you use iterators.
ReplyDeleteDoes that mean that Fortran is an iterative language while C++ is an incremental language?
ReplyDeleteKibbee, that makes no sense.
ReplyDeleteIt's a stupid pun. An interator is nothing more than a loop, hence "for"tran. And in C++ the increment operator is ++. Which is where C++ got it's name from. That's the incremental part. Anyway, puns are a really high level of comedy, and take a lot of intelligence to think up. Or at least they used to....
ReplyDeleteGreat reading, keep up the great posts.
ReplyDeletePeace, JiggaDigga