The most expensive line in any project document is the one everybody agreed to and nobody understood the same way. "The system should be user friendly" costs nothing to write and can cost weeks to reconcile.
A workable requirement names the actor, the action, the condition and the expected result. "A store manager can approve a purchase order up to fifty thousand rupees; above that the approval routes to the director" can be built, demonstrated and tested. Someone can say yes or no to it.
Edge cases belong in the requirement rather than in a later bug report. What happens when the approver is on leave? When the amount is exactly at the limit? When the order is edited after approval? These questions are cheap during writing and expensive during testing.
It also helps to state what is out of scope. Explicit exclusions prevent the slow expansion that turns a three-month build into a seven-month one without any single decision being to blame.
