I recently had the opportunity to outsource some of my development to India. An Indian friend of mine had a team that was looking for a project. I ended up not working with them for two reasons.
1) the small size of my project meant that the time I would spend writing up extensive design docs and requirements, and meeting with them via skype, could be better spent just doing the coding myself. This is probably true for a lot of small companies.
2) I wanted to be able to learn for myself how to do some of the stuff I needed to do. Teaching myself has been very rewarding (it is difficult though, and not for everyone)
I think, as your said, outsourcing is best for really big companies who have the structure to manage it, and the size to benefit from it.