It’s the process of capturing requirements for the development of any system. Developers or systems integrators need to know what you want to happen in an application in order to build it.
But they can’t read minds, requirements need to be externalised from the customer in a clear concise format that doesn’t lead to misunderstandings down the road.
Mistakes when specifying a solution get more expensive to fix the longer they take to be discovered. The cost is exponential when moving from each phase. So when changing something in test means that the development has to be done again (with all its associated costs), finding something wrong once it’s live means that it needs analysis, development, testing and release in order to fix it. Often companies just swallow the inefficiencies and forget what the original ROI promised.