Tuesday, May 15, 2012

Pragmatic Programming can beat Vendor Lock in.

Programming is a tough job. Part of what makes it tough is the fact that programmers make other programmers depend on them. It's all  part of survival. Disruptive technologies emerge more often in software than in any other kind of industry. Back in 1996 and 1997, the first website people would visit when they opened their browsers was Yahoo!. Later Google came into prominence and captured the top spot. It remained there for many years. Now, that position is becoming precarious and facebook has emerged as a serious competitor to Google. Today, several websites are vying for the top spot. Youtube, twitter, Linkedin, MySpace, flickr, and so many more.

 We have only been looking at how the web has changed so far. But the story continues beyond that. Adobe's pdf documents are fast becoming commonplace. Google chrome is eating into the market owned by IE, Object relational and Object oriented databases are a looming threat to companies that sell databases that still follow the relational model.

So how does a company ensure that it will stay afloat even though it's rivals make better products? The answer lies in economics: Vendor Lockin. It is a terrible thing. The software vendors create specialised sections of code or incorporate unresolvable compatibility issues into their software so that it will be extremely hard to switch from one service provider to another. The switching costs for software systems will be so high for some systems, that even if the company wants to switch, it will not be ready to pay that huge a sum. Also, there is an increased risk while switching: the new software may require additional training and processes, special skills and so on.. All these factors prevent companies from becoming better.

Now, from the point of view of the programmer, what's vendor lockin? Simple: you use any special feature provided by your environment and your system will become dependent on that environment. Microsoft does it. Google does it and Apple has been doing it and a lot of other companies want to get in on it. They want to lock people in. They want to make their platform dominant. They do not want to lose out to a rival simply because the rival's product is better.
 Standardization is one remedy to the problem. But then, everyone adds their own extensions to the standards and they will be so different that vendor lockin inevitably results leading to a dependence on the provider's platform and ensuring that the provider continues to make money even if his product is lousy. Pragmatic programming is the way to go against this prison. Using open-source libraries and creating scalable and re-usable code that depends as little as possible on the host's system (if at all), and following the principle of separating the logic clearly from the implementation details can considerably reduce the penalties while switching. Programmers need to use all their skills to make the system as cross compatible, upward compatible and "switchable" to ensure they don't get trapped by the vendors.
Serious programmers always think in terms of re-use. They are the laziest people on the planet and want to put in as little effort as possible. Being lazy this way makes them efficient. So the next time you import that library, make sure it's not proprietary and if it is, look for a similar open-source alternative. In the worst case, at least make sure that it is available everywhere. After all, you don't want someone else to control your work.