
Every engineering team eventually has the same argument. One side wants to ship on a managed platform because nobody wants to babysit servers. The other side has looked at the bill and thinks a plain Linux box would do the same job for a fraction of the price.
Both sides are usually right, and the disagreement persists because most cost comparisons are done badly. Teams compare a sticker price against a sticker price, ignore the categories where the real money goes, and skip the line item that quietly turns into the biggest number on the invoice. Here is a more honest way to run the math.The Sticker Price Is the Least Interesting Number
Start with a like-for-like configuration: two cores, 4 GB of RAM, enough disk for an application and its database.
On DigitalOcean, the Basic 2 vCPU / 4 GiB Droplet lists at $24 per month and includes 4,000 GiB of outbound transfer. On an unmanaged KVM host, the same shape of machine is dramatically cheaper — a provider like QDE lists a 2-core, 4 GB, 40 GB NVMe instance at €6.95 per month with 8 TB of bandwidth. Roughly a third of the price, with double the transfer allowance.
That gap is real, but on its own it is not an argument. A $16 monthly saving does not justify an afternoon of anyone’s time. The comparison only becomes interesting when you look at the categories that scale.Egress Is Where Cloud Bills Go to Die
Bandwidth pricing is the single largest structural difference between hyperscalers and independent hosts, and it is the one most teams discover after the fact.
AWS charges $0.09 per GB for the first 10 TB of data transferred out to the internet each month in US and EU regions, after a 100 GB free allowance. Rates step down at higher volumes — $0.085/GB for the next 40 TB, $0.07/GB above that — but the entry rate is what most teams live with.
Run the numbers on a modest workload. A service pushing 2 TB of egress per month — a mid-sized API, a media-heavy site, a moderately popular app — costs roughly $170 a month in transfer alone on AWS at list rates. On a VPS that bundles 8 TB, that same traffic is included in the €6.95. DigitalOcean sits between the two, bundling transfer and charging $0.01 per GiB for overage.
Egress is also the cost line that grows with your success rather than your headcount. A team that has carefully right-sized its instances can still get surprised by a bandwidth bill after one good launch week. Worse, cross-AZ traffic and NAT Gateway processing add charges that never appear in the instance price you budgeted against, which is why real bills routinely exceed the calculator estimate.The Column Everyone Leaves Out
The case for managed platforms is not that they are cheap. It is that they absorb work. If you run an unmanaged VPS, you own patching, firewall rules, TLS renewal, monitoring, log rotation, backup verification, and the 2 a.m. page when the disk fills up.
Price that honestly. If self-hosting costs an engineer four hours a month at a fully loaded rate of $100 an hour, that is $400 of labour against maybe $200 of infrastructure savings. On those numbers the managed platform wins and the argument is over.
But the labour figure is not fixed, and this is where teams reason badly. That four hours is largely a setup cost amortised badly. A VPS configured once with unattended upgrades, a reverse proxy handling certificates automatically, container-based deploys, and provider-side daily backups needs very little ongoing attention. The marginal hour cost of the fifth server is close to the cost of the first. Managed platform pricing, by contrast, is close to linear in the number of services you run.
That produces a fairly clean decision rule. If you run one or two services and nobody on the team enjoys infrastructure work, pay for managed. If you run six services, several environments, and someone already knows their way around systemd, the arithmetic inverts — and it keeps inverting further as you grow.Where the Middle Ground Actually Is
The framing of “VPS or managed cloud” is a false binary, and most mature teams end up straddling it deliberately.
The workloads that belong on cheap dedicated resources are the predictable ones: CI runners, staging environments, internal tooling, dev sandboxes, self-hosted Git or observability stacks, and anything bandwidth-heavy. These have steady utilisation, tolerate a few minutes of downtime, and gain nothing from elastic pricing. Running a CI fleet on per-second billed cloud instances is a well-known way to burn money on a workload that could sit on a fixed-cost box.
The workloads that justify managed platforms are the spiky and the stateful-critical: unpredictable production traffic, primary databases where you genuinely do not want to own recovery, and anything where a compliance requirement makes someone else’s audit report worth paying for.
The mistake is not choosing one side. It is defaulting to the expensive option for everything because the cheap option once looked like extra work, then discovering eighteen months later that a third of the bill is CI runners and egress.Do the Arithmetic Before the Renewal
None of this requires a migration. It requires an afternoon with the last three invoices, broken into compute, storage, egress, and managed-service surcharges, set against an honest estimate of the hours self-hosting would cost your specific team.
Most teams who run that exercise do not move everything. They move two or three things, and the saving pays for something they actually wanted to build.
