PDX Cloud – A Question Posed.

I attended the PDX Cloud meeting to present, but more to ask a question. Here’s how I posed that question (slide deck at the bottom of this blog entry). I frame the scenario of the distributed development world of cloud computing, dive into the vertical world of enterprise dev and then throw down the big question…

This is a situational report on the current state, of the somewhat bi-polar condition that exists in software development right now. This is reflective of my train of thought around a number of aspects of the industry and what questions have come up time and time again while working with fellow coders and technologists.

The first segment of the industry that we often here about. it’s the hip and cool thing to do, as well as the obvious path into the future right now. It’s not particularly the idea that this segment, of building things as distributed systems is new, it’s just that it has become more important and more capable now than it ever has in the past.

A lot of this has to do with the advent of key technologies around virtualization, cloud computing and large scale object storage and network capabilities. We can spool up enough compute to rival a super computer, sitting alone at home, to storing more data than we can imagine with zero theoretical limit to that storage. All of this networked together behind load balancers, switches and programmable devices that a mere half dozen years ago would have taken more resources than any reasonably sized small business could even afford. All of these capabilities are literally at our fingertips now.

I’ve spooled up a 1000 EC2 instances for a demo before. That was 2 years ago even! Now I as well as many host applications and databases entirely in memory. SSDs as a cloud back end option at AWS and other locations provide another avenue that brings these devices into a world where they can be utilized immediately. Blink an eye, you’ll have the resources.

The storage realm, with costs falling through the floor with Glacier to operationally effective options like S3, EBS, Table Store, Object storage and others make our junk trunks limitless. The option to throw away any data at all seems less and less appealing.

Many developers, but definitely not all, have seized opportunities to alter the way they work and what they’re able to accomplish by using these new capabilities. From the now common asynchronous approach to development, shifting languages and stack to the invention of new paradigms around development and operations into a devop practice, leadership has stepped up to this changing game.

Vertical systems have in the past twenty years held the main position in the enterprise as the go to architectures. Client server or three tier or whatever one may call it. With a synchronous mindset the vertical implementation of systems produced several benefits.

We gained the ability through diligent documentation and widget style architecture to build CRUD (Create Read Update Delete) and LOB (Line of Business) applications at a rapid rate. With a simplified approach like this businesses spent a lot of time focusing on their business, not particularly on efficient utilization of resources, processing or reliability. But who could blame them, with Moore’s Law it seemed the only real ways to scale vertical systems were by writing faster code or buying a bigger computer, for a while that seemed to work fine.

Most of the, what I’ll call “vertical revolution” happened with the GSD mindset. GSD mean Get Shit Done. Again, another idea that sort of worked pretty well as long as Moore’s Law was in effect. But things have started to change, with Moore’s Law faltering.

Management practices also became a complete TLA soup during this time. The last 20 years continued the standard “let’s cookie cut people into widget producers”. It never works as well as it could or should, but the industry – and really all humanity keeps trying – to do this anyway. This is fine, we’ve got to try. The vertical stack however brought this to the extreme forefront as the industry tried to shoe horn all sorts of development into singular types of management practices.

Overall though as long as things stayed simple, we stuck to our KISS principles as software craftspeoples the architecture stays straight forward enough and the stack stays easy. However there are voluminous limitations. There are massive management and project issues with all of this.

Many parts of the industry are screaming for the future. As we have it, some agree on certain aspects of what the future should be and others agree on other aspects of the future.

We have some bright spots amid the confusion that is making the distributed world much easier, and the technology continues to do this.

Some want convergence. Which may work well in some ways, but in others it is converging into a clustered mess. As with the roadways of the 50s and the effervescent ideas of 50s planners, we’re finding the idea of the superhighways aren’t working either. The same is starting to appear for some types of device convergence. So where does this really leave us? Where are our weak spots as an industry? It seems like right now we’re stuck in that traffic jam getting to the next step.

Things are looking a little like this freakingnews.com MAV. Multifunction and not functional at all.

So to gain clarity on direction I pose the question…

  • How do we change the later world to work as well as the new world of distributed systems?

…and a few follow ups.

  • What do developers in the industry need to make true distributed computing advances while drawing on the known elements of the vertical computing realm?
  • What do we need as developers and leaders to more reliably advance the industry without setbacks?
  • What do we need as leaders to move the industry forward to the next steps, stages and developments in converging technology?
  • Are these even valid questions? What would you propose to ask?

TeamCity Setup for Junction Build, Plus Implosions

I wanted to get a continuous delivery process setup for Junction that could help everybody involved get a clear and quick status of the project. The easiest way to do this for a Windows 8 .NET Project is to setup a Team City CI Server.

This article covers what I went through to get the server up and running. In the next part I’ll cover troubleshooting that I went through to get a Visual Studio 2012 Window 8 C# Project building correctly on the server.

Finally, the last part is a small surprise, but suffice it to say I’ll be getting a completely different language and tech stack up and running which you’ll likely not guess (or maybe you will).  ;)

Setting up Team City 8.0.3 (build 27540) using Tier 3 and a Windows 2008 Server, or not…

Setting up a Windows 2008 Server with Tier 3 is super easy, as you’d expect with a cloud service provider. Log into your account, click on “Create Server” to bring up the create server dialog.

Create a New Server screen. Click for full size image.

Create a New Server screen. Click for full size image.

Click image for full size.

Click image for full size.

Next enter the information and select a Standard server.

Select how much horsepower you want the build server to have. Click for a full size image.

Select how much horsepower you want the build server to have. Click for a full size image.

Click next and then make the last few selections.

Server Tasks. No need to change the defaults here. Click for full size image.

Server Tasks. No need to change the defaults here. Click for full size image.

Click Create Server and then sit tight for a few while the server is created. Once the server is created navigate back to the server information screen (I’ll leave you to get back to this screen).

Server information screen. Click for full size image.

Server information screen. Click for full size image.

On this screen click on the add public ip button to bring up the IP & port selection screen.

Adding a public IP Address. Click for full size image.

Adding a public IP Address. Click for full size image.

On the public IP screen select the HTTP (80) and RDP (3389) ports to open up. Click the add ip address button and again sit tight for a few. Once the server has the IP set then we can log in using RDP (Remote Desktop or on Mac try CoRD).

Next install the .NET 4.5 SDK. For the latest, it’s best to install the latest windows SDK that is available for Windows Server 2008 also.

Team City install

In the instructions below, you’ll notice everything is now Windows Server 2012. That’s because after installing everything on a Windows 2008 Server I stumbled on a very important fact. I’m working to put a build together for a Windows 8 Store Application, which requires a Windows Server 2012 (or Windows 8) operating system to build on.

I got a sudden flashback to OS-X and iOS land there for a second, but leapt in and wiped out the image I’d just built. Since I’d built it in a cloud environment, it merely meant spending a few seconds to get a new OS instance built up. So after a few clicks, just like the instructions above for building a Windows 2008 Server I had a Windows 2012 Server instead. There are, however a few steps to follow once you have a good Windows Server 2012 install. Once you have a good Windows 2012 Server up and running it should have a public IP, some memory, compute and storage capabilities. In the image below I didn’t give it a huge amount of horsepower for a few reasons.

  1. It’s just doing builds, not computing the singularity.
  2. If it can build on this, I’m doing good keeping the project clean.
  3. I want to keep the build fast, keeping it on a weak machine and still having it fast also reinforces that I have a clean project.
  4. I don’t need a successful build every second, the server gets used only during pushes by devs. If we get up to dozens of devs hacking on this, I can easily spool up and get a faster, more hard core heavier horsepower option up and running.
Windows Server 2012 w/ Public IP, 1 Proc, 1 GB RAM and 40 GB Storage. Click for full size image.

Windows Server 2012 w/ Public IP, 1 Proc, 1 GB RAM and 40 GB Storage. Click for full size image.

When Windows Server 2012 boots up the first thing that will launch is the Server Manager. We don’t really need that yet, so just ignore it, close it or move it to the side.

Windows Server 2012 Server Manager. Click for full size image.

Windows Server 2012 Server Manager. Click for full size image.

The first thing we will need is Internet Explorer, so we can download Chrome or Firefox. Internet Explorer is wired up with high security so the first thing it will do is explode with messages about sites not being in the right zone. It is, hugely annoying. So add each site to the zone and head out to the web to pick up Chrome or Firefox.

Internet Explorer security configuration explosions. Click for full size.

Internet Explorer security configuration explosions. Click for full size.

In the following screenshots I didn’t actually download Chrome or Firefox first, but instead downloaded TeamCity. I advise getting Chrome or Firefox FIRST and then downloading TeamCity with one of those browsers. Life is dramatically simpler that way.

Team City - add another site to the site list for security clearance. Click for full size.

Team City – add another site to the site list for security clearance. Click for full size.

Team City downloading. Click for full size image.

Team City downloading. Click for full size image.

I know one can turn off the security settings in IE, but it’s just dramatically easier to go and use one of the other browsers. Just trust me on this one, if you want to turn off the security features in IE, be my guest, I’d however recommend just getting a different browser to work with.

Once you’ve got your browser of choice and Team City downloaded, run the installer executable.

Installer Downloaded w/ Security Scan in IE. Click for full size image.

Installer Downloaded w/ Security Scan in IE. Click for full size image.

Executable downloaded.

Executable downloaded.

Installing Team City.

Installing Team City.

Leave the components checked unless you have some specific goal for your server and build agents.

Server & Build Agents Options.

Server & Build Agents Options.

In one of the subsequent dialogs there is the option to run the server under the SYSTEM account or under a user account. Since this is a single purpose machine and I don’t really want to manage Windows users, I’m opting for the SYSTEM account.

SYSTEM Account.

SYSTEM Account.

After everything is installed navigate in a browser to http://localhost. This will automatically direct you to the TeamCity First Start page.

TeamCity First Start Page. Click for full size image.

TeamCity First Start Page. Click for full size image.

At this point you’ll be prompted to ok the EULA.

Signing one of those famous EULAs. Click for full size image.

Signing one of those famous EULAs. Click for full size image.

Then you’ll be prompted to create the first Administrator user.

Creating the administrator user.

Creating the administrator user.

From there you’ll be sent to the TeamCity interface, ready to create a new build project.

TeamCity Tools is marked by a giant pink arrow, Great ways to integrate TeamCity into your workflow. Click for full size clarity!

TeamCity Tools is marked by a giant pink arrow, Great ways to integrate TeamCity into your workflow. Click for full size clarity!

Click on Projects at the top left of the screen and you’ll navigate to the Create a Project dialog. Click on the Create a Project link to start the process.

Creating a project. Click for full size image.

Creating a project. Click for full size image.

Once you’ve entered the name, project ID and description click on Create. This will bring you to the next step, and to the general tab of the project. On this screen click on Create build configuration.

Project Setup. Click for full size image.

Project Setup. Click for full size image.

Now create a name, enter the config id, and click the VCS Settings >> button to move on to the next step of the process.

Build Configuration. Click for full size image.

Build Configuration. Click for full size image.

In VCS Settings leave everything as default and click on the Add Build Step >> button.

Click for full size image.

Click for full size image.

Now select the Visual Studio (sln) option from the Runner type and give the dialog a moment to render the options below that. They’ll appear and then enter the Step Name, Visual Studio type needs to be set to Microsoft Visual Studio 2012 and then click on Save.

Setting up the Build Type. Click for full size image.

Setting up the Build Type. Click for full size image.

From there you’ll be navigated back to the Project Build Steps screen. On that page you’ll see the build step listed. We’ll have one more we’ll need to add in a moment, but for now click on Version Control Settings again.

Build Step displaced, click on Version Control Settings Again. Click for full size image.

Build Step displaced, click on Version Control Settings Again. Click for full size image.

On this page click on the Create an attach a new VCS root.

Attach a new VCS root. Click for full size image.

Attach a new VCS root. Click for full size image.

Now select Git from the dialog and wait for the page to populate the form settings and options.

VCS Root Options. Click for full size image.

VCS Root Options. Click for full size image.

Now enter the correct Fetch URL to the Git repo (which on github looks something like https://github.com/username/gitrepo.git and is available to copy and paste from the right hand side of the repo page on github), enter the appropriate default branch to build and an appropriate VCS root name and VCS root ID. Once that is done click on the Test connection button.

Test Connection. Click for full size image.

Test Connection. Click for full size image.

Click save and now navigate back to the Build Triggers screen by click on the #5 option on the right hand side of the page. You’ll be navigated back to the magical Version Control Settings screen where you now have a few more options available and a VCS root available.

Version Control Settings. Click for full size.

Version Control Settings. Click for full size.

Now an Add New Build Trigger dialog appears to add the trigger. I set it to trigger a new build at each new check-in. The TeamCity server checks frequently to see if a commit has been made and will initiate a build. Another way however to setup this is to not add a trigger and instead go to Github (if you’re using Github) and setup a push trigger from Github itself. That way every commit will initiate a build instead of the TeamCity Server, which knows nothing about the actual status of the repo until it checks, giving a more timely build process to your commits & dev workflow.

Build Trigger. Click for full size image.

Build Trigger. Click for full size image.

The added build trigger. Click for full size image.

The added build trigger. Click for full size image.

Now, one more build step. Add the NuGet Installer (which is included with the TeamCity Build Server, check the docs for TeamCity 8.x for NuGet Installer and NuGet for more information). For our purposes once you’ve insured that the NuGet Installer you need is available add a new build step. Select from the Runner Type NuGet Installer and the respective form will populate below.

NuGet Installer. Click for full size image.

NuGet Installer. Click for full size image.

Once the step is added, click on Reorder Build Steps under the Build Steps list and a dialog, specifically for reordering the build steps will appear.

Reordered Build Steps.

Reordered Build Steps. Click for full size image.

Reorder the steps so that Getting NuGetty (the name I’ve give to it, click for a full size image) will be run first.

The NuGet Settings.  Under the NuGet.exe is where to add the Nuget executable if it isn't already installed and available. Click the NuGet settings for options. Click for full size image.

The NuGet Settings. Under the NuGet.exe is where to add the Nuget executable if it isn’t already installed and available. Click the NuGet settings for options. Click for full size image.

At this time you now have all of the steps you actually need. You’ll be able to go back to the main projects screen and built the project.

When you do this however, if you’ve actually set this up to build a Windows 8 Store Project you’ll get a build failure. Which is a total bummer, but that makes for a great follow up blog which I’ll have posted real soon! For now, these are great steps for getting a modern ASP.NET, Java, Maven and a whole host of other builds up and running. For the solution around the Windows 8 Store Project keep reading (subscribe on the top right hand side to the RSS!) and I’ll have that posted up real soon.

Until next entry, Cheers!  > Adron

Using Bosh to Bootstrap Cloud Foundry via Stark & Wayne Consulting

I finally sat down and really started to take a stab at Cloud Foundry Bosh. Here’s the quick lowdown on installing the necessary bits and getting an initial environment built. Big thanks out to Dr Nic @drnic, Luke Bakken & Brain McClain @brianmmcclain for initial pointers to where the good content is. With their guidance and help I’ve put together this how-to. Enjoy…  boshing.

Prerequisites

Step: Get an instance/machine up and running.

To make sure I had a totally clean starting point I started out with an AWS EC2 Instance to work from. I chose a micro instance loaded with Ubuntu. You can use your local workstation if you want to or whatever, it really doesn’t matter. The one catch, of course is you’ll have to have a supported *nix based operating system.

Step: Get things updated for Ubuntu.

sudo apt-get update

Step: Get cURL to make life easy.

sudo apt-get install curl

Step: Get Ruby, in a proper way.

\curl -L https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
rvm autolibs enable
rvm requirements

Enabling autolibs sets up so that rvm will install all the requirements with the ‘rvm requirements’ command. It used to just show you what you needed, then you’d have to go through and install them. This requirements phase includes some specifics, such as git, gcc, sqlite, and other tools needed to build, execute and work with Ruby via rvm. Really helpful things overall, which will come in handy later when using this instance for whatever purposes.

Finish up the Ruby install and set it as our default ruby to use.

rvm install 1.9.3
rvm use 1.9.3 --default
rvm rubygems current

Step: Get bosh-bootstrap.

bosh-bootstrap is the easiest way to get started with a sample bosh deployment. For more information check out Dr Nic’s Stark and Wayne repo on Github. (also check out the Cloud Foundry Bosh repo.)

gem install bosh-bootstrap
gem update --system

Git was installed a little earlier in the process, so now set the default user name and email so that when we use bosh it will know what to use for cloning repositories it uses.

git config --global user.name "Adron Hall"
git config --global user.email plzdont@spamme.bro

Step: Launch a bosh deploy with the bootstrap.

bosh-bootstrap deploy

You’ll receive a prompt, and here’s what to hit to get a good first deploy.

Stage 1: I select AWS, simply as I’ve no OpenStack environment. One day maybe I can try out the other option. Until then I went with the tried and true AWS. Here you’ll need to enter your access & secret key from the AWS security settings for your AWS account.

For the region, I selected #7, which is west 2. That translates to the data center in Oregon. Why did I select Oregon? Because I live in Portland and that data center is about 50 miles away. Otherwise it doesn’t matter which region you select, any region can spool up almost any type of bosh environment.

Stage 2: In this stage, select default by hitting enter. This will choose the default bosh settings. The default uses a medium instance to spool up a good default Cloud Foundry environment. It also sets up a security group specifically for Cloud Foundry.

Stage 3: At this point you’ll be prompted to select what to do, choose to create an inception virtual machine. After a while, sometimes a few minutes, sometimes an hour or two – depending on internal and external connections – you should receive the “Stage 6: Setup bosh” results.

Stage 6: Setup bosh

setup bosh user
uploading /tmp/remote_script_setup_bosh_user to Inception VM
Initially targeting micro-bosh…
Target set to `microbosh-aws-us-west-2′
Creating initial user adron…
Logged in as `admin’
User `adron’ has been created
Login as adron…
Logged in as `adron’
Successfully setup bosh user
cleanup permissions
uploading /tmp/remote_script_cleanup_permissions to Inception VM
Successfully cleanup permissions
Locally targeting and login to new BOSH…
bosh -u adron -p cheesewhiz target 54.214.0.15
Target set to `microbosh-aws-us-west-2′
bosh login adron cheesewhiz
Logged in as `adron’
Confirming: You are now targeting and logged in to your BOSH

ubuntu@ip-yz-xyz-xx-yy:~$

If you look in your AWS Console you should also see a box with a key pair named “inception” and one that is under the “microbosh-aws-us-west-2″ name. The inception instance is a m1.small while the microbosh instance is an m1.medium.

That should get you going with bosh. In my next entry around bosh I’ll dive into some of Dr Nic & Brian McClain’s work before diving into what exactly Bosh actually is. As one may expect, from Stark & Wayne we can expect some pretty cool stuff, so keep an eye over there on Stark & Wayne.

Ways to Interact Asynchronously with C#

NOTE: All of this code is available at my Github Project “Remembering” (https://github.com/Adron/Remembering). Feel free to fork it, share it, or send me corrections or pull requests.

While working on the Thor Project there have been numerous situations where I need to fire off an asynchronous callback in C# while maintaining good responsiveness in the actual user interface. Benjamin (@bvanderveen) has been using Reactive Extensions with subscriptions to do this in the Objective-C code for the Cocoa based OS-X Thor user interface. See my previous blog entry for an example of what he’s doing.

For a good example of asynchronous calls against Cloud Foundry I setup the following project using the Iron Foundry Project VCAP Client Library. The first thing I setup was a static class with a few constants to use across the examples for the URI, username and password for the Cloud Foundry Account.

public static class YourSecrets
{
    public const string Username = "youremail@someplace.com";
    public const string Password = "AnAwesom3HardPassw0rd!";
    public const string Uri = "http://api.yourpaas.com";
}

Next step was to setup the delegate and method I’d use for calling out to the Cloud Foundry environment and retrieving data in parallel to my active console or user interface. That code snippet looked like this. I also added a private variable _finished for use in tracking when the request was completed in the begin and end invoke example below.

private bool _finished;

IEnumerable TheMethodToConnectThatWillTakeLongTime(string uri)
{
    var client = new VcapClient(uri);
    client.Login(TheSecretBits.YourSecrets.Username, TheSecretBits.YourSecrets.Password);

    _finished = false;

    return client.GetApplications();
}

delegate IEnumerable MethodDelegate(string uri);

Once I had that setup I was ready to create my baseline method that would make a synchronous call. A synchronous call is one that makes the call as if it just called the method directly. There’s no real reason to create one like I’ve done here, but I was just using it to provide a basic example of calling the delegate.

public void SynchronousCall()
{
    var starting = DateTime.Now.ToLongTimeString();

    var delegateMethod = new MethodDelegate(TheMethodToConnectThatWillTakeLongTime);
    var returnedBits = delegateMethod(TheSecretBits.YourSecrets.Uri);

    var ending = DateTime.Now.ToLongTimeString();

    Console.WriteLine(string.Format("The delegate call returned \n\n{0}\n\nstarting at {1} and

ending at {2} which takes a while of waiting.",
        returnedBits, starting, ending));

    _finished = false;
}

That gets us a baseline. If you run a synchronous call against anything with a console application or a windows app, WPF or whatever it will lock up the calling thread while it is waiting for a response. In any type of user interface that is unacceptable. One of the best options is to fire of an asynchronous callback. The way I did this, which is an ideal way to make calls with the Iron Foundry Client Library against a Cloud Foundry Environment, is shown below.

This is my asynchronous call.

public void DemoCall()
{
    Console.WriteLine("Callback:");
    var delegateMethod = new MethodDelegate(TheMethodToConnectThatWillTakeLongTime);

    var callbackDelegate = new AsyncCallback(MyAsyncCallback);

    Console.WriteLine(" starting...{0}", DateTime.Now.ToLongTimeString());
    delegateMethod.BeginInvoke(TheSecretBits.YourSecrets.Uri, callbackDelegate, delegateMethod);
    Console.WriteLine(" ending...{0}", DateTime.Now.ToLongTimeString());
}

Now the simple callback.

public void MyAsyncCallback(IAsyncResult ar)
{
    Console.WriteLine("Things happening, async state calling.");

    var delegateMethod = (MethodDelegate)ar.AsyncState;

    Console.WriteLine(" called...{0}", DateTime.Now.ToLongTimeString());

    var returnedBits = delegateMethod.EndInvoke(ar);

    Console.WriteLine(" end invoked...{0}", DateTime.Now.ToLongTimeString());

    foreach (Application application in returnedBits)
    {
        Console.WriteLine("Application {0} is in {1} state...",
            application.Name, application.State);
        Console.WriteLine(" with {0} running instances, {1} memory per instance, {2} disk allocated...",
            application.RunningInstances, application.Resources.Memory, application.Resources.Disk);
        Console.Write(" hosted at ");
        foreach (var uri in application.Uris)
        {
            Console.Write(uri + " ");
        }
        Console.WriteLine(".");
    }
}

That’ll get the call running on a parallel thread and when it is wrapped up it returns the data.

The User Interface Interaction Issue

This is all fine and dandy for the command console. But if you want to give control back to the UI thread in a UI application and make sure that the background thread can actually update a control when fired off, do the same thing as I’ve discussed here except set the control up to invoke the dispatcher, so that the “threads don’t cross” when trying to return information to a control that needs updated. In order to do this take the control that needs updated and set the Dispatcher Invoke method as shown below.

private void Write(string updateText)
{
    UpdatingTextBlock.Dispatcher.Invoke(
    System.Windows.Threading.DispatcherPriority.Normal,
        new Action(delegate
    {
        UpdatingTextBlock.Text += updateText;
    }
    ));
}

For more on the Iron Foundry Project and the library I’ve used here, check out the Iron Foundry Blog & Site. For more information on Thor and to follow or get involved check out the Thor Project Site (Hosted with Cloud Foundry at Tier 3!).

All of this code is available in my Github Project “Remembering” (https://github.com/Adron/Remembering). Feel free to fork it, share it, or send me corrections or pull requests.

East & West Coast PaaS, Being Polyglot, Reply to Dan Turkenkopf

Dan (he’s a good guy, check him out on Twitter @dturkenk), your “East Coast vs West Coast PaaS Psychology. And Why It Matters.” is great write up. Loved it! I’ve got to say, I’m pretty much in agreement with almost every single thing you’ve written here. Matter of fact I’m staunchly in agreement with a lot of it. There’s a few other abstractions I’d like to add, that makes the reality of east coast and west coast PaaS what it is, and why some of these things are like this.

You write,

“While the West Coast conception of PaaS is an appealing vision, (and may well be the answer for many smaller companies and start ups)…”

which I agree with whole heartedly. The fast, agile, and lean companies of tomorrow need this type of technology today. They can’t survive trying to throw together traditional environments. They need PaaS like people need food and water. However you also write on the end of that statement,

“it doesn’t really mesh with today’s enterprise reality.”

which I know is true, sometimes. There are however many enterprises out there that do indeed want to and are starting to move over completely. These enterprises see the value add and are not waiting around. They’re not going halfway with a hybrid solution, they’re moving full bore and realizing economies of scale that internal IT shops will not and cannot realize.

This type of enterprise, is where a lot of the west coast and east coast mentality is realized. There is a risk aversion on the east coast, rightfully so with such things as financial institutions and Government being a dominent presence on the east coast. On the west coast though, the enterprises operate under a very different cultural perspective, they attempt to realize the advantages – competitive and disruptive that they are – of startups and small business. It’s as much a competitive survival for the west coast enterprise as it is for the startups and small business. Thus, we get some of the differentiators not just in technology, but in the enterprises themselves. This is the core of this psychological difference, not something that was born from a PaaS psychology, but for the ore business itself. Being that PaaS technology and its origins are from the west coast, it becomes obvious why most are focused on public or privately accessible public infrastructure.

Overall, the culture expands into all those sectors in the east and west, and starts to stand out when we look at different approaches to doing business and competing. Regardless of these minor differences and the associated differences in doing business, we both agree on one thing regardless of which coast we’re on.

The applications and application developers is where the value is for enterprises, mid-size, and small businesses, and startups.

Without doubt, PaaS technology is focused on that core value. Enabling developers to build applications in an easier, faster, scalable and more reliable way. So far, all the platforms are doing a damn good job helping us developers do just that.