The key first step here is "Problem Identification" - the number of times I have seen where it is part way through a development, and only then it starts to become obvious that even if the specifications were good, they were not solving the right problem.
Users have a habit of describing their problem as the solution they think they would like to have, often being disastrously far from the actual need.