In my career, I have spent a lot of time looking over this issue. Most recently, I had the opportunity to review the "Squeal" method. I utilized both the NPM to look over the overall connectivity and then drilled into the actual interface of the user who was squealing. 99% of the time it is not a bandwidth issue and not a latency issue but something in the application the user was using or how they were requesting data. I am a big believer in having objective data available versus a subjective point of view of a situation. Sometimes I have resorted to using tools like MRTG against a particular remote switch to assist in gathering individual switch port statistics over time that I can then show the user(s) what is really occurring with their connections versus what the "think" is occurring.
These usually end up finding it was how the application was being used that caused the issues. Like a blanket sql request returning millions of records when a typo occured that should have returned 10 records.
In a previous life, I worked at a company that had over 800 users pulling data across a bonded 2 T1 link and used tools like NPM and MRTG to prove that bandwidth was indeed the issue for the issues.