Basically, it is the process of determining what requirement to be done before how it should be done. In order to accomplish this, the developer shows the existing systems and documents. So, simply it is an art of discovery.
It is the process of adopting/choosing the one between the many, which best accomplishes the users requires. So, simply, it is compromising mechanism.