The challenge with the Agile approach to software development is the fact that it is usually more difficult to change an existing code base than it would have been to originally build it with adequate requirement specifications in the first place. If the changes are of any significance, then they will most surely require modifications at the data layer. This means that the actual database table structure, views, functions, and any associated stored procedures will need to change. Then the changes will need to be propogated through the data access layer to the middle tier and beyond all the way out to the user interface.
Developers can spend countless hours refactoring the existing code base just so they can display some new data elements on a user interface screen. This can lead to frustration on the developer's part because most IT professionals are "abstract" thinkers, which means they have the ability to conceptualize something without "seeing" it first. Thus, the developer has a hard time understanding why the end user didn't just ask for the new data elements in the original request?
If decent requirments are not obtained within a small enough number of iterations, the Agile approach can become more costly on the development side than originally anticipated. Therefore everyone involved can become upset before the project is completed! The customer will blame the developers, and the developers will blame the end users for inadequate requirements, and in many cases no one is really happy at the end of the day.
