As I explained in the previous post The Purpose-Driven Cloud: Introduction, this is the first in a series of blog posts on the different cloud platform offerings available today and how they focus on different dimensions to serve different purposes. This post discusses --
The Usability-Driven Cloud
Usability-driven clouds are a concept similar to the idea of programming language generations. Lower-level generations give the developer complete access to the computing infrastructure, but are extremely complex as the developer is required to build every aspect of the application from scratch. Higher-level generations are much easier and intuitive to use by humans, and come built-in with many common tasks and functions. But this usability comes with a price: the developer cannot access the underlying resources, or "plumbing", at a fine-grained level.
In programming languages, 1GL (1st generation language) would be machine language, 2GL is Assembler, 3GL are high-level languages such as C and Java, 4GL are mostly niche programming languages designed for specific business purposes (such as scientific analysis) and 5GL are visual programming tools (think "drag & drop"), which in their original vision were intended to allow non-programmers create software applications. For the most part, 4GL and 5GL never became mainstream (although the corpses of many attempts lay on the wayside of Silicon Valley roads).
We're seeing similar "usability generations" evolve in cloud computing. However, they come in two main flavors: deployment usability and programming usability.
Deployment Usability -- Platforms of higher deployment usability generations focus on easing and abstracting the process of deploying and configuring the application, not necessarily on writing the code for it. In modern development, this is as big an aspect of application development, if not bigger, than actual programming. See James Lindenbaum's Why Instant Deployment Matters for more on this topic on the Heroku blog.
At the moment, all of the IaaS players can be generally categorized as lower generation deployment platforms. This includes Amazon EC2, Rackspace, Terremark, GoGrid, etc.
PaaS offerings such as Heroku are a higher level generation deployment platform and eliminate the vast majority of infrastructure setup and configuration required to get an app running (hence James's use of the term "instant deployment").
I further discuss Heroku's role as an application platform in Ruby Developers: The Cloud Generation.
Programming Usability -- This dimension is similar to classic programming language generations. So while Heroku is high-level in terms of deployment, it is relatively low level (in modern day terminology) in terms of programming. You have to develop your apps in straight Ruby (which in classic terms would be a 3GL). This is the same generation programming language you would use on an AWS or Rackspace (on either of which you can use pretty much any 3GL language - e.g., Java and C++ - but more on that later).
But although 4GL and 5GL languages failed to become mainstream, we are seeing a revival of them in the cloud. A few examples of such platforms, which generally enable non-programmers to develop apps, include Intuit's Quickbase, WorkXpress (who in a conversation with me explicitly called themselves 5GL PaaS) and even Salesforce.com.
Note that I am not referring here to the Salesforce.com CRM SaaS application, which is a packaged app; nor am I referring to the company Salesforce.com Inc.'s PaaS offering Force.com (which is a high-level deployment platform but low-level programming platform). I am referring to the fact that a business user can quite easily create a custom app using Salesforce.com by creating new objects, fields, tabs, workflows, etc. without any programming skills.
Another thing to keep in mind is that high-level programming clouds will invariably be high-level deployment clouds, as they appeal to non-programmers.
Finally, it's important to emphasize that a higher generation platform in either usability dimension -- programming or deployment -- is not necessarily better or worse than a lower generation platform. It depends on what you are trying to achieve and the skills and resources available.
If the purpose is to develop a unique app that requires a high degree of optimization, a lower generation platform is better. If the task at hand involves building an app that uses typical services and functionality, and a general-purpose infrastructure will serve it well, then a high-generation platform is in order. It's a trade-off.
In the next installment in the series I'll be discussing The Framework-Specific Cloud.