I’ve noted a teams need for an occasionally “hardening iteration” in SSA Chapter 13 as well as in a number of posts (Release Planning at Enterprise Scale: an Inside-out Narrative.) The hardening iteration is dedicated to eliminating technical debt, such as minor refactors, bugs, testing across multiple platforms, final QA, docs etc., that is most typically scheduled at the end of a GA release cycle.
Some might argue that needing a hardening iteration is a sign of agile immaturity and it’s just a testing waterfall phase by an agile name. In practice, however, I’ve seen really good agile teams continue this practice for years, so I personally think it’s a practical solution to a real world problem and I typically encourage teams to adopt a hardening iteration pattern in their initial iteration and cadence models.
In a recent post, Paul Beavers notes an email thread from an agilist friend of his, noting that the use of hardening iterations can be both a sign of immaturity (lots of such iterations at the end) or a sign of maturity (occasional hardening iterations in mid-release cadence drawing towards elimination of the need for hardening over time). In any case, it’s a pretty reasoned treatment of the question and it can be found at: Indications of Agile Maturity.