There has been much written about the merits and social responsibility of off-shoring programming tasks to India, China and various Eastern block countries. Websites like oDesk and eLance seems to get considerable coverage in the blogosphere since managers in charge of technical teams drool when they see hourly rates for seemingly well-skilled programmers at around 15 USD/hour - if you go with a provider that does hourly billing. As we all know this is considerably lower then the hourly rates you'd need to pony up to attract better-than-average programmers in San Francisco, New York, Sydney, Singapore or London, regardless of the current market conditions for local programming talent, so on the surface of things it may seem like a simple decision: retain a core architecture team of highly-competent engineers and architects in your Development HQ who do the high-level design, and outsource the lesser work to offshore freelancers or labor hire firms. Then sit back and watch your monthly cash burn rates tail off, your delivery schedules and engineering budgets gravitating back towards those quarterly projections you presented at the last board meeting, thus stretching your seed capital as far as possible.
But is it that simple? To quote a well-known technical response... "it depends"!
Yes the hourly labor rates will be cheaper but you are trying to minimize the total cost of the project. Thus cost savings will only materialize if:
- the time required to do the assigned tasks to the required level of quality is close to the estimates given plus an overrun buffer (assuming a fixed-fee, fixed-deadline arrangement wasn't used); and
- the individuals engaged to do the work are suitably skilled, motivated and communicative that there is a reasonable chance that (1) happens [good luck trying to negotiate penalty rates with Vladimir in the Ukraine in case he misses your deadline because his priorities suddenly switch to his impending doctoral thesis review at the 12th hour!]; and, most importantly,
- a clear, unambiguous specification and/or regular guidance is available to the individuals engaged.
Some may scoff at this last point. "Of course we know clearly what we want to do!" I can hear you saying. Well consider that many development teams these days prefer Agile development methodologies where, unlike "waterfall" methodologies, the focus is more towards short-term objectives and proceeding in such a way that enables product changes throughout the development process to be more easily accommodated. That methodology didn't become popular because we all know exactly what we want and therefore never have to rework part of the specification document! Scope creep does happen, and in the world of Internet development even the best planned projects might need to be reviewed when a competing product or service appears unexpectedly on the market.
That issue aside, these may not seem like large hurdles to overcome and if you have a very clear idea about the requirements for the particular task you are considering outsourcing then you can seriously contemplate if, at a strategic level, you should be outsourcing this piece of work or not. It would be prudent to consider the following issues:
- Is this a critical piece of your system? And are you planning on supporting it in-house or will you rely on the original provider? Losing control of your "system smarts" is not a well proven strategy.
- Is the project an add-on to your system that can be done without intimate knowledge of the system internals?
- Will the external developers need access to all of your existing source code, and knowledge base, to be able to complete the assigned project? If so, are you willing to give access to this to 3rd parties before a certain level of trust is developed?
As you can see there are many factors to consider, and for some types of projects off-shoring can be a highly effective practice. But, as you probably already know, selective off-shoring is the answer. It's all about knowing which projects are good candidates for outsourcing !