Ian Bicking makes a good point about ofshoring that needs to be made:
I don't mean to insult Indian programmers -- certainly there are Indian programmers who are just as good as a good programmer in the U.S.: able to communicate well, able to work independently, able to intelligently judge tradeoffs, etc. But those aren't the cheap Indian programmers. This isn't about nation of origin. Outsourcing is about turning programmers into a commodity, and you can only make a commodity out of something where quality isn't an issue. In the case of programming, that means you must expect the lowest common denominator of quality given the constraints. Because shitty code is always shitty (even in Java) the constraints for outsourcing typically include heavy-weight methodologies and a high degree of formality.
You get what you pay for.