Just the other day I read an article by Joel Spolsky titled, VBA for Macintosh goes away. In it, he pointed out the fact that Microsoft has lost its “backwards compatibility religion.” He indicated that this had the effect of “making it very hard for many Mac Office 2004 users to upgrade to Office 2008, forcing a lot of their customers to reevaluate which desktop applications to use.” (I couldn’t agree more, developers should really read the whole article.)
In fact, I remember when Microsoft first articulated their backwards compatibility religion to me in a way that resonated with my developer mind. It was 1993 and I was working at Intuit on TurboTax. C++ was brand new, Object Oriented Frameworks and smart pointers were all the talk around the water cooler and we were trying to re-architect our whole development process from the ground up. One of the big decisions was if we should use an Object Oriented Framework and if so, which one. Borland had released the first OOF a couple of years prior to this and I had bought a personal copy of Borland C++ to use at home and had been teaching myself the ins and outs of their Object Windows Library (OWL 1.0). It was a strange time in the development world. I can remember that almost everyone used Borland’s IDE and compiler at work to quickly build and unit test their individual features. Then finally, when we needed a good build for the testing team, we would rebuild with MSVC. Back then Borland’s compiler was much faster, but Microsoft’s produced very optimized code which meant smaller binaries, which meant fewer disks in the package. This was before the days of ubiquitous CDROM drives. Reducing the number of disks was the holy grail within the development department. Management had constantly reminded us that each extra disk in the package added millions to our production costs. The thing that hindered us from adopting OWL 1.0 was the fact that it only worked with the Borland compiler because of a few custom extensions. Microsoft had just introduced MFC the year before at their NT developers conference, but most Windows developers I knew had already learned OWL and figured that the Borland compiler would only get better over time. As we went round and round looking at other OOFs (there were plenty around), postulating that the amount of code saved using an OOF would outweigh any loss from doing peep hole optimizations, Borland did a very dumb thing. They released their latest C++ compiler with OWL 2.0! The new improved OOF was a complete rewrite and broke all backwards compatibility. It didn’t rely on custom extensions in the compiler any more, but every OWL 1.0 developer now had to face completely rewriting their applications to move to the new OOF. It was here that Microsoft did one of the smartest things I can remember. They promised that MFC would never do this! If a developer wrote an application based on MFC 1.0, Microsoft guaranteed that it would recompile without errors on all future versions of MFC. To the best of my knowledge, this is still true today. Developers flocked to Microsoft in droves. Our discussion at Intuit was done. MFC was it, no questions. Later the next year, Microsoft offered me a job to come work on the MFC team and I excitedly accepted.
The message of backwards compatibility is still as important today as it was then. Unlike then, however, now we have
applicationsservices that live on the internet. Just dealing with the limitations of some online services is hard enough and pushes customers to choose carefully. Take Dave Winer for instance. Recently, in a post titled, Best online bank?, he asked people in the blogosphere to recommend a bank with a useful online banking service. He had the following complaints with his current bank’s online banking service.
“I have to use two browsers, one set up to pay bills from my personal account and the other to pay from my business account. I haven’t been able to figure out how to choose an account any other way. I’ve tried repeatedly to convince the bank that I don’t live in Massachusetts, but there are all these replicated copies of my address in their system, and they keep presenting the wrong address as the default.”
Add to this a lack of backwards compatibility and the problems grow rapidly. Here is an actual example from my personal experience. As regular readers will know, my son is a diabetic and last year he got his first insulin pump. These things are fantastic and no type-1 diabetic should be without one. When we chose our pump I specifically wanted one that included software, so I could download the usage logs. I’d been downloading the logs from his blood glucose meter for several years and using this data we have been able to fine tune Micah’s diabetes care.
When Micah’s pump came, the software wouldn’t work on my computer. Calling their tech support, I was told that the software didn’t work on some computers and that they didn’t know why. They encouraged me to use their new web service instead, since they were no longer developing their stand alone application. Having access to 4 computers at home and 5 more at work I was able to determine that their software only worked with USB 1.0 hardware. Only my oldest computer had USB 1.0. I tried informing them to see if they would issue a patch, but they said they would not and that I should try their web service. If that didn’t work, they would fix that. Regretfully, I went ahead and tried their online service. It did work, but not really the way I wanted it too. Had my son’s health not depended on it, I may have given up right there, but I worked with it.
The old software had been able to export the logs to CSV files that I could load into Excel and analyze in nearly infinite ways. The online service doesn’t have that feature. The reports only come in PDF files with security permissions set to prohibit copying text. (I have no idea why) So the next best thing I could do was start generating reports on a monthly basis and saving the resulting PDF files until I had time to figure out how to hack the data out of them. Well, I logged in just recently to generate the next monthly data table only to discover that the web service had been updated and now you were only able to generate data table reports 14 days at a time. Generating a month long data table report was now impossible.
Here we are presented with the single biggest problem with web services. I am forced to upgrade. I did not get to consider whether or not I could choose to stick with the older version. Granted this was just a personal process I had developed for dealing with my situation. Had this been a business process, disrupted by a forced upgrade that broke backward compatibility, imagine how bad that would be. In discussing this post with a colleague at work, he pointed out other potential forced upgrade problems. What if a forced upgrade requires a newer version of your browser or runtime? What if you use two different web services and one forces an upgrade requiring a new browser version that the other web services is not compatible with? And hence the title of my post. Things are only going to get worse before they get better.
Getting the word out.
I think this is something very important that the developer community at large should address and consider carefully. Jeff Jarvis wrote a great post on the obsolete interview, where he explained that the reporters currency is going away.
“Reporters think that they are the ones doing the subjects the favor and, indeed, that used to be the case and to a lesser and lesser extent, for some, it still is”
He quoted an email from Jason Calacanis stating, “Besides I have 10,000 people come to my blog every day, I don’t need wired to talk to the tech industry.” And Dave Winer saying “Like Jason, I don’t have any trouble getting my ideas out on my own.” Well, I am not Jason or Dave and I doubt I have 100 people visiting my blog every day, let alone 10,000. So I am going to try some self promotion to try and get this idea out. Who knows, maybe Corey Doctorow will write another short story.