Wednesday, October 01, 2008

Are you Stupid if you use "Cloud" based Applications or Services?

There has been a lot of recent commentary around Richard Stallman's recent comments about cloud computing, as well as Larry Ellison's comments at Oracle OpenWorld, also ridiculing "cloud computing". With those comments, I started to think about it at a little deeper level then before, and figured it was a good topic to cover for enterprise architecture.

As the buzz around software-as-as-service (SaaS), cloud computing, hosted applications, platform-as-a-service (PaaS), call it what you want, has grown, its become clear that enterprises need to understand these offerings, and determine whether it is right for them. With that, and the fact that some contend this is stupid, let's examine whether it really is or not. Regardless of how you might personally feel about Richard Stallman or Larry Ellison, there is some truth in what they both say.

As anyone who has ever read my blog, or known me personally, should know, I am a big proponent of openness. Openness in the case of open standards and open source. If we look at cloud computing through the lens of openness I can see cases where it can be stupid to depend on it, and cases where it can be very smart indeed. Let's start by looking at the so-called "stupid" cases.

In general, Richard Stallman talked about cloud computing being a trap. In a sense, he is correct. In the case where you are using a hosted application in the "cloud", and your data may be held in a proprietary format, with very high barriers for getting your data out. This is just like buying into the proprietary ERP vendor solutions that have proliferated in IT shops around the globe. Even when you have those in-house, they have your data in a proprietary format, and they make it as difficult as possible to get it out. This makes the barrier to exit very high, which leads to the trap that you can't switch to another vendors solution without unbearable conversion costs! So, the trap isn't really the fact that its a cloud based solution, but that they have your data in a proprietary format, and the switching costs, once they have your data, is too high for most companies to absorb. By definition, this flies in the face of openness and not being locked into any one vendor. Something a lot of IT shops work hard to avoid, but fall right into with both in-house and cloud based software. So, what about cloud based platforms?

In the case of cloud based platforms there is a trap also. The trap is that you use a proprietary platform, with API's and features only available from the cloud provider. This is another area that enterprises should avoid. Instead of trapping you with proprietary data formats, they trap you with proprietary application programming interfaces and techniques, rendering your application non-portable in every sense. You can't lift your application up, and drop it into another cloud from another vendor, and you can't bring it in-house, without re-writing it! Ouch!!! For many years, I battled against using proprietary API's in in-house developed applications, only to be told that we would never switch from x to y! Of course, in all those cases, just the opposite ended up happening. In many cases, changing platforms saved the company millions upon millions of dollars. In fact, this strategy saved my last employer over 26 million dollars in the nine years I was employed there (and this figure has continued to grow over time). Don't fall into the trap with proprietary development API's and features. You will regret it in the long-term. So, that covers cloud based applications, and cloud based application development platforms, what else is there?

Well, there is one more category of cloud based computing. Cloud based infrastructure, where you are provided with a virtualized hardware environment (servers, network and storage), and you can choose to put your choice of operating system, middle-ware and databases in place. This infrastructure can be used for both primary hosting of whatever you want to put on it (whether in-house developed or not), and can be used for dynamic expansion of infrastructure to handle peak loads, now being called "cloud bursting". So, what is this category of cloud computing - smart or stupid?

If the infrastructure allows you to choose the operating system, middle-ware and databases, and you can successfully run you application outside of the cloud, then I would say that this is smart indeed. You have all the control you need to keep your application portable, without the infrastructure investment and on-going management costs. Not to mention the ability to dynamically grow the environment.

In summary, look for cloud based software solutions that are based on open standards (open source as well), with open formats for storing your data, and the ability to easily extract your data through an open interface (perferrably with the ability to do high-volume bulk transfer). If you are looking at platforms for development, only accept those platforms that don't depend on proprietary API's, and keep a running copy on an internal environment somewhere (doesn't have to be large and expensive), to verify that you can run the same application deployed outside of the vendors cloud. If you are just looking for infrastructure, stay with vendors that allow you to choose the operating system, middle-ware and databases. That will keep what you do there portable, whether that's a primary environment or you are using it to do "cloud bursting".

Like most things in life, you can do stupid things and smart things with technology, just try to understand any hidden traps there might be, and keep your solutions open!