Customers kept apart in the data.
Isolation written into the queries rather than into a filter somebody remembers to apply
a boundary a security review can be shown, instead of one a developer promises
SaaS app development · UAE
SaaS app development here means invoicing a company with a trade licence and a tax number. That has to be in the data model, because adding it later is expensive.
Scope the tenancy and the billingWhat SaaS app development is
Three decisions sit under a subscription product, and all three are data-model decisions. None of them is visible in a demo, and each one is expensive to revisit once tenants are live.
A customer here is a company with a trade licence, not a person with a login. A group that runs a mainland company and a free zone entity is two buyers, and a product that models one company per account discovers that at the first renewal.
A business buyer needs a tax invoice, with their own registration on it and VAT shown at 5%. A product that stores an email address cannot produce one, and retrofitting the fields into a live billing schema is a migration rather than a sprint.
Every serious UAE buyer eventually asks where their data is held. The product needs an answer that is true per tenant, not a paragraph, and there are local regions to give it in.
The scope
Six layers, and a demo shows one of them. The other five are what decide whether the tenth customer costs the same to onboard as the first.
Isolation written into the queries rather than into a filter somebody remembers to apply
a boundary a security review can be shown, instead of one a developer promises
Plans in AED, a renewal that runs itself, and an invoice carrying the buyer’s registration with VAT shown at 5%
something a customer’s finance team can file without writing to you
What each tenant consumed, counted where it happens rather than estimated monthly, with the limit enforced in the product
a plan structure you can change without a spreadsheet
Their own people, their own roles, and their own identity provider where they have one
an account a customer’s IT can run without raising a ticket with you
Every tenant, their plan, their usage and their invoices in one operator view
support answered from a screen rather than from the database
A documented interface and webhooks, so a customer’s own systems can read and be told rather than being exported to
the integration request answered by documentation
Multi-tenant, or a build you replace
Both demonstrate the same product to the same buyer. They diverge at the tenth customer, and again the first time a rule changes.
| A single-tenant buildOne customer at a time, copied | Multi-tenant from the startOne product, many companies | |
|---|---|---|
| Onboarding a customer | A deployment, and a version number that drifts from the last one. | A record. The tenth customer costs what the first one did. |
| Keeping them apart | Separate copies, which is genuinely safe and genuinely unmaintainable. | Enforced in the data layer, and demonstrable to a security review. |
| The tax invoice | Raised by hand each month, from a spreadsheet somebody owns. | Issued by the product, with the buyer’s registration and VAT on it. |
| A group, two licences | Two deployments, and a support ticket about which one has the data. | Two tenants under one relationship, billed separately, reported together. |
| When a rule changes | The same change made once per customer, and missed on at least one. | One change, released once, and it is true for everybody that afternoon. |
When you have one customer and a genuine reason to believe you will not have five, which is rarer than it sounds and is usually a services engagement wearing a product name. Everything else is multi-tenant from the first line, because the retrofit is a migration with live customers on it. Whether the product needs a mobile app at all is a question before this one, and where the back office rather than the product is the real problem, that is a different engagement.
What we find on subscription products here
Webzenia has worked with Gulf clients since 2018. Four things about selling software by subscription to UAE businesses, and none of them is a feature.
A mainland company and a free zone entity are separate buyers with separate registrations, and a product modelling one company per account cannot invoice them properly. A Business Bay proptech on a mainland DET licence selling to brokerages meets this at the first group renewal.
It has to carry the buyer’s registration and show VAT at 5%, and the format is moving from a document to structured data on a phased, published timetable. A vendor whose customers span revenue bands has tenants reaching that point on different dates.
A DIFC-registered fintech selling to regulated customers is asked this in every procurement cycle, and the answer has to be true per tenant rather than in general. There are local regions to give it in, and the regime a tenant sits under follows their registration rather than yours.
A Fujairah port-services software vendor buying from an overseas platform will ask for an AED invoice with its own registration on it, and often cannot get one. The gap is a schema, not a setting, which is why it is quoted as a project by the vendor and read as obstruction by the buyer.
What the engagement covers
Six stages, and the first one is a schema decision. Everything expensive about a subscription product is decided before the first screen is drawn.
Who a tenant is, how a group with more than one licence is held, what a plan contains and what happens at the limit. These four answers are the schema, and they are the expensive ones to change.
The customer-facing product and the operator console are built as one system, because a product your own team cannot administer becomes support answered from the database.
Subscriptions and usage wired to a gateway that settles where you bank, and an invoice that carries the buyer’s registration and shows VAT at 5% without anyone editing it.
Isolation tested by trying to break it with a second tenant rather than by reading the code, and the product then run under the volume the plans imply rather than the volume it has today.
Self-serve onboarding, the first invoice issued automatically and the reporting already running, so the launch is a customer arriving rather than an announcement being made.
Code, documentation and the gateway, hosting and billing accounts in your own name. A product whose revenue flows through somebody else’s account is a product with a hostage in it.
Our stack
The boundary, the money, the answer about where it sits, the second surface, and the screens nobody designs. Select one to see what it settles.
Tenant isolation is a database question before it is an application one, and row-level security puts the boundary where a query cannot forget it rather than where a developer has to remember it.
We enforce the tenant boundary in the database rather than in a filter, so the worst case of a missed condition in application code is an empty result rather than another company’s data.
How the build runs
The first fortnight produces a data model rather than a screen. Tenancy, plans and the invoice are the three decisions a live product cannot revisit without a migration.
We settle who a tenant is, how a group holding more than one licence is represented, what each plan contains and what happens when a limit is reached. In the same fortnight we establish what the invoice has to carry: the buyer’s registration, the currency, the tax line, and the format the obligation is moving toward. All four are schema decisions and all four are expensive later.
The customer product and the operator console are built together, with the tenant boundary enforced in the data layer rather than in application code. Then it is tested by trying to reach one tenant’s data as another, which is a different exercise from reading the code and agreeing it looks right. Billing and metering go in with the invoice fields already decided.
Self-serve onboarding, an invoice issued automatically and the usage reporting already running, so the measure of go-live is a customer who arrived unattended rather than an announcement. After that the work is renewals and limits: the screens a customer opens in month eleven decide whether there is a month thirteen, and they are the ones nobody designs.
Settled in the first fortnight, so the tenant model is a decision rather than a discovery.
Our commitment
A subscription product fails at the tenth customer and at the first audit. These four are written into the scope because those are the two moments.
Customers kept apart, and we test it.
The boundary lives in the database, and it is proved by trying to reach one tenant’s records as another rather than by reading the code and agreeing it looks correct. A review can be shown the mechanism instead of a promise.
Invoices carry the buyer's tax number.
A business buyer needs a tax invoice with their own details and the VAT line on it. Designing that in costs a fortnight; adding it to a live billing schema with tenants on it is a migration nobody scheduled.
The billing and hosting accounts are yours.
The gateway, the cloud account and the subscription platform are yours from the first day, not transferred at the end. Revenue flowing through a supplier’s account is a dependency no contract makes comfortable.
We say when your web product is enough.
A companion that mirrors the browser is a second thing to maintain and the first to fall behind. Where nothing needs a phone we say so, and the case for building is here.
Common questions
Keep exploring
Native Swift, and the entity Apple publishes as seller.
Kotlin, and the five manufacturer skins this market runs.
One codebase, and the parts written per platform.
One widget tree, and an Arabic screen that mirrors itself.
For teams that already write React and have to hold it.
A shopping app costed against the repeat order.
Two-sided products where the fleet is the harder half.
Internal apps for staff who are not at a desk.
A component system engineering builds from, in both directions.
Next step
Send us what the product does and who it bills. We will come back with the tenancy shape, the billing model and what each one costs to change later.
Tell us what you need.