Does Outsourcing Programming Really Save Money?
itwbennett writes "In a blog post titled 'Why I Will Never Feel Threatened by Cheap Overseas Programming', John Larson tells the story of a startup that shipped its initial programming to India, paying $14 per hour, with predictably disastrous results. Larson concludes: 'I have yet to see a project done overseas at that sort of hourly rate that has actually gone well.' But in this not-uncommon tale of outsourcing woe, is the problem really with the programming or with unrealistic expectations?" The comments on Larson's blog post (originally titled "Why I Will Never Feel Threatened by Programmers in India") seem to me more valuable than the post itself.
Seems to work ok.
Just because the overseas programmers suck (debatable, but let's assume) doesn't mean management isn't going to go for the $14/hr carrot.
I am very small, utmostly microscopic.
I think the unrealistic expectation is expecting any project to go well when you are paying 14 dollars and hour for a highly skilled position. No programmer worth their salt will willingly accept that pay, and if they do, you probably don't want them.
I've seen the work infosys and wipro do. They are the high end of Indian programing sweatshops yet everything I've seen from them stinks. They promise the world but don't deliver any better than a first year degree student could in any developed country. Except a first year student would be cheaper, has the same time zone, and speaks the same language.
Having been involved in many outsourced projects, a number of problems tend to crop up again and again:
1. Offshore programmers frequently lie about their programming skills
2. Competent Indian programmers tend to do fairly well if given very explicit instructions, but are at a loss if something unexpected comes up. They tend to be less adaptable and nimble than U.S. programmers.
3. It ends up taking longer than estimated, even for simple projects.
4. Hand-holding and rework end up eating up all time and money savings.
5. By the time an offshore programmer has skilled up enough to actually be useful, they leave for a better position. (Especially true for India.)
To my mind, outsourcing programming is a management fad that is (hopefully) already falling out of favor due to poor results.
Lawrence Person (lawrencepersonh@gmailh.com (remove all "h"s to mail)
http://www.lawrenceperson.com/
Modern management philosophy depersonalizes employees into interchangeable resources. There is Management, Knowledge Experts and "Cogs".
They don't even care that it's more expensive using cheap programmers to get a job done - it's worth it to them to not have to depend on any individual contributor.
I once did some contract work for a place that made the mistake of outsourcing a major programming job. My job was to maintain the outsourced code, and keep it functioning (barely) while the internal programming team worked on building a complete replacement from scratch, at half the cost, with the actual system requirements being fulfilled. I spent four months fixing bugs in deliberately obfuscated perl code, at consultant rates, because none of the internal staff they had hired was either able to figure out perl code in general, or willing to even try to sort out that mess. The outsourced programmers in question had the dodgy business practice of deliberately making their code difficult to read, and only including comments like:
# 16426-b
The code in question contained wonderful constructs such as pointless loops where a value would be iteratively divided by the numbers from one through a thousand, then restored to it's original value without being used in the altered form. I started the project with about 6 million lines of perl code, and by the time it was over and the replacement was ready, tested, and brought online, there were only 2 million lines in the outsourced code, including about ten thousand lines of comment code that had been added while I was working on it. I hadn't even looked at about half of the remaining code.
After the initial work was done (poorly), the outsourced programming company announced that their code maintenance fees were being increased, thinking that their poor coding style had essentially locked the client in, and left them unable to get help elsewhere. The only staff member the company had who was willing to make the attempt unfortunately committed suicide after only a month of trying. (Personally, I believe it was unrelated, but the other programmers there claimed she was perfectly fine until she started working on that code... after two months of it I could see why they would think that.)
So yeah, in my experience, outsourcing programming does not save money - if the company I did that work for had just had their own people write the original code, they would have saved a massive amount of money.
If you pay someone by the hour, they will work as slowly as they can...
If you pay someone by project, they will cut corners to finish quicker.
If you pay someone by lines of code they will write bloated code.
All of this is even worse when the developers are halfway round the world and you can't keep track of them so easily, and when you don't have sufficiently clued up people on hand to inspect the code they have written.
http://spamdecoy.net - free throwaway anonymous email - avoid spam!
I work at a company that does outsourced programming for for US and EU companies. I have been working at this for the last 5 years aproximately (always in programming & analysis roles).
I am really amazed at how much our clients undermine their own goals. I understand that cost is what drives programming jobs to my country - but I still have to see a really successful product come out of this. It would be difficult to find a single cause for this, but all of the following are at least partially responsible:
1 - Low wages.
2 - Lack of good programmers getting involved: some of the programmers you can get for the lower wages are great, some suck. I've seen companies taking just anyone interested to fill programmer positions for such jobs (you can train them, right?). Getting involved in the selection process may help prevent this.
3 - Lack of trust in the the outsourced team: you can't think of the outsourced team as a bunch of mindless morons and expect them to care about your product. In those cases in which the outsourced team was a very good team, it didn't make the slightest difference because people was told what to do, and not to think - which makes hiring inexperienced people a pretty attractive alternative.
4 - Giving more importance to cost & time, than to quality: what would anyone expect to get, when quality is secondary to time & cost? This is a huge way to undermine your projects.
5 - Communication: communication is harder when people is spread all over the world. IMHO you need to compensate this difficulty by having some tool to help you keep in touch. In my current company, we use skype, and we keep in touch at all times with the client, which really helped solve this particular problem.
6 - Planning: planning is much more difficult when delivering work to someone who is not right at your side.
5 - Etc, etc.
diegoT
I know of a couple of software projects that are outsourced and getting good results.
This one basically the formula for one of the best of them:
Each team is overseen by a local (stateside/canadian) lead programmer who can actually review the code properly.
There are guidelines in place for documenting and commenting the code. Don't follow the guidelines, don't get paid.
And they pay close to what US programmers for a similar project would demand.
As such, they never run out of a supply of candidates. They can afford to be VERY choosy about their hires. And they get damn good value for their money.
Yes, they went through a few scammers during their early spin-up. But they had that sort of thing built into their expectations. They eventually wound up with a crack cadre of programmers and software products that are some of the best-documented I've ever seen anywhere. You could literally spend a couple hours reading the documentation and start working on the software.
Then you get the guys who think they're going to set up a programmer sweatshop someplace and pay sub-subsistence wages to hordes of thousands and magically fall on the fair side of the "infinite monkeys" principle.
I have zero pity for these fools and the crap they wind up with (if anything is ever actually delivered).
Chas - The one, the only.
THANK GOD!!!
This, mostly, doesn't seem to have happened yet, but I'm waiting for it to happen. . .
Essentially, the problem is that when another company is being payed hourly to develop a product for you, mostly they care about selling you hours, not selling you good software.
So, as long as the Indian companies are working at selling hours instead of copies of software, they perhaps don't have much incentive to really get it right. But, once some Indian companies realize they can just make the software and publish it themselves, selling directly to customers, then the incentives change - the customers won't buy bad software, so they'll need to make sure they develop the programs to a certain level of quality (perhaps they can get away with *lower* quality, as long as it's "good enough" and is cheaper than the competition).
I might just be ignorant, but so far, it doesn't seem like theirs been any big self-publishing software companies developing in India (and China, and other developing nations that are starting to build tech companies), but I don't see why it couldn't happen, and that worries me far more than "outsourcing".
I feel that the U.S. and Europe are far too complacent and far too smug about being "intellectually superior", and figuring we can keep our economy alive, despite losing manufacturing and lots of other jobs, by having a "knowledge economy", as if the rest of the world for some reason can't develop their own tech sectors that can out-compete ours. I mean, we already know that most of the rest of the world does better in school than U.S. students, so how is that going to work?
PLEASE let Microsoft move to India. Then it really will be year of the Linux Desktop.
I think you hit on something, even if you haven't realized it. Companies don't hire first year students. The numbers have been dropping for almost a decade now. Companies get it into their head "why deal with college hires when we can use experienced off-shore". Well you can't keep a pipeline of experienced programmers in the US unless you make the investments in the next generation of programmers.
I was the "Down" in Downsized, I was the "Out" in Outsourced. That made me down and out.
I wanted to be the "Laid" in Laid Off but but my wife gave me "The Look".
Ethics II Axiom 2. "Man thinks." B. Spinoza
I've commented on this before, but there are GOOD and BAD reasons for outsourcing. All of these stories focus on the BAD (and they're truly horrible). It's easy to have schadenfreude about managerial disasters, especially if said managers fired you for this kind of project.
If you're outsourcing something that is your core competency, you're going to rot away to nothing. They will walk away with your secrets and become the direct solution provider in your space.
If you're outsourcing something that is creative or inventive in nature, you will fail. They are geared to bill hours, want to minimize their own labor by recycling solutions, and don't care so much about success because rework is still work.
If you're outsourcing something that depends on today's level of dedication and problem-solving, that's creative and inventive. But also, you will fail because you don't own those rare dedicated and problem-solving employees. They're predictably terminated by their managers, replaced with cronies or the next batch of diploma-mill graduates. If you get something good out of an outsourced worker, they will quit for a better job tomorrow and you'll have to start over again. And there's usually a no-poaching agreement to make it harder for you to groom and select the gems from their labor pool.
However, if you're outsourcing something that is rote, uninteresting, easily explained, clearly documented, often repeated, and does not rely on motivation or personality, then you have a chance. There's no reason for you to hoard and cultivate a set of employees who are best kept as fungible, as replaceable, as off-the-shelf, carbon-copies of each other as possible. Get them cheap, and get them to turn the repetitive process crank that you don't want to turn.
Offshoring the project is identical to local outsourcing, but all of the challenges of time zone and language and culture are just magnified greatly.
[
I used to work for a Big Outsourcing Company Which I Refuse To Name, not in India but in Eastern Europe. And this kind of posts always make me laugh. We were cheap, but we were good. It is true that there were some pathological situations, ie we were charging client per man hour, and as a result our team was artificially inflated and we kept people who were completely useless and lazy, but were completely happy to receive minimal salary and do nothing apart of pretending to be useful. But the best people in the team were really, really good and well paid (with hourly rate exceeding the one that customer paid per mh!) and management was quite good too, managing not only the project, but working closely with the customer etc. And you know what? The code that we produced was better that the stuff created by customer's own R&D devs, and as result more and more work was transferred to us. And I can clearly remember how frustrated we were working with customer's own people, some of which were mediocre at best, knowing that they are getting 4x more for similar job. Eventually, frustrated by the situation, I moved to Western Europe myself, quadrupling my salary. But, at the other hand, we were not in Idnia, and the rate customer paid was much more that 14$/h (it was, as I recall, 20+EUR/h)
The main problem I've had with Indian programmers is that a lot of them don't really understand english (even though it is the official language of India)
English is an official language of India, and not the primary one. The primary official language is Hindi - you know, their native language.
I realize it's vastly preferable that they speak English if they work for you, but you're implying there's actually something wrong with Indians who don't speak English, and that's absurd. There's nothing any more backward or stupid about an Indian who doesn't speak English than there is with a Canadian who doesn't speak French or a Belgian who doesn't speak German.
Don't practice the cultural ignorance and arrogance that befalls other Americans. I think you're smarter than that.
If you can't get the guy down the hall to do it right, don't expect it come back right from India correctly either. Most software fails are due to poor planning, misunderstood or absent requirements, poor design with no input from customers, and so on. Yes, most of us who've worked with or managed foreign teams know that the coding from India (or Iowa, for that matter) may not always be top notch, but coding is the easiest part. Planning, useful documentation and management of a well conceived project is the difficult part.
Please do not read this sig. Thank you.
Comment removed based on user account deletion
Management that is supposed to oversee the project sucks.
Outsourcing properly is hard work, and how many managers do you know that actually work hard? Remember, these are the same people who couldn't figure out how to build and market a widget, now have decided that a boost in profits is only possible by outsourcing.
You must create comprehensive requirements. That takes a team. Reading large boring documents and sweating the details. How many of these lazy managers do you think would actually read anything over 10 pages long?
Next, you must set design reviews. Again, what is the attention span of these managers? Again, the lazy ones who decided to outsource in the first place?
Next, you must review the progress at multiple stages - and have enough flexibility in the contract that if you have to burn it and start over, you can afford that. Typically you don't have to burn everything, but you need to fix the other steps in the process that you obviously messed up on.
If you want a Ferrari and not a Tata, you had better be able to express the difference in a requirements document. "A car with 4 wheels" isn't going to cut it.
Best practice is to have a requirement that is based on a previous product. "We wants something just like this except......"
Oh, and don't forget to tell the Chinese that all materials must be food safe as specified in California or EU.
Perhaps from business's perspective it works like this: Since we don't know how to leverage, motivate, and manage talent, we might as well pay less for the same suckage.
Table-ized A.I.
I'm sure there are geek teenagers in my neighborhood that would take 10$/hr to write code for my professional software product.
If I do, is the story really that they are bad coders? No, the story is that I don't know how to run a business and I have shit for brains.
If you executives/management can't put talent in the seats for the positions that count you will fail. End of story.
I was crazy back when being crazy really meant something. (Charles Manson)
for how much removed they are from the system. The owners that is, not necessarily the managers, but the owners set the policies and tones. Adam Smith lived in a time when it was safe to assume the capitalists would live near the means of production and thus suffer the consequences of their actions. He didn't see satellite communications coming. For what it's worth Karl Marx talked about this; e.g. how capital owners would be insulated by pitting labor in one economy against another; but all anyone can remember about him is that a bunch of dictatorships borrowed his books for rhetoric...
Hi! I make Firefox Plug-ins. Check 'em out @ https://addons.mozilla.org/en-US/firefox/addon/youtube-mp3-podcaster/