After going through a lot of rants and hatred towards Indian programmers in /reddit, blogs etc, I was feeling sad. It hurts but that is true and we have to accept the fact. Even though I am not such a bad coder(now), but as an Indian, I feel like I have some obligation to explain the root cause. And by the way I am not going to justify the sub-par performance at any point of time, but simply give you the reason for that.
1. Crowd & Core Incompetency
Considering the fact almost every year we have close to million engineering graduates(who never wanted to do engineering) coming out of so-called-engineering colleges(which hardly teaches anything useful to practical approach of industries), who are looking for a job. If they stay at home and pursue their dream, they will be labelled as incompetent and abused by their own parents and relatives. So their top most priority once out of college is to get a JOB. So they are in real pressure to get A job. In the process of getting a job in their core competency(which I heavily doubt any one does as of now), they lose patience and lose respect. Out of 10, 2-3 get into their core(let’s call them bright guys or lucky!) and rest of ’em are lost in the crowd. Worst case, as we are dependent on our parents, we even get out pocket money from them while searching for THE job, which again is big PITA.
Everyday I see a lot of youngsters running behind hiring agencies(one of my friend owns a hiring agency and most of his client advise him not to send engineering graduates, rather they are okay with diploma guys) to push them into IT space for meager(or no) salary(seriously, I see freshers work their ass off in small companies for nothing, not even stipend), which in my opinion is pathetic. And then there is some weird category who get job in IT,so they can raise their dowry bar. I have personally seen a guy who earns USD 6.5k(~4L INR) per annually as fresher, got USD 162,000(1 crore INR) as dowry(Google the word dowry if you are not Indian)!!!!! or close to that. This is the state of education in India and expecting a solid coder(leaving person who loves coding) out of this system is like expecting suzuki alto to run like ferrari. It runs, but not how you expect it to.
2. Let’s make some easy money
This is the mindset of youths, who is fresh out of college. If you are an engineering/arts/whatever degree guy who is jobless, you can easily(not that easy) get into IT, no matter whatever stream you are from(ECE,Mech, hell that). As a kid, I always dream about becoming a developer, and I had the privilege of having computer at my home, when it was considered as luxury. To pursue my dream career, I chose B.Tech IT, dreaming that I can become a developer with this. But soon I realize not only IT & CS guys, but anyone can join IT. I heard parents talk to their kids like “Take Mechanical/ECE/EEE etc. Even if you don’t get a job in your field, you can always go to IT”. It never was kid’s decision(unlike me). My parents gave me liberty to choose my own course, school, clothes and that is what made me responsible, realize what I want and be where I am and what I am now.
Decisions are made for you, by your parents. Be it education, marriage, even career and kids *sigh*. Now realize what a kid will have after 4 years of education? Nothing. They expect someone to tell them what he need to do. Out of 10, 6 are like this. After their parents hand out their kid’s career decision, he will start pursuing it. As you guess, if you throw a rock in Bangalore, chances are that it will hit a IT guy. It is true. So obviously the kid will end up in IT. If you take big four names(I don’t want to spill the beans but you know who), they have training programme for freshers(A friend of mine who attended this training told me this”It was like we again ended up in college, only thing exams are limited”).Trained by below-par trainers(or in most case, no training at all) and suddenly pushed into the projects, all they can do is repetitive, monotonous, crappy code, (or even worse, sitting in bench for head counts) which is well approved by their leads and managers to finish up the project. This leads them to the illusion, that they are following software principles whatever been taught by the trainer. So according to them, they are always rights, ’cause trainer said so. Because even in training they taught them how to write code, not how to write GOOD code(BTW I never went to such big outsourcing companies so never had a chance to be a part of their training programme).
Some may even claim that their training was best, world class and eye opener for them. After all, I wasn’t surprised to hear this when a guy who scored 80+ in his degree. ‘Cause all he did in university was mug up and he follows the same trend in big companies, which he admire and embrace. Being in the industry from 2007, I can relate my experience with this. When I was a fresher, I already knew Java/J2EE. But my colleagues who were also fresher have no idea what to do and how to do. I was a bad coder, I was forced to realized that by some good guys online and I picked it up one the way. But other guys not even bothered about that. Worst, their tolerance level if I tell them straight to their face that their code sucks, they start scolding me!!!
3. Ugly Hierarchy
Next bad thing, is HIERARCHY. Since as kid I never had issue with saying NO. And I never afraid of my superiors. But it is not applicable to all. Respect is one thing, but afraid-of is another thing. Managers(80% of them), always think they own developers and they can do whatever they want with them. Apart from a few like me, most of them don’t have courage to stand up because,
1. They are not confident about them self and their skills
2. Afraid that if they go out, they will not get a good job with decent pay
With this 2 worry in their mind, developers vows to never say NO and managers will take it for granted and eat them up. If you say NO, either your life will be made living hell or you will be forced to quit(Both happened). Now the rest of them, will just work & work and churn out 1000s of lines of rubbish code,just to finish whatever task they have been assigned to. On their way to finish the task, they forgot about code quality, indenting(what? seriously? you guys have time to indent code?) and everything else you need to follow for clean, optimized code.
I have personally reviewed codes and the mere idea of doing so always scared me to death. Sometimes I yell at them but mostly I get frustrated and see what I can do to improve it(read re-write). Yeah, we are friends and shit, but when it comes to code, I never compromise with quality and expecting the same from other guys in my team was not good idea. So, I end up cleaning up the mess, to make my life less miserable. There was time when I wish I would have done the whole project by myself, so escape from these kinda issues. But it won’t happen in an organization and I am left with no option other than live with it or get out of it. This is the reason decent/good coders always jump organizations to find their comfort zone.
This is what in my view, is the biggest issue with indian developers. They never try to learn or update themselves. In their view, it is waste of time or not fruitful(Exact word by one of my ex-colleague). Once they become 3 years experienced they want to become Lead and when they become 5-6, they want to be manager. Believe my I have seen a lot of such jokers promoted as Managers and I quit after that. All incompetent developers, who never wanted to learn/update themselves will become managers. The main reason they want to climb the ladder is, so that they don’t have to CODE.
One of my past organisation had total of 5 managers for a team of 25 developers. I mean, WTF!!!! But this is the reality. I have this habit of reading magazines, blogs, forums so that I can stay updated of newest and hottest technology, implement them and do some POC for understanding, whenever I am free. If one of the MANAGER see this, his reply will be “Why waste your time learning this. We are not using this. You can do something useful na?”(Man, I hate this slang). This is their general mindset. If a person sit idle for more than 15 minutes, they will create new task and assign it to him. And my colleagues(90%), even if they are sitting idle for 2 hours, they never try to learn something. Rather, they prefer to chat/FB/WhatsApp or go out for break!! With people of this kind of mentality, it is not fair to expect quality work out of them. Most of my time wasted in cleaning up the mess(50% only) they made but you can’t stop them from doing. Believe me I tried and the success rate was 25%(only a handful of guys picked up, rest simply ignored me!).
Final thoughts :
Finally one myth I want to explain, attrition rate. There is a common “All we[read Indians] want is money and we will jump anywhere to get big money”. This is not 100% true. Let me tell you, the people who love their job, will choose the best/product based companies(which nurture them, help them) and settle there. Best case, they may move to U.S. The people who are stuck with organization for long are, either incompetent guys, or relative of CxO or higher authorities or may be a skilled person living in their comfort zone and find no need to jump!
As many blogs portray, good guys will jump companies not only for money, but also for culture. Once they find their nest, they will not leave. So if you really want to setup offshore development center in India, all you can do, is either handpick guys(i know, it is a big pain but worth it You can easily pay 30-35k for a good coder with 7-8 years experience, which is still economical in my opinion) and setup offshore center else go for some best offshore consulting firms. although finding one is tough and a gamble.
– – –
I can point a lot more reasons, but I am not going to. With this 4 basic things, one can have fair idea why Indian developers(80%) are not able to produce good quality codes. Of all these years, I have worked in a couple of product development companies which are awesome, filled with brilliant minds and their code quality is nowhere near your everyday indian coder. But finding one such organization is a challenge, because the ratio is 10:1. It is the culture, family[pressure], new-born-lifestyle, glamour, poverty and frustration, which pushed him towards IT, and he is in knee deep shit before he realized he is not cut out to be developer. But that is too late, and he is stuck with IT forever.
[Note : For those who are going to post offensive comments, please stop. I am an Indian, so I am not doing this to make anyone look bad. IT becomes our bread and butter. If we want to retain clients, then this is how we do that. We need to accept the fact and improve ourselves, if we want outsourcing to flourish. Else, god only knows, what will happen if we all(service based/outsourcing companies employees) go jobless. Just see what happened with TCS. With no solid reason, they kicked out thousands of experienced(and some are good ones as I heard) developers and what is the guarantee that it will not happen to you or me. Be bold, face it, let’s improve the quality of work and I am sure, IT will boom rather than going downhill.]