The problem is the attitude that the vast majority of indian programmers have.
1. They can never be wrong, or hav e made a mistake.
2. They deny reality - ie everything is always going fine, until its blatantly clear that its not, and even then its somehow still ok, if you ignore the reality that the system was meant to work.
3. Its impossible to know whether they actually understand what you said. Because they will always claim to have understood, you literally have to quiz them in detail, which can be very tedous..
4. They can't bear to disappoint someone, even when they should. I've had programmers impersonate each other on the phone, just to avoid admitting that they weren't there. But its such a half assed job that they don't even tell the other guy that they impersonated them.
Any halfway decent indians move to the UK, US and Europe *very* quickly. Also, I've seen *plenty* of utterly shit programmers from IITs. The vast majority of "successful" indian outsourcing I've seen has consisted of ~20 indian programmers producing reams of shit, and then their UK based "boss" rewriting the lot and getting a pat on the back for making outsourcing work.
Now Eastern Europeans are arrogant fucks who find it very hard to admit they are wrong as well. They do have a good sense of doom however, which makes them far less likley to lie about the state of their projects. In general they are hugely better than indians.
This is all cultural - its shocking how much more angry a westernised ( can admit mistakes, doesn't have to be percieved as omniscient) will get at working with the standard dross. I've never heard of these kinds of cultural traits being engineered in or out of a society, but I seriously hope it can be done for Indias sake. Unfortunately, this would involve facing reality and admitting they have a problem....