Perhaps you have heard of the terms known knowns, known unknowns, and unknown unknowns. They are used to describe that which we know about, that which we are aware of but do not know about, and that which we are not even considering because we do not know about them.
Ideally, the requirements and business domain of a software project are well understood. However, the development team may not have such an understanding from the onset of the project. Even for those who do have the knowledge, such as some of the stakeholders, they may not know exactly what they want from the software.
As a result, you will be dealing with both knowns and unknowns. Part of requirements engineering involves gaining as much knowledge as possible regarding the requirements of the system we want to build. We seek to eliminate the unknown unknowns and consider as many of the requirements...