Gathering the requirements of any project it is usually done by a Business Analyst or by the Project Manager usually since those roles have a closer contact with the final users. In any IT project it is very important to understand what does the final user really wants, considering that most of the times the final user doesn’t really know what they want, so it is important to follow certain steps or techniques in order to understand what do they want and how they want it to be done.
Effective communication is very important since this provides a lot of information to the BA or Project Manager which could define the scope. Some successful ways to get an effective communication is speaking face to face, telephone, communicating by email and presentations.
There are certain cases when there is uncertainty of requirements, a proven way to face these types of scenarios is by avoid taking big steps, you need to first stop, inspect and adapt each requirement which will fulfill the final goal that was defined by the business user. If you take big steps, by doing the development if you are not sure if it is the right way, it will cause a big waste of time, increment the cost - considering that each team member's cost you by each effort needed - risk the fulfillment of the expectations from the user and you can create more workload to each team member.
Delivering the specifications document to the users and evaluating the results of their expectations will help the BA or Project Manager to better define the approach with each team member and the possibilities to deliver what the user really wants will considerably increase. Getting shorter feedbacks will help the BA or Project Manager to modify the path on time if it is necessary, helping avoid any scope changes at the end of the project. =)
The business rules are important, you must know them, understand them and respect them since they will define if you approach is acceptable; having good communication with the users will help you know if there are certain scenarios where your code needs to be prepared, in case this happens, users will not need to get back to you in the future to request modifications to the software you delivered. The prototypes are very helpful to know if you are in the right path and if you need to modify anything on time, so don’t risk the deliveries and the success of the project by accepting last minute changes.
In conclusion- the requirements gathering is very important since this could define the success of the project and the approach the team might take in order to fulfill the user’s expectations. The communication between the BAs or Project Managers with the users is very important; this will provide vital information to be aware and understand the business rules and prepare your code for any possible scenario and will also help to know how to deliver an acceptable product at the end of the project.