SaaS vs self-hosted: real cost comparison 2026

Comparison11 min read8 steps

Q4 renewals, subscription audits, Atlassian price hikes — every autumn, agencies rediscover that their SaaS stack has quietly crept up. In 2026, a 10-person agency spends an average of $502 per month — over $6,000 per year — on licences alone for seven common tools. The question is no longer "is self-hosted an option?" but "can I afford not to look into it?" This article calculates the real TCO of both approaches, tool by tool, and gives you a concrete answer.

Contents· Why agencies are re-evaluating their SaaS stack in 20261/9
  1. 01Why agencies are re-evaluating their SaaS stack in 2026
  2. 02What self-hosting actually changes for an agency
  3. 03The 7 tools — SaaS vs self-hosted (10 users, 1 year)
  4. 04Calculating your real TCO
  5. 05Requirements for a 10-person agency
  6. 06Migrating the 7 tools to a ServOrbit VPS
  7. 07What to keep on SaaS — and why
  8. 08Troubleshooting — common migration mistakes
  9. 09Scenarios by agency size

Why agencies are re-evaluating their SaaS stack in 2026

Three signals are converging in 2026. First: Atlassian raised its prices twice in eighteen months and announced in March 2026 the end of Jira Server support (already effective since February 2024), forcing thousands of teams to migrate to Jira Cloud or an open-source equivalent. Second: Slack bundled AI features into the Pro plan without lowering the price, turning a value upgrade into a felt price hike. Third: VPS offers have radically bottomed out — it is now possible to spin up an 8 vCPU / 32 GB RAM server for under $80/month, which shifts the self-hosted break-even point.

The classic objection — "a developer's time costs more than the subscription" — now has an increasingly precise answer. One-click templates and pre-configured Docker images have reduced bootstrapping to under an hour per tool. Routine maintenance runs around 30 to 60 minutes per month. For a 10-person agency, the trade-off is calculable.

What self-hosting actually changes for an agency

  • Data ownership: your client projects, code repositories and internal messages never leave your infrastructure — a decisive argument for agencies under strict NDA or handling sensitive GDPR data.
  • Budget predictability: a fixed-cost VPS doesn't bill per seat or per usage — you know what you're paying on January 1st for the full year ahead.
  • No surprise price hikes: SaaS vendors change their plans and pricing; your VPS won't send you a 30-day price-increase notice.
  • Extensive customization: root access, community plugins, internal integrations — you don't wait on a vendor's roadmap for a critical feature.
  • Resource sharing: a single VPS can host multiple tools in parallel, splitting infrastructure costs across Plane, GitLab, Mattermost and Uptime Kuma.
  • Independence from acquisitions and EOL: Jira Server is dead, Bitbucket Server too. On your own server, you decide how long each tool lives.

The 7 tools — SaaS vs self-hosted (10 users, 1 year)

Scroll the table

ToolSaaS Cost (10 people/yr)Self-hostedSavingsDeploy time
Project management (Jira → Plane)$948 (Jira Standard, ~$7.90/user/mo)Included in shared VPS$948< 30 min (Docker Compose)
Code & CI/CD (GitHub → GitLab CE)$480 (GitHub Team, $4/user/mo)Included in shared VPS$480< 45 min (official image)
Messaging (Slack → Mattermost)$870 (Slack Pro, $7.25/user/mo, annual)Included in shared VPS$870< 20 min (Docker)
Wiki / docs (Notion → Outline)$1,200 (Notion Plus, $10/user/mo, annual)Included in shared VPS$1,200< 20 min (Docker)
Error monitoring (Sentry → Sentry self-hosted)$312 (Sentry Team, $26/mo flat, annual)Included in shared VPS$312< 30 min (official Docker Compose)
Infra monitoring (Datadog → Uptime Kuma)$1,800 (Datadog Infra Pro, $15/host/mo, 10 hosts)Included in shared VPS$1,800< 10 min (Docker image)
Web analytics (GA4 → Plausible / Umami)$108 (Plausible Cloud Starter, ~$9/mo)Included in shared VPS$228< 15 min (Docker)
TOTAL annual$5,838 / year299 DH/month × 12 + ~$400 estimated maintenanceUp to $4,600–$5,000 / year net

Calculating your real TCO

The formula is straightforward:

SaaS TCO = Σ annual subscriptions (licences only, excluding overages)

Self-hosted TCO = Annual VPS cost + Maintenance cost (hours × rate) + Initial migration cost (amortised over 2 years)

Net savings = SaaS TCO − Self-hosted TCO

For a 10-person agency running all 7 tools:
- SaaS TCO: $5,838/year
- Dedicated VPS 8 vCPU / 32 GB RAM: 299 DH/month × 12
- Maintenance: 1 hour/month × $60/h = $720/year
- Initial migration amortised (1 dev day at $500, amortised over 2 years): $250/year

Net savings exceed $4,000/year in most realistic scenarios. For agencies that bill infrastructure costs to clients, the margin gain shows up directly on every project.

Requirements for a 10-person agency

The temptation is to start on an entry-level VPS. Bad idea: GitLab CE alone requires a minimum of 4 GB RAM (8 GB recommended). The configuration that keeps the full stack running smoothly:

- VPS recommended to start (3–4 tools): 4 vCPU / 8 GB RAM / 100 GB SSD — from 99 DH/month
- VPS recommended for the full stack (7 tools): 8 vCPU / 32 GB RAM / 200 GB SSD — 299 DH/month

Per tool:
- Plane: 2 GB RAM minimum, 4 GB recommended
- GitLab CE: 4 GB RAM minimum, 8 GB recommended
- Mattermost: 1 GB RAM for < 50 users
- Outline: 1 GB RAM
- Sentry self-hosted: 4 GB RAM minimum (Kafka/Clickhouse engine)
- Uptime Kuma: 256 MB RAM
- Plausible / Umami: 1–2 GB RAM depending on tracked traffic volume

Migrating the 7 tools to a ServOrbit VPS

  1. Provision the VPS and secure access

    Order an 8 vCPU / 32 GB RAM VPS from your ServOrbit agency dashboard. Enable SSH key authentication, disable password login and install Docker + Docker Compose. Estimated time: 15 minutes.

  2. Install Plane (project management)

    Clone the official Plane repository, copy .env.example, fill in your domain and run docker compose up -d. Configure an nginx reverse proxy with HTTPS (Let's Encrypt). Export your Jira data as CSV from Settings > Import/Export. See our detailed guide: installing-plane-vps. Time: 30 minutes.

  3. Install GitLab CE (code & CI/CD)

    Use the official GitLab CE Docker image. Configure the data volume on a persistent disk, set external_url and outbound SMTP. Import your GitHub/Bitbucket projects using the built-in migration tool (Settings > Import project). Re-enable your CI runners: GitLab provides its own runners deployable on the same VPS or a separate one. Time: 45 minutes + repository migration time.

  4. Install Mattermost (messaging)

    Official Mattermost Docker Compose with 3 files (.env, docker-compose.yml, volumes). Configure SMTP and create channels matching your Slack spaces. Use the Slack Data Export tool (available on paid Slack plans) then the Mattermost import script to recover the last 90 days of history. See our guide: hosting-mattermost. Time: 20 minutes.

  5. Install Outline (wiki / docs)

    Outline requires a Postgres instance and an S3-compatible bucket (or self-hosted MinIO) for attachments. The official Docker image sets both up in Compose. Export your Notion workspace in Markdown from Settings > Export content, then use the Outline import module. Time: 20 minutes + wiki reorganisation.

  6. Install Sentry self-hosted (error monitoring)

    Sentry publishes a getsentry/self-hosted repository with an automated install.sh script. It spins up Kafka, Redis, Postgres and Clickhouse — reserve 4 GB of RAM. Migrate your existing DSNs (API keys) by updating the SENTRY_DSN variable in each of your applications. Time: 30 minutes.

  7. Install Uptime Kuma (uptime monitoring)

    A single Docker command. Configure the same monitors as your previous Datadog dashboard (URLs, TCP ports, ping). Uptime Kuma supports Slack, email and webhook notifications — connect it to your new Mattermost. See our guide: monitoring-vps-uptime-kuma. Time: 10 minutes.

  8. Install Plausible or Umami (web analytics)

    Replace your Google Analytics / Plausible Cloud snippet with the self-hosted version. Plausible provides an official Compose (Postgres + Clickhouse); Umami is lighter (Postgres only). See our comparison to choose: plausible-vs-umami. Redirect your tracking domain and update the snippet in your CMS. Time: 15 minutes.

What to keep on SaaS — and why

Self-hosting is not the universal answer. Some tools remain more appropriate as SaaS depending on your context:

- Enterprise SSO (Okta, Azure AD): if your agency needs to integrate with an enterprise client's SSO, Jira or GitHub SaaS plans offer tested and maintained SAML/OIDC connectors. Self-hosted equivalents exist (GitLab and Plane support OIDC) but the implementation requires IdP expertise.
- HIPAA / SOC 2 compliance: if you handle US healthcare data, Jira Cloud Enterprise and GitHub Enterprise offer signed BAAs. Self-hosted gives you control but also places full compliance responsibility on you.
- Billing and signing tools: payment pipelines (Stripe, DocuSign) are risk zones where self-hosting a custom instance costs more than it saves.
- Video conferencing (Zoom, Meet): Jitsi self-hosted works but audio/video quality with 10 simultaneous participants requires dedicated bandwidth and CPU — the cost/benefit ratio is less favourable.

Troubleshooting — common migration mistakes

1. Under-sizing the VPS for GitLab. GitLab CE with Gitaly (repository storage) consumes 4 GB of RAM at idle. Sharing it with Sentry on an 8 GB VPS means flirting with swap on every large push. Solution: allocate a dedicated VPS for GitLab, or migrate lighter repositories first.

2. Forgetting backups before migration. Export all your SaaS data *before* cancelling subscriptions. Jira blocks exports if your subscription has expired. GitHub Archive Program only covers public projects. Best practice: keep the SaaS subscription active for 30 days after migration.

3. Neglecting the reverse proxy. Without nginx or Caddy in front of your containers, each service listens on a different port (3000, 8065, 9000…). Set up a reverse proxy from day one with dedicated subdomains (plane.your-agency.com, git.your-agency.com) and automatic HTTPS certificates.

4. Not testing automated backups. Each Docker tool must have a daily backup of its Postgres volume to remote storage (S3, ServOrbit bucket). Test the restore within 48 hours of going live — not during a crisis.

5. Migrating all tools at once. Migration fatigue is real. Migrate one tool, wait two weeks for the team to adapt, then move to the next. Recommended order: Plane → Mattermost → Outline → Uptime Kuma → GitLab → Sentry → Analytics.

Scenarios by agency size

Scroll the table

Team sizeStackServOrbit VPSAnnual savings
5 peoplePlane + Mattermost + Uptime Kuma + Plausible4 vCPU / 8 GB RAM — 99 DH/month$1,800–$2,400/year
10 peopleFull stack (7 tools)8 vCPU / 32 GB RAM — 299 DH/month$4,000–$5,000/year
25 peopleFull stack + dedicated GitLab + dedicated Sentry2 × VPS 8 vCPU / 32 GB RAM$10,000–$14,000/year

One dashboard to manage all your agency infrastructure

Manage all your app infrastructure from a single agency dashboard — client portfolio, renewals and centralised access. Deploy Plane, GitLab, Mattermost and Uptime Kuma in a few clicks from your ServOrbit dashboard.

Related articles

Install GitLab CE on a VPS: complete guide
Deployment17 min read

Install GitLab CE on a VPS: complete guide

Deploy GitLab CE on your VPS with Docker Compose: git forge, built-in CI/CD, private Docker registry and project management — self-hosted.

Read the article →
Plausible vs Umami: which self-hosted analytics to choose?
Comparison8 min read

Plausible vs Umami: which self-hosted analytics to choose?

In-depth comparison of Plausible vs Umami in 2026: setup, GDPR compliance, funnels, custom events API, migration from GA4, and a decision tree to pick the right tool.

Read the article →
Deploy Plane on a VPS: guide and post-2.3.7 regressions
Automation9 min read

Deploy Plane on a VPS: guide and post-2.3.7 regressions

Install Plane AIO on your VPS with Docker. Complete guide including known regressions in versions 2.3.7 to 2.4.1, the safe update procedure and troubleshooting.

Read the article →
Migrating from Jira Data Center to OpenProject or Plane on VPS
Deployment13 min read

Migrating from Jira Data Center to OpenProject or Plane on VPS

Jira Data Center stopped selling new licenses in March 2026 and goes read-only on March 28, 2029. Migrate to OpenProject or Plane on your VPS in a single working day.

Read the article →
Jira Data Center closed: switch to Plane self-hosted
Comparison8 min read

Jira Data Center closed: switch to Plane self-hosted

Atlassian closed Jira Data Center to new subscribers (March 2026) and raised renewals by 15%. Plane AGPL-3.0 covers the essentials with no per-seat subscription.

Read the article →
Monitoring your VPS with Uptime Kuma
Security & Monitoring4 min read

Monitoring your VPS with Uptime Kuma

Deploy Uptime Kuma on your VPS to monitor your sites and services self-hosted, with alerts and a public status page.

Read the article →
Host Mattermost on your own VPS
Self-hosting9 min read

Host Mattermost on your own VPS

Complete 2026 guide: deploy Mattermost v10/v11 on VPS with Docker, PostgreSQL, SSL, integrations and backups. Self-hosted alternative to Slack.

Read the article →

Need help?

Browse our help center and FAQ, or reach our team — callback, WhatsApp or email. Support in French, English and Arabic.

Message us on WhatsAppopens in a new tab