How to commit suicide – outsource your software development
Is that headline a bit too strong? I don’t think so. Allow me to explain.
This article applies to any company where your main product or a substantial part of your main product is software, and the software is a key part of your product. For example, if you made top-end oscilloscopes with an embedded PC inside them, the software to run the oscilloscope on top of the embedded OS would be important. This is unlike say if you are AOL, where the dialup software is important but can be easily outsourced without impacting your business at all.
We receive approaches via email, via Linked-In, etc, from outsourcing firms on a regular basis. Their message extolls the virtues of their multi-talented legion of software developers that can be hired for as little as $5.00 / hour. On the face of it getting staff at $5.00 sounds great if you assume the staff know how to do their job. The list of technologies, computer languages and computing platforms they support is vast. You almost wonder how they do it. And at $5.00/hour. What’s the catch?
$5/hour. 10$/hour. Either of these rates is really attractive. No surprise, that is pretty much their unique selling point.
In purely financial terms this looks like a win. But the true cost of using outsourced software development is not the expense of paying for it. The cost is elsewhere. I’ll come back to this later.
Location and Language
Typically these operations are set up in low-cost parts of the world, usually developing countries, ex-eastern bloc countries, India, and China. Often with a nice shiny headquarters in the US or the UK.
Everyone (well, almost) has access to the Internet these days. Distributed teams are not new. Lots of people do it. We do it. The most famous web product team on the planet does it. It is quite possible your outsourcing company will work this way. If that is important to you, you should find out.
You will need a core spoken/written language for communications. That will probably be English, just because that is the way the world works and software tends to be written that way.
You’ll want to make sure any source code comments, version control commits and design specs/documents/presentations are also in English. I’ve seen comments in French in source code bases that were substantially English. No problem with French except that practically no one in the building knew what the comments said, except for the mathematician that wrote them. Is that useful? I don’t think so. Neither did the management when they found out:-(
You probably have to assume that most of the people that will end up developing software for you will have English as a second or third language. This generally isn’t a problem, but I’ve found a few exceptions. Different languages have different rules on sentence construction – where the verb goes, how adjectives and nouns are used and so on. I’ve found over the years, from corresponding with our customer base, that I struggle with the sentence verb/noun/adjective formation rules used by some parts of the world which are not the same as English rules. When translated from their native language to English you get a strange beast which looks like English but which reads very differently. Everyone is different, you may not have that problem, but I struggle with it.
Is it reasonable to assume these people have good staff? I think it is. I think it’s also reasonable to assume they probably have some useless staff too, most companies do, so I don’t see why these companies would be any different.
Sounds OK so far, so what is the problem?
The main problem with outsourced software development is that as the development proceeds the following happens:
- You are paying the outsourcing firm to learn the technologies required to build your product.
- You are building up a reservoir of knowledge in the brains of their employees, not your employees.
- At some point the outsourcing company will know more about the internals of your product that you do. At that point, you become dependent upon the outsourcing company. A perfect time for them to raise their costs. I don’t know if this happens, but logic dictates that it should.
- Once your product is complete, you have a lot of software that works and has no bugs (well, you can live in hope), but you don’t know anything about it. Is that a good position to be in? Sure you’ve got documentation on it and the full version control history. But fundamentally the knowledge is in the brains of people that don’t work for your company. How are you going to handle bug reports? Are you going to let your staff lose on a codebase they don’t know or are you going to hire the outsourcing company again? At what point can you break free from the outsourcing company?
- The staff at the outsourcing company do know how your product works. If they want to go and write their own product in the same marketspace they can, and they will do it better as they will have all the knowledge about the pitfalls and mistakes made creating your product. Of course you can mitigate against this will a clause in your contract forbidding such competition.
- Fundamentally, the software development business is about developing intellectual property. You want as much of that IP in the heads of the people that work for you, not in the heads of people that do not work for you. Outsourcing this work puts this knowledge outside of your company and is ultimately commercial suicide. Of course, staff can leave your company and move on to forge their careers. But that happens over time, you can manage that. Not the same as all the knowledge in the brains of a separate company’s employees.
All the above reasons put you at a substantial disadvantage compared to your competitors that do not outsource their software development.
I can think of one exception to the above, but it is not really outsourcing. The exception is when you have one small discrete component of your software that you would like implemented and all you want is a functioning piece of code that can live in a DLL and get called to do its job. Examples would be a GUI widget library, a data compression library, a disassembler for a specific microprocessor etc. Typically you can find companies or lone developers that do things like this. They often have working examples you can try with very reasonable terms for use.
This is outsourcing in that you didn’t do the work, but it falls into the “not core activity” classification I mentioned at the start of the article, so I don’t think this really counts.
I always reply to people that approach us asking us to outsource our work to them. I explain that I regard their offer as asking us to commit commercial suicide. Normally I don’t get a reply. But I did get a reply from one gentleman, who shall remain nameless. Here is the edited exchange. Edited just to get to the nitty-gritty. I have not edited any words or punctuation in the sentences.
“We are not interested in outsourcing. Software development is a core activity here – outsourcing it is equivalent to outsourcing the core intellectual property. For our business that is suicide. For other businesses it makes sense.”
“Honestly, I totally agree with you. But such is the reality nowadays.
He then explained that he thought there were valid reasons for us to use his services. Good salesman, I guess.