I've worked with company A on a number of interesting commercial products over the years. After months of trying to find more good engineers in the local area, they recently decided to start working with an offshore consulting company.
We interviewed potential consultants for the project using screen sharing software and asked them to write code. The ones who passed started working on features for the next version of the product. They participate in daily stand up calls with the team here, and someone from here travels halfway around the world to work there every few months.
Result: Quality software delivered with every iteration.
Company B called me when they started having problems with an application built entirely offshore. I was told an executive visited the team once and he thought the demo was marvelous.
Result: There is a mythical beast in the ASP.NET world known as the "2,000 line Page_Load method". I never thought I'd see one first hand, but when I reviewed this code base I discovered an entire colony. The beasts live inside of houses built with #regions, and in the next village is an entire flock of monsters known as the "stored procedures using cursors inside triple nested loops". There isn't much land separating the beasts from the monsters, but there is a copy and paste river filled with fish we call "Execute method with switch and typecasts". The code is spectacular, and by spectacular I mean hair-raising.
If you go offshore to find talent, you might find success.
If you go offshore to find cost savings, you might find the iron triangle will tighten around your neck like a noose.