International Outsourcing

The reason that programming is being outsourced to countries like India is to save costs, but there is a better way of saving costs, based on a discovery that has been made repeatedly, and has been published repeatedly in highly regarded books on managing software projects such as The Mythical Man Month, Peopleware, and Software Craftsmanship. The discovery is this: there is at least a factor of ten variance in productivity among programmers .

If software project managers found out who those productive programmers are, they could replace ten average programmers with one good one and maintain the same output as before. Assuming they pay those productive programmers twice the industry average, they could make a saving of around 80%, the same as is being optimistically claimed for outsourcing to countries like India. Assuming that productivity among programmers in India is equal to their counterparts Britain (my argument applies equally to, for example, outsourcing by American companies), there is one further gain: the productive programmers can be in direct contact with their customers, so misunderstandings about requirements would be much less likely.

Most software managers act as if they are unaware of this variation in productivity, and treat all programmers as Commodity Programmers: i.e. identical and interchangeable widgets. Why? I think there are three reasons. The first is that, instead of reading good literature and keeping up to date with developments in their own field, they are too busy reading the latest Tom Peters blockbuster or digesting Gartner reports. The second is that many good programmers are immune to the rapidly changing fashions in the software industry, and are cynical about languages for the masses, instead preferring more intellectually challenging languages like Lisp, C and Smalltalk (and to a lesser extent scripting languages like Perl and Python). This means they are harder to replace and so cannot be treated as commodities. Project managers depend on them, whereas weaker programmers depend on project managers. The third is that, unlike outsourcing to India, the head count would drop dramatically. They wouldn't need so many project managers, soi-disant Software Architects, and other unproductive staff.

Finding out who the most productive programmers are is not as straightforward as it might seem. You cannot just measure the speed at which lines of code are output, as better programmers will often get the same work done in far fewer lines with far fewer bugs. Nor can you naively ask their colleagues, unless they're also good. Average programmers often cannot understand the reasons why a good programmer has done something in a particular way. Good programmers write code which is generally harder, not easier, to understand, because of high level abstractions. Indications that someone is good include knowing several very different programming languages, having read or at least referred to Knuth or Sedgwick, being involved in open-source (or similar) development, or research. Rather than counting buzzwords on their CVs, ask them to produce samples of their code in advance of the interview. But in the end, the only reliable way of being sure of whether a programmer is good or not is to become as good or better than they are.

There is one excuse for outsourcing: if you cannot find the talent at home. This is unlikely, given the current high unemployment rate among programmers (due not just to outsourcing, but also the The IT Winter, ageism and other factors). But it's possible, and when it happens, you might want to bring in people from the more technologically advanced country on work permits, instead of sending the work there.


This page was linked to from

and was last updated on Jul 26 at 02:24.

© Copyright Donald Fisk 2004