The entire evolution of software engineering has been focused on how to plan a product. Because 99% of the time the problem IS NOT writing code. It's writing the wrong code. The wrong requirements, for the wrong people, for use cases nobody cares about.