When you start thinking that you're smarter than your client, and that you can know what they want before they do, you're on very dangerous ground.
Well, that's not what I said. You're right: it's dangerous (and basically always wrong, for all intents and purposes) to think that you are smarter than your clients. But that doesn't mean you should assume that they are smarter than you. What I meant to describe was more of a partnership. They are going to know the subject matter better than you. That's basically a given. You are going to know how to develop software better than them. That is also a given.
That's the point, really... if you get into the business of letting your clients design your (as in your and theirs, remember: it's a partnership) software, alone, with you as a passive requirements-to-code translator, that's where the problems start. When saying that you will see the scope creep coming before they do, what I mean is: you have experience developing software, and they don't. If you really understand what the client wants, and you have any experience with similar situations, then this will give you a heads-up to potential issues. Use that forewarning of danger as an opportunity to avoid it. When you encounter those watch-signs, ask questions that the client never bothered to give you the answers for in advance (because they, lacking your experience at software development, will not have thought of all the potential issues).
Not an editor command: Wq