Skip to content

Comparison

AWS vs Azure vs Google Cloud

Three capable platforms, and a decision that is almost never won on a feature grid. What actually decides it is your existing estate, your team, your residency obligations, your procurement position and how much exit cost you are willing to carry.

What the choice is actually between

Anyone arriving at this comparison usually wants to be told which of the three is best, and the honest answer is that for the overwhelming majority of workloads all three are capable of running it well. Each of them will give you virtual machines, containers, functions, object storage, managed relational and non-relational databases, queues and event buses, a global network, an identity system, encryption and key management, infrastructure as code, and enough observability to run production properly. If your requirement is a web application with a database behind it, a data pipeline, an internal platform or a set of APIs, no one of these platforms will stop you, and the differences that show up in a vendor comparison table will not be the thing that decides whether the project succeeds.

That is not a way of avoiding the question. It is the answer, and it moves the question somewhere more useful. Once capability is broadly settled, the decision is decided by things that are specific to your organisation rather than to the platforms: what you already buy and on what terms, what your engineers already know how to operate, where your data is legally required to sit and which regions you actually need, what your procurement process will and will not sign, whether your dominant workload has a genuine centre of gravity on one platform, and how much it would cost you to leave once you have committed. Those six factors settle nearly every one of these decisions we are asked to help with, and none of them can be looked up in a product comparison.

It is worth saying plainly that "we already have an enterprise agreement with Microsoft and our identity lives in Active Directory" is a legitimate reason to choose Azure, not a lazy one. Engineers sometimes treat commercial and organisational constraints as beneath consideration, as though only the technical merits count. That is a mistake. An existing agreement, an identity estate your security team already governs, a support relationship that already exists and a procurement path that is already approved are real assets with real value, and choosing the platform that reuses them is often the correct engineering decision precisely because it removes work rather than adding it. The same logic applies in reverse: if your engineers have run production on AWS for years and nobody has touched the others, that experience is worth more than a feature you might use one day.

We build and operate systems on all three, and we have no reseller margin on any of them, so we have nothing to gain from steering you towards a particular logo. What follows is written to help you make the decision on the criteria that actually determine the outcome, and to be honest about where each platform is genuinely the stronger choice.

The short answer

If you have no strong existing commitment, no dominant Microsoft estate and no unusual data gravity, AWS is the safest default. Not because it is technically superior in a way you would notice on a typical workload, but because it has the largest pool of engineers who have run production on it, the deepest body of documentation and community answers, and the most third-party tooling that assumes it by default. Those are boring advantages and they matter every week for the life of the system, particularly for a team that will be operating this without a dedicated platform function.

If your organisation already runs on Microsoft, the calculation changes and it changes legitimately. An existing enterprise agreement, identity already governed in Entra ID or Active Directory, a support relationship in place, an approved procurement route and engineers who already understand the Microsoft way of doing things are a substantial head start. Azure lets you reuse all of it, and the licensing position for Windows Server and SQL Server workloads you already own is a commercial factor rather than a technical one, which does not make it less real. Choosing Azure on those grounds is a good decision, and we would make it too.

If the centre of your system is analytics, and the thing that determines whether the project works is how quickly your organisation can query large volumes of data without operating a cluster to do it, Google Cloud has a genuine and specific pull. BigQuery is the clearest example of a service that is a legitimate reason to choose a platform rather than a service you would pick because you happened to be there. Google Cloud also carries the Kubernetes heritage, since Kubernetes came out of Google, and GKE reflects that in how it is operated. If your workload sits in that shape, this is not a tiebreaker, it is the deciding factor.

The most useful thing you can do before comparing services is write down your actual constraints: which regions and jurisdictions you must operate in, what your team can already run at three in the morning, what your procurement will approve without a six month cycle, whether one workload dominates the system, and what a forced exit would cost you in each direction. Most organisations find that when those are written down, the decision has already been made and the feature comparison was never going to change it.

Side by side

DimensionAWSAzureGoogle Cloud
Best single reason to choose itBreadth and maturity, plus the largest pool of engineers who have operated it in production and the most third-party tooling that assumes it by default.You already run on Microsoft. Existing agreements, identity, support relationships and procurement all carry across, and Windows and SQL Server licensing you already own becomes a commercial factor.Data and analytics gravity. If BigQuery is the centre of your system, or your organisation is deep in Kubernetes and machine learning tooling, that is a specific and legitimate pull.
Fit with an existing Microsoft estateWorkable. Windows workloads, directory integration and federated identity are all supported and widely deployed, but you are integrating two estates rather than extending one.Its strongest position by a distance. Entra ID, Active Directory, Microsoft 365, endpoint management and the security tooling around them are one estate rather than an integration project.Possible and done routinely through federation, but it carries none of the same commercial or identity advantage and you keep the two estates separate in practice.
Identity and accessIAM is extremely fine-grained and correspondingly hard to reason about, with several policy types interacting. Human access is normally federated to whatever identity provider you already use.Entra ID is the same identity your organisation likely already uses for email and devices, so conditional access, groups and the joiner and leaver process are already in place rather than rebuilt.A clean and comparatively coherent IAM model built around resource hierarchy and inherited policy, generally considered easier to reason about, and federated to your existing provider.
Hiring and available experienceThe largest pool. More engineers have run production here than on the other two, which shows up in how quickly you can hire, contract or replace the person who owns the platform.A substantial pool, weighted towards enterprise and Microsoft-centric organisations, and strongest wherever the wider Microsoft ecosystem is already the norm.A smaller pool overall, but deep in specific areas, particularly data engineering, Kubernetes and machine learning, where the experience tends to be genuinely strong.
Third-party tooling and documentationMost tools, tutorials, runbooks and Stack Overflow answers assume it. When something obscure breaks, somebody has usually written up the answer already.Well covered, with the Microsoft documentation estate behind it and strong first-party tooling, though community coverage of unusual problems is thinner than for AWS.Good and improving, with excellent documentation in its areas of strength, but you will more often be the first person to hit a given edge case.
Data and analyticsA broad set of services covering storage, streaming, cataloguing, warehousing and processing. Capable and complete, and it takes assembling rather than arriving as one thing.A coherent enterprise analytics story that lands well with organisations already using Microsoft reporting and business intelligence tooling, so the last mile to the business is short.The clearest area of differentiation. BigQuery is a serverless warehouse you query without operating infrastructure, and for many teams it is the specific reason the platform is chosen.
Containers and KubernetesEKS for Kubernetes, plus ECS with Fargate as a simpler managed container service that covers what most teams actually need without a cluster to operate.AKS for Kubernetes, plus Azure Container Apps as the simpler managed option for teams that want containers without cluster operations.GKE, reflecting the fact that Kubernetes originated at Google, plus Cloud Run as the simpler managed option. Kubernetes maturity here is a real and frequently cited strength.
Managed relational databasesRDS for standard engines including PostgreSQL and MySQL, plus Aurora as a provider-specific option with its own storage architecture and its own commitment implications.Managed PostgreSQL and MySQL alongside Azure SQL, which is the natural destination for existing SQL Server estates and a genuine advantage if that is what you run.Managed PostgreSQL and MySQL through Cloud SQL, plus Spanner for workloads that genuinely need horizontally scalable relational semantics, which is a small but real category.
What you are billed forCompute time, storage volume, requests, and data movement across chargeable boundaries. Idle resources bill quietly and are a large share of most ungoverned accounts.The same underlying mechanisms, with the additional factor that existing licence entitlements can change the effective cost of Windows and SQL Server workloads.The same underlying mechanisms, with some services billed on data processed rather than infrastructure provisioned, which shifts cost control towards query and pipeline design.
Commitment discountsMeaningful discounts in exchange for committing to a level of spend or usage over a term, which reduces cost and reduces your flexibility by exactly the same amount.Similar mechanisms, and typically negotiated inside a wider enterprise agreement, which is one of the reasons an existing Microsoft relationship carries commercial weight.Similar mechanisms, and commercial terms are negotiable in the same way. As with the others, the discount is real and so is the loss of freedom to change your mind.
Data residency and regionsA wide global footprint. Whether it covers the specific jurisdictions you are obliged to operate in is a question to answer against the current region list, not from memory.A wide global footprint with a strong public sector and regulated industry presence in many countries, which frequently matters for procurement as well as for residency.A wide global footprint. As with the other two, the only answer that counts is whether the specific regions and services you need are available where you need them today.
Networking and egressData leaving the platform and traffic crossing zone and region boundaries are chargeable, and are a recurring source of cost that never appears on an architecture diagram.The same shape of charging applies. The mechanism to understand is which boundaries your traffic crosses and how often, rather than which provider publishes a lower headline rate.The same shape of charging applies. Design the traffic paths deliberately on any of the three, because this is where surprises come from regardless of provider.
Exit costGraduated. Containers and standard database engines move with modest effort. A system built deeply on proprietary serverless, event and identity primitives is a rewrite to leave.Graduated in the same way, with the additional consideration that identity integration tends to bind the platform to the wider organisation rather than only to the application.Graduated in the same way. The specific caution here is that a warehouse holding years of analytical history and the queries built on it is one of the harder things to move.
SupportPaid support tiers, with the useful levels priced accordingly. Worth costing during design rather than discovering the need during an incident.Paid support tiers, often already covered by an existing Microsoft relationship, which is a practical advantage for organisations that have one.Paid support tiers on the same model. In all three cases, budget for the tier you would want during an outage rather than the one that looks reasonable in a spreadsheet.

Choose AWS when

  • You have no strong existing commitment in any direction and want the option with the widest margin for error. The largest hiring pool, the deepest documentation and the most third-party tooling that assumes your platform are advantages you draw on continuously rather than once.
  • Your team already runs production on it. Existing operational competence is worth more than a feature comparison, and moving a team to an unfamiliar platform costs months of reduced output before it costs anything else.
  • You need unusual breadth under one account structure and one identity model, because the system genuinely spans several very different kinds of workload rather than one dominant shape.
  • You depend on third-party software, agents or integrations that are built and tested against it first, which is still common for infrastructure, security and observability tooling.
  • You want the largest number of credible options when you hire, contract or need to replace whoever owns the platform. This matters most for organisations without a dedicated platform team, where continuity of knowledge is fragile.
  • You are building something that has to survive a long time with conservative expectations about the platform changing underneath you, and a long record of backward compatibility is worth something to you.

Choose Azure when

  • Your organisation already has an enterprise agreement with Microsoft. Reusing an existing commercial relationship, an approved procurement route and negotiated terms is a real and legitimate advantage, and pretending otherwise is engineering snobbery rather than analysis.
  • Your identity lives in Active Directory or Entra ID and your security team already governs it there. Extending one identity estate rather than federating two is less work, fewer failure modes and a shorter joiner and leaver process, and identity is precisely the place you do not want two sources of truth.
  • You run Windows Server and SQL Server workloads you already hold licences for. The commercial treatment of existing entitlements is a genuine factor in the total cost, and it is one of the few places where a licensing position legitimately influences an architecture decision.
  • Your engineers are already fluent in the Microsoft ecosystem, its tooling and its conventions. Their existing competence transfers here more directly than to the other two, and the productivity difference in the first year is substantial.
  • Your procurement, security review or public sector framework already has Microsoft approved and would need a full new vendor assessment for anybody else. That constraint is real, it costs months, and no technical argument dissolves it.
  • Your business intelligence and reporting already run on Microsoft tooling and the last mile from data to a decision-maker is short there. Analytics that people actually use beats analytics that is theoretically better.
  • You are running a hybrid estate with substantial infrastructure in your own buildings that is not going away, and the tooling and management story across both is one of the practical strengths of the Microsoft position.

Choose Google Cloud when

  • Analytics is the centre of the system rather than a reporting layer bolted to the side. BigQuery lets an organisation query very large volumes without provisioning or operating a warehouse cluster, and for teams whose bottleneck is time to answer rather than infrastructure, that is a decisive property.
  • Your data volumes and query patterns mean the operational burden of running an analytics platform is the thing that would sink the project. A serverless model moves the work from operating infrastructure to writing good queries, which is a trade most data teams should take.
  • Kubernetes is genuinely central to how you run, and you want the platform with the deepest heritage in it. Kubernetes originated at Google, and GKE is widely regarded as a mature and well-operated managed offering. This applies only if you have already established that you need Kubernetes at all, which most teams have not.
  • Machine learning is a first-class part of the product rather than an experiment, and your team wants tooling and managed training and serving infrastructure that has been a priority for the platform rather than an addition to it.
  • Your engineers value a coherent, comparatively legible resource and identity model, and you are starting fresh rather than carrying an estate that pulls elsewhere. The project and folder hierarchy with inherited policy is genuinely easier to hold in your head than the alternatives.
  • You have specific workloads that need horizontally scalable relational semantics rather than a conventional single-writer database. That is a narrow category, but where it applies the alternative is usually building something difficult yourself.

What actually decides this, in the order that matters

The single most reliable predictor of which platform an organisation should choose is what it already buys and what its engineers already know. That sounds anticlimactic next to a service-by-service comparison, and it is nonetheless what we observe repeatedly. An organisation with an established Microsoft relationship, identity in Entra ID and engineers fluent in that ecosystem will get to a working, well-run system on Azure faster and more cheaply than on either alternative, and the reasons have almost nothing to do with the compute layer. An organisation whose engineers have run production on AWS for five years will do better staying there than moving to a platform where nobody has been paged at three in the morning yet.

The second factor is where your data is legally required to live, and which regions and services you actually need rather than which ones exist. This is a question with a checkable answer, and it should be checked against the current region and service availability for each provider rather than assumed, because service availability varies by region on all three platforms and the service you have designed around may not be present where you are obliged to run. Regulated organisations sometimes find this eliminates a provider outright, which is a much faster way to reach a decision than comparing databases.

The third is procurement, and it deserves more respect than engineers usually give it. If your organisation already has a signed agreement, an approved supplier, a completed security assessment and a route to raise a purchase order without a six month cycle, then choosing that provider saves real calendar time and real internal political capital. If choosing a different provider means a full new vendor onboarding, that cost is genuine and it lands on the project schedule. We have seen sensible technical choices lose to this constraint, and the organisations were usually right to let them.

The fourth is workload gravity. Most systems have one thing at their centre that determines whether they succeed. If that thing is a data warehouse serving analysts across the business, the analytics story should dominate the decision. If it is a large set of Windows and SQL Server applications, the Microsoft position should dominate. If it is a conventional set of containerised services with a relational database, no provider has a decisive advantage and you should decide on the earlier factors instead. Naming the one workload that matters most, before comparing anything, is the fastest route to clarity we know.

The fifth is exit cost, and it is the one people consider last and regret first. You are not choosing where to run something for a year. You are choosing what it will cost, in engineering months, to change your mind in five years. That number is under your control to a surprising degree, because it depends far more on which services you build against than on which provider you sign with.

Cost, without the numbers nobody can honestly quote

We will not tell you which of the three is cheapest, and you should be sceptical of anybody who does without having seen your workload and your commercial terms. Published prices change, they differ by region on all three platforms, and large organisations do not pay published prices anyway. What is stable and worth understanding is the mechanism, because that is what your architecture controls.

All three bill along the same broad lines. You pay for compute by the time it is running and by how much of it you asked for. You pay for storage by volume and by class, so data that should have moved to a colder tier years ago is billed at a hot rate until somebody sets a lifecycle rule. You pay per request or per operation on many managed services, which means an inefficient loop in application code becomes a line on an invoice rather than merely a slow endpoint. And you pay for data movement, which is the part that catches people, because it is the one nobody draws on the architecture diagram.

Data movement deserves specific attention on any of the three. Traffic leaving the provider network towards the internet is chargeable. Traffic crossing availability zone or region boundaries is typically chargeable too, which means two chatty components placed carelessly can generate a recurring cost that looks like a fixed overhead nobody can explain. Managed network address translation and similar gateway services often charge for processing as well as for existing. The design response is the same everywhere: know which boundaries your traffic crosses and how often, put caching in front of anything cacheable, and treat placement as a cost decision rather than only a latency one.

The second cost mechanism worth understanding is what is metered on some services but not others. A serverless warehouse or query engine that bills on data processed shifts your cost control away from provisioning and towards how queries are written, how tables are partitioned and how much data each question has to read. That is a genuinely different discipline, and it can be either a large saving or a nasty surprise depending on whether anybody is watching. Provisioned infrastructure bills whether you use it or not, which is the opposite failure mode: predictable, and quietly wasteful.

Then there are commitment discounts, which every provider offers in some form: agree to a level of spend or usage over a term and pay less for it. The discount is real. So is the cost, which is flexibility. A commitment made before an architecture has settled locks you to the shape you had when you signed, and we have seen organisations keep running something they had decided to replace because the commitment had eighteen months to run. Our consistent advice on all three platforms is to stabilise the architecture first, right-size against observed usage, and only then commit, because committing to a year of infrastructure you were about to change is an expensive way to feel efficient.

One last mechanism that applies to all three and is almost never modelled: idle resource. Storage volumes detached from anything, load balancers with nothing behind them, non-production environments running through nights and weekends, log retention nobody chose, and environments created for a project that finished. None of these generate an alert. They generate a number that looks like it has always been there. Whichever provider you choose, the discipline that controls cost is attribution through consistent tagging, budgets set on the drivers rather than the total, and somebody whose job includes looking.

The Microsoft estate argument, taken seriously

Engineers frequently dismiss "we are a Microsoft shop" as a non-technical reason, and it is worth explaining why we treat it as a strong one. Start with identity. If your organisation already governs users, groups, conditional access policies, multi-factor enforcement and the joiner and leaver process in Entra ID, then choosing Azure means your cloud access control is an extension of a system your security team already runs, already audits and already has evidence for. Choosing another provider means federating two systems, keeping them consistent, and accepting a second place where access can be wrong. Identity is the single most consequential thing to get right, and having one authoritative source is worth a great deal.

Then commercial terms. An enterprise agreement is not merely a discount, it is a negotiated relationship with terms, a support arrangement and an established route to buy. Reusing it removes a procurement cycle, a vendor security assessment and a set of legal reviews that would otherwise sit on the critical path. For a regulated organisation those can take months, and months of delay are usually more expensive than any architectural difference you were weighing.

Then licensing. If you already hold Windows Server and SQL Server entitlements, the commercial treatment of those entitlements when the workload runs on Azure is a real factor in what the workload costs. We are deliberately not quoting mechanics or figures here, because the details depend on your agreement and change over time, and the correct action is to have somebody who can read your specific agreement work it out. What we will say is that for an organisation with a significant existing Microsoft licence position, this is frequently large enough to decide the question on its own, and it should be modelled rather than ignored because it feels like an accounting matter.

And then people. A team fluent in one ecosystem is productive in it immediately and unproductive somewhere else for longer than anyone plans for. That cost is paid in the first year, in a currency, engineering time, that is more scarce than infrastructure spend for most organisations.

The honest counterweight is worth stating too. Choosing on the basis of an existing relationship binds your cloud position to a wider commercial relationship, and if that relationship changes, the consequences reach further than they would otherwise. It is also possible to end up with a platform choice nobody ever tested against the workload, which is a different failure from the one we usually warn about but a failure nonetheless. The right approach is to let the estate argument carry real weight, and then check that the workload is genuinely well served, rather than treating either half as sufficient on its own.

Where each platform genuinely pulls ahead

AWS pulls ahead on breadth, maturity and ecosystem. The value of that is not that you will use a large fraction of what is available, because you will not and should not. The value is that when you hit an unusual requirement, there is very likely a mature service for it, a long history of other organisations using that service in anger, and written answers to the problems they hit. It also has the largest pool of engineers who have run production on it, which matters more than teams expect at the point where the person who built the platform leaves. For an organisation without a dedicated platform function, that continuity argument is often the strongest single point in its favour.

Azure pulls ahead where an organisation already exists inside the Microsoft world, and the advantage compounds across identity, security tooling, endpoint management, licensing, procurement and staff familiarity at the same time. It is also a serious option for hybrid estates where substantial infrastructure will remain in your own buildings for the foreseeable future, because the management and identity story across both halves is coherent rather than assembled. And in the enterprise and public sector, its presence in procurement frameworks is a practical advantage that has nothing to do with technology and everything to do with getting a project started this quarter rather than next year.

Google Cloud pulls ahead on data. BigQuery is the clearest example anywhere across these three platforms of a service that is a legitimate reason to choose a provider rather than a service you use because you happen to be there. It lets an organisation ask questions of very large datasets without standing up, tuning and operating a warehouse cluster, and for data teams whose real constraint is how long it takes to get an answer, that changes what is possible rather than merely what is convenient. The platform also carries genuine Kubernetes heritage, since Kubernetes originated at Google, and GKE reflects that in how it is run. Its machine learning tooling has been a first-class priority rather than an addition, which shows.

It is equally worth naming where each is weaker, because a comparison that only lists strengths is a brochure. AWS has the steepest sprawl problem: there are usually several defensible ways to do anything, the documentation describes them all neutrally, and teams without experienced guidance regularly build something more complicated than they needed. Azure has areas where the product surface has grown by accretion and the naming and portal experience reflect that, and organisations sometimes choose it for estate reasons and then never test whether the specific workload is well served. Google Cloud has the smallest hiring pool of the three, thinner community coverage of unusual problems, and a reputation among some buyers for retiring or reshaping services, which is a concern you should test against the specific services you plan to depend on rather than accept as folklore.

Lock-in, and the exit cost you actually choose

Lock-in is not a property of the provider you sign with. It is a property of the services you build against, and it is graduated rather than binary. That distinction is the most useful thing we can give you on this subject, because it turns an anxiety into a decision you control.

At the portable end, containers running standard runtimes and a managed PostgreSQL or MySQL database commit you to very little. All three platforms will run your images, all three offer managed versions of the common open source engines, and moving means provisioning elsewhere, restoring a dump and repointing the traffic. It is work, and it is bounded work of a kind an engineer can estimate. Object storage sits close behind, since the interfaces are widely emulated and the data is yours to copy, subject to paying to move it out.

In the middle sit managed services that are provider-specific but have recognisable equivalents elsewhere: managed queues, managed caches, container platforms, secret stores. Leaving means rewriting integration code and reworking infrastructure definitions rather than redesigning the system. Uncomfortable, estimable, survivable.

At the deep end sit systems built on proprietary serverless compute, provider-specific event routing, provider-specific workflow orchestration and provider-specific identity primitives all bound together, and analytical estates holding years of history with a large body of queries, models and reports built on top. Leaving those is a rewrite of the integration surface or a data platform migration, not a redeployment. That is frequently the right choice, because those services remove enormous amounts of work and the productivity is real. What is not right is arriving there by accident because every tutorial pointed that way and nobody ever asked what the exit would cost.

So the practical advice is to make the choice deliberately and per service rather than as a single philosophical position. Decide which parts of your system must remain portable because they are load-bearing and long-lived, and keep those on open standards and open engines. Let the parts where the productivity gain is largest and the replacement cost is bounded be as provider-specific as you like. Define infrastructure in code either way, because rebuilding an environment from a repository is far easier than reconstructing it from one person’s memory, whichever platform you are rebuilding it on. And write down, once, what the exit would involve, so that in three years it is a document rather than an argument.

Why multi-cloud is usually a worse answer than it sounds

Multi-cloud arrives in conversations as a way of not deciding, and it is frequently the most expensive decision in the discussion. The pitch is appealing: avoid lock-in, use the best service from each provider, keep commercial leverage in negotiations. In practice, running production across more than one provider multiplies the work in every direction at once, and most organisations that adopt it end up with the costs and only a fraction of the benefits.

Consider what actually multiplies. Your team needs genuine operational competence on each platform, not familiarity, because being paged for a system you half understand is worse than not having it. Identity and access has to be designed, governed and audited in each place, and kept consistent, which is precisely the sort of duplicated authority that produces access mistakes. Networking, observability, security policy, cost management, backup and disaster recovery all need a version per provider. Your infrastructure code has to express both, or you accept two dialects. Compliance evidence has to be gathered twice. And every one of those is a permanent standing cost rather than a one-off setup, which means it is paid for as long as the system exists.

The lowest common denominator problem is just as real. To make a workload genuinely portable across providers you must avoid the services that make each provider worth using, so you end up running virtual machines and self-managed software on rented infrastructure, forgoing exactly the managed capability you were paying a premium to reach. That is a legitimate architecture, but be clear that it is what you have chosen: you have taken on more operational work in order to preserve an option you may never exercise.

The cost argument usually turns out to be backwards as well. Data moving between providers is chargeable and the volumes involved in a genuinely distributed system are rarely trivial. Splitting your spend across providers weakens rather than strengthens your position on commitment discounts, since those reward concentration. And the negotiating leverage that multi-cloud is supposed to create depends on being credibly able to move, which is the very thing the standing operational burden makes harder, not easier.

There are versions of multi-cloud that are legitimate, and it is worth naming them precisely so the exceptions do not get used to justify the general case. A regulator or a customer contract that explicitly requires it. An acquisition that brought a second estate and a deliberate, funded plan to consolidate or to keep both. A genuine sovereignty requirement that no single provider satisfies. One clearly bounded workload placed on a second provider because a specific service there is decisively better, with a clean interface between it and everything else, which is a very different thing from running your platform in two places. And using one provider for production and another for something entirely separate, such as an analytics estate, with a deliberate boundary rather than a distributed system spanning both.

What is not a legitimate reason is a general unease about depending on one company. If that is the concern, the effective response is portability discipline inside a single provider: standard engines, containers, infrastructure as code, data you can extract, and a written understanding of what an exit would involve. That gives you most of the optionality at a small fraction of the cost of actually running two platforms. For the large majority of organisations, one provider run well beats two run adequately, and it is not close.

What moving between them actually involves

The first thing to understand is that the compute layer is rarely the hard part. Moving containerised services from one provider to another is real work but it is well understood, estimable work: rebuild the infrastructure definitions, provision the equivalent networking and identity, adjust the deployment pipeline, and shift traffic. Teams that have containerised and defined their infrastructure in code find this part goes roughly as planned. Teams that have not find that the migration project quietly becomes a containerisation project first, which is worth knowing before the timeline is agreed.

The hard parts are data, identity and the proprietary edges. Data because it has volume, gravity and a residency position: moving it costs money in egress, takes time that is measured against a live system that keeps writing, and needs a plan for how the two sides stay consistent during the transition. Identity because access control is rarely a like-for-like translation between platforms and the differences are the sort that produce either an outage or a hole. Proprietary edges because every place your system depends on a provider-specific serverless runtime, event router, workflow engine or managed service without a direct equivalent is a piece of code to rewrite rather than redeploy, and those tend to be discovered rather than inventoried at the start.

Analytical estates deserve their own warning. A warehouse holding years of history with a large body of queries, scheduled jobs, models and reports built on top of it is one of the harder things in this field to move, because the data is only half of it. The other half is every query, every dashboard and every downstream dependency, many of which nobody has a full list of. If you are choosing a platform partly because of its analytics story, understand that you are making a longer commitment there than anywhere else in the stack.

Whatever the direction, the risk in these projects concentrates in the cutover rather than in the platform. Run both sides in parallel, move one clearly bounded workload first and keep a route back, verify against real behaviour rather than a test plan written from the design, and sequence the data migration so it is the most rehearsed part of the whole exercise. Cutovers attempted in a single step tend to discover their problems while the business is watching.

One last piece of advice we give consistently: be honest about why you are moving. Cost dissatisfaction is the most common trigger and the least reliable one, because an ungoverned account is expensive on any platform and the same architecture lifted unchanged to a different provider usually costs about the same for the same reasons. Before you migrate for cost, find out whether the problem is the provider or the way the estate has been run. Quite often the answer is that a fraction of the migration budget spent on right-sizing, storage lifecycle rules, removing idle resource and fixing traffic paths would deliver most of the saving without any of the risk. If a proper look shows the platform genuinely does not suit the workload, or a residency or procurement position has changed, then move deliberately and with a real plan.

Technologies involved

How we help

Further reading

Common questions

Which of the three is cheapest?

That question does not have an honest general answer, and treat any confident one with suspicion. Prices change, they vary by region on all three platforms, and organisations of any size negotiate rather than paying published rates, so a comparison made today on public figures would be both incomplete and out of date quickly. What is stable is the mechanism: all three bill for compute time, storage volume and class, requests and operations, and data movement across chargeable boundaries. What decides your bill is the shape of your workload and the discipline applied to it, and the same architecture will cost broadly similar amounts on all three unless something specific to your situation applies, such as existing licence entitlements or a workload whose dominant cost is one particular service. Model your own workload against your own commercial terms. That exercise is worth doing properly, and it will tell you far more than any comparison article.

Is choosing Azure because we already use Microsoft a bad reason?

No, it is one of the best reasons available, and dismissing it is a common engineering blind spot. An existing enterprise agreement removes a procurement cycle and a vendor assessment from your critical path. Identity already governed in Entra ID means your cloud access control extends a system your security team already runs and audits, rather than creating a second place where access can be wrong. Existing Windows Server and SQL Server entitlements have commercial treatment that can materially change what those workloads cost. And engineers already fluent in the ecosystem are productive immediately. Those are four substantial advantages that compound, and they are worth more on most projects than any difference in the compute layer. The only caveat is to check that your specific workload is genuinely well served rather than assuming the estate argument settles everything.

When is Google Cloud clearly the right choice?

When data and analytics are the centre of the system rather than a reporting layer attached to it. BigQuery lets an organisation query very large volumes without provisioning or operating a warehouse cluster, which changes what a data team can do rather than merely how comfortable they are, and it is a legitimate reason to choose a platform outright. It is also a strong choice where Kubernetes is genuinely central to how you run, since Kubernetes originated at Google and GKE reflects that heritage, though that only applies if you have already established that you need Kubernetes at all. And where machine learning is a first-class part of the product rather than an experiment, the tooling has been a priority rather than an addition. Outside those shapes, the decision usually comes back to your estate, your team and your procurement position.

Should we go multi-cloud to avoid lock-in?

Usually not, and the reasoning is worth being blunt about. Running production across two providers multiplies the standing operational work in every direction: operational competence, identity governance, networking, observability, security policy, cost management, backup and disaster recovery, infrastructure code and compliance evidence all need a version each, permanently. To make workloads genuinely portable you also have to avoid the managed services that make each provider worth paying for, which leaves you running more infrastructure yourself. The cost argument tends to reverse too, since cross-provider data transfer is chargeable and splitting spend weakens rather than strengthens your commitment discount position. Legitimate cases exist, a regulator or contract that requires it, an acquisition, a sovereignty position no single provider meets, or one clearly bounded workload placed elsewhere behind a clean interface. But if the real concern is general unease about depending on one company, portability discipline inside a single provider gives you most of the optionality at a small fraction of the cost.

How locked in will we actually be?

That is largely your decision rather than the provider’s, because lock-in is graduated and it follows the services you build against. Containers and managed PostgreSQL or MySQL commit you to very little: moving means provisioning elsewhere, restoring the data and repointing traffic. Provider-specific queues, caches and container platforms sit in the middle, where leaving means rewriting integration code rather than redesigning the system. The deep end is proprietary serverless compute, event routing, workflow orchestration and identity primitives bound together, plus analytical estates carrying years of history and everything built on top of them. Those are the deepest commitments, and they are often worth making because the productivity is real. The mistake is arriving there without having chosen it. Decide per service which parts of your system must stay portable, keep those on open standards, and write down once what an exit would involve.

Does it matter which one our engineers already know?

Enormously, and it is routinely underweighted next to feature comparisons. A team that has run production on a platform knows how it fails, what the useful metrics are, where the sharp edges are and what to check first during an incident. That knowledge takes a long time to acquire and does not transfer cleanly, so moving a team to an unfamiliar platform costs months of reduced output and a period where incidents take longer to resolve. Unless there is a specific and decisive reason to move, such as a residency requirement, a dominant workload with genuine gravity elsewhere, or a commercial position that changes the arithmetic, existing operational competence should usually win. It is the cheapest advantage you have and the easiest one to throw away.

What about data residency and regulated workloads?

Treat it as a checkable requirement rather than a general impression, and check it early because it can eliminate options outright and save you the rest of the comparison. Write down which jurisdictions your data must remain in, which specific services your design depends on, and then verify current region and service availability for each provider, since services are not uniformly available across every region on any of the three platforms. Add the questions an auditor will ask: how access is controlled and evidenced, where backups and logs are held, and what happens to data in transit between components. Every one of these platforms can be operated in a defensible, well-evidenced way, and none of them makes you compliant by being chosen. If a specific sovereignty position rules all three out, that is a different conversation and it is worth having early rather than after a design exists.

We are on one provider and unhappy with the bill. Should we move?

Probably not, or at least not yet, because cost dissatisfaction is the most common reason for migration and the least reliable one. An ungoverned account is expensive on every platform, and the same architecture moved unchanged usually costs about the same for the same reasons, having consumed a migration budget on the way. Before considering a move, find out what the bill is actually made of: spend attributed by product and environment through consistent tagging, compute right-sized against observed usage rather than the shape guessed at launch, storage lifecycle rules so cold data leaves hot tiers, non-production environments switched off outside working hours, idle resource removed, log retention chosen deliberately, and traffic paths designed so data is not crossing chargeable boundaries unnecessarily. That work is a fraction of the cost and risk of a migration and frequently delivers most of the saving. If after all of that the platform genuinely does not suit the workload, or a residency or commercial position has changed, then move deliberately with a real plan and a rehearsed cutover.

Do we have to decide everything at once?

No, and trying to is a good way to make a worse decision slowly. The choices that are expensive to change later are the ones to make carefully now: which provider, how accounts or projects and environments are structured, how identity is federated, which regions you operate in, and which parts of the system you intend to keep portable. Those are worth real deliberation because unpicking them later is painful. The rest, which managed services to use for which components, is a set of decisions you make repeatedly as the system develops, and each one can be weighed on its own merits against how much work it saves and what it would cost to replace. Get the structural decisions right, keep the load-bearing parts on open standards, define everything in code, and you will have preserved most of your options without pretending you can foresee five years of requirements on day one.

Weighing AWS against Azure?

Tell us the volumes, the compliance position and who would run it day to day. We will tell you which one we would choose for your case, and say so plainly when it is not the one we sell.

  1. 01A senior engineer reads it. Not a form queue, and not an account manager.
  2. 02We reply either with questions or with a straight answer that we are not the right fit.
  3. 03If it looks like a fit, a technical call with the person who would actually run the delivery.
  4. 04Then scope, effort and risk in writing, before anyone signs anything.

Two fields required. We reply to real enquiries. No list, no sequence.