A few years ago, I was asked to give a presentation on engineering productivity, especially as it related to outsourcing (India and China). The report can be found here (This is a pdf generated from a Powerpoint presentation. The Powerpoint fly-ins make the report more readable. Send me an email via the "Ask for a deal" functionality if you want the Powerpoint.). The presentation was made in the context of using (cheaper) overseas labor to do development for enterprise software development.
The conclusion: If you can hire great or superstar engineers overseas to do development, hire them. Otherwise, you should pass. Finding such engineers, however, would be difficult. There just weren't many to be found and identifying them might be quite difficult. This situation was likely to improve, given that large companies (e.g. Microsoft, Oracle, etc.) were "setting up shop" and that drafting behind these efforts would pay off.
Fast forward two years: There is indeed great engineering talent overseas. The economics aren't quite is good due to the rising overseas economies. No surprise here. Also as predicted, simply outsourcing "second tier" engineering jobs (e.g. QA and maintenance) wouldn't work. However, it seems that shipping "first tier" development work (where requirements, specifications, and designs are still done locally) might not work either. Distance, cultural differences, and time dislocation prohibit much of the interaction, tight iteration and communication between the product team and development team that is required to build great products.
We're watching a few (small) companies that are using this approach. I'm very curious as to how this will work out.
An alternative approach is emerging: Building full product teams/business units overseas. So, all product (and maybe even P/L) functionality is located overseas. Product management, engineering, Q/A -- the whole team. And, full autonomy is given to the team. Communication between corporate and the team is kept to a minimum. To misquote Jeff Bezos, communication is a bad thing. If you need to communicate across time zones/continents, you'll lose. So, keep the entire team intact overseas, co-located together.
We'll see how this plays out as well.