Features developed within an iteration should be 100% complete. Too often in software development, “done” doesn’t really mean “DONE!”. It doesn’t mean tested. It doesn’t necessarily mean styled. And it certainly doesn’t usually mean accepted by the product owner. It simply means developed.In an ideal situation, each iteration or phase should lead to a release of the product. Certainly that’s the case on changes to existing products. On some projects it’s not feasible to do a release after each iteration, however completing each feature in turn enables a very precise view of progress and complete the overall project really is.
Make sure each feature is complete before moving on to the next
Of course multiple features can be developed in parallel in a team situation. But within the work of each developer, do not move on to a new feature until the last one is shippable and in production. This is important to ensure the overall product is in a production state at the end of the iteration, not in a state where multiple features are 90% complete or untested, as is more usual in traditional development projects.
“DONE!” should mean shippable and in production.
So make sure that each feature is fully developed, tested, styled, and accepted by the product owner before counting it as “DONE!”. If there’s any doubt about what activities should or shouldn’t be completed within the iteration for each feature.
The feature may rely on other features being completed before the product could really be shipped or placed into production but the feature on its own merit should be shippable. If you are ever unsure if a feature is ‘done enough’, ask one simple question: “Is the feature ready to be shipped or placed into production”.