Most companies do not leave Slack because they dislike it. They leave because the free plan hides their history, the paid plan is priced per seat, and a customer contract eventually asks where the messages live. This post follows an IT lead through all three, and shows what running Mattermost on MassiveGRID PaaS, which is built on Virtuozzo Application Platform, formerly Jelastic, changes about the answer.

The company is a 200-person engineering consultancy we will call Ardent Structures, with offices in Munich and Vienna. Its IT lead needs a chat platform that keeps every message, lives in Germany, and does not cost more each time a subcontractor is added. The Mattermost Chat Service package on MassiveGRID PaaS installs the Mattermost server with a PostgreSQL database and persistent file storage in one click.

The three reasons the firm looked past Slack

The first was history. On Slack's free plan, messages older than 90 days disappear from search, and a consultancy's chat contains decisions about load calculations and client changes that engineers need to find a year later. The second was cost: the paid tiers are billed per active user per month, and Ardent's headcount swells with subcontractors during large projects, so the bill rose exactly when margins were thinnest. The third was a clause. A public-sector client's framework agreement required that project communications be stored within the EU, on infrastructure the contractor controls or can name.

Mattermost answers all three by design. The server is open source (the server code is MIT-licensed and the Team Edition is free to run), it stores messages in a database you own, and its Slack-compatible integrations, incoming and outgoing webhooks and slash commands, mean the bots Ardent already had keep working with a URL change.

Why a PaaS environment rather than a VPS

The IT lead's first instinct was a virtual server with Docker Compose. The reason he chose a platform environment instead comes down to who carries the operational load. On MassiveGRID PaaS, the Mattermost server and the PostgreSQL database run as separate containers on separate physical hosts, placed by anti-affinity rules, so a hardware failure under one does not take down the other. Each container scales vertically on its own: RAM and CPU are allocated in cloudlets (128 MiB of RAM plus 400 MHz of CPU each), the platform adds and removes them as the load changes, and the bill follows actual consumption by the hour rather than a fixed plan.

The environment is created in the Frankfurt region, which settles the residency clause: the containers, their disks and their backups are in a German data centre, and the region is visible in the dashboard for any auditor who asks. Regions in New York, London and Singapore exist for other clients, and an environment can later be migrated between them.

The other difference is the day-two work. The dashboard restarts or redeploys the Mattermost container to a new version with the data volume preserved, the database has a built-in backup add-on with a schedule, the platform sends load alerts by email when a container approaches its limit, and Let's Encrypt certificates renew themselves. None of that needed a runbook.

Sizing 200 users honestly

Mattermost is a Go binary, and its memory use scales with connected WebSocket clients and with search, not with message volume. For 200 users with perhaps 120 connected at once, the server sits comfortably in 2 to 4 GiB of RAM, with brief spikes during bulk imports or when many clients reconnect after a network blip. PostgreSQL for the same team is modest: the message table grows by a few hundred megabytes a year, and the working set fits in memory.

NodeReserved cloudletsDynamic limitTypical use
Mattermost server8 (1 GiB)32 (4 GiB)16 to 24 cloudlets during office hours, 8 at night
PostgreSQL4 (512 MiB)16 (2 GiB)6 to 8 cloudlets

Because dynamic cloudlets are billed only while used, the night-time drop matters. Averaged across a month, Ardent's environment consumes roughly 26 cloudlets an hour. At MassiveGRID's published rate of $0.003372 per cloudlet-hour, that is about $64 a month before discounts for the compute, plus disk for uploaded files and the database. Slack's paid plans, by contrast, are billed per user per month; even at a conservative assumption of around $8 a seat, 200 seats is $1,600 a month, and the gap widens every time a subcontractor joins.

Migration weekend

Mattermost ships a Slack import path. Ardent exported its workspace (an admin-level export with channels and, on paid plans, direct messages), then used mmctl import against the new server to bring channels, users and message history across, followed by the attachments the export referenced. The import ran on a Friday evening against an environment that had been scaled up for the occasion, then scaled itself back down.

What the finance and compliance teams got

Finance received a line item that moves with usage and never with headcount. Compliance received a data-processing description that names a German region, an ISO 9001-certified provider and a database the company can export in full at any time. The IT lead received one dashboard where the chat server, its database and its backups are visible with their resource history, and an email if any of them is running hot.

The one thing the firm gave up was the convenience of someone else's push-notification service being invisible. Mattermost's mobile push goes through a notification proxy, and the free edition uses Mattermost's hosted test proxy unless you run your own. Ardent judged this acceptable because notification payloads can be configured to carry no message content, and documented it for the client.

Frequently Asked Questions

Is Mattermost Team Edition really free for 200 users?

Yes. The Team Edition has no user limit and no licence fee; you pay only for the infrastructure it runs on. Mattermost's paid Professional and Enterprise tiers add features such as SAML, LDAP group sync and advanced compliance exports, and can be licensed on the same self-hosted server if you need them later.

Can we keep the history longer than Slack's free plan allows?

Message history in self-hosted Mattermost is limited only by the database disk, which you can enlarge from the dashboard. Retention policies are optional and set by you; by default nothing is deleted.

What happens if the company grows to 500 users?

Raise the dynamic cloudlet limit on the Mattermost node so it can scale further vertically, and enlarge the PostgreSQL node the same way. For several thousand concurrent users you would add a load balancer and a second Mattermost node, which the platform supports through horizontal scaling; for 500 users a single, larger node is the simpler answer.

Own your team's chat history

The Mattermost Chat Service package installs the server, a PostgreSQL database and persistent file storage in one click on MassiveGRID PaaS, in the region you choose, with pay-per-use billing and a 100% uptime SLA. Free 14-day trial, no credit card.

Mattermost on MassiveGRID PaaS

Further Reading