I'll admit there's a certain "fudge factor" but the more experience you get with requirements gathering, the less of an issue it is. Ultimately, this is the difference between a "Developer" and an "Engineer".
It's not about the lack of skill on the supplier side. It's usually the client that is not sure how exactly the project should look like. And that's ok - he does not need to scope out every detail - it can be worked out along the way.