Short iterations combined with no up front design and no requirements analysis mean that it tends to turn the project into a maintenance project early on. According to Fact and Fallacies of Software Engineering by Robert L. Glass under item number 19:
“Modification of reused code is particularly error-prone. If more than 20% – 25% of a component is to be revised, it is more efficient and effective to rewrite it from scratch.”
Some would argue that modifications to the actual code are minimal. Refactoring usually involves moving the code to different classes or some patches of code to new methods so that they can be reused by other components. Having actually worked on an extreme programming project myself, I know that as new features are added to the system, that the code does need serious modifications in order to support the new features.