Choosing Windows Azure over Amazon AWS

Windows Azure & Amazon AWSBack in December I made a decision to migrate Mediassembly from Amazon’s AWS cloud platform to Microsoft’s Windows Azure.  This post explains why.  I’ve been holding this post in draft, waiting for time to add more detail.  But to keep this from getting stale, I’ll just start with the the bottom line, which is this:

Developers!  Developers!  Developers! Developers!

That famous mantra from Steve Balmer is clearly reflected in the combination of Windows Azure platform services and development tools.  If you’re building on a Microsoft stack, Azure offers the most productive solution with a much richer set of cloud platform development tools and infrastructure services.  If you are a business or development team leader, this translates to Productivity, Productivity, Productivity, Productivity!  Since I’m running an Internet startup, productivity (time to market) is a critical consideration.

The key enablers of this productivity are:

  • Good .Net Wrappers around the REST Services
    The .Net Azure wrappers are much richer than the comparable Amazon AWS wrappers.
  • Tight integration/compatibility with advanced .Net features and frameworks, such as LINQ, Ado.Net Data Services, Entity Framework, etc.
    Developers can easily transition from traditional web application development to Azure.
  • The Azure Development Fabric
    In my experience, the biggest challenge with developing for the cloud is dependency on the cloud infrastructure.   The Azure development fabric provides a robust simulation environment that runs on the developer’s local machine.  No internet or cloud connectivity is required, so developers can continue to work wherever they are.   The development fabric includes nearly all Azure services and APIs and allows you to configure and run multiple concurrent web and worker/background role instances – as you would in production.  However, unlike production, you can attach the debugger and step through the code to discover those often extremely hard-t0-find concurrency-related bugs.
  • Robust Diagnostics
    Good diagnostics are critical to identifying and correcting problems.  Azure’s diagnostics allow you to use standard System.Diagnostics.Trace APIs and enables you to collect IIS Logs, Failed Request Logs, Performance Counters, Windows Event Logs, and Application Crash Dumps – and transfer the collected data to your storage account either on-demand or at scheduled intervals.

I hope to have time to discuss some of the advantages and disadvantages of Microsoft’s and Amazon’s equivalent compute, storage, messaging and data infrastructure services.   They each have their strengths and weaknesses, but the those had far less influence on the decision than the points above.