How to deploy a side project cheaply.

•

•

Running It for Five Pounds a Month

I once spent an entire weekend trying to architect a “perfectly scalable” Kubernetes cluster for a hobby project that had exactly four users—me and three friends. I was so obsessed with using the latest cloud-native tools that I didn’t realize I was burning through a hundred dollars a month just to keep the control plane breathing. Most tutorials online make it sound like you need a massive DevOps budget to get started, but they’re usually just selling you on the complexity. If you actually want to learn how to deploy a side project cheaply, you have to stop treating your weekend experiment like it’s the next Netflix.

I’m not here to sell you on a specific fancy provider or a complex orchestration layer. Instead, I want to share the boring, reliable setups I’ve actually used to keep my monthly bills under ten bucks while still sleeping through the night. I’ll walk you through the trade-offs of different VPS providers, why you should probably avoid managed services for now, and how to set up a basic pipeline that won’t break the moment you push a single line of code. This isn’t about hype; it’s about keeping your overhead low so your project actually survives long enough to be useful.

Table of Contents

Why Free Tier Cloud Providers Are Often a Trap

Why Free Tier Cloud Providers Are Often a Trap

The temptation to chase the “forever free” badge is real, especially when you’re just trying to get a prototype off your laptop. I’ve fallen for it more than once. The problem is that free tier cloud providers are rarely actually free once you move beyond a single `hello-world` endpoint. They operate on a model of “limited generosity,” which is a polite way of saying they give you just enough rope to hang yourself. You’ll find yourself hitting arbitrary request limits or memory caps right when your project actually starts gaining traction, forcing you into a sudden, expensive upgrade path that wasn’t in your original budget.

Then there is the “hidden tax” of complexity. To stay within those tight constraints, you often end up over-engineering your entire stack—implementing complex caching layers or aggressive data pruning just to avoid a $5 overage fee. I once spent an entire weekend refactoring a simple service into a convoluted mess of functions just to stay under a specific execution limit. It’s a massive waste of engineering time. When you’re minimizing cloud infrastructure costs, you have to weigh the actual dollar savings against the mental overhead of babysitting a platform that is constantly trying to throttle you. Sometimes, paying ten bucks a month for a predictable VPS is much cheaper than the hours you’ll spend fighting a “free” provider.

Minimizing Cloud Infrastructure Costs Before You Go Live

Minimizing Cloud Infrastructure Costs Before You Go Live

Before you even touch a cloud console, you need to audit your architecture for “hidden” complexity. I’ve seen too many people jump straight into a complex serverless architecture for startups, thinking they’ll only pay for what they use, only to realize that managed services like managed databases or specialized API gateways have a floor price that eats a budget alive. If your project is essentially a frontend talking to a small API, look at static site hosting options like S3 or Cloudflare Pages first. Moving the heavy lifting to the client side isn’t just a performance win; it’s a massive reduction in your monthly bill because you aren’t paying for CPU cycles to serve HTML files.

The real trick to minimizing cloud infrastructure costs is to embrace the “boring” middle ground. Instead of a massive Kubernetes cluster or a high-end managed service, I usually opt for a single, small VPS. It’s predictable. You know exactly what the bill will be at the end of the month, which is a luxury when you’re just trying to keep a hobby alive. If you can fit your entire stack—database, cache, and app—onto one $5 instance using Docker, you’ve already won. It’s not the most “elegant” solution from a pure DevOps standpoint, but predictability is more valuable than perfect scalability when your primary goal is not going broke.

My rules for keeping the monthly bill from becoming a second job

  • Stop using managed databases for everything. I learned the hard way that a “managed” PostgreSQL instance on a major cloud provider is a luxury most side projects can’t afford. If you aren’t hitting high concurrency, just run Postgres in a Docker container on the same VPS as your app. It’s slightly more work to back up, but it’ll save you $30 a month right out of the gate.
  • Stick to a single region. I once saw a junior dev set up a multi-region deployment for a hobby project because they thought it looked “professional.” All it did was double the data transfer costs and add latency. Pick one data center, stay there, and keep your traffic local.
  • Use a single, predictable VPS instead of a cluster of microservices. Kubernetes is a fantastic tool for a team of fifty engineers, but for a solo dev, it’s just a way to spend your weekends debugging YAML instead of writing features. A single $5 or $10 DigitalOcean or Hetzner box is usually enough to run your API, your worker, and your cache.
  • Set up billing alerts that actually work. It sounds basic, but I’ve seen people wake up to a $500 AWS bill because they left a NAT gateway running or a stray load balancer active. Set a hard limit at $10. If you hit it, you want to know immediately, not when the credit card statement arrives.
  • Avoid “Serverless” if your workload is predictable. Lambda and its cousins are great for sporadic tasks, but if you have a steady stream of requests, the cost scales linearly and can quickly outpace a fixed-price server. I prefer knowing exactly what my overhead is at the start of the month.

The TL;DR for your wallet and your sleep schedule

Stop chasing “free” tiers that hide complexity behind proprietary magic; a $5 VPS with predictable billing is almost always cheaper in terms of your actual time than a “serverless” architecture that scales your bill to infinity because of one recursive function.

Automate your deployment early, but keep it simple—use something like a basic shell script or a minimal GitHub Action rather than a heavy, expensive CI/CD suite that you’ll spend more time configuring than actually writing code.

Set up billing alerts on day one, even if the budget is only ten bucks; I’ve learned the hard way that the most expensive mistake isn’t the monthly subscription, it’s the unmonitored resource that runs for a week because you forgot to turn it off.

The Bottom Line

The Bottom Line: keep architecture simple.

At the end of the day, keeping a side project cheap isn’t about finding a magic, zero-cost tier that won’t vanish next Tuesday. It’s about being intentional with your architecture. I’ve learned the hard way that if you try to mimic a massive enterprise setup with Kubernetes and managed databases for a project that only has ten users, you aren’t being “professional”—you’re just burning money and time you don’t have. Stick to the basics: simple VPS instances, containerize your services so they are portable, and keep your data footprint small. The goal is to reach a point where the infrastructure is so boring and predictable that it stops being a distraction from the actual code you’re trying to write.

Don’t let the fear of a potential $50 bill stop you from shipping. I’ve seen more side projects die in the “planning and architecture” phase than I have from unexpected cloud bills. If you build with the mindset of predictability over perfection, you can always scale up when you actually have the traffic to justify it. Just remember that the most expensive piece of infrastructure you will ever own is the one that stays broken while you’re trying to sleep. Get it live, get it stable, and keep moving forward.

Frequently Asked Questions

At what point does the time I spend "optimizing" my infra actually cost more than just paying for a managed service?

The math is simple: if you spend a Saturday afternoon wrestling with a Kubernetes config just to save $15 a month, you’ve already lost. I’ve been there, thinking I was being “efficient” while actually burning my own hourly rate. If the setup takes longer than the time it would take to pay for the service over six months, just pay the bill. Your time is better spent shipping features or, ideally, going for a ride.

Is it worth setting up a proper CI/CD pipeline for a project that might only have five users, or should I just `scp` my files and call it a day?

If it’s just five users, `scp` is tempting, but you’re not building a pipeline for the scale—you’re building it for your future self. I’ve spent way too many Sunday afternoons manually fixing a botched deployment because I forgot to update a single environment variable. Set up a basic GitHub Action. It takes an hour now to prevent a three-hour headache later when you actually want to sleep. Automate the boring stuff so you don’t have to.

How do I prevent a sudden spike in traffic (or a buggy loop in my code) from turning my $5 VPS into a $500 surprise at the end of the month?

I’ve learned the hard way that “auto-scaling” is just a fancy word for “unlimited credit card debt” if you don’t set boundaries. On a cheap VPS, you aren’t looking for scale; you’re looking for a circuit breaker. Set up hard billing alerts in your provider’s dashboard immediately, but more importantly, use something like UFW or an external firewall to rate-limit incoming requests. If a buggy loop starts hammering your API, I’d rather the service die than my bank account.

If I go the container route with Docker, am I just adding unnecessary complexity that I'll have to debug later?

It’s a fair question. If you’re just running a single script, Docker is overkill. But I’ve learned the hard way that “it works on my machine” is a lie that eventually breaks in production. I use containers not because I love the tooling, but because I want to know that the environment I tested is exactly what hits the server. It’s a small upfront tax on complexity to avoid a massive tax on debugging later.

Tomasz Wierzbicki

About Tomasz Wierzbicki

I am not interested in arguing about frameworks. I am interested in why the thing broke at two in the morning and what would have prevented it. Most of what I know came from being wrong in production and writing it down afterwards.