Post
A SaaS Empire on Pocket Change
One developer runs multiple $10K/month businesses on a $20 tech stack. Here's what the rest of us are overcomplicating.
You know that friend who shows up to the potluck with a dish that costs $3 to make and somehow it's the best thing on the table? While everyone else brought the $40 charcuterie board from Whole Foods?
That's Steve Hanov. Except instead of a potluck, it's the SaaS business. And instead of $3, it's $20 a month.
The setup
Steve runs multiple products — WebSequenceDiagrams, RhymeBrain, an investment platform, and others. Each pulls in around $10K in monthly recurring revenue. His entire infrastructure bill? Roughly $20/month.
Here's what his stack looks like compared to what most startups would use:
| Component | Steve's Stack | Typical Startup |
|---|---|---|
| Server | $5-10 VPS (Linode/DigitalOcean) | $200-2,000 AWS/GCP |
| Language | Go (single binary, no dependencies) | Node/Python + Docker + Kubernetes |
| Database | SQLite with WAL mode | PostgreSQL on RDS ($50-500+) |
| AI | Local GPU ($900 one-time) + OpenRouter | $100-1,000/mo API bills |
| Dev tools | GitHub Copilot ($20/mo) | $200+ in SaaS tools |
| Auth | Custom-built | Auth0/Clerk ($25-300/mo) |
| Total | ~$20/mo | $500-4,000/mo |
That's not a typo. Same revenue tier, wildly different cost structures.
Why this works
Three things make this possible:
Go compiles to a single binary. No package manager drama, no container orchestration, no "works on my machine." You build it, you scp it to the server, it runs. Steve's exact words: "There is no pip install dependency hell."
SQLite is more capable than you think. With Write-Ahead Logging enabled, SQLite handles concurrent reads and writes without readers blocking writers. For most apps that aren't Twitter-scale, it's more than enough. And it lives on the same machine as your app — zero network latency on every query.
A used GPU pays for itself fast. Steve bought a $900 GPU for batch AI tasks. At typical API pricing, that pays for itself in a month or two. For anything that doesn't need frontier-model intelligence, local inference is just math.
The real insight
Here's the line that stuck with me:
"Keeping costs near zero gives you the exact same runway as getting a million dollars in funding."
Read that again. A bootstrapped business with $20/month in costs and $10K/month in revenue has effectively infinite runway. A venture-backed startup burning $50K/month with the same revenue has about four months of oxygen left.
It's not about being cheap. It's about not paying complexity tax on problems you don't have.
Most startups adopt microservices, Kubernetes, managed databases, and distributed systems because they might need them someday. Steve didn't build for someday — he built for today, and today has been profitable for years.
The catch
Let's be fair: this approach has real tradeoffs.
- Single-server SQLite means your data lives on one machine. Backups matter a lot more.
- Custom-built auth means you're responsible for security updates yourself.
- Go's simplicity trades off against ecosystem richness — fewer libraries, more DIY.
- It works for one person. A team of 20 engineers would need different tooling for collaboration alone.
This isn't a blueprint for every business. It's a reminder that the default startup stack is a choice, not a requirement.
Sunday thought
Next time you're about to npm install your fourteenth monitoring service or spin up a Kubernetes cluster for an app with 200 users, maybe ask yourself: would a $5 VPS and SQLite do the job?
The answer is more often "yes" than the industry wants to admit.
Sources
- How I run multiple $10K MRR companies on a $20/month tech stack — Steve Hanov's original post with full stack breakdown
- SQLite Write-Ahead Logging — Official SQLite documentation on WAL mode and its concurrency model
- WebSequenceDiagrams — One of Steve's products, running on this exact stack