Requirement Engineering is process of formulating, maintaining, and documenting software requirements. Requirements are given by the User of the system, according to that engineers will develop the system. Requirement Engineering deals on Functional and Non Functional requirements. Functional and Non Functional requirements are the work as bricks to support software edifice. Finally, design, implementation and testing add stories to construct entire software tower on top of this foundation. For this purpose, requirement engineers come across with numerous challenges to develop successful software. Requirements engineering is an iterative process.