This question already has an answer here:
One of the most difficult and critical part of a project is to get good requirements from your client (internal or otherwise).
I understand by 'good requirement' one that is not so high-level that's barely tangible to the system, and not so low-level that it'll constraint the system creation with really needing it (it happens when your client has some knowledge in programming).
So, firstly how to guide you client into giving precise information that will help you at specification/implementation?
And finally, how one can tell at Requirement gathering if you have a mature enough requirement?