Self-hosting

The real cost of self-hosting team chat

A line-by-line budget for running your own chat server: compute, storage, backups, and the staff hours nobody puts in the comparison.

· 4 min read

Every “self-hosting is cheaper” post compares a $10 VPS against a per-seat invoice, declares victory, and quietly omits the most expensive line item, which is a human being. This one includes it.

Figures are illustrative and provider-dependent. The point is the structure of the budget, not the exact digits.

Line 1: Compute

The cheapest and most over-estimated part. Team chat is a low-throughput workload — a busy 50-person team writes a few thousand messages a day, which barely registers on modern hardware.

Team sizeShapeMonthly
Up to 251 vCPU / 2 GB, Postgres on the same box$6–12
25–1002 vCPU / 4 GB$18–40
100–5002+ app processes behind a load balancer$60–150
500+Load-balanced app tierScales with the database, not headcount

Notice the flat stretches. Going from 25 people to 50 costs a per-seat plan twice as much and costs a server essentially nothing.

Line 2: Database

You can run Postgres on the same box for free, or pay for managed Postgres and buy back the backup routine. The second option is usually worth it, and it's the line item most likely to surprise you.

  • Self-managed on the app server: $0 extra, and backups become your calendar reminder.
  • Small managed instance: roughly $15–30/month, with automated backups and point-in-time recovery.
  • Production-grade managed with replicas: $100+/month, relevant past a few hundred people.

Line 3: Object storage

Uploads and exports need somewhere to live. This is genuinely cheap, and the only variable that matters is whether your team shares screenshots or video.

  • Storage: typically a couple of cents per GB per month. A team of 25 sharing screenshots might use a few GB a year.
  • Egress: the line that bites. Some providers charge meaningfully for downloads; others include it. Check before you pick.
  • MinIO on the same box: $0, at the cost of it being your problem.

Budget $2–10/month for most teams. It's noise unless someone starts sharing raw video, at which point it's suddenly not.

Line 4: Backups

Off-site backup storage is a few dollars a month and the single most important line here. A backup on the same server is a story about a server.

  • Off-site storage: $1–5/month for a small team's dumps.
  • Automation: an hour once, to write the script and the cron entry.
  • Restore rehearsal: an hour, once, and again after any major change. Non-negotiable.

Line 5: The person

Here's the line the comparison posts skip. Someone has to do this work, and their time has a cost whether or not it appears on an invoice.

TaskHoursFrequency
Initial setup, domain, TLS2–4Once
Backup automation and a restore test1–2Once, then after major changes
Upgrades0.5Monthly-ish
Host patching and monitoring0.5Monthly
Something broke2–8Once or twice a year, unpredictably

That's roughly 4–6 hours up front and 12–15 hours a year. At an internal cost of $100/hour, call it $500 to start and $1,300 a year ongoing. Suddenly the $10 VPS isn't the headline number.

The whole budget

10 people50 people100 people
Compute$8/mo$30/mo$70/mo
Managed Postgres$15/mo$25/mo$60/mo
Object storage + backups$5/mo$10/mo$20/mo
Infrastructure subtotal$336/yr$780/yr$1,800/yr
Staff time at $100/hr$1,300/yr$1,300/yr$1,500/yr
Total~$1,640/yr~$2,080/yr~$3,300/yr
Per-seat SaaS at $10/seat/mo$1,200/yr$6,000/yr$12,000/yr

The interesting row is the last two. At 10 people, self-hosting costs more once you're honest about time. At 50 it's a third of the price. At 100 it's a quarter. The crossover sits somewhere around 20–25 people, and the gap widens with every hire because one side of it is flat.

The costs people forget entirely

  • Bus factor. If one person set it up and nobody else knows how, you have an undocumented dependency wearing a server costume. Write the runbook.
  • Attention. Even a healthy deployment occupies a little background thought, permanently.
  • The upgrade you postpone. Deferred upgrades compound into a version nobody dares to touch, which is how self-hosted deployments become security problems.
  • Migration, if you leave. Getting data out matters. Check the export story before you commit, not after.

The third column

The table above assumes hosted means paying per seat. That's not always true. Fluid Chat's hosted version is $0 with no seat count and no history limit, which flattens the whole analysis: you get the cost profile of self-hosting without the staff-time line.

In which case self-hosting stops being a cost decision and becomes purely a control decision — data residency, network isolation, or wanting the database on hardware you can point at. Those are good reasons. “It's cheaper” stops being one when the alternative is also free.

Both columns are $0 here.

Fluid Chat is free hosted and free self-hosted, running the same code. Pick on control rather than price, because price isn't the variable.

FAQ

Questions people actually ask.

How much does it cost to self-host team chat?

Infrastructure runs roughly $330/year for 10 people, $780 for 50 and $1,800 for 100 — compute, managed Postgres, object storage and backups. Add staff time of about 4–6 hours up front and 12–15 hours a year, which at typical internal rates is $1,300–1,500 annually and is usually the largest line in the budget.

At what team size does self-hosting become cheaper than per-seat pricing?

Around 20 to 25 people, once staff time is included honestly. Below that, per-seat SaaS is usually cheaper in total cost. Above it the gap widens quickly, because self-hosting costs are largely flat while per-seat costs scale with every hire.

What's the most expensive part of self-hosting?

The person. Infrastructure for a small team is often under $30 a month, while setup, upgrades, patching and the occasional incident add up to roughly 12–15 hours a year. That's the line item comparison posts leave out.

Do I need managed Postgres, or can I run it on the same server?

You can run it on the same box for free, and plenty of small deployments do. Managed Postgres at around $15–30 a month buys automated backups and point-in-time recovery, which is generally the highest-value spend in the budget for any team where chat matters.

Is self-hosting worth it if a free hosted option exists?

Only for control reasons — data residency, network isolation, or wanting the database on hardware you own. When the hosted alternative is also $0, as with Fluid Chat, self-hosting adds staff time without saving money, so cost stops being the deciding variable.

Something not covered? Open an issue.

Price it properly, then decide on control.

Fluid Chat is $0 either way, so the only question left is where you want the data to live.