The decision that costs the most later
Tenancy is an architecture decision, not a feature
Multi-tenant PostgreSQL with row-level security — the same schema runs 5 tenants or 500 without a rewrite. Isolation is enforced by the database, not by remembering to add a WHERE clause in every query, because the day someone forgets is the day one customer sees another customer's data.
Where a contract genuinely demands physical separation — a bank, a health system, a government tender — we run those tenants on dedicated databases from the same codebase and price it as an enterprise tier. What we don't do is commit the whole product to database-per-tenant because one prospect asked, then discover at forty customers that every schema migration is a forty-step deployment.
- Row-level security policies in PostgreSQLIsolation survives an application bug.
- Tenant-aware connection poolingOne noisy tenant doesn't starve the rest.
- Per-tenant backup and point-in-time restoreYou can restore one customer without touching the others.