I want to create an iPhone app for my web service, but I don't have
programmers. Well, I don't have iOS programmers. And I don't have money.
Sound familiar? What do I do? Right, I go to
nothing reasonable money. In
a few months and after a few thousand dollars, I realize this is not exactly
what I expected. After yet another few months, I swear to God I'll never outsource
any software development to anyone. Is it just me? Not really.
This preamble is just a joke, but it's not so far from the truth. Of course, in bigger companies and bigger projects, the story will be different. But the outcome is almost always the same — it is a disaster.
I'm talking about outsourcing, not offshore development. The difference is that in outsourcing, there are two companies involved: you the client and some WeCodeLikeNoOneElse Inc. from Loompaland. In offshore development, you just open an office in that same Loompaland with your own management and employees. Again, I'm discussing outsourcing here.
Before writing this, I read a few dozen articles about why outsourcing fails, and I've found a dozen "reasons" why. However, I think they all miss the point, because they are looking at the problem from a paying customer's point of view. I try to look at it from both sides and tell you the ugly truth. More on that in a few paragraphs. For now, let's explore what the usual reasons are.
Cheapest Providers. Here is the argument: "So you're outsourcing because you want to optimize costs? You will end up with the cheapest software shop and sincerely regret it very soon." OK, what's the solution, then? Just pay more? I don't think that's going to solve the problem; I'll just burn more money. Also, I don't think this reason has anything to do with outsourcing specifically. In any other business transaction, a "win-lose" scenario is a straight path to failure.
Cultural Mismatch. "You're in California, and they are in Brazil; you won't understand each other." Is that why we have cost overruns, schedule slippage, and low quality of code? I don't think so. Moreover, my experience tells me the opposite. Our programmers at teamed.io are from more than 15 countries, and we've never had cultural issues get tangled up in any work conflict, which we have a lot of.
Lack of Face-to-Face Talking. "They are far away somewhere in Poland, so you rarely really talk to them. That's why you misunderstand each other." Look, have you ever met me and had a face-to-face talk with me? I'm talking to you, the reader of this post. That's right, you haven't met me, but you're having no problem understanding my point just by reading this text. That's mostly because I've made all possible efforts to ensure my point is clear to you. I'm interested in delivering my thoughts to you, and it is happening. In outsourcing, the problem is not with the channel but with the motivation. Read on.
No Metrics to Measure Success. "You simply can't define clear metrics of success for a team overseas. That's why your relationship eventually falls apart." Or something like that. I didn't quite get what's meant by "metrics of success," but if it's what I think it is, they are right: Success for a software outsourcing shop in Kiev is one thing. Success for you, a client of this shop, is something very different. Read on.
Poor Specs. "It's just not possible to make good specifications for most projects, and a poorly designed spec is a recipe for failure." Yes, that's very true, but what does this have to do with outsourcing? Ah, right, they are so far away in Argentina and we're here in New York City — how can we make a good spec? I don't buy it. An inability to clearly and explicitly specify technical requirements is a flaw of the architect. Learning, training, and reading should fix this. Getting everybody together in the office is not a solution.
Leakage of Talent. "Developers offshore are not your employees. They will never be loyal to the project, and the best of them will quit once in a while." Yes, people may leave once in a while. But again, how is that related to their location? If they don't use the same coffee machine as their CEO, will they be less loyal to the project? There are many other more effective instruments to boost motivation in a team than just co-locating everybody.
There could be much more, but this is enough for us. As you see, I don't find these "reasons" logical. They merely explain the consequences but never even touch the real problem, which I believe sounds like this:
You're just a cash cow for an outsourcing company.
You're neither a partner nor a friend, despite all your expectations.
Your goals are opposite of their goals.
All these "reasons" for outsourcing failures originate in this fundamental confusion that exists in our heads: We think these 10 programmers sitting in Beijing are part of our business. We believe they are our team. They are with us in the same boat, sharing the same values and looking in the same direction.
It's just not true.
It can't be true.
I've been in the shoes of an outsourcing company for almost 10 years (and quit in 2010). The ugly truth is that for a CEO of an outsourcing shop, the only problem is how to take care of the next month's payroll, and 90 percent of all expenses are salaries for the programmers.
That's why a good customer for them is a paying customer. Not a customer with a successful project. Not a customer with a properly solved problem. Not a customer with optimized costs. Not a customer with the best possible technology utilized. Not at all. The best customer is the one that pays, pays a lot, and pays on time. Period.
That's the root cause of all problems with outsourcing.
The title of this article states that outsourcing doesn't work anymore. Why anymore? Did it work before? Yes, it did, when salaries of programmers were extremely lower in third-world (offshore) countries. For example, in 2001, we had a team of very good senior Java developers in Ukraine. We paid them above the market price, and it was $300 per month. At the same time, we were selling their time to U.S. customers for $15 per hour, which was $2,500 per month. See the margin?
With such a margin, outsourcing works fine. I was a CEO and had almost no worries about payroll. I had enough money to pay my team, even if we lost some customers eventually. Let me put it this way: I had the luxury to be honest with my customers.
Put yourself in their shoes. Today, a good Java developer in Ukraine earns $4,000 a month. On top of that, this developer expects health insurance, a free gym membership, free lunch, paid vacation, paid sick leave, etc. At the same time, the price of Java time is not much higher on the market than it was years ago. Even if you charge $40 per hour (which is very unlikely), your income would be $6,800. Again, your income is $6.8K and your expenses are close to $5K. See the margin?
And don't forget about office expenses, taxes, computers, administrative staff, team building events, etc. Because of such a small margin, you will literally be broke if you lose a key paying customer. You just can't afford to keep your programmers "on the bench" for too long.
Thus, your lone motivation is to keep that cash flow coming. No matter what. The longer the project, the better. The lower the quality of code, the better — more money for maintenance. The more phone calls, meetings and other time-wasting events, the better. The more mess in specs, the better. Just do whatever it takes to suck money from the customer.
You have to do this, not because you're evil but because you have to feed your team. Your team. Yes, the team is yours. You're responsible for their salaries, not the customer. In order to protect the team, you have to go against the real interests of your customers. You simply can't be in the same boat with them.
The point of all this is that outsourcing simply can't work, because your business interests can't be aligned with the interests of your outsourcing "partner."