I've always thought that is my responsibility to protect clients from themselves. If not specifically mine as an engineer, then it's definitively my team's job to help them achieve their goals.
Clients are rarely experts at software development; that's exactly why they come to us in the first place. Sometimes we forget the extent of our responsibilities and let them hurt themselves when making uninformed decisions.
Imagine you are working within a budget of 40 hours. If you chase after every single idea the client puts on the table, and end up spending the whole budget while working on superficial things, you can't just go back and blame the client for it.
Think about it: you are supposed to be in the driver's seat. You are expected to provide support helping the client make the right decisions and tradeoffs. You are here to inform, help understand and provide alternatives. Is not about you shutting down every idea coming from clients, but about helping them understand the implications of implementing those ideas.
Looking at everything you do for customers as if you were the owner, offers a valuable perspective that will help you make the right decisions. Every time I'm not sure what to do I like to force myself into thinking what to do if I were the owner. Right away, answers become clearer than ever.