AWS, Azure, Google Cloud or Oracle: choosing without a religious argument
All four run the same workloads competently. The decision usually follows existing commitments, data residency and the skills already in your team.
The overspend is rarely caused by the cloud itself. It is usually set in motion by three decisions taken in the first few weeks, often by people who did not realise they were making them.
Almost every migration business case is built on a like-for-like comparison — here is what the data centre costs, here is what equivalent cloud capacity costs. The trouble is that like-for-like is the most expensive way to buy cloud, and the comparison quietly commits you to it.
On-premise capacity is bought for peak, years in advance, and the marginal cost of over-provisioning is close to zero once the hardware is on the floor. Cloud inverts that. Every idle core is billed every hour. A server sized years ago for a workload that has since halved will cost you the original size indefinitely.
Utilisation profiling on a typical estate commonly finds a substantial share of virtual machines running well below capacity. Migrating them as they stand converts a sunk cost into a recurring one.
Many organisations migrate with a single account, a single bill and no attribution. Months later the bill has grown and nobody can say which team, product or feature caused it.
This is not a reporting problem, it is an incentive problem. Engineers make cost decisions many times a day — instance class, storage tier, retention period, whether the test environment runs over the weekend. If none of those decisions has a visible consequence, the aggregate is unmanaged by construction.
The fix is structural and belongs in place before the first workload moves:
The comparison that matters is not instance price against server price. It is total cost of ownership, and the largest term in that expression is usually people.
Running your own database on virtual machines is cheaper per hour than the managed equivalent. It is often more expensive per year once you count patching, backup verification, failover testing, version upgrades and the out-of-hours pager. Teams routinely choose self-managed to save on a line item, then spend engineer-months on the maintenance that line item was funding.
The same applies to Kubernetes. It is an excellent answer to problems that many organisations do not yet have. Below a certain number of services, and without dedicated platform capability, a managed container service delivers the same outcome with a fraction of the operational surface.
The right question is not what is cheapest to run. It is what is cheapest to run well, given the team you actually have.
The pattern that keeps migrations on budget is not complicated, and it is frequently skipped:
Most of this is skipped because the migration date is set before the assessment is done, and everything that follows is compressed to protect that date. If you change one thing about how your programme is governed, change that.
Keep reading
All four run the same workloads competently. The decision usually follows existing commitments, data residency and the skills already in your team.
A meaningful share of cloud spend on a typical estate is recoverable without changing the architecture at all. Start there.
Kubernetes is excellent at problems many organisations do not have. Here is a straight test for whether you are one of the ones that does.