Well, I can speak about the problems from the other side of the fence :)
Someone said on this thread that offshore works only when you give a very detailed specification of the project.
The biggest problem problem I'm facing every day is not having a way to get answers to my questions. There are many layers of intermediaries that filter out information and delay the answers. I do have to deliver the project and I can't always wait days or weeks every time I have a question. Most of the times I have to assume that you want a certain solution and implement it my way. Unfortunately, it's not always the desired one.
I can give you an example: someone wanted a payment system implemented but they missed giving me the library used by the payment processor. I had to wait few days to be able to get the library from them, only to find out that they gave me the wrong one (32bit instead of 64 bit)... and so on. There are many many little things like this that take time and could have been solved very easily through a phone call (or even an e-mail).
I'm not a junior, a have 10 years of experience (not all of the working offshore) and I can do your job pretty well... I know how to do it, but I have to know what you want. That's a part of the reason why you sometimes have to give very detailed specifications, not because of me but because of the people between you and me that don't do their job.
Not all companies do this though, some of them get it right. Daily scrums with everybody involved speaking on the phone help a lot. Giving me a way to talk directly to a competent person, also helps. Sometimes a simple yes/no answer makes a huge difference. When we start a new big project it helps to work on the same office, even for a few days. Don't be cheap, it may be cheaper to work with me but it's not that cheap, remember that I can very easily move to a different company or even country (and I'm not talking about the salary, but about everything else).
Came in to upvote you. Offshoring is an operations failure and is not always an indicator of programmers' skills.
We work with extremely slow connections and antediluvian software/hardware tools. All managerial decisions are taken by incompetent managers whose main skills is to shepherd as many people as they can. For technical queries, we have to wait for at least a day before someone from the client side can provide an answer.
The IT team from the client side never wanted us as they see us as job stealers and highlight even the smallest of our mistakes in a Daily WTF style because it helps validate the stupid-offshore-programmer notion everyone has. This is one of the more serious issues that no one wants to talk about. The xenophobia from the client kills any chances for meaningful conversation. We are low cost workers and are treated like one.
In the last 12 years that I have worked as an offshore developer, I have had very few meetings that were at a time convenient to me. To this day, I have meetings late in the night from 10:00pm to 12:00 morning or early morning before 7:00am.
Cut us some slack guys. Not all of us are uneducated, illiterate coders who speak bad English and write worse code.
Still another side of the fence. I'm someone that provides the design documents to outsourced developers. My experience is that they ask way too few questions. It's hard to find people off-shore that actually think about what they're doing and ask you the necessary questions to figure out whichever detail you missed or got wrong.
Then again, that applies equally on-shore. But it's way easier to hire good people if you can interview them yourself, face-to-face.
It's too early to say if it will work but this is my third attempt at offshoring some of my dev work - and I'm insisting that we have at least three or four hours a day when we are all present in a chat room.
Communication is key to success, especially when dealing with intangibles like software.
Someone said on this thread that offshore works only when you give a very detailed specification of the project.
The biggest problem problem I'm facing every day is not having a way to get answers to my questions. There are many layers of intermediaries that filter out information and delay the answers. I do have to deliver the project and I can't always wait days or weeks every time I have a question. Most of the times I have to assume that you want a certain solution and implement it my way. Unfortunately, it's not always the desired one.
I can give you an example: someone wanted a payment system implemented but they missed giving me the library used by the payment processor. I had to wait few days to be able to get the library from them, only to find out that they gave me the wrong one (32bit instead of 64 bit)... and so on. There are many many little things like this that take time and could have been solved very easily through a phone call (or even an e-mail).
I'm not a junior, a have 10 years of experience (not all of the working offshore) and I can do your job pretty well... I know how to do it, but I have to know what you want. That's a part of the reason why you sometimes have to give very detailed specifications, not because of me but because of the people between you and me that don't do their job.
Not all companies do this though, some of them get it right. Daily scrums with everybody involved speaking on the phone help a lot. Giving me a way to talk directly to a competent person, also helps. Sometimes a simple yes/no answer makes a huge difference. When we start a new big project it helps to work on the same office, even for a few days. Don't be cheap, it may be cheaper to work with me but it's not that cheap, remember that I can very easily move to a different company or even country (and I'm not talking about the salary, but about everything else).