Multi-tenancy decisions that age well
Teams often treat tenancy as an implementation detail to “add later.” In practice it is one of the earliest architectural commitments you make — even if you pretend you have not made it yet. Shared tables with a tenant_id column, schema-per-tenant, and fully isolated stacks all work. They fail for different reasons, at different scales, with different operational costs.
When we enter an engagement, we ask a short set of questions before recommending a model. How strict are isolation requirements from customers or regulators? How uneven is load across tenants? How often will you need to restore a single customer’s data? How many environments must mirror production? The answers matter more than fashion.
What tends to work early
For most B2B SaaS products in the first years, a well-designed shared database with rigorous tenant scoping, automated tests against cross-tenant access, and clear service middleware is enough. It is faster to build, easier to observe as one system, and cheaper to operate. The failure mode is not the model itself — it is inconsistent enforcement. One raw query that forgets a tenant filter can undo months of trust.
When to revisit
Signals that you have outgrown a simple shared model include a handful of tenants dominating resource usage, contractual requirements for physical isolation, or restore/backup needs that cannot be met without affecting everyone. At that point a hybrid approach — shared for most, isolated for a few — is often more honest than a full rewrite.
Whatever you choose, document the decision, the threats you accept, and the migration path you are consciously deferring. Future you will thank present you.