There’s a well known concept in economics known as comparative advantage. A formal definition has many nuances, but the basic principle can be summed up as each party undertaking the work that they are most productive at, such that the overall production of the system is higher than it would be if each party performed tasks they were less productive with. For example, if Farmer A’s farm could grow 100 bushels of apples or 200 bushels of carrots a year, and Farmer B’s farm could grow 75 bushels of apples or 50 bushels of carrots, then the highest production occurs when Farmer A grows carrots and Farmer B grows apples (75 + 200 = 275 bushels total). This is the case even though Farmer A can grow more apples than Farmer B; if there were demand for 100 bushels of apples, the best way of growing them is to have Farmer A grow 25 bushels and Farmer B grow 75 – total output is 100 bushels of apples and 150 bushels of carrots, which maximizes total output under the constraint that at least 100 bushels of apples must be grown. Since Farmer A is better at growing carrots, then it’s always economically beneficial for him/her to do so.
Though this example looks at farmers, it applies to countries as well. However, the use of regulations can complicate the analysis, as regulations can be applied (through tariffs, import controls, or other measures) to artificially tip the scales in favour of one party. If Farmer A were restricted to exporting 50 bushels of carrots, and not restricted on apples, then the market realities would result in Farmer A growing primarily apples even though he/she can grow carrots much more easily. And as a result, the total output of the economy is reduced to 200 bushels, down from 275. On the surface, applying regulations seems to be a pretty irrational thing to do – why would we work harder and produce less?
The answer to that question lies in the reasons behind applying those regulations, to which there are many. The one I want to focus on today is protectionism – policies designed to ‘protect’ workers and businesses in a country from outside competition. If India is able to produce technical workers more cheaply than North America can, then market pressures tend to result in those jobs being performed by Indian workers. But, you exclaim, they’re stealing our jobs! Outsourcing is bad! Of course we should have regulations in place to stop it!
Economists have many good reasons why this isn’t be the case – foremost amongst them the principle of comparative advantage – as even considering these job losses the economy is still better off as a whole. Though jobs are lost in the short term, in the longer term the local economy picks up the slack in areas the country is more suited to, resulting in a net gain. The rise of information technology is one example of this; when computers were made domestically in North America, they were relatively rare and obtaining one was expensive. By manufacturing them in countries with lower manufacturing costs, computers became mainstream and widespread – and we’ve subsequently built a massive business sector on top of them. For all practical purposes, the Internet as we know it today wouldn’t exist without low-cost computers, and had we regulated the economy to discourage the outsourcing of computer manufacturing, we’d be years behind where we are today. Granted, we missed out on the jobs that might have existed had we done that, but at the same time we’ve gained an entire sector of jobs in companies like Google, Microsoft, HP, Amazon, and the many, many tech startup companies. And then we’ve created a whole host of jobs to support those jobs – would Google’s chef’s have a job if Google weren’t around? Change is always hard, but by allowing it to happen we have indirectly benefitted ourselves – and the rest of the world!
The crux of this post is not comparative advantage and economic protectionism, but rather something I’m going to call technical protectionism. In the tech field, the players aren’t so much people or companies, but rather, technologies themselves. Few people would argue that Ruby is a better language to write web applications in than C, or that Photoshop is better than Paint, or that Mac is better than PC (just kidding!). Actually, it’s that last one that is entirely my point; the Mac versus PC debate will continue indefinitely, as many of those doing the debating are debating for solely protectionist reasons. There are completely valid technical (and non-technical) reasons why Mac is better than PC, and why PC is better than Mac, but more often than not the discussions seem to take place on a ‘it’s right for me, so it’s right for you’ level that lobs orthogonal arguments toward the opposing side in an attempt to win by attrition or disinterest.
The frustrating part in this whole issue is that, unlike with economic protectionism, technical protectionism is condoned by the tech community. When the US introduced ‘Buy American’ clauses into some of their economic stimulus packages, experts on both side of the border – and the media to some extent – erupted in condemnation. Now consider the last time you got into or observed a Mac versus PC, Windows versus Linux, Python versus Ruby style argument: those sorts of arguments are expected – and tolerated – by the technical community!
In my experience, these debates are intrinsically motivated by the participant’s own familiarity with a particular technology: I know how to build programs in technology X, therefore technology X is the right one to solve your problem with. You see this all over the place – just look at small consulting firms, which often specialize in a single technology stack (Microsoft, IBM, Oracle, LAMP, etc.). Having one of these firms pitch you a solution inevitably means them pitching a solution that runs on their stack without consideration of the others – if you want a vacation-planning application for 50 employees from an Oracle firm, then you’ll be paying for an enterprise grade Oracle database, regardless of whether a cheap LAMP application would have sufficed. Sure, it may be unfair for them to pitch the value of another company’s services, but at what point should they be saying ‘this is not something we do well’, and voluntarily withdrawing from consideration so not to waste everyone’s time?
Even taking a step back from companies, this behaviour is present even in the colleagues I interact with. Since I worked at Microsoft, in technical debates I am automatically assumed to be the enemy of everything open source and the chief defender of everything Windows. And while my experience gives me the ability to understand Windows’ capabilities and limitations, I’m not going to side with it automatically – it depends on the situation. If you need a cheap server with a small application, Windows isn’t right. If you need an expensive server with a massive application, Windows isn’t right. If you need a moderately expensive server with a medium sized application, Windows isn’t right. And you know what? You can replace ‘Windows’ in the previous three sentences with ‘Linux’, ‘Mac’, or any other technology – without looking at the precise details of the situation, it’s impossible to tell which combination of features and capabilities are appropriate for the problem at hand.
My fundamental point here is that it is impossible for one technology to solve every problem in the best way possible. Comparative advantage tells us that the best way of solving all of problems is to choose the right tool for the job, regardless of what that tool might be. Granted, choosing a tool is nowhere near as straightforward as counting bushels of produce, but the principle still applies: use the combined strength of all parties to the best of their individual abilities. Sure, we have to make allowances for expertise and to minimize tool diversity to keep overall costs down, but supporting the notion that one can advocate for a particular approach solely because it’s what they know or believe is unproductive. And yes, that means that you’re favourite solution won’t always win – and that’s OK. By choosing the best tool for the job, we’ll have a better outcome in the end.
That’s not to say that having opposing products and companies isn’t useful – it is. Sometimes you need to go against the grain and tackle the hard problems. But when you do, use the best tools for the job and not the ones you know just for the sake of doing so. Firefox is the browser it is because IE languished at the top of the market, and made no effort to improve. Competition from Firefox was good, as it made developers on both teams compete to have the better browser. At the same time, however, notice that the Firefox team didn’t start from scratch – they took the best technology that was available to them (Netscape) and made it better, rather than taking a protectionist approach and using what they knew. Innovation occurs when we create something new, not when we take the long way to get to where we’ve already been.
As a community, we need to dispel the notion that technical protectionism is an acceptable attitude to have. Objective criteria and constraints can be found for every problem we need to solve, and technologies can be evaluated against them impartially. The next time you encounter an argument from a protectionist position, make sure to call it out, and make it know that this sort of justification is unacceptable. Just as with outsourcing and the Internet, eliminating technical protectionism can have profound benefits we cannot even imagine, and until we start down that road, we’ll never know what we’re missing.