This is the classic approach but there are shortcuts to better meet customers needs. If we are talking about an existing solution that needs improvement then you must have somebody in your organisation that knows current solution and maybe other similar solutions (from competitors maybe). Then work hand in hand with the customer. If there's no v.1 platform / product yet, or maybe the customers does not even exactly know what he/she wants, then it's important to develop the solution for your self and use it yourself for your own use. That could be the only way to develop a real solution and not just throw features
at it.
But it is hard to talk about something that broad. Books are written on this topic so it's hard to even talk about this subject without concrete examples.