SaaS is an internal tool with other companies inside it. Their records must not leak to the neighbour, and the subscription has to renew without someone editing a row.
Where the first version fails
Everyone lands in the same tables, and “which account owns this” is a column half the queries forget. The second failure is plans. One price is easy. A second price spreads limit checks through the code.
What to decide first
- a company account and the users inside it;
- every query filtered by that account;
- subscription status, period, and limit;
- an audit trail when a team shares records;
- background jobs for mail, imports, and payment webhooks.
Ship one workflow: sign-up, the job the product exists for, payment, team settings. Add the rest after a customer finishes that path without a call.
Example
A job-site log used by several contractors. Each company sees only its sites and staff. The platform admin sees billing status, not the site contents. A payment webhook extends access. Nobody extends it by hand in the database.
Start with one plan. Add the second when the first one is being paid for.