A couple of months ago I was asked to present a couple of lectures to some 3rd year IT students at University, on the importance of communications and relationship skills in an IT environment.
The first thing I asked these students was "How do you know when a project has been a success???" The answers I got were as expected... "Get a raise", "Customers gets what he asked for", "My boss is happy" etc.
After some interesting discussion, I explained to them that the only measure of a project's success, is whether the Customer(s) THINK it was a success!
If you receive a negative review, the question that should be asked is not what went wrong with the project, but what went wrong with the customer relationship and how the Customer was managed.
Everything comes down to Customer Perception. You can be the best techo in the country, but if you can't communicate and manage the customer relationship, you're making a rod for your own back. Similarly I've seen barely adequate Engineers getting more work than they can handle, simply because they can build and manage customer relationships.
And as a quick answer to the most common argument ("If I meet the scope of the project, they have no right to complain?), that sort of argument is the equivalent of "The operation was a success but the patient died...". If you DIDN'T meet the scope of the project, you would be asked to return and keep working until you got it right...