A recent comment from the online SaaS class has fired a not-so-pleasant memory. And a rant.
It wasn’t a pleasant summer(of 2006) morning in Hyderabad,India. The sun was up early and by 9:00AM it was 45C, the drive to work must have sucked for all of us in the engineering team of the CRM product at ADP India. Well, add to the effect, bad news was waiting. Microsoft has released a security update for the .NET platform and it broke all our code. XML structures weren’t right, the UI is all messed up, most data wasn’t reaching the UI. For our customers in the west, this happened during business hours and that was a big blow. They kept calling our support and it took our engineering team in the US some time to figure out what happened. Microsoft had been really sweet in responding quickly and fixing the update that apparently didn’t cover the test case for certain scenarios (for NDA reasons, I’m not able to go into fine detail here. sorry.). But for the customers, quick wasn’t quick enough.
As a just out of college grad, naturally in love with the third generation(hell yeah!) languages and tools, this was too much for me to handle. The hard fact of life: When you’re greedy for productivity, you end up creating some dependance on the vendors who provided the cozy platform you worked on, that promises “fast and reliable app development”. In the above scenario, we could fix our SaaS offerings rather quickly by undoing the update. With the others who hosted their own copy, things were a bit tougher. Ofcourse, I’m not disagreeing that there were things that could have been done in that scenario to avoid it. But isn’t it so much better not to have the dependance in the first place? Or rather, what’s the cost of using a third party platform/language/tool for increasing productivity?
Let’s say you’re using node.js – It is built on Google’s Javascript runtime which shows 443 open issues at the time of writing this post. I know this number is a blatant generalization but it does say something about the app you wrote being dependent on stuff you have no control on. Another aspect of software engineering that has the same outcomes is code reuse. In my experience, I’ve seen people build proprietary libraries for handling common tasks of a web application (like error handling) rather than use stuff like Enterprise Application Blocks. Obviously, there are reasons why the NIH syndrome has its place in the industry today.
In the age of Saas, shit happens real time. And guess what, billing happens real time as well. This means you’re losing money every minute your app is down and you most certainly don’t want it happening for reasons you can’t fix immediately, or even worse, for the bugs that you can’t fix. What’s a good solution for this? honestly, I’m yet to find out (your comments will be appreciated) but I’ve heard of weird stories from friends,of products that have multiple implementations for a fall back option(yes I’m taking of the same app being built in,say, Java and .NET). Most of the time, its not as bad as the case I was involved in – by being alert and informed and with some preventive measure, disasters can be avoided. So that brings us to this question:
how much dependance on third party platforms/languages/tools would you allow in building your app? what factors would you consider for making decisions such as build vs. buy/borrow the technology needed for your app? how much dependance would you allow in the tools that keep your app live?