In my previous job, I spent seven years working with off-shore developers. Blueberry Consultants is heavily reliant on Russian developers, and, for most of my time there, I was the only UK-based developer.
My experience with this isn't positive. A few anecdotes:
I was urgently taken off a project and reassigned to an iPhone app we were trying to develop. The app had been developed by a set of developers somewhere in Russia who had disappeared and left us with a buggy and very incomplete app (the UK based project manager had also recently quit after only working there a few months - unfortunately, not an isolated example). It took a few months of my time to get it into a state that it could be given to the customer, but it still had some serious failings. One I was aware of (which seemed to not occur in practice) was that if two HTTP requests went out at the same time, it was effectively random as to which one got handled by which block of code.
I worked on a project for a few weeks to implement a high performance TCP server to run on a Linux VM. It was very simple - listen for incoming data and stick it into an SQL database. All it had to do was handle it fast. I got it handling about 10,000 requests per minute and the whole of the first phase of the project amounted to about 600 lines of C.
I moved on from the project and the next phase was given to one of our Russian developers. When I came back to it, he hadn't managed to set up his own Linux development environment so he had converted the project to C++ so he could easily compile it on Windows. Which was bad enough in itself, but the whole networking code I'd implemented was Linux specific, because you need to go OS-specifics to implement high performance TCP sockets and we'd agreed to run it on a Linux server (but it didn't actually matter because the customer had massively overestimated how popular his product was going to be...).
I had a narrow escape from another dubious project. One day I was called into my boss's office who had big ideas of me getting a project into such a state that it could be demoed to the customer the following day. I never found out whether or not the timescale was as absurd as it sounded, because it turned out that the developer hadn't checked in the source code to our source repository, so I couldn't work on it.
The absolute worst project I worked on was another mobile app, which was given to me in an abysmal state of being extremely buggy and dreadfully slow to the point of being unusable. The project had been ongoing for about a year. I was put onto the project only a few weeks before the customer's patience ran out - they informed us they were pulling the plug and hiring their own internal development team. I was extremely embarrassed to work at the company as this happened, because it was not a complex app at all. The whole situation could have been easily avoided by employing very average developers.
My experience of off-shore development is that companies who favour off-shore developers do so because they're cheap. But it's a fairly basic fact of economics that you don't get something for nothing. If your developers are cheaper to employ than their competition, it's because they aren't providing as much value.
The level of quality and professionalism I saw from the off-shore developers at Blueberry was certainly not on par with what I've experienced from on-site developers, and I spent a lot of time cleaning up after them.