Insights · New SaaS architecture

How to Architect a New SaaS Platform Without Rebuilding It in Three Years

A v1 should make the next customer type, workspace, and product capability easier to add—not turn each one into a decision to revisit the foundations.

The early choice

V1 shortcuts become platform rules faster than they appear.

A new SaaS product has an understandable pressure to ship. The first users need an account, a workspace, a plan, and a useful workflow. Putting the logic for all four in one place can feel efficient because the first version has only one customer type and one way of working. The model works until the product has to represent a second customer type, a different workspace structure, or a new module with its own rules.

The pattern is the same whether you are working out how to build a web app, how to architect a PWA, or how to build web-based software that scales. A SaaS product, a standalone web application, and a multi-user progressive web app may describe the end product differently; each still needs a durable way to separate identity, customer boundaries, scope, and business capability.

That is the point at which an early convenience becomes an architecture decision. User logic starts carrying commercial rules. Billing conditions appear in workspace code. A new feature needs an exception in a central schema because the product has no separate place for it to belong. The team can still ship, but each addition asks more of the original assumptions than they were designed to carry.

The best architecture for a new multi-tenant SaaS platform is not the one with the most moving parts. It is the one that assigns authority clearly before growth makes every boundary expensive to change. The goal is to make a new company, a new workspace, or a new business capability fit a known model—not ask engineering to reinterpret the original product every time.

The base model

Give four concerns their own authority from day one.

Start with four independent layers: Users, Companies, Workspaces, and Modules. A User owns identity, authentication, and session context. A Company is the business boundary that attaches Users and governs its workspaces. A Workspace is a named scope within a Company. A Module is a first-class business service—such as orders, billing, or pricing—that can install into a Workspace while governing its own behavior.

The important distinction is that these are composable concerns, not one tangled inheritance tree. A User can belong to more than one Company. A Company can host more than one Workspace. A Module can use the relevant context without turning that context into its private implementation. Each concern has an explicit job, which gives the next product decision somewhere specific to live.

This answers how to design a permission system for a SaaS app with multiple companies and workspaces before exceptions take over the model. Identity is not a substitute for tenancy. Tenancy is not a substitute for scope. Scope is not a substitute for the business service that owns a workflow. Keeping those decisions separate means a new requirement can be placed by responsibility rather than by whichever table or handler happens to be nearby.

Authorization in practice

Check access at runtime, where the request is understood.

The model needs a practical path from a person signing in to a record being changed. That path is three runtime permission checks: Module access → Function access → Data access. These are checks inside the model, not architecture layers. They keep a broad membership decision from quietly becoming permission for every action and every record.

  • Module access asks whether the person can reach the module at all in the relevant Company and Workspace.
  • Function access asks whether that person can perform the requested action within the module.
  • Data access asks whether the person can act on this specific record in its actual scope.

A request only proceeds when the checks that apply allow it. That gives the product a way to add roles, workflows, and scoped records without writing one-off authorization paths for each customer. It also keeps the reason for a denial legible: the problem was module reach, function authority, or record scope—not an unexplained result from a growing list of special cases.

The payoff

Make expansion a configuration change instead of a code change.

This is how to structure a SaaS app so it can scale without a rewrite. When the model already distinguishes Companies, Workspaces, and Modules, the repeated motions of the business have a defined path. Adding a company does not require a branch in identity code. Creating a workspace does not require every service to invent its own scope rules. Introducing a module does not require a separate administration model simply because it arrived later.

The work is still real: a team must decide what a module owns, what it exposes, and what it needs from the rest of the platform. But the work becomes a configuration and contract problem rather than a recurring rewrite. A module can declare its role catalog, data ownership, and integration surface. The platform can apply the same access model and lifecycle rules it applies elsewhere.

The same discipline applies to the module boundary itself. Freshify describes four dimensions of sovereign architecture: sovereign data, sovereign API, sovereign lifecycle, sovereign deployment. A module owns its schema rather than relying on another module’s internal collections. It exposes declared interfaces rather than private shortcuts. It can be installed, upgraded, or removed independently. And it can run where its operational needs require. Those boundaries let the platform grow without making every addition a shared-risk release.

A concrete starting point

Inspect the model before you need to repair it.

An open source framework for building a SaaS platform from scratch should make its constraints visible, not ask a team to infer them after the first extension. The public Sovereign Framework repository is Apache 2.0 and includes the portal shell, Standard Module Interface overview, and architecture documentation so a technical team can inspect the model in code before committing to its own implementation.

For teams that want a working implementation of the core model, the Sovereign Foundation provides the portal shell and licensed Users, Companies, and Workspaces modules. The framework and the Foundation serve different purposes: one makes the architecture reviewable; the other provides a base for a product team that is ready to build. Both start from the same premise that the platform should preserve clear boundaries as the product becomes more capable.

The decision is easiest to make before v1 has hidden the cost. Define what owns identity, tenancy, scope, and business behavior now. Put permission checks where a request is evaluated. Require new modules to state what they own and how they compose. Then the platform’s next change can use the same structure as its first.

Start with a model built for the next version.

Review the public framework and the Sovereign Foundation for a working base that keeps Users, Companies, Workspaces, and Modules separate from the start.