“Let’s design this to be agnostic in case we want to switch cloud vendors later.” – Person focused on the wrong things

In a recent post I said, ‘Some users will cry “lock-in” and avoid Aurora. Those users are missing the point of AWS.’ Since then I’ve had a number of questions about what I meant by this so I thought I’d write a quick post on what I believe to be a widespread yet short-sighted belief: that tightly coupling with a cloud vendor is a Really Bad Idea. And yes, before you ask, I’m mainly focused on AWS, but the point applies more broadly.

At what point do you cross the line from “agnostic” to “locked in”? Using EC2 with ELB? Autoscaling and S3? IAM and the new Key Management Service? By choosing to run a service in the cloud, you naturally have to do at least some coupling with the chosen platform. Using EC2 for a web service? Unless you’re running on a single instance exposed to the world, you’re probably going to need a load balancer. So then you’ll either design a solution yourself, a reasonably difficult choice fraught with complexity, or you’ll take the easy route and choose to use an ELB. But wait! Now you’re locked in!

But EC2 and ELB are probably not the line people are worried about. You could, after all, quite easily move your application to another vendor and use its load balancer product. The concern is likely about the more proprietary AWS products such as DynamoDB, OpsWorks, IAM. Building a product around DynamoDB’s API, designing a deployment pipeline on OpsWorks, or tapping IAM for handling AWS keys is not easily portable to another vendor, no matter how you look at it. So those products should be avoided, right?

The perspective is posited on multiple mistaken beliefs: that the business may want to switch in the near future, the service is too costly, and the complexity too great. I take issue with each point

It boils down to integration. AWS is an integrated and related suite of services offering flexiblity, customization, and in some cases unmatched innovation (looking at you, Lambda and IAM). Applications that are built leveraging these features will benefit from this integration, while those that don’t will suffer from agnostic complexity.

I maintain my position: if you’re worried about lock in, you’re missing the point.