I guess outsourcing companies pay their employees very little and they aren't able to hire top talent. And even if the pay was good, best programmers don't like working for outsourcing companies. The ones they do work for outsourcing companies don't care about the quality of their work as long as their company is paid so they get paid, too.
We assigned a task to one guy in Ukraine and two months latter he didn't complete it. One of our colleagues did it in three days.
My take is if you want to get good results from developers from another country, you have to hire them directly.