Sometimes I wonder how people build software for a given requirements by a customer. It is so hard to identify what he really meant. This may be due to the issues in common language developers and customer use (English) is not their mother tongue. Customer might not know what he really wants most of the time and his knowledge in computing might be limited.
Agile project management methodology introduced to the world to bridge this gap between customer requirements and developer implementation. But Agile has its own pros and cons. As a practitioner of Agile, what I can say is Agile is not golden hammer to solve requirement engineering issues.