I've seen some offshoring went well and some which went not so well.
Common mistakes are:
Some western companies want to do it ridiculously cheap. To hire really good programmers in Eastern Europe you need to offer bigger than market salaries (which are still lower than western salaries).
The other problem is, even if they hire good people they outsource the most boring jobs, because western programmers keep the interesting stuff for themselvs. The result in this case: Phd-s doing the user interface programming in Eastern Europe. The server is developed in the U.S.
Political stuff: western guys don't want their eastern colleagues succeed. I can understand why: they are afraid that their jobs will be taken.
And sometimes communication is hard to do right. In fact depends on the project. I think it is better to outsource highly self-contained tasks which do not need an exteremely high amount of interactive communication.