Decide tenancy before anything else
Tenancy is the one decision that touches every table, every query and every cache key. Retrofitting it is the most expensive refactor a SaaS team can take on.
Pick a model — shared schema with a tenant column, schema per tenant, or database per tenant — and enforce it at the data-access layer so no query can forget it.
Keep billing at the edge
Billing rules change far more often than product logic. Keep plan limits behind a single entitlement service and ask it questions like "can this tenant add another seat?" rather than scattering plan checks through the codebase.
Make permissions data, not code
Roles that live in conditionals cannot be audited or changed without a release. Store roles and permissions as data, check them in one place, and log every denial.
Scale the boring parts first
Before sharding anything, add indexes, remove N+1 queries, cache read-heavy endpoints and move slow work to a queue. Most scaling problems are solved there.