Something that's become increasingly clear to me as a developer is that good code is only a small part of the puzzle - by far the most important factor is communication.
It's difficult enough to determine exactly what it is a client is really asking for as a native English speaker sitting in the same room.
Add in a language barrier, time-zone barrier, remote communications barrier and a cultural barrier and it becomes increasingly difficult for any non-trivial project to succeed.
Outsourcing seems to be most successful if you can very clearly define a specification or systematize the work, have enough knowledge to review the quality of the work that comes back and have plenty of time to micro-manage the project.
It's difficult enough to determine exactly what it is a client is really asking for as a native English speaker sitting in the same room.
Add in a language barrier, time-zone barrier, remote communications barrier and a cultural barrier and it becomes increasingly difficult for any non-trivial project to succeed.
Outsourcing seems to be most successful if you can very clearly define a specification or systematize the work, have enough knowledge to review the quality of the work that comes back and have plenty of time to micro-manage the project.