When new / jr devs ask me what they should learn, I say: business, marketing, etc, and improve your comms skills ( speaking, writing, and listening). That's not the answer they get typically.
You can give them *exactly* what they ask for and still be wrong. The user / client isn't going to admit that. Nah. They'll just play the "Damn IT" card and it'll be back to the drawing board but now with a shit load of tension.
It's best to ask - sooner rather than later.
Most people have a vague idea of the outcome they want, and the reason for it. They also quickly know what they don't want _once they see it_
And that's why agile and iterative development is actually great for GUI based user interactive app development.
One of the advantages of being helpless is not taking responsibility.
There are developers that just want to keep their head down and write code, you'll never get those people to ask the questions that are being suggested here.