My most important lesson in working with clients as a programmer, is that asking them how they want their program to work is like asking a native speaker to tell you the rules of grammar in their language. They have often lived with the rules of how their business process works for so long, it is intuitive, and no longer available to their conscious understanding, if it ever was. Show them a scenario, though ("X, Y,…
A coworker of mine used to term this, "Applied Philosophy."
There was a post on HN a few years ago, where a game developer had a game where all of the users were asking for an Undo key. This would have completely broken the game! So he looked into his data, and figured out that what people were mad about was moving into a stream tile and taking damage or dying. So instead, he made it impossible to move onto a stream tile, and the problem was solved.