This article contains affiliate links. We may earn a commission if you sign up through our links, at no extra cost to you.
You built a side project. You deployed it to AWS because that’s what you know from work. Six months later, you’re paying $47/month for an app with 12 active users — three of whom are you, testing things. That’s the trap most developers fall into, and it’s completely avoidable.
Learning how to cut cloud hosting costs for side projects isn’t about being cheap. It’s about being rational. A side project that costs more to run than it earns is a hobby you’re paying a subscription fee for. This guide gives you concrete tactics — not vague advice like “right-size your instances” — to actually reduce what you’re spending without breaking what you’ve built.
The Real Reason Side Projects Are Expensive to Host
The problem isn’t cloud pricing. The problem is that enterprise-grade cloud platforms are designed for enterprise-grade usage patterns. AWS, GCP, and Azure are built around the assumption that you need high availability, multi-region redundancy, and fine-grained IAM controls. You don’t. Your portfolio site doesn’t need a NAT gateway.
The specific money drains I see most often:
- Always-on compute for apps with bursty or low traffic — you’re paying 24/7 for a server that handles 3 requests per hour
- Managed databases on small projects — RDS at $15-30/month when SQLite on a $6 VPS would do fine
- Data transfer costs — AWS charges $0.09/GB out, which adds up fast if you’re serving images directly from S3
- Forgetting about idle resources — load balancers, Elastic IPs, and snapshots billing quietly in the background
- Over-provisioned instances — running a t3.medium when a t3.micro would handle the load
Before you optimize anything, run a cost audit. Pull your last 3 months of invoices and categorize every line item. You’ll almost always find something embarrassing.
Tactic 1: Move to a Simpler, Cheaper Provider
This is the highest-leverage move and the one people resist the most. If you’re on AWS for a side project, you’re probably paying a complexity tax. Simpler providers charge less and are easier to reason about.
DigitalOcean is the obvious choice here. A basic Droplet starts at $6/month and includes a public IP, SSD storage, and a generous transfer allowance. No hidden costs for NAT gateways, no per-AZ data transfer fees, no surprise bills. Their pricing page shows you exactly what you’ll pay, which is genuinely rare in this industry.
For context: I moved three personal projects off AWS last year. Two were running on t3.micros with RDS postgres instances. The AWS bill was around $35/month per project. I consolidated them onto a single $12/month DigitalOcean Droplet running Postgres directly. Same performance, same uptime, $58/month saved. If you want to see how providers actually stack up on price and performance, our DigitalOcean vs Hetzner vs Vultr comparison breaks it down in detail.
Other providers worth considering:
- Hetzner — absurdly cheap European hosting. A CAX11 ARM instance is €3.29/month with 2 vCPUs and 4GB RAM. If your users are in Europe, this is hard to beat.
- Fly.io — great for containerized apps, has a generous free tier, and scales to zero so you don’t pay for idle time
- Railway — usage-based pricing that’s genuinely fair for low-traffic projects (though watch the costs as you scale — see our Railway migration experience for the full picture)
Tactic 2: Use Free Tiers Strategically (Not Accidentally)
Most developers stumble into free tiers and then get surprised when they end. The better approach is to design around them intentionally.
The free tiers actually worth using in 2026:
- Cloudflare Workers — 100,000 requests/day free. For API endpoints or edge logic on low-traffic projects, this is genuinely free forever, not just a trial.
- Vercel / Netlify — still excellent for static sites and frontend-heavy projects. The hobby tier covers most personal projects indefinitely.
- Supabase — free tier includes a Postgres database, auth, and storage. The catch: projects pause after 1 week of inactivity. Fine for active side projects, annoying for dormant ones.
- PlanetScale — their Hobby tier was killed in 2024, but the Scaler tier at $39/month is worth it only if you need MySQL at scale. For most side projects, it’s overkill.
- Neon — serverless Postgres with a free tier that actually stays free. Scales to zero, so you don’t pay for idle compute. This is my current recommendation for side project databases.
The key rule: never rely on a free tier for anything you can’t migrate in a weekend. Companies kill free tiers. Build your stack so you can swap the database or hosting layer without rewriting your app.
Get the dev tool stack guide
A weekly breakdown of the tools worth your time — and the ones that aren’t. Join 500+ developers.
No spam. Unsubscribe anytime.
Tactic 3: Kill the Always-On Server for Low-Traffic Apps
If your side project gets fewer than 1,000 requests per day, you almost certainly don’t need an always-on server. Serverless or scale-to-zero platforms cost nearly nothing at that traffic level.
The math is stark. A $6/month Droplet runs 24/7 whether you have traffic or not. Cloudflare Workers at 100k requests/day free, then $0.50 per million requests — for a project doing 500 requests/day, that’s effectively $0/month forever.
Where this breaks down: cold starts. If your app does anything compute-heavy at startup (loading ML models, complex initialization), serverless will feel sluggish. For standard web apps and APIs, cold starts on modern platforms are under 200ms and most users won’t notice.
Platforms that scale to zero well:
- Cloudflare Workers (best for edge logic, no cold starts)
- Fly.io (good for containerized apps, ~1-2s cold start)
- AWS Lambda (fine if you’re already in AWS, but the surrounding complexity costs you)
- Google Cloud Run (generous free tier, solid cold start performance)
Tactic 4: Stop Serving Assets From Your App Server
If your app server is handling image or file delivery, you’re wasting compute and paying for bandwidth you don’t need to. Put a CDN in front of your static assets. This is one of the few optimizations that simultaneously reduces cost AND improves performance.
The setup that works for most side projects:
- Store assets in Cloudflare R2 (S3-compatible, zero egress fees — this alone saves money vs S3)
- Serve them through Cloudflare’s CDN (free tier is generous, assets are cached globally)
- Your app server never touches a static file again
Cloudflare R2’s pricing: $0.015/GB storage, $0 egress. Compare that to AWS S3 at $0.023/GB storage plus $0.09/GB egress. If you’re serving 50GB of assets per month, that’s a $4.50/month difference just on egress — and it compounds as you grow.
Tactic 5: Consolidate Multiple Projects Onto One Server
This is the most underused tactic. Developers treat each side project like it needs its own infrastructure. It doesn’t.
A single $12/month DigitalOcean Droplet (2GB RAM, 1 vCPU) can comfortably run 3-5 low-traffic side projects using a reverse proxy like Caddy or Nginx. Each project gets its own subdomain, automatic HTTPS, and process isolation. The total cost per project drops to $2-4/month.
How to do it:
- Run each app on a different port (3001, 3002, 3003)
- Use Caddy as your reverse proxy — it handles SSL certificates automatically via Let’s Encrypt
- Use systemd or PM2 to manage processes
- One shared Postgres instance with separate databases per project
The tradeoff: if that server goes down, all your projects go down. For side projects, this is almost always an acceptable risk. You’re not running a business-critical SaaS. If you want to understand how this plays out at slightly larger scale, our Best Cloud Hosting for Side Projects guide covers provider-specific setups in detail.
Tactic 6: Set Billing Alerts and Hard Limits
This sounds obvious. Almost nobody does it.
Every major cloud provider lets you set billing alerts. AWS, GCP, and Azure all support budget alerts that email you when you hit a threshold. Set one at 80% of your expected monthly spend and another at 100%. Five minutes of setup prevents the $200 surprise bill.
For AWS specifically: enable AWS Cost Explorer, set a budget alert, and check the “unused resources” report monthly. I found a forgotten NAT Gateway costing me $32/month on a project I’d migrated off six months earlier. That’s $192 I paid for nothing.
DigitalOcean makes this easier than AWS — their billing is predictable by design, and they’ll warn you before you exceed your Droplet’s transfer allowance rather than just charging you silently.
Tactic 7: Right-Size Your Database
Managed databases are the biggest cost sink for side projects that have any persistence needs. Here’s the honest hierarchy:
- SQLite on your app server — free, zero overhead, perfectly fine for projects with low write concurrency. Litestream can replicate it to S3 for disaster recovery at almost no cost.
- Neon (serverless Postgres) — free tier, scales to zero, no idle costs. Best choice if you need Postgres and can’t use SQLite.
- Self-hosted Postgres on your VPS — $0 extra if you’re already paying for a server. Slightly more ops burden but worth it for the savings.
- Managed Postgres (RDS, Supabase Pro, etc.) — only worth it when you’re making money from the project and need the reliability guarantees.
The move from RDS to self-hosted Postgres is the single change that saves the most money for the most people. A db.t3.micro on RDS is ~$15/month. Postgres on a shared Droplet is $0 incremental. That’s $180/year per project.
What This Looks Like in Practice: A Real Example
Here’s a before/after for a typical developer side project setup — a Node.js API with a React frontend, Postgres database, and some file uploads:
| Component | Before (AWS) | After (Optimized) | Monthly Savings |
|---|---|---|---|
| Compute | t3.micro EC2 — $8.47 | $6 DigitalOcean Droplet (shared with 2 other projects) | ~$6.50 |
| Database | RDS t3.micro — $15.33 | Self-hosted Postgres on same Droplet | $15.33 |
| File Storage | S3 + CloudFront — $4.20 | Cloudflare R2 — $0.80 | $3.40 |
| Load Balancer | ALB — $16.20 | Caddy on the same Droplet — $0 | $16.20 |
| Data Transfer | ~$3.50 | ~$0 (within Droplet transfer allowance) | $3.50 |
| Total | ~$47.70/month | ~$2/month | $45.70 |
That’s $548/year saved on a single project. Multiply that across 3-4 side projects and you’re looking at real money.
When NOT to Optimize for Cost
Optimization has a cost too — your time. Here’s when to leave things alone:
- The project is making money — if your side project generates $500/month, spending 10 hours saving $30/month is a bad trade
- You’re using it to learn AWS/GCP — the education value is worth the premium
- Migration risk is high — some projects are deeply coupled to AWS services. A migration that breaks things costs more than the savings
- You need the reliability guarantees — if you have actual users who depend on uptime, managed services earn their cost
The Stack I’d Use for a New Side Project Today
If I were starting from scratch with the goal of keeping costs near zero until I had revenue:
- Frontend: Vercel (free hobby tier, automatic deployments from GitHub)
- Backend API: Fly.io (free allowances cover most low-traffic projects, scales to zero)
- Database: Neon (free tier serverless Postgres, no idle costs)
- File storage: Cloudflare R2 (zero egress fees, S3-compatible API)
- CDN / DNS: Cloudflare (free tier is exceptional)
- When I need a VPS: DigitalOcean starting at $6/month — predictable pricing, great docs, and their $200 credit for new accounts gives you months of free experimentation
Total cost for a new project with this stack: $0-6/month depending on whether you need persistent compute. That’s a far cry from the $40-50/month AWS defaults you into if you’re not paying attention.
If you’re evaluating which provider to land on for the long term, our detailed Best Cloud Hosting for Side Projects 2026 guide covers the full landscape with honest opinions on each option.
Final Recommendation
Learning how to cut cloud hosting costs for side projects comes down to one core principle: stop applying enterprise infrastructure patterns to hobby projects. You don’t need managed databases, load balancers, or multi-AZ redundancy for an app with 50 users.
Start with the audit — pull your last 3 months of cloud bills and find the waste. Then make the highest-leverage change first: if you’re on AWS with a managed database, moving to a consolidated VPS setup on DigitalOcean with self-hosted Postgres will likely cut your bill by 60-80% in an afternoon’s work. Everything else is incremental from there.
The goal isn’t to spend zero — it’s to spend proportionally to what your project actually needs. Right now, that’s probably a lot less than you’re paying.
Get the dev tool stack guide
A weekly breakdown of the tools worth your time — and the ones that aren’t. Join 500+ developers.
No spam. Unsubscribe anytime.