views:

1312

answers:

17

I'm not trying to start controversy, but I'm wanting to know other's input on this sometimes touchy subject. I've read all sorts of material about how you can find competent developers in India (and now sometimes China) who are just as good as their US counterparts, but at largely reduced rate. Specifically I recently read the world is flat and he seems to argue in favor of competent, cheap offshore development. From my personal experience working with offshore developers and with onshored contractors from India, they tend to be not very competent, slow to learn new material, and hard to work with due to cultural barriers. Obviously this is a bit hand wavy, but that truly has been my experience.

Please try to keep responses above board and well thought out, that is to say, lets not resort to broad generalizations, but I'd like to know what your thoughts and experiences on the subject are.

+7  A: 

By moving your development offshore you add several complications:

  1. Language Barrier
  2. Time Barrier
  3. Quality Barrier

You can overcome all of these barriers, but there is an effort associated with all of them. In the end the less developer you have the more management you need.

NotMyself
+3  A: 

I have worked with developers from Brazil and found them to be very competent. I don't think they are as cheap to hire as India and China, but still cheaper than the US, and they were very bright engineers and very hard workers. The difference may have been that it was another branch of the company I was working for, not a separate company providing engineers for hire (which Joel and Jeff discussed in a recent podcast and pointed out those kind of shops have a downward spiral of just hiring bodies with worse and worse quality).

Meanwhile, I know someone whose company offshored some testing to another company. Her comments were that they just didn't do nearly as good a job as the in house testing. This seems to corroborate the idea that as long as you can control the quality of the people you are hiring, offshoring can work.

I believe there is a fear that offshoring "steals our jobs", but I think that sentiment is misguided. If you work hard and are competent, you shouldn't have a problem finding a job and succeeding. If someone else can do the job cheaper and as efficient, then Capitalism is all about letting them get the job.

Mike Stone
+12  A: 

I work for a very large company (100,000+) that doesn't outsource, per se, but has offices in India which are used in very much the same way... the only difference is that they are on the company payroll directly.

The language barrier is not generally an issue as they all speak english...well write english quite well. Most of the time we communicate via email, so it's not an issue...but when on the phone the accent can be difficult at times.

Time can quickly become a big issue as they are nearly completely opposite of us. This compounds things by the fact that you can almost never get an answer the same day. So, whereas you could have a 20 email conversation with someone local in a day...that same thing would likely take 20 days with our India resources.

I can't say I can complain about the quality. It meets the spec and passes QA 99% of the time and generally that means that it's good... but the work almost never really stands out to me. I'm used to working with other fairly passionate Software Engineers who generally go above the spec, because they know that the spec is not always good enough. They anticipate what wasn't originally specified that needs to be done, so we don't have to do more iterations later, whereas we may have to with the work out of India.

In general, I think that outsourcing software can work, but it has to be for the right task. For example, giving a detailed spec and completely laid out API (by a stateside Sr. Architect) is fine, but I wouldn't necessarily hand out some R&D work unless I had worked with those specific off-shore people often and knew the quality of their work.

Also, it's generally never been good for something that needs to be done now. The problem is that, while those resources may cost 1/8 as much per person it generally takes 8 times as long to complete the same task. And often that same task could be completed in less time by less stateside resources, making it cost less to do it local.

Companies seem to be fine with this, which I don't get. And they seem to have too much a mentality of these off-shore offices being like factories that can make anything. For example, we recently had to train someone from India on a new product they would be working on for a Windows Mobile device. Everyone I work with local has at least 3 solid years of WM experience, while this guy had absolutely none. I doubt they would've hired someone here and thrown them on the same project had they not had any WM experience. But they seem to think it's ok, because they are so much cheaper.

I'm not saying that they are not skilled. I've never been there and I don't know what their schooling is like. And that particular guy was a very competent C and C++ developer. But, if I was working for that kind of money, I bet my work quality would be about the same.

Adam Haile
+55  A: 

I am an Indian myself and let me tell you some facts I came across:

  1. Major Indian software companies are recruiting low quality programmers.
  2. A large percentage (I am afraid more that 50%) of the programmers are from non-CS backgrounds. Many are mechanical engineers, electrical/electronics engineers or civil engineers.
  3. The pay scales for fresher posts here are not the best even according to Indian standards.
  4. We don't care for the quality of the work we do for you. Now I don't want to piss off any one, but the fact is that seriously no one cares about the quality of their code they do for some American company which they don't know much about. You will get quality code only if it comes from your heart - like when you code for yourself. Most Indian software engineers don't feel any kind of commitment to their organizations (mainly because of the way companies treat employees).
  5. Part of the reason why many companies recruit low quality programmers is that the works we get here are mainly some support work or very monotonous and boring development work that looks like it will take ages to get completed. Many Indian programmers have their own pet projects which they dedicate their free time to and they concentrate on the quality of the code they produce for that pet projects instead of the projects they have to do in their organizations.
  6. I never meant that there are no quality programmers in India. There are many, but the chances are very low that big software giants will recruit these bright minds (which they cannot afford). Instead, they go for cheap mechanical engineers or graduates from some second class institution.
  7. This bullet point is supposed to occupy the place where I bash the project management BS. I don't like bad mouthing that much. So just skip...

I guess you guys understand the situation here.

So what is the solution?

Don't outsource. Seriously.

If your work is very monotonous and does not demand high quality, outsource. If you want a very good software product and if it the flagship product of your company, never ever outsource. You are doomed otherwise.

Niyaz
Great tongue-in-cheek, sincere answer! I can especially relate since I'm Filipino and we compete in the same software market.
Jon Limjap
"Most of the so called managers do not know anything technical. Worse, they still boss around coders with their useless suggestions. I witnessed an incident where a really competent junior programmer asked the manager to get out and not waste his time in public due to this."
prabhu
This answer was freaking hones and nice! Thx for that dude!
Skuta
Why are you creating false impression about Indian programmers? You say that we don't care about quality of code just because it's an U.S. company? Get a life man. What do you mean? Every programmer respects the code he/she writes. Everyone likes to write efficient code. They don't care which ...
Chandan .
... country the company they work for belong to. For a programmer, programming language is the religion and employer is God. Programming is passion and not patriotism as in "hey, if I work for an Indian company I'll give my best else I won't". Get it? May be you were writing about yourself. yeah...
Chandan .
....that's the way at least I see it. So, don't effing try to represent crores of Indian programmers who do sincere work out there and give their all. And it really makes me wonder, how your shitty post got 30 vote ups! Because rest of the world believed your words and thought you were honest...
Chandan .
shame on you....next time you wan't to say "We don't care for the quality of the work we do for you" remember to use "I" in there instead of "We".
Chandan .
@ChanLFC: The reason so many upvoted is this explanation of attitudes resonates with observed behavior. Rather than trash this answer with 4 comments, why not write your own?
kajaco
@Kajaco, I just did.
Chandan .
I'm Brazilian and working in India for a huge company and I reckon Niyaz's words are SO TRUE. That's exactly what I'm seeing here: loooots of freshers, monotonous projects, bad paid employees, no bright mind so far.
Lucas -luky- N.
@Lucas, like I said you interact with only 0.000000.....0001 % percent of indian programmers. Your personal experience can't be applied to the country as whole. You'll get competent/incompetent people anywhere you go in this world!
Chandan .
I think there is also another factor, good programmers are the ones who do it because they have a passion for programming and not necessarily because they see it as a way to earn money. My impression from Indian programmers is that there are quite a few who are just there for the money. A few exceptions but after interviewing 50 candidates that is my impression.
Anders K.
@Niyaz: Most problems you talk about are not India specific. It's mostly the same in the USA or any other place in the world. However, your final suggestion "Don't outsource" is plain dumb. I've worked with multiple Indian companies and I'm *very* satisfied with their work and dedication. What makes you think, for example, that mecanical and civil engineers can't code quality? I can give you examples but I'd be wasting my time. Oh, and like RCB said... learn to speak for yourself and not for everyone else.
Jim
This facts can be related to all the world, also you make a lot of generalizations: "no one cares about the quality of their code they do". Really? this happens everywhere. So I think it's a matter of doing a more intelligent search for offshore.
MexicanHacker
Niyaz +1 point for you sincerity, If I could I would give you millions of points. This post reflects reality as it is.
xxxxxxx
+2  A: 

Aren't the rates of programmers in India going up? I imagine as the USD values falls, and as off shoring complexities improve, there may come a time where the rates in the U.S. and in India will be more comparable.

JasonMichael
+1  A: 

Best to start with a small team you can learn to trust while helping them grow. Culture and time zone is also important so stay as close as you can, do not go on the opposite side of the globe. It is not that hard, but you have to start small and low risk first. It does work, however you need to manage and communicate very well for the first year depending on the team size (and it gets easier afterward).

Notitze
I like your emphasis on efficient and effective communication and management/leadership. Thx
Nicholas Leonard
+5  A: 

I've read all sorts of material about how you can find competent developers in Australia|England|the US who are just as good as the programmers in my team. From my personal experience working with randomly chosen? developers (compared with the carefully chosen group I work with everyday), they tend to be not very competent, slow to learn new material, and hard to work with due to cultural barriers (like not understanding good programming practices).

This doesn't sound like a problem with another country - this sounds like a problem with your contractor selection process. Have you ever interviewed for new (local) staff? It's hard to find good programmers anywhere.

+1  A: 

When we use staff that are not on site, we generally have issues. Our product is not mature, meaning we don't have scads of documentation and most info is in people's heads. We're working to change that, but we're not there.

If you do this, you will need to be sure that your internal processes are in place to allow this and that you allocate sufficient time for training and oversight.

Internal processes need to ensure that there is no need to drop by a BAs desk to clarify a particualr graph before you implement it. They also need to ensure that the units of work that are being requested are unambiguous. The woirk being delivered will need to be scrutinized differently if you cannot go to another developer's desk to clarify a code snippet.

Teams with very mature processes will not have as many issues than teams with less mature processes. The trick is to find out where the gaps are. One approach is "A Hudson Bay Start" where you set up a fully-implemented engagement, with a short duration and limited exposure using the people you intend on using for a larger engagement. This will quickly expose gaps, flaws and other bad things that are simple to fix.

not-bob
+1  A: 

I have been happy with our offshore development services. I think the key is investing the time to develop very clear specifications. I don't think an Agile development methodology would work well for outsourcing, especially too far outside your timezone. Make a solid wireframe, prototype, use a framework and plan for extra time up front for questions. If the developer or team doesn't ask at least a few clarification questions up front, don't bother with going any further with them.

I think intermediate to intermediate-advanced domestic coders aren't going to be in much need soon. There will always be need for really high end coders for mission critical tight deadline jobs and companies that insist on having the best in house. I think it would be a very good idea for many coders to think about reinventing themselves as architects designing solutions rather than implementing them.

mattmac
+1  A: 

Being here in the outsourcing industry myself, I must say that most of the dissenters of outsourcing/offshoring who've posted above are generally spot-on. A point I'd like to mention here is about headcount and numbers. In a country with 1.1 billion people and millions of engineers graduating each year, the situation with employment in software companies is that of "filling in" positions and keeping a solid "bench" workforce. So now we've got outsourcing companies riding on some big projects and accounts, keeping everyone happy, paying the bench employees, paying the not-so-hot ones and the oh-so-ordinary ones too. This "model" results in a government-like, bureaucratic functioning (which would doubtless kill developer creativity), a contented "nine-to-five" sort of workforce. There is little room for creativity, bright ideas or enthusiastic programming all around.

Bottom line: The primary goal of an offshoring company should be to select people and transfer its values, working style, managemement (standards, compliance etc.), their expectations to its offshore team, really considering them to be a part of their own team. If they treat the offshore team like a black box that can produce something on demand, they can expect the quality of the output to be oridinary or run-of-the-mill.

+1  A: 

Well, I am an Indian so take whatever I say with a pinch of salt. That said, I believe that outsourcing can only work if both sides are willing to spend time on it. Spend time laying out strong processes especially when it comes to hiring talent.

I work for a pretty large product development organization and I agree that we're not the typical outsourcing outfit ... most of us are part of the r & d team ... and I've seen as many incompetent developers/QA guys in the US as in India. While its true that the major Indian IT companies (that get most of the press) do recruit a lot of Low quality talent, the same is not true for a lot of other companies in India.

And even if we're technically a part of the R & D team, lets face it, our company (based in the US) came to India because it was cheaper to get similar work done in India ... at the same time not compromising on the quality of the work.

A: 

Oh and most people who complain about outsourced talent not being good enough, either don't want to spend time working on the differences or cannot afford to pay for good talent. You get what you pay for. A competent Indian programmer will still be cheaper than a competent US programmer, but he won't be as cheap as a mediocre Indian programmer.

+3  A: 

Good developers are not cheap all over the world.

If you found your co-workers from India are not so good as you expected, it's your fault. You had chance to hire a better developer but you did not do that.

I am in China. I can give you an example. Microsoft, here in China, are willing to pay 5 times more than market average (aka. developers at so-so level) for their FTE developers. At the same time, MS hires a lot of contractors at a much lower rate (maybe 1/2 or 1/3) compared with those FTEs.

You know that the world is flat. When your company playing outsourcing/offshoring, those big ones are doing the same thing. Your company are competeing with them on this flat world. So who can get better resources?

rIPPER
A little correction: Good developers are not cheap *within any given country* all over the world. Any US developer fresh out of school makes more money than the best developer in my country. So the world isn't quite flat...
Mauricio Scheffer
Awesome comment.
MexicanHacker
+7  A: 

Having worked in US , UK and India I can say this : Incompetent people are everywhere.

Offshoring by itself does not guarantee cost reductions. There needs to be a lot of associated framework (processes , policies etc) that need to be in place before that factor can kick in.

For example , lot of offshoring for manufacturing has already been done to China. It seems to be working. Why? Because the specifications for the product wanted are laid out clearly and associated quality is demanded as part of the product.(Sadly such specifications are absent when it comes to software offshoring)

Offshoring has been going on for a long time (remember Japanese car manufacturers?) before software offshoring gave it a bad name.

Learning
The comparison of offshore manufacturing vs software development does not hold water. You need to either compare product development vs software development, or product manufacturing vs software copying.
Totophil
+10  A: 

People have different perceptions/experiences/opinions for this rather controversial question. I'd like to say my own, but as a reply to the post by my dear fellow Niyaz who is an Indian and whose answer is seen as an honest one and certainly is the popular answer among users here even more so that he happens to be an Indian.

Well, let me start with saying that I too am an Indian. I will talk with real facts and not like Niyaz who is clearly projecting his personal disappointments and dislikings, relating them to delusioned facts of his own. Here is my reply to his views followed by my comments about topic.

"1) Major Indian software companies are recruiting low quality programmers".

This depends on the technical demands of the project. If position is a challenging one then let me assure you that they go to the best of the places to find top notch talent available but if the position is a trivial one with less technical demands then companies go to according places. But wherever they go for recruitment they recruit the best in whatever is available. Every person who conducts interview selects the best among the participants. I guess the above is true with the rest of the world too!

"2. A large percentage (I am afraid more that 50%) of the programmers are from non-CS backgrounds. Many are mechanical engineers, electrical/electronics engineers or civil engineers."

This is statistically VERY VERY WRONG. Every year for every 100 engineering graduates that pass out there are 20% computer science graduates 10% information technology graduates 15% Electronics and communications graduates 10% mechanical 10% electrical 10% master of computer applications(MCA) 5% M. Tech(equivalent to M.S.) 10% civil 10% rest (chemical/metallurgy etc).

Out of these, 17% comuter engineers, 8% information technology engineers 5% electronics and communications 10% MCA 5% M Tech engineers get programmer jobs. (missing small number go for higher studies or other relevant jobs in case of E & C). i.e. 17 + 8 + 5 + 10 + 5 = 45% capable programmers from desired educational background.

Among rest 2% mechanical 2% electrical 2% from rest other field get programmer jobs, generally in less technically demanding project or testing. (rest go for higher studies or jobs in relevant area) ...i.e. 6% to 8% of programmers from other educational backgrounds, and companies recruit them for not so challenging roles.

Now this 6% to 8% is a (i'll take it as 7%) is more than 6 times lesser than 45% of capable programmers. i.e for every programmer from an undesired educational background there are 7 programmers from desired educational backgrounds. So, that is hugely contradictory to what Niyaz says (more than 50% are from undesired backgrounds).

"3) The pay scales for fresher posts here are not the best even according to Indian standards."

This again depends on company. Bigger companies offer lesser package for freshers. Have to agree here. I donno how this is related to the question asked anyway!

"4) We don't care for the quality of the work we do for you......no one cares about the quality of their code they do for some American company which they don't know much about. You will get quality code only if it comes from your heart - like when you code for yourself....blah blah"

Every programmer respects the code he/she writes. Everyone likes to write efficient code. They don't care which country the company they work for belongs to. For a programmer, programming language is the religion and employer is God. Programming is passion and not patriotism as in "hey, if I work for an Indian company I'll give my best else I won't". It's rather about indiviadual how honest he is about his work, it's no way related to the point of view Niyaz is projecting here. It is true in every nation in this world.

"5) Part of the reason why many companies recruit low quality programmers is that the works we get here are mainly some support work or very monotonous and boring development work that looks like it will take ages to get completed"

Somewhat agree. If kind of work(position) doesn't demand high expertise why bother paying double up for high expertise?

"6)I never meant that there are no quality programmers in India. There are many, but the chances are very low that big software giants will recruit these bright minds (which they cannot afford)"

If kind of work(position) doesn't demand high expertise why bother paying double up for high expertise? They buy high quality for the positions that require high quality. It is true anywhere in the world.

To sum it up, you'll find incompetent programmers everywhere in the world. It's not that they are concetrated more in a region. Anywhere you go you'll find few top qulity and a few really incompetent. And the programmer attitude is rather a characteristic of the individual and not anyway related to nationality. I am hugely disappointed to see someone givign a patriotic dimension and reasoning for the love for programming.

Chandan .
indeed. well said.
Learning
yeah thx, I know. btw, abt Niyaz's reply, someone mistakenly saying bad things about one's own locality sounds more true than the actual truth.
Chandan .
Just curious - can you cite sources for the stats you mention in point (2) ?
talonx
@talonx.... it is a rough figure...won't be much different than reality. We can see this by strength of students in respective courses in engineering colleges of India. And a bar graph for this was also mentioned in some Indian magazine a couple of years back.
Chandan .
+3  A: 

I am not a fan of any sort of outsourcing, because time and time again, the work has been either subpar, way past deadline, or both. Sometimes, however, the business needs dictate the necessity to outsource, such as immovable deadlines, etc. The problem with outsourcing, in my opinion, is that you do not have the ability to go with the rigor and ramping up that you would expect a new in-house developer would require to be in stride with your goals. While they provide you with sample code, you do not know how long it took to develop, if it is representative of their deliverable quality, and if they truly had written it themselves, in the first place.

From experience, these are some of my recommendations to be used when working with off-site resources (both on-shore and off-shore):

  • Dictate coding style. The delivered product should be able to fit into your style and best practices. There is no reason to accept code that does not assimilate these qualities, because it just makes it more likely to be refactored.

  • Dictate quality metrics. If you have tools that measure code quality, make sure that they meet the standards the rest of the team does, in-house. Cyclomatic complexity, class coupling, test coverage, etc. If it is required in-house, it is law. Any code committed to the system should be complete and of proper quality.

  • Enforce code reviews. Do not be afraid to reject code. If the logistics allow for it, try to do remote reviews with one or more people on their team. If not, make sure that all submitted code is internally reviewed, without exception. Argue this as an added cost to outsourcing. If you don't do this, it will bite you 100% of the time.

  • Keep an open channel of communication. Email, phone, IM, smoke signals, whatever. If you let them "run with it", chances are it will not be what you expected. At the very least, have a trusted delegate of your team and ask for them to do the same. Use them as point people to funnel concerns, questions, business needs, etc. through.

  • Voice your concerns early. Don't wait to see how it will turn out. The train needs to be kept on track at all times, because it will cost more to correct it later on. It is not unheard of to pull a contract and award it to someone else once a project has started and deliverables have started to flow.

Low-quality developers are everywhere. Some of the less moral off-shore companies employ large numbers of these types of people - not because there aren't skilled developers available - but to increase their profit margins. You should apply the same care and requirements in choosing an off-site team as you would for a full-time hire.

joseph.ferris
A: 

Offshoring of software development is just another example of American corporate greed. Unfortunately, you folks doing the offshore work are no more than slave laborers. At my last position I was making $85k a year. I'll bet none of you make over $10k at the most.

There IS a language barrier. Just look at the grammer of the posted comments. While this is correctable, it interferes with the efficient flow of ideas.

I'm an American, and I've been a software developer for twenty years. There has never been a project that did not get improved by my inovation which was not specified in the design documents. Many bugs get fixed before QA. This just does not happen with outsourced projects. Offshoring for the most part does not allow inovation.

Fortunately, it isn't possible to offshore lowly hands-on PC technical support...! It's pretty hard to upgrade an OS on a PC in Illinois when the technician is in India.

Finally, now I have Obama on my side. Offshoring of software development is near its end.