I’ve been building software with .NET since it first appeared and I’ve always been a fan. With the recent surge of cloud offerings I got right behind Microsoft and launched myself into the world of Azure without really considering the options too much. After all, my MSDN license gives me a stack of free usage. It wasn’t until my two most recent contracts, both of which used Amazon Web Services (AWS), that I really started to question whether Azure was enabling me as well as other options might do.
Just Write Code
Probably the most appealing thing about Azure is the ability to just write code and have it hosted for you without having to get all involved with the whole VM management side of things. It lowers the barrier for entry and allows you to get work deployed and available incredibly quickly. That Azure is software, platform and infrastructure as a service is one of its greatest strengths in my opinion – allowing you to grow your architecture only when you need to.
In contrast, AWS wants you to deploy a platform for your work before you can deploy even a “Hello World” service. Not only do you need an EC2 instance but you’ll also need to define some inbound and outbound rules and an IAM role so you don’t need to keep passing credentials around. Not straight forward for the uninitiated.
All One Platform
Another bonus with Azure is that you can do everything you need to with the standard set of tools you already have at your disposal as a .NET engineer. If you make use of Visual Studio Online (http://www.visualstudio.com) then you’ll find that you can fully automate your builds, your deployments into Azure, and your automated testing. Continuous integration and continuous deployment without moving outside of the one tech stack means you’re less likely to find breaking changes made by different companies who have different ideas. Plus, once you’ve bought your MSDN license, it’s all there available for you.
AWS takes a different approach. There’s an excellent API which will do everything you need. In fact Amazon are quite vocal about their tendency to ‘dog food’ their own work. Their console for manually setting things up is pretty intuitive but that’s really the only two things you get. If you want to automate deployment in AWS, you have to get your hands dirty writing code, scripts or using a 3rd party. Chef, Chocolatey, Powershell, Ruby, Team City, Go and countless other 3rd party tools and technologies are all going to become familiar to you. Many of these are open source (hippy cred to them) but also some originating from a Linux background and bringing the complexities that you’d expect.
A Decent Read
So given the great things Microsoft are doing with Azure, why am I finding myself drawn more and more AWS?
The answer might be unexpected – help. Amazon have one of the best, most intuitive online help documents I’ve seen. It’s brilliant. No matter what you want to do in AWS, you’ll find tutorials, explanations or examples. Sure, Microsoft has the MSDN library, but it’s not the easiest place to find what you’re after and suffers from a too rigid format. There are forums and blogs where Azure questions are answered in detail but the platform seems to have made so many huge leaps forward in such a short time that it’s difficult to find the relevant information for the work you’re doing today. The AWS library, on the other hand is mostly up to date. There are a few topics that are a couple of updates behind but they’re still helpful – the platform has become stable enough so that the documentation remains fresh.
To draw a direct comparison, after 3 years of deploying work into Azure, I’m still not completely happy with the architecture of my solutions. I’m making more decisions based on my chosen cloud than I would like (although designing for the cloud is expected) and compromising where I have to use workarounds to get the functionality I need. When I deploy to AWS I’m happy that I’m less likely to find something that just isn’t possible (even though there are lots of blogs with instructions on how to do it as of 18 months ago which are no longer correct).
I predominantly build software. More recently more of what I’ve been building has been microservice based, an architecture that I feel lends itself better to AWS than Azure. But there are some fantastic things about Azure. The big data features are excellent – I would never try to reproduce some of the facilities already available in Azure in another environment. What would be the point? Also, like I said earlier, with Azure the simple things are very simple to do. You can build things quickly and get things moving with far less planning. But if you’re building an enterprise level platform yourself, then you’ve probably already done all the planning and designing you need to. You’re aware of where you’re most likely heading and have the skills to set up a few routing rules.
The next piece of work I’m looking at will be to move a system I’ve been building in Azure for the last couple of years into AWS. I reckon I’ll need about a day.