I just read Roy Dictus post Iterative Development (Part II). One thing is very arguable on my opinion. Row writes:
Smart Development defines two basic iteration types:
New Features Iterations
A New Feature iteration is as its name suggests: an iteration during which new features are added to the project
Debugging and Optimization Iterations.
A Debugging and Optimization iteration is used to perform more functional testing (of the version delivered at the end of the previous iteration) and more thorough unit testing and debugging. Existing code can also be optimized and/or refactored during this period for performance or maintainability.
The iterations of different types follow one after another. So you develop new features, then debug and optimize, then develop new features again, etc.
This approach is very interesting, but arguable. For example, it contradicts Extreme Programming planning practice. In XP all business decisions are making by customer. And bug fixing sometimes is a business decisions. Yes, it is. Customer might think, that new feature has greater business value and just more important than old nasty-but-rare bug. And customer doesn't want spend money on bug fixing during month or two.
Otherwise, Debugging and Optimization Iterations help create more stable and robust software.
So should PM ignore customer's priorities and always plan these Optimization iterations? I think he/she shouldn't. But sometimes such an iteration can help. Especially in the beginning of the project.
Also one phrase really hit me:
Testing and Debugging: More unit tests are written, and code is debugged
accordingly [during this phase].
I always thought that unit testing is a part of development phase. There are programmers who writes unit tests, not testers.