Choosing a VPS in 2025: What Actually Matters

Why every provider's pricing page is designed to confuse you, and how to cut through it

I spent a Saturday last month trying to figure out whether to move a side project from DigitalOcean to Hetzner. The app is a Node server with a Postgres database, serving maybe 2,000 requests a day. Not exactly Netflix-scale. I figured it would take twenty minutes to compare prices and specs across providers.

It took three hours. And by the end, I had a spreadsheet with so many asterisks and footnotes it looked like a legal document. Because the VPS market in 2025 is, somehow, one of the most opaque pricing environments in all of tech. Every provider structures their plans differently. They use different names for the same things. They bundle bandwidth one way here and another way there. One provider lists "4 vCPUs" that turn out to be shared ARM cores. Another lists "2 vCPUs" that are dedicated AMD EPYC threads which will outperform the first provider's four cores by a wide margin. It's a mess.

I ended up building a VPS comparison tool partly out of frustration and partly because I kept needing to do this math for different projects. But before you go compare numbers, it's worth understanding what actually matters when you're choosing a VPS — and what's just marketing noise.

The vCPU Lie

Let's start with the biggest source of confusion: what a "vCPU" actually is. Because the answer is: it depends entirely on who's selling it to you.

On DigitalOcean and Vultr, a vCPU on their basic plans is a shared hyperthread. You're sharing that physical CPU thread with other tenants. How much of it you actually get depends on how busy your neighbors are. It's like renting a desk in a coworking space — technically it's "yours," but if the person next to you is on a conference call and a drummer is practicing in the next room, your experience will vary.

Hetzner's shared vCPUs, by contrast, tend to run on newer AMD EPYC and Intel Xeon hardware, and anecdotally they're less oversubscribed. I've run identical Node.js workloads on a 2-vCPU Hetzner box and a 2-vCPU DigitalOcean box and seen 15-20% better response times on Hetzner. Same nominal specs. Completely different real-world performance.

Then there are dedicated vCPU plans, where you get guaranteed access to physical CPU threads. DigitalOcean calls these "Premium" and "Dedicated" droplets. Vultr has "Dedicated Cloud" instances. These cost 2-4x more than shared plans with the same vCPU count, but the performance difference is night and day for CPU-bound workloads. If you're running something like video transcoding, image processing, or a build server, shared vCPUs will make you miserable.

RAM: The Number That Looks Simple and Isn't

RAM is the one spec where you'd think comparison would be simple. 4 GB is 4 GB, right?

Mostly, yes. But there are wrinkles. Some providers at the lower tiers allocate a portion of their headline RAM number as swap space or reserve some for the hypervisor. You might see "2 GB RAM" on the tin but only have 1.7 GB available to your processes. It's not a huge difference, but if you're running a tight workload — say a Java app that's flirting with OOM kills — that 300 MB matters.

The more useful metric is price-per-GB-RAM. This is where the differences between providers really show up. At the $5-6/month tier, DigitalOcean gives you 1 GB of RAM. Hetzner gives you 2 GB for roughly the same price. That's a 2x difference in memory-per-dollar, and it compounds as you scale up. Calculating price-per-GB-RAM and price-per-vCPU across providers is where the real value comparisons emerge.

The Bandwidth Trap

Bandwidth pricing is where VPS providers get especially creative with obfuscation. There are three models floating around, and they work very differently.

DigitalOcean and Vultr give you a set amount of transfer per month — typically 1-6 TB depending on your plan — and charge overage fees if you exceed it. DigitalOcean charges $0.01 per GB of overage. Sounds tiny until you realize a surprise traffic spike that pushes you 500 GB over your limit adds $5 to your bill. Not catastrophic, but annoying.

Hetzner gives you 20 TB of outbound traffic on most plans. Twenty terabytes. For a small web app, you will never, ever hit that ceiling. It's effectively unlimited for the vast majority of use cases. Inbound traffic is unmetered. This alone makes Hetzner the obvious choice for bandwidth-heavy workloads like media servers, CDN origins, or download hosts.

AWS Lightsail gives you a bundled transfer allowance, but if you outgrow Lightsail and move to regular EC2, you enter the famously nightmarish world of AWS data transfer pricing, where egress costs can double your compute bill overnight. I've seen it happen. A friend's startup got a $3,400 AWS bill in a single month, and $2,100 of it was data transfer charges they hadn't anticipated. That's not a pricing model; that's a trap.

The $5/Month Tier: Where Most of Us Actually Live

Let's talk about concrete use cases. If you're hosting a small web app — a personal project, a portfolio site with a backend, a Discord bot, a lightweight API — you're looking at the $4-10/month tier. This is where most independent developers spend their time, and it's where the differences between providers are most dramatic on a percentage basis.

At this tier, here's what you get from the major players as of early 2025. DigitalOcean's cheapest droplet is $4/month: 1 shared vCPU, 512 MB RAM, 10 GB SSD, 500 GB transfer. Bump to $6/month and you get 1 GB RAM and 25 GB storage. Vultr's cheapest is $2.50/month for IPv6-only (useless for most things), or $3.50/month for 1 vCPU, 512 MB RAM, 10 GB SSD.

Hetzner's cheapest shared server is around $4.50/month (prices in euros, so it fluctuates) for 2 shared vCPUs, 2 GB RAM, 20 GB SSD, and 20 TB transfer. Read those numbers again. Double the RAM, double the CPU, double the storage, and forty times the transfer — for the same price. At this tier, the value difference isn't subtle. It's absurd.

The tradeoff? Hetzner's data centers are in Germany, Finland, and the US (Ashburn, Virginia and Hillsboro, Oregon). If your users are in the US and you pick a European data center, you'll add 80-120ms of latency. For an API-backed web app, that's noticeable. For a personal project or internal tool? Doesn't matter at all. And if you pick their US locations, latency is comparable to any other US provider.

The $20-40/Month Tier: Databases and Real Workloads

When you start running a database — Postgres, MySQL, MongoDB — memory becomes the thing you care about most. A database that can fit its working set in RAM is fast. A database that can't is slow. There's almost no in-between.

At the $20-40/month tier, you're typically looking at 4-8 GB of RAM and 2-4 vCPUs. This is where I run most of my Postgres instances. It's enough for a database with a few hundred thousand rows and moderate query complexity. Go much past that and you'll want to be on the 8 GB tier at minimum.

DigitalOcean charges $24/month for 2 vCPUs and 4 GB RAM. Linode (now Akamai) is about the same: $24/month for 2 vCPUs and 4 GB. Hetzner? You can get 2 vCPUs and 4 GB for around $7/month. Or 4 vCPUs and 8 GB for about $14/month. I know I keep coming back to Hetzner's pricing, but the gap at this tier is hard to overstate. You can get double the specs for half the price.

For databases specifically, storage type matters too. All the major providers use NVMe SSDs at this tier, but IOPS (input/output operations per second) vary. If you're running a write-heavy database, Vultr's High Performance plans and Hetzner's dedicated servers tend to have the best raw disk performance. DigitalOcean's standard droplets are fine for read-heavy workloads but can bottleneck on sustained writes.

Self-Hosting AI Models: Where Hetzner Gets Ridiculous

Here's a use case that's gotten very interesting in the past year: running your own language models. With quantized open-source models like Llama 3 and Mistral getting actually useful, the question of where to host them is suddenly practical rather than theoretical.

If you're running a model that fits in system RAM (say, a 7B parameter model quantized to 4-bit, which needs about 4 GB), you can technically run it on any VPS with enough memory. It'll be slow — CPU inference on a shared vCPU is not going to win any speed records — but it works for personal use or low-traffic APIs. A $14/month Hetzner box with 8 GB RAM can handle this.

For anything more serious, you want GPU servers. And this is where the pricing landscape gets wild. AWS's cheapest GPU instance (g4dn.xlarge) runs about $0.526/hour, or roughly $380/month on-demand. Hetzner offers dedicated servers with NVIDIA GPUs starting around $200/month. For serious inference work, their GEX44 with an RTX 4000 SFF comes in at a fraction of what comparable AWS or GCP GPU instances cost.

I wrote in more detail about the hardware requirements for running LLMs — the memory math, the quantization tradeoffs, the throughput calculations. But the short version is: if you're self-hosting AI models and you're paying AWS prices, you're probably overpaying by 50-70%. The European providers have this market figured out.

The Things That Don't Show Up on Pricing Pages

Specs and prices are necessary but not sufficient. After running servers on every major provider over the past decade, here are the things I've found actually matter day-to-day that you won't find on any comparison page.

Console and API quality. DigitalOcean's control panel is still the gold standard. Clean, fast, well-designed. Vultr's is fine. Hetzner's Cloud console is surprisingly good for a company that used to be known for bare-metal-only servers. AWS's console is a labyrinth of nested menus and IAM permissions that has made me question my career choices on multiple occasions.

Snapshot and backup pricing. DigitalOcean charges 20% of your droplet cost for weekly backups. Hetzner charges 20% too, but since the base server costs less, the absolute cost is lower. Vultr includes one automatic backup for free on some plans. Snapshots are free on Hetzner (with size limits); DigitalOcean charges $0.06/GB/month. This stuff adds up if you have multiple servers.

Support quality. This one is subjective, but I've had consistently good experiences with DigitalOcean and Linode support. Fast responses, people who actually understand the technical issue. Hetzner's support is competent but slower, and their documentation is sometimes only available in German (though this has improved a lot). AWS support is a paid add-on that starts at $29/month for developer-tier access, which feels like being charged extra for a life jacket on a boat you already paid for.

Network quality and peering. This is the invisible differentiator. A VPS with great peering to your users' ISPs will feel snappy even with modest specs. DigitalOcean and Vultr have excellent global networks with data centers in dozens of cities. Hetzner's network is phenomenal within Europe but can be a bit slower to Asia-Pacific destinations. For a globally distributed user base, Vultr's 32 data center locations give you the most flexibility.

The Ecosystem Tax

One thing that keeps people on DigitalOcean and Linode even when Hetzner is objectively cheaper: the managed services ecosystem. DigitalOcean offers managed Postgres, managed Redis, managed Kubernetes, load balancers, and a CDN — all tightly integrated with their droplets. Linode (Akamai) has similar offerings.

Hetzner has... a load balancer. And a firewall. And object storage. That's about it for managed services. If you want a managed database, you're setting it up yourself or using a third-party service like PlanetScale or Neon. For some people that's fine — even preferable. For others, especially small teams without a dedicated ops person, the convenience of clicking "Create Database" in the same console where your servers live is worth paying a premium.

I think of it as an ecosystem tax. You're paying more per unit of compute in exchange for less operational complexity. Whether that trade is worth it depends entirely on your team and your workload. A solo developer running a side project can manage their own Postgres just fine. A five-person startup with a production app serving paying customers might reasonably decide that $24/month for a managed database is cheaper than the engineering time they'd spend babysitting a self-managed one.

My Actual Setup (Since People Always Ask)

I run a mix. My production apps that serve US users are on DigitalOcean, mostly because I've been there for years and the managed Postgres is convenient. My personal projects and dev servers are on Hetzner because I can get 4x the resources for the same money and I don't mind managing things myself. I use Vultr for anything where I need a specific geographic location they cover that the others don't.

I've never used AWS for a personal project, and I never will. The pricing model is designed for enterprises with procurement departments, not for individuals who want to know what their bill will be before the month ends. The day I accidentally left an Elastic IP unattached and got charged $3.60 for the privilege of an IP address that wasn't even connected to a running server was the day I decided AWS isn't for hobby projects.

AWS Lightsail is the exception — it's Amazon's attempt at simple, predictable VPS pricing, and it's honestly not bad. The plans are competitive with DigitalOcean, and you get the option to migrate to full AWS services later if you outgrow it. But that migration path is also a trap, because "later" arrives, you migrate, and suddenly you're in AWS pricing territory. It's a gateway drug with a very expensive habit.

How to Actually Decide

After all of this, here's the framework I use when someone asks me "which VPS should I pick?"

If you want the best value per dollar and you're comfortable managing your own server: Hetzner. It's not even close. You'll get 50-70% more resources for the same price as US-based competitors. Pick a US data center if latency to American users matters.

If you want the best developer experience and managed services: DigitalOcean. The console is a pleasure to use, the documentation is excellent, and the managed database and Kubernetes offerings save real engineering time. You'll pay more for raw compute, but you're buying convenience.

If you need maximum geographic distribution: Vultr. Thirty-two data centers across six continents. Nobody else comes close for location variety.

If you're self-hosting AI models or running GPU workloads: Hetzner's dedicated GPU servers or a specialized GPU cloud like Lambda or RunPod. AWS and GCP GPU pricing is for companies that don't look at their cloud bills.

If you're already in the AWS ecosystem: Lightsail for simple workloads. But be honest with yourself about whether you actually need the AWS ecosystem or whether you've just been told you do.

Stop Guessing, Start Comparing

The reason VPS comparison is so frustrating is that providers are counting on you not doing it. They want you to land on their pricing page, see a number that seems reasonable, and sign up without checking what the same money buys elsewhere. The naming conventions are different by design. The bundling is confusing by design. The fine print about shared vs. dedicated, bandwidth caps, and overage fees is buried by design.

The VPS comparison tool puts everything side by side — CPU, RAM, storage, bandwidth, price-per-GB-RAM, price-per-vCPU — so you can see the actual value you're getting from each provider. It takes the three-hour spreadsheet exercise I described at the beginning of this article and turns it into a thirty-second comparison. I wish I'd had it when I started that Saturday afternoon research session.

The right VPS for your project is the one where the specs match your workload and the price matches your budget. Everything else is marketing. Do the comparison, pick the provider, and get back to building the thing you actually care about.