Discussion
How I run multiple $10K MRR companies on a $20/month tech stack
p4bl0: Just in case, if there are others like me who where wondering what does "MRR" means, it seems to be "monthly recurring revenue".
codemog: A lot of this advice is good or at least interesting. A lot of it is questionable. Python is completely fine for the backend. And using SQLite for your prod database is a bad idea, just use Postgres or similar.
hackingonempty: > If you need a little breathing room, just use a swapfile.You should always use a swap file/partition, even if you don't want any swapping. That's because there are always cold pages and if you have no swap space that memory cannot be used for apps or buffers, it's just wasted.
komat: Cool but missing the Claude Code or Coding Agent part imo
chrismorgan: Python will take you a long way, but its ceiling (both typical and absolute) is far lower than the likes of Go and Rust. For typical implementations, the difference may be a factor of ten. For careful implementations (of both), it can be a lot more than that.Does the difference matter? You must decide that.As for your dismissing SQLite: please justify why it’s a bad idea. Because I strongly disagree.
mattmanser: What a load of nonsense.
danhau: Why is it nonsense? Sounds reasonable to me.
cenamus: I think the point is that your Python webapp will have more problems scaling to let's say 10,000 customers on a 5$ VPS tham Go. Of course you can always get beefier servers, but then that adds up for every project
brador: You already have and had everything you need to scale the business to max and it hasn’t happened so more money won’t help.What do you want VC to do?You didn’t bring a plan.
vxsz: I learned nothing. Most of this seems like common basic advice, wrapped up in AI written paragraphs...Initially from the title, I thought it would be about brainstorming and launching a successful idea, and that sort of thing.
PhilippGille: He specifically mentions that he is using GitHub Copilot because of how Microsoft bills per request instead of token.
weird-eye-issue: I'm just curious but is it the case that you signed up here 16 years ago and you didn't know what MRR means?
aleda145: Great stack! I'm doing a similar approach for my latest project (kavla.dev) but using fly.io and their suspend feature.Scaling to zero with database persistence using litestream has cut my bill down to $0.1 per month for my backend+database.Granted I still don't have that many users, and they get 200ms of extra latency if the backend needs to wake up. But it's nice to never have to worry about accidental costs!
chii: Not everybody who reads HN is well versed in business/entrepreneur oriented jagon.
vasco: HN means HackerNews btw, for those 15 year accounts that don't know the jargon
berkes: I was wondering this as well: Why did OP look for VC?In my case, I've used a similar strategy of keeping costs under €100/month. (But have sold, or stopped my ventures before hitting such MRRs as OP reports).I raised some capital to pay my own bills during development. But mostly to hire freelancers to work on parts that I'm bad at, or didn't have time for: advertising, a specific feature, a library, rewrite-in-rust (wink) or deep research into functional improvements.
weird-eye-issue: Yes. Clearly. But is the irony really lost on you?
thibaultmol: Pretty sure this is just written by AI... Why else would someone call "Sonnet 3.5 Sonnet and gpt 4o' high end models.
tkcranny: There’s a lot to be said about his approach with go for simplicity. Python needs virtual environments, package managers, dependencies on disk, a wsgi/asgi server to run forked copies of the server, and all of that uses 4x-20x the ram usage of go. Docker usually gets involved around here and before you know it you’re neck deep in helm charts and cursing CNI configs in an EKS cluster.The go equivalent of just coping one file across to a server a restarting its process has a lot of appeal and clearly works well for him.
gobdovan: Usually when there's "on a [low] $/mo" you'll hear basic advice. You'd be surprised to find out many folks are not aware of this!
firefoxd: I was writing about this recently [0]. In the 2000s, we were bragging about how cheap our services are and are getting. Today, a graduate with an idea is paying $200 amounts in AWS after the student discounts. They break the bank and go broke before they have tested the idea. Programming is literally free today.[0]: https://idiallo.com/blog/programming-tools-are-free
gobdovan: Nice list! I'd say the SQLite with WAL is the biggest money saver mentioned.One note: you can absolutely use Python or Node just as well as Go. There's Hetzner that offers 4GB RAM, 10TB network (then 1$/TB egress), 2CPUs machines for 5$.Two disclaimers for VPS:If you're using a dedicated server instead of a cloud server, just don't forget to backup DB to a Storage box often (3$ /mo for 1TB, use rsync). It's a good practice either way, but cloud instances seem more reliable to hardware faults. Also avoid their object store.You are responsible for security. I saw good devs skipping basic SSH hardening and get infected by bots in <1hr. My go-to move when I spin up servers is a two-stage Terraform setup: first, I set up SSH with only my IP allowed, set up Tailscale and then shutdown the public SSH IP entrypoint completely.Take care and have fun!
berkes: I always thought I had to add a swap file to avoid crashing with OOM. I wasn't aware of the cold pages overhead.Sometimes that crashing is what I want: a dedicated server running one (micro)service in a system that'll restart new servers on such crashes (e.g. Kubernetes-alike). I'd rather have it crash immediately rather than chugging along in degraded state.But on a shared setup like OP shows, or the old LAMP-on-a-vps, i'd prefer the system to start swapping and have a chance to recover. IME it quite often does. Will take a few minutes (of near downtime) but will avoid data corruption or crash-loops much easier.Basically, letting Linux handle recovery vs letting a monitoring system handle recovery
prakhar897: Do these things actually work? I've seen way too many gurus on twitter claiming to make 10K+ MRR every month. And then they quietly start applying for jobs. or selling courses instead of cashing in.
selcuka: > Nice list! I'd say the SQLite with WAL is the biggest money saver mentioned.Funny you said that. I migrated an old, Django web site to a slightly more modern architecture (docker compose with uvicorn instead of bare metal uWSGI) the other day, and while doing that I noticed that it doesn't need PostgreSQL at all. The old server had it already installed, so it was the lazy choice.I just dumped all data and loaded it into an SQLite database with WAL and it's much easier to maintain and back up now.
cagz: Nice tech read, but without information about which companies, doing what, just feels way too click-baity.
toong: I was about to say: welcome to HN
ianpurton: When he switches from Kubernetes in the cloud to Nginx -> App Binary -> Sqlite he trades operations functionality for cost.But, actually you can run Kubernetes and Postgres etc on a VPS.See https://stack-cli.com/ where you can specify a Supabase style infra on a low cost VPS on top of K3s.
jstanley: The most interesting thing in here is https://github.com/smhanov/laconic which is the author's "agentic research orchestrator for Go that is optimized to use free search & low-cost limited context window llms".I have been doing this kind of thing with Cursor and Codex subscriptions, but they do have annoying rate limits, and Cursor on the Auto model seems to perform poorly if you ask it to do too much work, so I am keen to try out laconic on my local GPU.
carabiner: I think it's good. I've definitely seen resource inflation exactly that OP is alluding to in enterprise. A desire to have some huge cloud based solution with AWS, spark bla bla when a python script with pandas in a cron job was faster.
gls2ro: Why is SQLite bad for production database?Yes, it has some things that behave differently than PostgreSQL but I am curious about why you think that.
trick-or-treat: For read only it can be a great option. But even then I would choose D1 which has an amazing free tier and is sqlite under da hood.
raincole: So what's the $10K MMR product, exactly? The lede is buried into nonexistence. Is it this one: https://www.websequencediagrams.com/ ...?
hackingonempty: > The enterprise mindset dictates that you need an out-of-process database server. But the truth is, a local SQLite file communicating over the C-interface or memory is orders of magnitude faster than making a TCP network hop to a remote Postgres server.I don't want to diss SQLite because it is awesome and more than adequate for many/most web apps but you can connect to Postgres (or any DB really) on localhost over a Unix domain socket and avoid nearly all of the overhead.It's not much harder to use than SQLite, you get all of the Postgres features, it's easier to run reports or whatever on the live db from a different box, and much easier if it comes time to setup a read replica, HA, or run the DB on a different box from the app.I don't think running Postgres on the same box as your app is the same class of optimistic over provisioning as setting up a kubernetes cluster.
sailingcode: AI has solved the "code problem", but it hasn't solved the "marketing problem"…
trick-or-treat: LMFAO at Linode / Digital Ocean as lean servers.Hetzner / Contabo maybe. Cloudflare workers definitely.This guy is not at my level and multiple $10k MRR is possible but unlikely.
globalnode: nice article, validates some of the things i already thought. although im sure things like aws and database servers etc are still useful for big companies
blitzar: Obviously they are lacking the sigma hustle grindset.Its like not having syphilis or cancer, its a good thing.
petesergeant: If you can’t articulate what you need funding for, don’t be surprised if nobody will give it to you?
petesergeant: You can get all the advantages and almost none of the constraints by buying a bigger base server for $50/m
saltmate: But then you don't get the benefits of having the DB locally, with in-process access.
fleagle: Such a cringe worthy opening "The feedback was simply: "What do you even need funding for? I hear this time and time again when I try to grow my ideas."Which I read as"I'm soooo amazing, people tell me off for even pretending to be normal... "
44za12: I read it as an article in defence of boring tech with a fancier/clickbaity title.Here’s the more honest one i wrote a while back:https://aazar.me/posts/in-defense-of-boring-technology
dnnddidiej: Is infra where investors money is going? I imagined salaries would be it. Marketing costs maybe.
swiftcoder: For single-person companies infra can be the single largest expense (especially if you aren't paying yourself yet!). The day you bring a full-time employee onboard, I have a hard time seeing infra costs ever exceeding salaries for most shops
t_mahmood: SQLite is fine, but I have ran Postgresql on a $20 server without any issues, and I would suggest if you have to deal with concurrent users and tasks, Postgresql is the way to go. SQLite WAL works, but sometimes it caused some issues, when you have a lot of concurrent tasks running continuously.And, not sure I'm correct, but I felt Postgresql has more optimized storage if you have large text data than SQLite, at least for me I had storage full with SQLite, but same application on Postgresql never had this issue
f311a: There are zero reasons to limit yourself to 1GB of RAM. By paying $20 instead of $5 you can get at least 8gb of RAM. You can use it for caches or a database that supports concurrent writes. The $15 difference won’t make any financial difference if you are trying to run a small business.Thinking about on how to fit everything on a $5 VPS does not help your business.
ValtteriL: >The feedback was simply: "What do you even need funding for?"Not clear from the text, but what was your plan using the funding on? If you did not have a plan, what did you expect? VCs want to see how adding more money results in asymmetric returns.
jampekka: $15 is not exactly zero, is it? If you don't need more than 1GB, why pay anything for more than 1GB?I recall running LAMP stacks on something like 128MB about 20 years ago and not really having problems with memory. Most current website backends are not really much more complicated than they were then if you don't haul in bloat.
Aerolfos: Not only that, his whole business model seems to be "profit off the AI bubble and get the big techs to indirectly subsidize you"Which obviously works, it's not like there aren't tons of multi-million startups ultimately doing the exact same thing, and yet. It feels a bit... trite?
6stringmerc: What a fascinating article. I especially love the part about writing extremely detailed requests which only cost $0.04 versus the token approach most “vibe code” devs use. Fortunately his tactic is almost impossible to emulate for 90% of the YCombinator audience / HN commentators.Why do I know this? Because there had to be a declaration here to stop using ChatGPT and other Agents to write YOUR OWN GODDAMN POSTS. Thinking isn’t your strong suit, Greed is, and taking the time to learn the power of English doesn’t satisfy the latter, so you minimize it to your own detriment.Don’t get mad at me. Go punch a mirror.
zmmmmm: Can anybody validate this Github Copilot trick for accessign Opus 4.6? Sounds too good to be true.
nesk_: It is true, it's the official pricing of GitHub Copilot.
ponco: Always good to challenge the narrative - but I don't pay for RDS Postgres because of the WAL, replication, all the beauty of pg etc. I pay RDS because it's largely set and forget. I am gladly paying AWS to think about it for me. I think at a certain scale, this is a really good tradeoff. At the very beginning it could be overkill, and at the top end obviously its unsuitable - but for most of us those tradeoffs are why it's successful.
nesk_: >Really? Lol. If it's true why would you publish it? To ensure Microsoft will patch it up and fuck up your workflow?It's true and it's their official pricing, so talking about it won't change anything.People are spending way too much money with Claude Code while they could simply pay for GitHub Copilot and fire up OpenCode to get the same results but way cheaper.
Jolter: I mean, you’re not wrong about the facts, but it’s also pretty trivial to migrate the data from SQLite into a separate Postgres server later, if it turns out you do need those features after all. But most of the time, you don’t.
t_mahmood: About security, wall of shame story,Once I had Postgresql db with default password on a new vps, and forgetting to disable password based login, on a server with no domain. And it got hacked in a day, and was being used as bot server. And that was 10 years ago.Recently deployed server, and was getting ssh login attempts within an hour, and it didn't had a domain. Fortunately, I've learned my lesson, and turned of password based login as soon as the server was up and running.And similar attempts bogged down my desktop to halt.Having an machine open to the world is now very scary. Thanks God for service like tailscale exists.
Madmallard: So is the slopaclypse gonna destroy HN too? 2nd from the top AI written non-proofread article
specproc: I'm not what I'd call a heavy user, but I've also mainly been using Copilot in VS Code on the basic sub.You do get Opus 4.6, and it's really affordable. I usually go over my limits, but I'm yet to spend more than 5 USD on the surcharges.Not seen a reason to switch, but YMMV depending on what you're doing and how you work.
gobdovan: Yep, it literally is a one-file backup. And runtime it's so much faster for apps where write serialisation is acceptable.
eurleif: Looks like the overhead is not insignificant: Running 100,000 `SELECT 1` queries: PostgreSQL (localhost): 2.77 seconds SQLite (in-memory): 0.07 seconds (https://gist.github.com/leifkb/1ad16a741fd061216f074aedf1eca...)
bob1029: This is mostly about thread communication. With SQLite you can guarantee no context switching. Postgres running on the same box gets you close but not all the way. It's still in a different process.
senko: If this sounds like basic advice, consider there are a lot of people out there that believe they have to start with serverless, kubernetes, fleets of servers, planet-scale databases, multi-zone high-availability setups, and many other "best practices".Saying "you can just run things on a cheap VPS" sounds amateurish, people are immediately out with "Yeah but scaling", "Yeah but high availability", "Yeah but backups", "Yeah but now you have to maintain it" arguments, that are basically regurgitated sales pitch for various cloud platforms. It's learned helplesness.
afro88: It doesn't look like they think about how to make it fit though. They just use a known good go template
balgg: There is also ARR which is "annual recurring revenue" and you should know that when people use ARR they usually are just making up numbers based on their current MRR (so lying). I've seen people announce their ARR after running their business for two whole months!
harvey9: At 10,000 paying customers I don't think it is frivolous to move to a 10/month vps, or maybe a second 5/month one for fail-over.
weird-eye-issue: Says the guy with almost 5k HN comments in less than 5 years
Jolter: I think his argument is that the functionality is unnecessary. You don’t need dynamic service scaling because your single-instance service has such high capacity to begin with.I guess it’s all about knowing when to re-engineer the solution for scale. And the answer is rarely ”up front”.
kaliqt: There’s a happy medium and $5 for 1GB RAM just isn’t it.
lijok: Not a very strong argument now is it?
jofzar: They haven't also worked at a company where the meetings have MRR said like every 4 seconds. I'm so jealous of them
100ms: NVME read latency is around 100usec, a SQLite3 database in the low terabytes needs somewhere between 3-5 random IOs per point lookup, so you're talking worst case for an already meaningful amount of data about 0.5ms per cold lookup. Say your app is complex and makes 10 of these per request, 5 ms. That leaves you serving 200 requests/sec before ever needing any kind of cache.That's 17 million hits per day before factoring in the massive parallelism that almost any bargain bucket NVME drive already offers. But already you're talking about quadrupling the infrastructure spend before serving a single request, which is the entire point of the article.
p4bl0: Haha ^^'.Honestly, yes. I'm on HN for tech content, I don't really care about startups and the business side of things, even though sometimes there are interesting reads on this side as well. Also, it may very well be the case that I rediscover the meaning of MRR for the second or third time in sixteen years :).
jofzar: I'm jealous of you, like seriously, you somehow haven't worked at a company where a C suite says MRR like every 5th sentence in meeting.
KronisLV: > I use Linode or DigitalOcean. Pay no more than $5 to $10 a month. 1GB of RAM sounds terrifying to modern web developers, but it is plenty if you know what you are doing.If you get one dedicated server for multiple separate projects, you can still keep the costs down but relax those constraints.For example, look at the Hetzner server auction: https://www.hetzner.com/sb/I pay about 40 EUR a month for this: Disk: 736G / 7.3T (11%) CPU: Intel Core i7-7700 @ 8x 4.2GHz [42.0°C] RAM: 18004MiB / 64088MiB I put Proxmox on it and can have as many VMs as the IO pressure of the OSes will permit: https://www.proxmox.com/en/ (I cared mostly about storage so got HDDs in RAID 0, others might just get a server with SSDs)You could have 15 VMs each with 4 GB of RAM and it would still come out to around 2.66 EUR per month per VM. It's just way more cost efficient at any sort of scale (number of projects) when compared to regular VMs, and as long as you don't put any trash on it, Proxmox itself is fairly stable, being a single point of failure aside.Of course, with refurbished gear you'd want backups, but you really need those anyways.
jofzar: I decided to look at their website halfway through the post,https://imgur.com/a/7M4PdO6This is really what 10k mrr can get you? A badly designed AI slop website that isn't even mobile correctly compatible. The logo is white background on black website like a university project.I can't believe that people are willingly spending money on this.
jmward01: The basic premise, try to be lean, is a good one. The implementation will clearly be debated with everyone having their own opinion on it but the core point is sound. I'd argue a different version of this though: keeping things lean forces simplicity and focus which is incredibly important early on. I have stepped into several startups and seen a mess of old/broken/I don't know what it does so leave it/etc etc. All of that, beyond the cost, slows you down because of the complexity. Regular gardening of your tech stack matters and has a lot of benefits.
dizhn: Author's own 'auth' project works with sqlite and postgres.
asymmetric: > Also avoid their object store.Curious as to why you say this. I’m using litestream to backup to Hetzner object storage.It’s probably more expensive?Not sure but I also don’t have to set up cron jobs and the like.
senko: [delayed]
anana_: > Sometimes you need the absolute cutting-edge reasoning of Claude 3.5 Sonnet or GPT-4oDead giveaway
senko: [delayed]
andai: Yeah, came here to mention that too!From the article:>To manage all this, I built laconic, an agentic researcher specifically optimized for running in a constrained 8K context window. It manages the LLM context like an operating system's virtual memory manager—it "pages out" the irrelevant baggage of a conversation, keeping only the absolute most critical facts in the active LLM context window.The 8K part is the most startling to me. Is that still a thing? I worked under that constraint in 2023 in the early GPT-4 days. I believe Ollama still has the default context window set to 8K for some reason. But the model mentioned on laconic GitHub (Qwen3:4B) should support 32K. (Still pretty small, but.. ;)I'll have to take a proper look at the architecture, extreme context engineering is a special interest of mine :) Back when Auto-GPT was a thing (think OpenClaw but in 2023), I realized that what most people were using it for was just internet research, and that you could get better results, cheaper, faster, and deterministically, by just writing a 30 line Python script.Google search (or DDG) -> Scrape top N results -> Shove into LLM for summarization (with optional user query) -> Meta-summary.In such straightforward, specialized scenarios, letting the LLM drive was, and still is, "swatting a fly with a plasma cannon."
Myzel394: Does anybody know a good service to self host Ai? My graphics card is shit, I want to rent hardware to run my own models
usernametaken29: I have used SQLite with extensions in extreme throughput scenarios. We’re talking running through it millions of documents per second in order to do disambiguation. I won’t say this wouldn’t have been possible with a remote server, but it would have been a significant technical challenge. Instead we packed up the database on S3, and each instance got a fresh copy and hammered away at the task. SQLite is the time tested alternative for when you need performance, not features