outsourcing isn't any different than any other task where you rely on other people. just like traditional in-house employment, dating, personal relationships, or anything where you deal with someone else, working with bad people sucks. the key to a good experience is finding good people.
published accounts probably suffer a negative bias because people who get what they want usually don't go out of their way to post "i outsourced and it was exactly as advertised" articles, while people who don't get what they want like to whine and punish the people they worked with.
i suspect a large percentage of people who are outsourcing dev are: 1. incapable of assessing the quality of their outsourcees, so they end up hiring crap ; 2. cheap bastards trying to do work on the cheap, so they end up hiring crap.
like in any other trade, find good people, and incentivize them to keep playing nice with you.
in my experience, the most important thing to screen for is reliability. i just make a rule to not work with flakes, and i try to make sure my devs are happy.
a lot of people outsource because they can't code. if you can't code, you probably can't tell if your dev can code. if you're in that position, you should find someone to help you evaluate candidates, or you might just get screwed.