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.
Stay tuned.
Recent Comments