When managed services stop making sense
Managed services are fantastic when you're moving fast. They let you ship features instead of managing infrastructure. But here's what nobody tells you upfront: that convenience comes with a 2-5x markup on your compute costs. For early-stage products, this trade-off makes perfect sense. But as your infrastructure matures and workloads stabilize, you're essentially paying premium prices for automation you could handle yourself.
Understanding the Cost Structure
Let's look at the actual numbers (prices from January 2025, us-east-1 and eu-central regions):
Container Services - AWS Fargate (2 vCPU, 4GB): $0.12/hour → $87/month (pricing) - AWS EC2 m6i.large (2 vCPU, 8GB): $0.096/hour → $70/month (pricing) - Difference: 20% more expensive for half the memory
Standard Compute Comparison - AWS EC2 m6i.2xlarge (8 vCPU, 32GB): $0.384/hour → $280/month (pricing) - Hetzner CCX33 (8 vCPU, 32GB, dedicated): €29.00/month → ~$32/month (pricing) - OVH B2-30 (8 vCPU, 30GB): $0.238/hour → $174/month (pricing) - Difference: 38-89% cheaper
Kubernetes - EKS/GKE control plane: $73/month per cluster (EKS, GKE) - Self-managed K3s: $0/month for control plane - Difference: $876/year per cluster before any workloads
The pattern is clear: the more management a service provides, the more you pay. And these premiums compound across your entire infrastructure.
Important note: These comparisons use general-purpose and dedicated instances. If your workload can tolerate shared CPU or burstable instances (like AWS t3/t4g family or Hetzner CPX line), savings can be even more dramatic—often 50-70% cheaper than the standard instances shown here.
The Migration Path
Moving away from managed services is straightforward. It's not technically complex—it's just work that needs doing.
Step 1 - Managed Containers to Virtual Machines
Instead of Fargate or Cloud Run, run your containers on EC2 or Compute Engine. You're already using Docker, so this is mostly about deployment tooling. Use ECS on EC2 or just Docker Compose on VMs with a load balancer.
Expected savings: 50-70% on compute costs Time investment: 2-4 weeks for most teams
Step 2 - Managed Kubernetes to Self-Managed
If you need Kubernetes, run it yourself. K3s makes this surprisingly simple—it's a lightweight, production-ready distribution that you can deploy with Terraform or Ansible in an afternoon.
Expected savings: Control plane costs eliminated, better control over worker node costs Time investment: 1-2 weeks initial setup, minimal ongoing maintenance
Step 3 - Premium Clouds to Cost-Effective Providers
This is where the real savings happen. Providers like Hetzner and OVH offer the same compute resources at dramatically lower prices. If your workloads are containerized, they'll run anywhere.
Expected savings: 70-90% on compute Time investment: 2-4 weeks for initial migration
What Actually Changes
When you move away from managed services, you take on: - OS patching and security updates (automatable with Ansible) - Instance lifecycle management (handled by Auto Scaling Groups) - Monitoring setup (Prometheus/Grafana work everywhere) - Backup management (scriptable, runs on cron)
Here's the thing: if you're running anything at scale, you're already doing most of this work. Managed services don't eliminate operational responsibility—they just charge you premium prices to abstract it.
The Hybrid Approach
You don't have to migrate everything. Smart cost optimization looks like:
Keep on managed services - Highly variable workloads (auto-scaling is worth the premium) - Services you genuinely don't want to manage (databases, message queues) - Compliance-critical infrastructure
Migrate to self-managed - Steady-state applications running 24/7 - Background job processors with predictable load - Internal tools and development environments - Batch processing workloads
Move to alternative providers - Development and staging environments (lowest risk, immediate savings) - CI/CD infrastructure (perfect fit for cheaper clouds) - Monitoring and observability stacks - Read replicas and secondary databases
The Migration Tooling
Modern infrastructure tools make this migration work straightforward:
- Terraform/OpenTofu - Manage infrastructure across any provider with the same codebase
- Ansible - Automate OS configuration and application deployment
- Docker - Your containerized workloads are already portable
- Kubernetes - If you're using it, your apps work on any cloud
- Prometheus/Grafana/Loki - Cloud-agnostic monitoring that works everywhere
The infrastructure-as-code approach means migration is mostly changing provider configurations in your Terraform files and running deploys. Boring work, but not complex work.
When It Makes Sense
This migration effort makes sense when: - You're spending more than $5,000/month on compute - Your workloads are relatively stable (not wildly variable) - You have engineering time to invest (one person, 4-8 weeks) - You want permanent cost reduction, not one-time savings
The ROI calculation is simple. Spending one engineer-quarter to reduce $20,000/month to $7,000/month means you're saving $156,000/year. The migration pays for itself in the first month.
The Bottom Line
Managed services exist to help you move fast early on. That's their value proposition, and it's legitimate. But after your infrastructure stabilizes, you're paying convenience premiums for services you could run yourself without significant complexity.
The migration path is clear: 1. Managed containers to self-managed VMs (50-70% savings) 2. Managed Kubernetes to self-managed K3s (eliminate control plane costs) 3. Premium clouds to cost-effective providers (70-90% savings)
Each step is boring infrastructure work. None of it is technically difficult. All of it pays for itself quickly and only needs to be done once.
The question isn't whether you can save money—it's whether you're willing to invest a few weeks of engineering time to capture permanent cost reductions. For most teams spending over $10,000/month on compute, the answer should be yes.
Note: Pricing references are accurate as of January 2025 for us-east-1 (AWS) and eu-central (Hetzner/OVH) regions. Verify current pricing before planning migrations.