I have worked in two shops that off-shored. One stayed with it even though the code sucked and had to be re-worked every time because in their words they were too deeply invested (and about half the American staff was still foreigners). The second I had the say so and within 6 months of taking the reigns I cut loose the off-shore element and hired two in house developers to take the place of four. Code quality and communication went up exponentially.
The decisions to offshore are often made by higher ups (at the companies I've worked) who never have to personally deal with the repercussions of that decision. They see it as cost savings (salaries and benefits). They don't want to hear of impact on established project schedules which makes it rougher on the team working stateside with the offshore workers.
I'm still looking for a new gig but have been pleased to learn that at least a few companies I've interviewed with have gotten tired of dealing with issues associated with offshore or even just outsourced work and are bringing jobs back to inhouse permanent positions.