
Most SaaS rewrites we are asked to quote trace back to a decision made in week one by not making it. Four choices compound faster than any others.
1. Tenancy
Shared tables with a tenant column, a schema per tenant, or a database per tenant. Each has a real cost profile and a real isolation story. Retrofitting isolation onto a shared schema after your first enterprise security questionnaire is a project, not a task.
2. Identity and permissions
Users belong to organisations, organisations have roles, and roles gate features. Building this as an afterthought produces permission checks scattered across the codebase and a support burden that never ends. Model it once, centrally.
3. Billing
Plans, trials, upgrades, downgrades, proration, failed payments and dunning. Billing is not a checkout button; it is a state machine that touches every feature gate in the product.
4. Data boundaries
Decide early what is tenant data, what is platform data, and what may never cross between them. Export and deletion requests arrive eventually, and they are trivial or impossible depending on this choice.
- Write the tenancy decision down, with the reason.
- Put permission checks behind one function, not fifty.
- Integrate billing before the second feature, not after the tenth.
- Add an admin console early — support is a feature.
Architecture is the set of decisions that are expensive to reverse. Make those first, on purpose.


