Zane and Cote have been weighing in on both sides of the recent trend towards sending code offshore to India and China. Cote, while not really expressing an opinion one way or the other (unless you count, "I might lose my job because of this shit," as an opinion) has been linking to articles that seem to indicate the number of offshore coding operations is growing. Zane on the other hand, indicates that this is, yet again, one more trend that is overhyped, much like client-server network models, 3-tiered architecture, push technology, UML, and Webvan.
Zane claims that coding is not a commodity product. He cites as reference to this the fact that certain coders are better than others, producing far tighter code, in a far shorter deadline, and with superior operational parameters than other, inferior coders. There is no denying this claim. I have worked with coders who could code circles around me. I have also worked with coders who couldn't code their way out of a binary tree. The differences in ability were nothing short of astounding between the two.
However, the questions that determine commodity products and services have little to do with whether there are differences between individual products and services as much as it has to do with barriers to entry into the industry. For example, there is a high level of difference between Nike and Reebok shoes, but due to the low level of labor involved, cheaper prices on raw materials, and a series of other factors, both companies have taken their shoe manufacturing operations offshore. The shoes may be different, but the assembly process is strikingly similiar. Practically the only parts of the companies that are located in the States are the legal, financing, advertising and design teams (all of which have huge portions of operations outsourced to other companies in the States and abroad as well).
I would argue that code is similiar. Yes, Zane may be smarter than the average coder, but coding has a very low barrier to entry. Any idiot can set up a code shop with the cost of one computer (<$500), an internet connection (<$100/month), an OS (free), a code editor (free for emacs and vi) and compilers in their programming language of choice (free). And for every $1 dropped in the cost of computing power, the cost of entry drops by a similiar amount. The only other factor is knowledge. With the rise of the Internet, the increase in online tutorials, articles, examples and code, most people don't even have to pay for a class to learn this stuff. There is no barrier to entry. What this means is that the only limiting factor preventing people from entering the industry is their perception of how lucrative it is, and their ability to learn. In other words, what is the cost/benefit analysis on their time. This is a direct relationship to the compensation of programmers in aggregate. Stated another way, as the salaries of programmers rises in relation to your current salary, programming becomes more attractive to you, as it declines, it becomes less attractive.
With such a low barrier to entry, the good programmers must constantly seek to differentiate themselves from the inferior ones. They do this the only way they can; by gaining more knowledge. As they gain more knowledge they become more lucrative. The others, attempting to mimic the success, go after the same knowledge. As more players swarm onto the field, they lower the pay scale for everyone in the game. In other words, elevating your knowledge in this instance is the equivalent of buying the biggest SUV to be elevated above traffic while driving. It works fine until everyone else runs out and buys the same SUV. You are no better off than before. And actually reality is a little worse than it at first appears. As time goes on, the really bad players get out of the game (and some of the good ones do to). What's left are a little stronger, a little wiser. However, the low cost of entry keeps new people coming in that have learned from the mistakes of the past, but haven't had to pay the price. What this means is that each iteration is a little more lean and mean, and the older coding base simply cannot keep up. How much cheaper is the cost of acquiring Java knowledge if you haven't had to sit through a Pascal lecture, and an assembly lecture in order to learn the Java info that you need? It's cost differential is equal to the cost of the Pascal lecture plus the cost of the assembly lecture. In other words, the time that new coders don't have to spend on learning outdated technologies is time they can spend on current technology. Which is why the younger generations are always more adept at new things than their predecessors.
Now this is all very Darwinian to be sure, and if you look at it from an evolutionary perspective it seems perfectly obvious. So in short, as time goes on, coding will fall in the hands of the best coders. Also, due to the fact that there are no barriers to entry into the profession, coding prices will eventually become flat. Any attempts to raise rates will be squashed by more entrants lowering their rates. Some of these new entrants will be lower quality, but a significant portion will be equal or higher quality, and while all this is getting sorted out rate drops will occur and you won't be able to do a thing about it.
Now that we've established that there is no barrier to entry and that the leading differentiating characteristic of coders is intellect, the next question we must consider in order to assess the viability of offshore coding is whether the U.S. has a monopoly on coding intellect? In other words, is there some mitigating factor that prevents other countries' citizens from programming well? Are Indian coders somehow intellectually incapable of understanding OOP or XP? Are Chinese coders unable to grasp the concept of sockets or Design Patterns? I would say most definitely not. Many of the great coders in the States are of Indian and Chinese and other ethnic descents which seems to rule out that assumption. What barriers have kept coding in the States for so long (several decades) and will these barriers continue?
I would argue that there are a few barriers, but they are rapidly diminishing. First, is the cost of communication and coordination among teams across borders. It used to cost a lot of money to transport bytes across borders. It also used to cost a lot to talk, view, or visit remote teams and assess progress. With the Internet, VoIP, and other technologies these costs are falling fast. The other key factor, in my opinion, is the fact that all major programming languages are in English. This has been a major barrier to entry for foreign programmers for many years. However, with the ascendency in the last several decades of English as the primary language of science, engineering, and computers, and the increasing reliance on these fields, English has begun to move from a distant second language to an almost primary language among many cultures outside the U.S. and Britain. As it does this, the one barrier in foreign computer science has started to go away. As proof of this, you can look at the international computing powerhouses that have existed for decades, before this offshore craze came into serious play. They were Germany, Ireland, Britain, and Israel, all countries that have English as the primary or secondary national language. The fact that India, which has a large British influence has risen lends further proof to this argument.
So, as this diffuses out across the world, the countries that seem inferior today will become more proficient. The U.S. does not have a monopoly on brain power, only experience, and in fields undergoing paradigm shifts, this can actually be a curse in some cases. How helpful is linear programming methodology in learning object oriented methodology? As time goes on, other countries will gain the experience, infrastructure, and ability to match the U.S.
Zane may be at the top of the pile intellectually in the U.S. but he is going to have to compete against the intellectuals of India and China and every other nation real soon, too. As you begin to compete worldwide, you begin to compete with worldwide rates. The worldwide rates are determined by the cost of production and the desired profit margin. For programming, these costs would be the cost of skill acquisition, the cost of living, and the cost of time spent on coding. Even if you were to throw away profit incentives and consider that everyone wants to make the same amount of profit, most of the outsourcing nations have lower fixed costs. As for the cost of time spent on coding, while the amount of time it takes to get something done overseas may increase, the key factor is the labor rate x the number of hours/days/weeks. As long as the final cost is cheaper, it doesn't matter whether you are quicker if you are also significantly more expensive. If you are competing with worldwide rates, your rates will have to drop to meet them.
To say that all the simple jobs will be loaded offshore and the complex "Cadillacs" of programming projects will be kept in-house is absurd. The projects will go wherever the total cost (expected payoff - production cost - risk of failure cost) is lowest. In almost all instances this will be offshore.
The one thing that will keep technology salaries trending upwards is the amazing growth the industry will see in the next several years. However, this will become stymied as the labor pool expands internationally and increases in number. The question you have to ask yourself is whether the size of the pie is increasing faster than the line of people trying to get to the buffet table. That is something anyone in the field or wanting to enter the field will have to ask themselves. I definitely don't have the answer.
All this of course is caused by technology, and computers, which is somewhat ironic. Really the only way to compete effectively is to be the low cost competitor. In many instances that may not be possible.
So, the answer to competing in a commodity environment is to create a moat of some sort, if possible. Nike has managed to do this with their brand name, and some programmers have seemed to accomplish this as well (Bruce Eckel, Dave Winer, Steve Wozniak and Joel Spolsky spring to mind). However, I have a feeling that the staying power of any sort of personal branding in this industry is fleeting at best. The other option is to cross pollinate and set yourself up in a field that has extreme barriers to entry and require a coding background. Biometrics, medical technology programming, AI, and any sort of science programming fields would seem at first glance to fill these roles. It is unusual for programmers to master technology and a separate field of science, it requires extended education most people can't afford, and it requires a much greater allocation of time than most people want to devote.
The only other option is to understand both the programming aspects and a business need and create a product that fills it. At this point you have entered the realm of the entrepeneur, which is difficult at best, has a high failure rate, and may not be what many programmers want. If you notice, this is also the route that all the programmers who have established "brand name" recognition have done. But the entrepeneur game is just as loaded in the software industry, if you create a product that everyone wants, people will come nipping at your heels trying to unseat you. And they will do so from around the world.
Copyright 2004 Edward Goodwin
Theme Design by Bryan Bell