The fundamental issue isn't that outsourcing doesn't work, it's that outsourcing is seen as a way to get cheap labour. And cheap labour isn't high quality labour.<p>Software development talent is highly mobile, and thus the best people are expensive everywhere in the world.<p>If you go to a cheap outsourcing company in India who can't afford talented staff, then why are you surprised when they produce poor quality code ?<p>Let's look at a market where local outsourcing works well: Web development. A huge amount of web development work in outsourced to small web development shops, both by large companies and small companies, and by and large the companies that outsource are happy. Because companies aren't outsourcing to cut costs, they're outsourcing because they don't have the in-house talent and therefore are willing to pay for expensive outsourcing options.<p>If they decided to go for a cheap local web development outsourcing option (plenty on gumtree/craigslist), they'd get worse quality and be unhappy about it.<p>Countries like India and China may well have separate issues due to cultural or language barriers, but they'd matter a lot less if the people being employed were talented in the first place.