Quote one of my past Indian coworkers: "If you pay peanuts, you hire monkeys.". Which is the chuckle worthy way of saying that eventually the markets are, all else equal, fairly efficient, and that the labor pool available at $4 an hour to bill to you at $12 an hour has systemic, pervasive competence issues which will prevent the successful completion of many projects.
Anyhow, beating the usual drum: don't be a cost center. Figure out how the business works and nobody will even consider outsourcing the projects you'll work on.
If you want to outsource to India, you need to find a company that hires super stars. Super stars in India demand a salary of Rs50,000 to Rs 100,000 a month. Which is still quite less from international point of view: its about $1000 to $2000 a month. A company hiring them will bill you a minimum of $20-30 per hour. Usually more like $40-45 per hour.
If you go with a company that is billing you less than that from India, you should know that your work will suffer because that company does not hire the best skilled coders.
It is less from Western point of view not from international. I'm sure that in Latin America and Eastern Europe prices are quite similar and time zone differences are more acceptable. India lose in this price range because of cultural differences as well. Usually those are small details like matching Christian and/or international holidays (therefore no conflicting days off) but sum of those details are really significant.
Again your point just confirms fact that Western developers shouldn't worry about competition from India.
I'm in Uruguay, and Tata Consultancy Services (TCS) opened a huge facility here to address just that (the time zone differences) as we're in the GMT -3 timezone.
But they're having trouble filling positions at their salaries, most decent programmers here earn more than U$ 1.000 (I make U$ 1.500 myself, and want to make at least twice that, so I'm about to start my own company).
Figure out how the business works and nobody will even consider outsourcing the projects you'll work on.
Exactly. It's easy for a tech person to get lost on the tech side of things. We have to remember that the business people really don't care how cool the algorithm was that we used to solve their problem. All they care about is that a) their problem was solved and b) it saved/made the company more money. In reality a tech person is going to be a stronger position than the pure business person because the tech person should also have the skills to implement. The business/tech hybrid who can see the business problems early on and has the tech skills to solve them will always be an invaluable asset.
You must have great communication/presentation skills. Sometimes you can present poor judgement as an excellent solution and if you don't you might not be able to present you work in a very favourable light.
Based on previous experience working with an outsourcing firm in India, and on what I know/hear from friends back home, here's what I've observed:
- Although the raw number of 'programmers' in India is large, the percentage of good programmers is smaller than that in the US (anecdotal, as observed by me over ~10 years). So essentially, you get what you pay for because the good programmers can command (and deserve) salaries close to what their American/international counterparts make. Many of these better programmers are snagged by the Amazon/Microsoft/Google of world who have development centers in India.
- A lot (most?) of firms in India that employ programmers do not invest in educating/developing their employees' skills. This is partly the result of employees jumping ship very often (hence making the investment in their development not worth it), and partly the result of the business (they do one-time contracts and paid by the hour, so delivery == success. Quality/sustainability isn't as much of a concern).
- For a large percentage of programmers, career development is defined by a larger paycheck, not necessarily stronger experiences/skills. Therefore, their motivation is to switch jobs very often and do the same caliber/quality work, and yet make more money with each switch. So they too aren't motivated to excel.
I've worked with outsourcing both to India and Eastern Europe in three passed companies. Your comment of ratios of "good programmers" to not, particularly in India is spot on.
A lot of outsourcing to India started with Enterprise Java applications, MVC/CRUD type stuff that was simple, but also time consuming. So, it made sense to move the tasks that didn't take advantage of your strong programmers overseas to help with the burden. A number of outsourcing firms WiPro, Global Logic, etc. started with this model. Many, even well into the mid/late 2000s worked on these same Apps. It was their domain of "expertise". Teams were generally set up to have a "good programmer" as a lead/architect that was often your main contact and was responsible for one or more junior developers doing the work. Even if you had a strong set of requirements and a good relationship with the lead, implementation could suffer from the "chinese whisper" effect -- what you request gets distorted the further down the chain it goes. For CRUD apps that weren't performance dependent, this was fine.
As the push for outsourcing continued, from my experience, these formerly Java Enterprise app shops were asked to do more diverse projects. The majority of the ones I had to work with were a failure -- if they kept the same team structure -- i.e., remote lead who oversaw remote juniors. The biggest cause wasn't necessarily one of background, it was more turnover and drive. The churn was very high and developers were asked to do something boring or beyond their skill set (or, the still lingering issue of sticking to actual requirements).
One prior startup I was at outsourced non-core monitoring stuff that was a reasonable success. However, a local executive was all hung ho about outsourcing more core technology until a couple of us put our foot down and indicated the unaccounted overhead of the local work needed to fix things. That stopped that angle. At the same time, we had amazing success outsourcing targeted pieces -- an arm assembler optimization of a key piece of crypto code, being one.
The reason for the success? The coupling of a bounded small project that was sent to a team with that relevant skill set. This is the key area where outsourcing is successful. Bounded projects, targeted to a team with the relevant skill set, and good communications between them.
Where outsourcing fails is the generic skill set approach nd overhead that most of the big firms employ. Local management just sees the reduced dollar and doesn't account for the extra time -- to fix, to integrate, and to iterate on deficient deliverables.
This isn't an india / US issue. This is a good approach regardless of the topic. It just happens that India was the envouge outsourcing destination and the majority of US Management solely focused on the assumed reduced cost.
So essentially, you get what you pay for because the good programmers can command (and deserve) salaries close to what their American/international counterparts make.
Exactly. I think it has something less to do with India or the remote-ness than it has to do with choosing the cheapest possible team. Outsourcing is mostly premised on the idea that workers overseas are undervalued / perform the same task at comparable quality for less money. You wouldn't hire a US firm for 14/hr, but you assume that an Indian firm at 14/hr will be dramatically better. Once that's not true, the competitive advantage to outsourcing ends.
au contraire - the average Indian firm I have had an experience with spends far more time, money and effort training their employees than employers here in the US. I say that as someone who has worked in India for a couple of years and who has been working in the US for about 5 years now. US companies that I have worked with largely expect the employee to pick up tech skills in their own time.
It makes no difference. You will need to spend a lot of time, money and effort 'training' your employees when they are at a level where they see a C compiler tell them 'Semicolon missing - Line 19' and have absolutely no clue as to what to do with that. Or they've to call up a friend to figure out the 'difference' between * and & in C.
Source: A lot of my friends go through said 'training'. And I was that 'friend' who was called.
I'm a partner at a Ruby outsourcing company in Argentina. I sympathize with the author, but I think the conclusion that outsourcing doesn't work is overly broad.
The crux of the problem is that working with a remote team is a very different proposition than working with people onsite - a fact that is obvious but that people generally fail to act on.
Quite often at my company we're contacted by clients want to hire folks in a foreign country and expect them to work like remote employees, but cheaper, and with fewer legal responsibilities. They think that through the wonders of Skype and email, people in India (or South America) can work just like on-site employees.
The reality is that outsourced development to remote teams only works when the client is willing to adapt their own work patterns to it. As a client, you need to:
* Have a crystal clear idea of what you want built. The less communication overhead you have with the remote team, the easier your life will be, and the more likely it will be that stuff gets implemented the way you want to.
* Have frequent and early deliverable dates. Don't start a project that will take 6 months to get a first release out with a remote team. Shoot for as early a release as possible, followed by frequent small releases. This lets you pull out almost whenever you want and also reduces the likelihood of burning out the developers on the other side.
* If you already have a company with a bunch of people, have the remote developers work outside your regular dev cycle. Don't expect to plug in a couple of guys located 5 times zones away into your regular team, unless your regular team is already distributed.
* Be linguistically very compatible with the folks you're outsourcing to. If you have any difficulties understanding or being understood by the folks you're hiring, then you're significantly increasing your risk.
The well known Ruby consultancies like Pivotal, Thoughtbot and Hashrocket will all tell you, that outsourcing to foreign countries is a mistake, and that developers need to be on-site. This, of course, while basing a huge amount of their business on Rails and a bunch of other open source libraries and frameworks which are developed almost entirely by distributed teams. These companies have an economic incentive to lead people away from outsourcing to cheaper countries, so follow the money.
It just also happens to be the case that since many clients don't understand how much their own workflow needs to change, many outsourced projects fail and reinforce the idea that outsourcing doesn't work.
> Have a crystal clear idea of what you want built.
> Have frequent and early deliverable dates.
Both of these things are extremely difficult (if not impossible) for experienced software consultancies to know up front, let alone the crowd looking to outsource. More importantly both figuring out what to build and knowing when those things are deliverable have, in my experience, required the involvement and input of the developer.
A lot of companies are looking to build simple, mainstream projects. For example "add a shopping cart to my site." Those are easy projects for outsourcing. If the client is looking to do something that has never been done before, then outsourcing may not be the best idea.
I think that's his point. Outsourcing doesn't eliminate your responsibility as a customer to participate in the development process -- it just shifts part of the labor to another entity.
Telling an outsourcer "do X for me", where X isn't a well defined thing (ie. run a warehouse, manage windows servers, etc) is going to be a disaster. What does "add a shopping cart of my site" mean? Do you want to figure out sales tax for various jurisdictions? Do you need to to interface with the German banking system? Is there a configurator?
If you treat an outsourcer as a partner in development and participate in that process, you're either going to get a result that makes sense, or you'll figure out that the process isn't working out and terminate early.
Except rarely do projects like "add a shopping cart to my site" turn out to be that simple. Each project has unique circumstances, and applying a one-size-fits-all attitude to the problem is never the right solution.
For a project of any significant size :
* Have a crystal clear idea of what you want built.*
This is itself most of the work. It is surprisingly hard for business people to understand that writing software is actually "specifying What needs to be coded" for 50% of the effort.
This is why I am not too concerned about outsourcing . Most of my projects start with a 'this would be neat' sentence and then it's left for me run with. I know the business and the people so that's usually enough for my team to get a first iteration completed. From there we add users, get feedback and iterate again.
If businesses have a crystal clear idea of what they want then chances are there is already COTS to satisfy that need.
 Jobs are never promised and a PHB at anytime could decide that the company doesn't need tech, but that's not really an outsource problem.
"Have a crystal clear idea of what you want built."
Rarely have I ever worked for a company that knows this. The last company where I worked would change their mind mid-stream every couple of weeks and it added almost a year of extra time onto the final release date.
It's usually not this bad, but if more companies followed this (not even just with outsourcing), there wouldn't be as many failed projects.
It isn't bad to change requirements depending on user feedback. You can have the best implementation in the world, done after the best specifications in the world; but it's all for nothing if customers don't want it.
This is where you need to take small deliverables from what they say so that they actually get something usable at each step. It's almost impossible to have a consistent and useful goal that's years away. Expecting otherwise will just lead to disappointment.
Look around you and you will find that most American companies hire lots of Indians as programmers. Do you think that the guys who ended up coming to America suddenly transmogrified in to competent programmers during their flight across the ocean? Do you think that those Indian engineers who decided to stay back and work in India are any less competent than the ones who took the flight?
Having worked in both India and the US for over a decade, my experience tells me that the distributions for programming skills are almost identical in the two populations. The top percentile of programmers in India (those who work for Google, MS, Amazon) are as good as their counterparts in the US. The $12 crowd is about as good as the craigslist freelancers who charge a similar rate.
While you may not have to worry about being replaced as a programmer, what you should worry about is an India startup like Zoho or Freshdesk competing with your company. Unlike China where startups can focus on the largely internal Mandarin speaking market, Indian startups are going to come after all the English speaking markets.
The problem is the outsourcing model, not nationality. You could outsource to a company of great programmers in Romania or France and still have the same problems of being overbilled for hours and lacking clarity of product vision. You could hire those same programmers directly and move them into your office and have a better chance of overcoming those problems. Heck, you face similar problems with law and PR firms in your own city. The problem is in thinking the hourly savings are worth dealing with overbilling and poor vision sync.. The more complex and dynamic the project, the more worth it to go with in house development.
I'd like to think that the guys getting H1-Bs t come over to the US are a cut above average. Also since software engineering is one of the go-to occupations that people push their kids into in India, I imagine the low-end is a bit fatter there. So I would expect that the quality of Indian programmers in the US is better on average than it is in India, but that says nothing about the outliers.
Population numbers play apart in this question, but any thoughts on the proportion of strong programmers that either come to the states or work for a large company in india versus those hired by the body shops?
My suspicion is, if they can, an individual will opt to go where he/she can earn more/get better experience than put up with the tasks typically handed over to the job shops (WiPro, etc)...Furthermore, given these firms are the ones that most US employers deal with, the view for outsourced labor will be clouded by this "narrow" exposure...
I am with you here. You will be hard pressed to find really good programmers in Wipro, Infosys of the world, but there are some small boutique shops who charge significantly more, but are pretty good at what they do.
I myself work from my home in Bangalore, while my company is in UK, and I get paid well. I have had offers from US before, but I am staying - because I am trying to bootstrap a product as well on the sides, which won't be possible/easy when I am in US.
I imagine the top-shelf Indian programmers are in greater quantities abroad than at home. From my experience, the ones that choose to stay back are already in or on course to manage bigger and better things with the salary to match. The ones working abroad are building up experience and war chest or possibly looking to migrate. But the ones that never make it out probably aren't that great.
I think his point was that Chinese startups have the advantage of serving a large internal market of Mandarin speakers, while Indian startups need to compete in the English speaking world.
On that note I have a question for smg. I have not been able to figure out why there are so few Indian tech startups serving the Indian market. I can only think of naukri and makemytrip. Do you know why? I read somewhere that there are 120M Internet users in India now, up from 80M two years ago. Do you think it now makes sense for Indian web startups?
I'm not familiar with mobile startups in India though, so maybe there are a lot of those.
A few years ago there were a large number of Indian startup trying to become the youtube or facebook of India. Because almost all the internet users in India are also English savy, they found that the youtube of India is youtube unlike say youku in China. Doing a consumer web startup in India is very difficult as you end up competing with far more mature SV startups who have almost limitless resources. Companies with a uniquely local twist like Flipkart or Burrp have had more success.
Also, the great firewall of China, and their Internet Content Provider license (which can only be obtained by Chinese companies) make it nearly impossible for foreign companies to compete in the Chinese market. Even foreign sites which aren't blocked in China are frequently a lot flakier due to the firewall, and they can't put servers inside the firewall without an ICP license. The usual way around this is to partner with a Chinese company, but frequently the Chinese company will wind up cloning your service and becoming a competitor.
The Chinese market is stacked against foreign competition; I don't think that the Indian market is likewise restricted.
1. The total number of startups is going to be lesser due to redtape although I believe that is becoming less of an issue as time goes on.
2. It is probably perceived to be more lucrative to target the American market. I would think that a larger proportion of the ~ 120M internet users in India would be similar (young urban professional) and therefore easier to release products compared to the general public (cultural variations and interests make it harder to disrupt outside the cities).
OK. If you look at the growth amongst Internet users in India between, say 2009 and estimates for 2011, it resembles the growth amongst Internet users in US in the late 90s. US had 120M Internet users around the time of the Web 1.0 boom.
Mobile usage is even higher as you know so it seems like mobile app startups could do really well. If the growth is happening in small towns/rural areas even better, no SV company is going to want to spend time in Gummmidipoondi to understand their target customer. I don't know if cultural variation is really an issue: look at iPad for instance, even a non-English speaker has a finger with which they can tap on the screen.
I've heard horror stories about red-tape, corrupt officials and so on from friends. But every time I've dealt with GOI officials they've been extremely helpful. Maybe I just got lucky.
Reg: redtape: I have personal experience with trading stocks in both india and U.S. I have found that the real problem has simply been in finding the tax agreements btw the countries and finding bankers who understand and fix the issue. Not sure that's relevant to startup company space.
Good programmers in India, like good programmers everywhere, cost more than bad programmers. If you would like to hire a decent shop, there are boutiques and larger firms available, but they will charge $40-50/hour, not $15. The problem isn't in the outsourcing, it's treating development like a $15/hour commodity. We all know that it doesn't work that way.
The author described paying an hourly rate for their offshore developers that was 10% of the local rate. If you compare the salaries of good developers in places like Bangalore to developers in more wealthy countries like the US, you will find that the difference is not that vast--maybe 25-40%, not 10%. If you would like to hire these people, expect to pay corresponding rates and receive good-quality work.
And don't let anyone tell you that you need crystal-clear requirements; pay for a qualified local business analyst and expect to spend a lot of time on the phone with them.
If you would like to hire a decent shop, there are boutiques and larger firms available, but they will charge $40-50/hour, not $15.
And at that point it's just easier to hire local developers.
I just don't get the push to hire cheap people. Even if you do find someone who is a rock star in the Philippines for cheap they might work for 3-6 months before job hopping again. Any sizable business is going to have systems and businesses processes that take time to learn and if you're constantly churning through people you end up not getting much real work done.
Unfortunately, it's because you're a programmer that understands the actual cost of software development. Believe me, there are many "business" people that don't understand software and never will. They see stories on the news of teenagers developing million dollar iPhone app in a weekend and think "Wow, this must be so easy."
And because they don't understand the difficulty (especially with larger systems) they don't understand why paying one developer $75/hr is probably better than paying one $15/hr. (I say probably because I have come across people charging high rates that weren't really that productive). As a business person who probably can't be that much more productive than the next person, they don't understand how a programmer could really be more productive and get things done in much less time.
To give you an example. On my last contract I was hired near the start of the project. And even though it was near the start, I could tell from the code that this was headed towards a disaster. Eventually I got things cleaned up and got it released for them and they are making money from it. They went through 5 other developers and I ended up being the only one near the end. I left shortly after one of the company owner's comments got passed down to me. He said "Why are we paying this guy so much when we could just hire high school students at $10/hr."
People like that will just not understand the difference and look only at the hourly rate.
And at that point it's just easier to hire
No it isn't. Even if you're in the Bay Area, the local talent pool is small, as demand outweighs supply. If you're not Google, or Facebook, or a startup with the potential of being the next Google or Facebook, then you'll get scraps.
There is a wide continuum between what the Googles of the world hires and 'scraps.' You're also falling into the all developers are on HN and live in SV trap. What most businesses would do best with is to hire a small team of good devs who can learn the business and do more than just development. This will require more up front work from the business, but will get the project (and others) complete much easier in the long run.
 I've never interviewed at any of those so maybe I'm scraps. Every company I've worked for though is still using my software internally to make them better than their competitors.
But there are plenty of good programmers in the US that will work for $50 an hour, which ends up being about $100,000 a year. And if you can have your users, analysts, and programmers in the same building for what it costs to outsource, why outsource?
$50 sounds low to me--I'm not on the sales side, but I'm told that $75 is closer to the minimum for, e.g. a Ruby skillset, and many shops, such as my employer, charge much more--but yes, at that rate you're better off going local, particularly for the colocation benefits.
I suspect, depending on region, there are good programmers also willing to work for a bit less. The economy has hit a lot of people, but in some areas of the US, $40ish an hour is comparable to $75+/hr here in the Bay Area -- based on cost of living.
Not that people should undersell themselves, but there are smart people around this country that may be looking for a gig that are losing out on services like Elance/Odesk (if they even know about them) because $15/hr sounds like a good deal.
There are good Indian programmers, but they are so diluted by complete amateurs who decided to go into programming just because it pays well. I've worked at a huge corporation that outsourced a few projects, and even brought some of the best developers on site. Even those guys took days for some silly things that took me a couple of hours to implement. One of them just sucked so bad, he was sent back to India. In the end, my hourly rate made more sense for the corporation, since I produced cleaner code, which often costed them less.
I am from India and let me say you don't have to feel threatened by bad programmers in India. The problem with posts like these is they make massive generalizations which are not true. Not every body here is a genius and not everybody here is an idiot.
I have worked in extremely challenging projects which were billed for dirt cheap prices. Considering the cost at which finished the projects it was almost like we were giving our work for free. For every story like this there are a 100 good stories you will hear out here. There are also cases where people do endless work and those hours don't get billed. Yes, there are a lot of cases like this as well. There are 1000's instances where we do work without billing them because some one at onsite put a polite request. I used to work with a very senior person in the UK. During meetings he used to be shocked that we put that crazy hours and efforts for such low prices.
The problem some projects fail here in India is because of the same reasons they fails else where.
When you talk of all this, even manufacturing in China. You need to look that whole picture and then see how the statistics work. At volume, and that scale of economy, If you measure No of Failures Vs No of Success and measure them against money saved. It's a very different story.
One project failing somewhere doesn't talk of the whole outsourcing story.
Spot on. My 10 years’ experience in outsourcing industry is similar. I think of this as another instance of bias against Indian outsourcing. I have seen many instances during my career which seems to indicate that pricing do not correlate with performance.
In this context I am just trying to explain that price do not necessarily correlates with performance. As far as racism is concerned it definately exists on both sides of the globe.
Meme against Indian is "Indians are taking our jobs by unfair means like working below sustaintable rates".Meme by Indians is "This guy is here to boss us around and confuse us just because he happens to be on the client's payroll."
Well said. There are dev shops here in the UK that are just as bad. The problem is using developers with little interest in what they do, being over sold by some sales man claiming they are experts in their field.
Even some of the largest consultancys here in the UK will get grads from non tech background, send them on a few Java cources and hire them out at £1000 a day.
Here's why you should feel threatened by programmers in India.
I recently hired a guy over there to work for our startup. He's smart and he gets things done. He's still a little green, but overall he adds a lot of value to our company. He's just as good as anyone I would have found in the US.
And after we exit/die, the company he starts might be competing with yours.
India has a billion people, 10's of millions of code monkeys, and millions of good coders. The existence of code monkeys doesn't mean you don't need to compete with the smarter guys.
Except that he won't. There seems to be a strong societal and cultural pressure working against people that want to go into business for themselves.
My Dad thinks I'm a bonehead for spending my time at startups and such even though I've tried explaining how working at a large corporation can suck your soul out. I'm pretty sure its not just my Dad and immediate family.
I would think of Robin Li of Baidu as the #1 Chinese tech entrepreneur. Why? Because he was successful in China. Also he had the vision to figure out where the Internet would go in China + the cajones to execute on it.
I know of the folks you have mentioned however they gained success in US. There have been lots of successful Indian-American tech entrepreneurs as well.
I WANT successful tech entrepreneurs to come out of India. I want young Indian techies to contribute towards the upliftment of India instead of working for US. No offense towards native-born Caucasian Americans.
I'm just puzzled its taking so long especially when it seems conditions are so ripe in India for tech startups. So I can only imagine its a cultural thing.
Isn't that little anecdotal? Yes agreed there is, social bias against people who want to do start up. But I see many people coming up against that and starting up their own startups. Agreed majority are still sweating in IT services, but we don't expect them to do startups anyways.
In fact, If OP was able to hire a single guy who is good and works remotely, that single guy is 100% startup material (otherwise, he would have been already employed at big IT service company) and very likely to start on his own few years down the line.
Most people won't. I've met him, and I think he is as likely to as most US startup programmers.
The issue is not whether the average Indian programmer is as good as an average American programmer. My guesstimate is that they aren't. The issue is whether out of a billion people, you can find quite a few competitive ones. The answer is that you can.
That's a very insightful perspective, but I'm campaigning in the opposite direction. What I think you're implying is that GM was complacent, didn't feel threatened, scoffed at the notion, and thus has been over taken.
My thought is that to a large part we've ALREADY been sold on the idea that we can't compete, so we shouldn't even try--that outsourcing is here to stay, and programmers in other countries will have no trouble out competing us. I'm proposing that we don't believe the hype, that we can compete effectively.
There is some truth to this. A long while back when I was doing projects, I got a project from a US company.
When after a week of understanding the scope, I quoted my price at around $150/hour they were shell shocked. The work was for redesigning systems that simply were not scaling (designed originally by a US company by the way). At the last minute they backtracked and demanded that since I was from India and the cost of living was much lower, I should charge them around the standard $25/hour.
I can never compete in the project game - and I dont want to anymore - because of this attitude by every single US company that I have ever interacted with!
I passed them on eventually to a $20/hour company in Delhi, even while I explained to them that none of the coders there had any experience with designing systems that scale.
There is also a tendency to feature creep the project since it is only $20/hour which amuses me and is a sure fire recipe for failure. When we ask them if they want a project manager or an architect who can work with them on architecture/ feature set selection they refuse because they cost way more than the coders.
I am not saying your experience is not true, I am just saying that given the attitude towards India, it is bound to the experience more often than not.
The non-completion of the project above could have been for many reasons... feature creeping, inability to communicate what the client wants, language differences and yes, downright bad coding. Since you were not able to clinch the project - which I believe is simply bad salesmanship, like in my case earlier - your "I told you so" rant is based on a massive leap of faith that you or any "US based" programmers could have finished the project on time, which I am simply have no reason to buy.
As a product manager for the last 6 years, I've had the opportunity to work for outsourced teams in India, Romania, and Ukraine. I've become really good at managing remote teams, and it can work out really really well. What I write below is based on single data points in each country...
India: I didn't like working with the Indian team. They had the tendency to be overly literal and "by the book" - the book being whatever tech stack they knew. They wouldn't ask questions or push back on things, and the result was crap.
Romanian and Ukrainian teams: did / doing an excellent job. We were able to get them at $40-50 an hour, and they are every bit as good and productive as local teams. I sometimes feel like I like working with outsourced teams better than local teams, because the relationship is straight-up business. I have to make sure that everything I ask for is really strong and really helps the business because I'm very aware of the costs involved.
Having said that, it is important to have a couple things: have someone local who can look over the code and be a man on the inside, to make sure everything a PM can't see is to the standard, having a good project manager of the remote team, and have someone who manages the whole thing who knows how to do it.
> the Indian team. They had the tendency to be overly literal and "by the book"
My anecdote: We had a spec for a financial business application. Two of the database fields were last-changed-username and last-changed-timestamp. The document mistakenly had them populated backwards, specifying that the current user's name should be populated into last-changed-timestamp and vice versa. You can guess what happened when the Indian outsourcee coded it.
"I ran this and got a type conversion error. Did you even test it?"
"Yes, I got the same error and that is what should have happened based on the spec."
"How did you test the rest of it, then?"
"I was unable to proceed because of that error."
(I'm not generalizing from this one programmer to all Indians. I'm sure programmers that dumb exist everywhere.)
Why single out India? Sure, it's become a bit of a byword for "outsource" but I think you'd find the same were you to outsource to any country - even within your own country.
The problems pointed out largely surrounding happen due to the difficulty of communicating with a remote team. Having the product owner and the development team geographically distant make everything ten times harder; doesn't matter if they're in India or on the other side of the same country.
Agree that communication (or lack thereof) is a key issue. That can be worked out but having 11PM conference calls or combined hacking sessions stretching to 2-3 AM gets old very quickly.
Another is the fact that the culture within a lot of contract shops isn't exactly innovation-driven. I really don't understand how you could get an engineer/coder passionate enough to be interested in some stranger's project.
Net net I agree with the author: you can still make a career out of tech. The doomsayers from ~10 years ago who predicted the end of the US programmer were wrong. I don't think however that big companies (Cisco/Microsoft: any company with a big India development center) will ever hire legions of US programmers again though. That train has long since left the station.
I don't think however that big companies (Cisco/Microsoft: any company with a big India development center) will ever hire legions of US programmers again though. That train has long since left the station.
Are you sure? Lots of US companies are hiring lots of US developers. Google comes to mind immediately, but I'm sure everyone else is too.
At the big company where I work they're actively getting rid of their US-based employees and hiring in India and China. My employer isn't one of the ones I mentioned above. But I know from friends working there, that this is the case there as well.
I think there are a number of reasons for this.
1. Many engineers just aren't interested in the old fogey US tech companies. Do you think a smart kid out of a US college would be more interested in working at Google/Facebook or at Cisco/Microsoft? As a result they have a tough time hiring. In India, people actually LIKE working for the man at big giant companies. It is a status symbol. So its a lot easier to pick up good talent there even if the company is regarded as a has-been in Silicon Valley.
2. At some point in a tech company's lifespan, decisions seem to be made purely for financial/cost-saving reasons instead of for product/customer reasons. This is usually the point at which good engineers start leaving the company because they realize the bean counters are running things.
This is also when these companies start expanding their India ops. Word gets around, and hence this is somewhat co-related to point #1.
3. Empire building: For some weird reason, engineering managers love having a lot of reports. Its reasonably cheap and easy to staff up in India and China, which means an engineering manager at some loser company in the US can get to brag that he (its always a he) has 100 engineers reporting to him.
I don't think the problem is "overpriced" programmers in the US or "bad" programmers in India. The problem may not even be programmers at all.
My guess is that a big problem is "business people"(1) deciding to get their idea implemented on the cheap without knowing the technical challenges involved or even how to clearly communicate with programmers.
This just demonstrates that a founding team needs to have some sort of technical expertise, preferably from everyone on the team. There's no need to be a genius, but at least have a little, tiny bit of experience making a computer do what you want it to do. That makes communicating with programmers a lot easier.
I don't work for a startup, just the opposite, a huge multinational. I see the consequences of relying on people with zero programming experience making decisions about managing software development. There is definitely an attitude of "just ship it to India" without really thinking through the details of what that means. Tsk, tsk, the consequences will not be pretty.
(1) I am not bashing business people here, I am one myself, I am just saying this is often the root cause of the problem.
I think some of these points could be made about any contract developers.
The biggest issue I've seen is that if you don't have things fully spec'ed/flushed out, it becomes a mess. With a couple of committed developers working together no matter where they are, let's you be more agile, and not have to do as much up front work.
Hours of outsourcing companies are largely about milking the most overall money possible. Sadly North American companies have taken this hook, line and sinker and they over pay for too many hours. First they fell for the empire builders in their own offices, and now they fall for it with strangers.
I outsource and I don't tolerate a 20-30% overage in time at any rate. Surprisingly 100 hour quotes can come down to 30-40 because there was a "mis-understanding in scope".
Another thing I've found is a "Senior" person overseas has 3-5 years, which is maybe $20-25/hour in North America.
Paying $14-17/hour overseas is hilarious for the disconnect in time, assuming you know how to write clear enough specs that it works how clearly communicated and understood.
People are missing the underlying root cause of the lower quality programmers in India -- Culture. There, upward mobility is the goal, not being the best programmer. People take a programming job for a year or two, then look to "advance" into management/leadership/etc. So the result is a large number of junior programmers.
That, in turn, is why you need to give very explicit instruction, and why much of the work needs a lot of QA.
Knowing this also makes it a lot easier to interview firms or individuals, looking to their own personal motivations to see whether they match the overall cultural trends or not, and thereby you can build a better team.
I've seen this outsourcing problem in a old role I had. For me there were 3 main problems;
- Not adequate training of these guys. I tried to convince the powers to send someone local over there for 6+ months to get these guys up to speed and ship shape but the management feeling was a good set of written instruction will do the job. Sorry, it wont for work roles of any complexity.
- Being remote and in different timezones created lags in turning work over that had to be looked at at both ends. Also they didn't all see the bigger picture or side issues which are important to help understand motivations and then create solutions and value ad in many project as they just had the main brief.
- Cultural differences with Indians I found is they don't like to say they don't know how to do something. I think this is a loss of face not to know or perhaps they are just worried about keeping their jobs. So often if you give them a project and they don't know how to do, they will do something else they do know how to do just to show you they were working. I kid you not... it was really frustrating finding out a week later they didn't know how to do a job so decided to make a new database instead because they could do that. It created problems a bunch of times.
Overall in my experience I found outsourcing is good for jobs where you have clear "A,B,C,D" instructions but for jobs that had to go from A - D and they figure out B and C, your better off keeping this locally. But that said I'm not adverse to outsourcing more complex work as these guys are generally smart and highly motivated. I think the problems I had could have been fixed by rotating local people in a reasonable ratio to the Indian group to keep culture aligned and maintain personal contact.
To be clear, I don't mean to dump on India specifically, but rather offer up a narrative that counters the notion of overseas talent being an insurmountable threat. This missive applies equally well to any offshore outsourcing, but I agree that generality gets lost. andrewfelix's suggested title "Why I Will Never Feel Threatened by Bad Programmers" is good but doesn't quite hit it: "Why I Will Never Feel Threatened by Outsourced Programmers" perhaps captures my intended message the best.
This is about insights I've gained from "coming late to the party": projects that first went for implementation overseas, and which I subsequently got to clean up or improve upon. Much like many of you are saying, I found it refreshing [within the context of the "threat" of outsourcing] to experience that programming talent is indeed the primary factor in winning development jobs, with solid communication ability (aided by proximity) a close second.
I don't know that everyone has the benefit of that realization born of seeing firsthand how several such projects turn out (I didn't--out of school in '03 a popular narrative was that programming jobs are vanishing and there's nothing you can do about it). Calling out the myth of cheap overseas programming I reckon can be useful to both programmers (encouragement) and decision makers (insightful warning).
Re: coming late to the party, have you considered that maybe you are suffering from some kind of reverse-surviver bias? In other words, that you only get brought on to failed outsource projects. If the outsource project works well then you don't see it.
You are making a good point. I'm from a third-world country, and I'll tell you why: they shouldn't be developers in the first place.
1. Communication: They fail to communicate not because English is not their native language. They'll also fail in their native language. Communication is a skill. English is a language. They don't invest to learn good communication, and also to learn the language.
2. Coding: They are bad coders. They don't produce good code because they don't want to learn version control, unit testing, and programming patterns. They are too lazy to open up a book and read. They are too lazy to subscribe to programming blogs and listen to podcast. They think that what they learnt in school and university is more than enough.
3. Creativity: Briefly, they can't look beyond their room window. They don't bother to know if the UX is good enough or the kind of audience for their product. They don't want to create. They prefer to copy/paste.
This is not India. This is most of the "developing" world, a also a part of the "developed" world.
Something that's become increasingly clear to me as a developer is that good code is only a small part of the puzzle - by far the most important factor is communication.
It's difficult enough to determine exactly what it is a client is really asking for as a native English speaker sitting in the same room.
Add in a language barrier, time-zone barrier, remote communications barrier and a cultural barrier and it becomes increasingly difficult for any non-trivial project to succeed.
Outsourcing seems to be most successful if you can very clearly define a specification or systematize the work, have enough knowledge to review the quality of the work that comes back and have plenty of time to micro-manage the project.
One of the biggest problem in India is culture. Right now we have a culture where companies like Wipro & Infosys go to campuses and hire 100-500 graduates , majority of them are from fields other than CS where the companies provide 3 months on training. Why do they do this? Coz someone somewhere needs to get workdone at cheaper cost, and 9 out of 10 times it cuts quality. Quality of code for the client and quality of hiring for the company.
The other major issues is culture. Indians push their kids to be Engineers and Doctors and kids do it even if they dont like it. more than half of my class of 2006 is no longer in the Software development fields coz they never liked it.
Also you can get bad programmers everywhere , its just that India , due to the population has a large number of them which makes finding good people & companies very tough.