Building a subscription SaaS: what to know before you start

Building a subscription SaaS: what to know before you start

Building a subscription platform is fundamentally different from building a site or a system for one company. The difference isn't features — it's that many customers use the same system and their data must stay completely separate. That's a real technical problem.

Challenge one: data isolation

If two customers are on your platform and one sees the other's data even once, your platform is finished. Reputation doesn't come back.

There are three isolation approaches:

1. A separate database per customer. Strongest isolation, hardest maintenance: every schema change must be applied to every database. Suitable for large, high-paying customers.

2. One database with a `tenant_id` column on every table. The most common and easiest to maintain. The danger: forgetting the filter in a single query means a data leak.

The right protection is not relying on a developer's memory. Use automatic model-level filtering (a global scope) so every query is filtered by the current tenant by default, and bypassing it requires explicit intent.

3. A separate schema per customer. A middle ground, less common.

Our recommendation for most: option two with mandatory automatic filtering, plus tests proving one customer cannot see another's data.

Challenge two: subscriptions and billing

This is the part people underestimate and it takes longer than expected. Think through these cases from the start:

  • A customer upgrades mid-month — what do they pay?
  • They downgrade and the new plan's limits are below their current usage — then what?
  • Payment failed — suspend immediately? A grace period? How many days?
  • They cancelled and want to return after three months — does their data still exist?
  • A trial expired without payment.

Each of these is a business decision before it's a technical one, and must be settled before coding.

Challenge three: scale

A system working with 10 customers won't necessarily work with 1,000. The most common problem: a query that's fine on 5,000 rows and collapses at 5 million.

Things done from the start: - Proper indexing on `tenant_id` and filtered columns. - A job queue for heavy operations (reports, messaging) instead of doing them in the request. - Caching for data read often and changed rarely. - Monitoring and alerts so you learn about problems before your customer does.

Things forgotten that hurt later

A platform admin panel (super admin). You need to see customers, suspend an account, extend a trial, and impersonate a customer to diagnose issues. Not a "small addition" — a full module.

Customer data export. If a customer leaves, they must be able to take their data. It builds trust and in some markets it's a legal requirement.

Audit logs. Who did what and when. The moment a dispute with a customer arises, this is your reference.

Notifications. Email and WhatsApp for alerts and invoices. A whole subsystem on its own.

Realistic cost

A simple SaaS with correct isolation, subscriptions, billing and an admin panel: EGP 250k–600k over 4–8 months. If someone quotes a subscription platform at the price of an ordinary website, they haven't accounted for isolation, billing and administration.

Bottom line

SaaS is a long game, and most of its cost is in what customers never see: isolation, billing, scale and administration. Start with one real customer actually using the platform before building "a platform for the world" — learn from them, then grow.

More articles

Custom ERP: the real cost and timeline, honestly →Native or Flutter? Choosing your app stack without regret →The spec document: what separates a shipped project from a year of delays →

Got a product idea? Let's turn it into working code.