CMS & Commerce
SaaS
Software-as-a-Service is not a project you finish — it is a product you run. We build the multi-tenancy and billing right at the start, because those are the decisions you cannot cheaply change later.
Overview
SaaS — Software-as-a-Service — is software delivered as an ongoing service over the web rather than sold as a licence and installed. One codebase, one running system, serving many paying customers who each see their own private slice of it. That single sentence hides the two decisions that define whether a SaaS product survives contact with growth: how you separate one customer’s data and configuration from another’s (multi-tenancy), and how you charge them for what they use (billing and metering). Almost everything distinctive about building SaaS follows from getting those two things right, and almost every expensive SaaS rescue we are called into follows from getting them wrong.
The engineering that makes SaaS hard is not the features customers see — it is the machinery underneath. A single tenant column carried correctly through every query so that Acme Ltd can never see Globex’s records. A subscription lifecycle — trials, upgrades, downgrades, failed payments, cancellations — that stays in sync between your database and Stripe without drifting. Roles and organisations so a customer’s admin can invite their own users. Feature flags and per-tenant configuration so one plan gets capabilities another does not. Self-service onboarding so a new customer can sign up, pay, and start using the product without you in the loop. None of this is visible on the marketing site, and all of it is where a SaaS is won or lost.
Our angle is narrow and deliberate. We build SaaS MVPs — the first shippable version of a product that a real customer will pay for — and we scale existing SaaS products that have outgrown the architecture they launched on. In both cases we insist on getting multi-tenancy and billing right from the first commit, because they are the two things you cannot cheaply retrofit. Bolting tenant isolation onto a single-tenant codebase, or untangling a billing system that has drifted out of sync with reality, costs many times what it would have cost to design correctly at the start. We would rather spend that judgement up front, and we are blunt that a SaaS is a long-term operational business — something you run twenty-four hours a day — not a one-off build you commission and walk away from.
Best for — Companies building a multi-tenant product real customers will pay for on a subscription — a B2B SaaS platform, a vertical SaaS for one industry, or an internal tool becoming a product — who want the multi-tenancy and billing designed correctly at the start and understand a SaaS is a business you run, not a project you finish.
Why teams choose SaaS
Multi-tenancy and billing designed in, not bolted on
The two decisions you cannot cheaply reverse — how tenants are isolated and how they are billed — are made deliberately at the start by people who have seen how each choice ages. Retrofitting tenant isolation onto a single-tenant codebase, or repairing billing that has drifted out of sync with Stripe, costs many times what designing them correctly would have. We pay that cost up front, where it is smallest.
A real MVP, not a scaffold
We build the first version around a genuine customer paying for a genuine capability: sign up, pay, do the one thing the product exists to do, all in production. That means the multi-tenancy, auth and billing are real from day one — the parts that are hardest to add later — rather than a demo that looks finished and has to be rebuilt the moment a second customer arrives.
Built to be operated
Because we run what we ship, a Yarqat SaaS comes with the machinery a live product actually needs: observability that tells you a tenant is failing before they email you, tenant-scoped logging, safe migrations that do not lock out paying customers, and a clear picture of who is on-call for what. A SaaS lives or dies on its operational reality, and we build for that from the start rather than discovering it in production.
Why businesses choose SaaS
- You are building a genuine product for many paying customers and want the multi-tenancy and billing — the parts that are ruinous to retrofit — done correctly from the first commit.
- You have validated demand, often via an internal tool or a manual service, and want to turn it into a self-service product real companies subscribe to.
- You accept that a SaaS is a long-term operational business and want a team that builds for that reality — observability, safe migrations, on-call — rather than one that hands over a demo and disappears.
- You want senior judgement on the decisions that compound: shared-schema versus schema-per-tenant, how far to let customisation go, and when to say no to a feature that would fracture the product.
What we build with SaaS
The capabilities this technology is genuinely strong at — and what we most often build with it.
Multi-tenant data isolation
The central architectural decision, made deliberately. Shared schema with a tenant id on every row is cheapest to run and simplest to operate, but leans entirely on discipline — one query missing its tenant filter is a cross-tenant leak. Schema-per-tenant gives stronger separation within one database at the cost of migration complexity across hundreds of schemas. Database-per-tenant gives the hardest isolation and the heaviest operational load. We choose deliberately for your isolation, cost and scale needs, and enforce the boundary in the data layer — row-level security, a tenant-scoped query layer — not merely in application code where a single oversight becomes a breach.
Subscription billing and usage metering
The subscription lifecycle — trials, plans, upgrades and downgrades with proration, usage-based metering, failed payments and dunning, cancellations — implemented against Stripe and kept in sync so your database and the billing provider never disagree about what a customer owes. We treat billing as a system in its own right, driven by webhooks and reconciled deliberately, because a billing system that has silently drifted out of sync is one of the most expensive things to repair.
Authentication, organisations and roles
Auth built for the B2B reality: users belong to organisations (tenants), an organisation has its own admins who invite and manage their people, and roles decide who can do what. We build this on a proven identity foundation with SSO where enterprise customers require it, and we enforce authorisation on the server against the tenant, never merely hiding a button in the UI.
Per-tenant configuration and feature flags
The controlled way to let plans and customers differ without fracturing the codebase. Feature flags gate capabilities by plan; per-tenant configuration adjusts behaviour within known bounds. The discipline is holding the line between configuration — a product that flexes along defined axes — and true customisation, which multiplies complexity. We build the machinery and we advise, firmly, on where to stop.
Self-service onboarding and admin
The path from stranger to paying, active customer without a human in the loop: sign up, create an organisation, choose a plan, pay, invite colleagues, and reach the product’s value quickly. Alongside it, the internal admin and support tooling your own team needs — to see tenants, diagnose problems, and act — which is the difference between a product you can support and one that buries you in tickets.
Analytics, observability and SLAs
The instrumentation to know what is happening: product analytics on how tenants actually use the thing, and operational observability — metrics, logs and traces scoped by tenant — so you find a failing customer before they find you. Where you commit to SLAs or need multi-region for latency or data-residency, we build to that from the start, because availability guarantees shape the architecture rather than sitting on top of it.
Use cases
A B2B SaaS platform
The mainstream case: a product sold to businesses, each an organisation with its own users, roles, data and subscription. Multi-tenancy, per-organisation admin, plan-based feature gating and subscription billing are all load-bearing, and getting them right at the start is exactly what makes the product scalable rather than a source of ever-growing pain.
Vertical SaaS for one industry
A product built deep for a single sector — clinics, law firms, logistics operators — where the domain knowledge is the moat. The SaaS machinery is the same, but the value is in modelling one industry’s workflow properly, and the discipline is resisting the pull toward bespoke behaviour for every customer that would turn the product back into consultancy.
An internal tool turned into a product
A company has a tool that runs its own operations well and realises others would pay for it. The problem is already validated; the work is everything the internal version never needed — tenant isolation so customers cannot see each other, billing, self-service onboarding, and the operational hardening to run it for people outside the building. One of the most reliable routes to a real SaaS.
Scaling a SaaS that has outgrown its foundations
An existing product, often successful, straining against decisions made when it had three customers instead of three hundred — a shared-schema design under isolation or noisy-neighbour pressure, billing that has drifted, migrations that lock out tenants. We come in to re-architect the load-bearing parts without stopping the business that depends on them running.
When SaaS is the right choice
- Right when you are building a product that many customers will pay for on a recurring basis and each needs their own private, isolated space within it — the textbook case for SaaS, where the whole architecture earns its keep.
- Right when you have an internal tool that has proven its value and you want to turn it into a product other companies pay for — one of the most reliable routes to a SaaS, because the problem is already validated. The work is the multi-tenancy, billing and self-service the internal version never needed.
- Right when you are committing to running and evolving a product over years, with the appetite for the ongoing operational reality — observability, on-call, continuous shipping — that a live service demands. SaaS rewards that commitment and punishes its absence.
- Wrong when what you actually need is a single deployment for one organisation — an internal system, a bespoke tool for one client. Building multi-tenancy, subscription billing and self-service onboarding for a single tenant is pure overhead; a plain application will be simpler, cheaper and faster to build.
- Wrong when you are not prepared for SaaS to be a standing operational commitment. A SaaS product is never finished — it needs someone watching it, patching it, and answering for it at three in the morning. If you want to commission a build and be done, SaaS is the wrong shape and we will say so before you spend money.
SaaS: pros and cons
Strengths
- Recurring revenue and compounding value: one codebase serves many customers, and every improvement you ship benefits all of them at once — the economics that make SaaS worth the operational weight.
- A single running system to observe, secure and improve, rather than many installed copies drifting apart in customers’ environments — you fix a bug once and everyone has the fix.
- Self-service growth: done right, customers can find, sign up for, pay for and start using the product without you in the loop, so the business can grow faster than headcount.
- Rich, honest usage data: because every customer runs on your infrastructure, you can see what they actually use, price around it, and make product decisions on evidence rather than anecdote.
Trade-offs
- The foundational decisions are expensive to change. Multi-tenancy and billing are load-bearing — retrofitting tenant isolation onto a single-tenant schema, or migrating a billing model customers already depend on, is one of the hardest and riskiest jobs in software. Early architecture choices genuinely matter.
- It is an ongoing operational commitment, not a project with an end. A SaaS runs twenty-four hours a day and needs watching, patching and answering for indefinitely. Anyone expecting a fixed build they can commission and forget is choosing the wrong model.
- Data isolation between tenants is safety-critical. A leak that shows one customer another customer’s data is catastrophic — it is the failure that ends B2B SaaS companies. Every layer has to enforce isolation, and one missing tenant filter is a breach, so the discipline required is unforgiving.
- Per-tenant customisation explodes complexity. Every time you let one customer have the product behave differently, you multiply what has to be built, tested and reasoned about. Unmanaged, bespoke tenant behaviour turns a product back into a pile of bespoke projects — the exact thing SaaS was meant to escape.
Architecture
The first and most consequential decision in any SaaS is the tenancy model, and it drives almost everything downstream. Shared schema — every tenant’s rows in the same tables, separated by a tenant id — is the cheapest to run and the simplest to operate, and it scales to large numbers of tenants on modest infrastructure. Its weakness is that isolation lives in your code: one query that forgets its tenant filter is a cross-tenant data leak, so the boundary has to be enforced structurally, with database row-level security and a query layer that cannot issue an unscoped read, not left to the vigilance of whoever writes the next feature. Schema-per-tenant moves the separation into the database — one schema per customer within a shared database — which strengthens isolation and simplifies per-tenant export or deletion, at the cost of running migrations across hundreds or thousands of schemas. Database-per-tenant gives the hardest isolation and suits customers with strict data-residency or compliance demands, but the operational weight — connections, migrations, backups multiplied by tenant count — is real and rises with every customer.
There is no universally correct answer, and we choose deliberately against your actual isolation, cost and scale requirements rather than defaulting to a fashion. Most B2B products begin well on a shared schema with rigorous, structurally enforced tenant scoping, and we design so the boundary is drawn cleanly enough that a demanding enterprise customer can later be lifted into their own schema or database without rewriting the product. Around that core sit the other tenant-aware systems — a subscription and billing service reconciled against Stripe, an identity layer that knows organisations and roles, a feature-flag and configuration service that lets plans differ within bounds — each designed so tenant context flows through the whole request and is never something a developer can accidentally omit.
Performance
In a multi-tenant product the performance question that has no single-tenant equivalent is the noisy neighbour: one heavy tenant — a customer with far more data or traffic than the rest — degrading the experience for everyone sharing the same infrastructure. We design against it. Every table carries its tenant id in the leading position of the indexes so that per-tenant queries stay fast as total data grows, expensive reads are cached per tenant, and heavy background work is queued and rate-limited so one customer’s large export or bulk import cannot starve the request path everyone else depends on. Where a handful of tenants dwarf the rest, isolating them onto their own resources is often cheaper than over-provisioning the shared tier for everyone.
The rest is disciplined application performance made harder only by the tenant dimension. We watch query plans as data grows, because a query that is instant with ten tenants can fall off a cliff at ten thousand; we paginate everything that could return an unbounded set; and we push slow work — report generation, third-party syncs, webhook fan-out — onto background workers so the interactive product stays responsive. Crucially, we measure per tenant, because an aggregate latency number hides the reality that your largest, most valuable customer may be having a far worse experience than the median.
Security
In SaaS the defining security risk is tenant isolation, and the standard is absolute: a customer must never, under any circumstance, see another customer’s data. A single missing tenant filter is not a bug to be triaged later — it is a data breach that can end a B2B company. So we do not rely on developers remembering to scope every query. We enforce the boundary in the data layer with row-level security, route every request through a tenant context that the query layer requires, and test explicitly that one tenant cannot reach another’s records through any endpoint, including the ones added last week. Authorisation is enforced on the server against the authenticated user’s organisation and role, never implied by what the interface chooses to show.
Around that core sits the security every serious product needs, sharpened by the SaaS context. Authentication built on a proven identity foundation with SSO for enterprise customers; secrets and per-tenant credentials handled properly; input validated at the edge; an audit trail of who did what within each tenant, which enterprise buyers will ask for. Because one system serves everyone, a single vulnerability is a vulnerability for all your customers at once — which raises the stakes on patching, dependency hygiene and least-privilege access. We build to that reality, and where customers will demand SOC 2 or similar, we design so the controls are real rather than retrofitted under audit pressure.
Scalability
Scaling a SaaS happens along two axes that pull in different directions. The first is more tenants and more data, where the tenancy model set the ceiling: a well-indexed shared schema carries a very large number of tenants on modest infrastructure, and the plan for the day a single enterprise customer needs their own schema or database is one made at design time, not improvised under pressure. Stateless application instances behind a load balancer scale out horizontally; the database is the part that needs deliberate planning — read replicas, careful indexing on the tenant dimension, and, only when genuinely required, partitioning or sharding by tenant. We do not reach for that complexity early, because premature sharding is its own expensive mistake.
The second axis is the product and the team, and it is where per-tenant customisation does its damage. Every bespoke behaviour granted to one customer multiplies what must be built, tested and reasoned about, and unmanaged it turns a scalable product back into a portfolio of bespoke projects. We hold the line with configuration and feature flags that flex the product along defined axes, and with the judgement to refuse the customisation that would fracture it. Where you commit to SLAs or need multi-region for latency or data residency, that is an architectural decision taken up front — availability and residency guarantees shape where data lives and how the system fails over, and cannot be sprinkled on afterwards.
SaaS integrations & ecosystem
The technologies we most often pair with it — each links to how we work with it.
How we work
We start with the two decisions that compound: the tenancy model and the billing model. Before feature work begins we settle how tenants are isolated, how that boundary is enforced structurally, and how subscriptions and metering will work against Stripe — because these are the choices that are ruinous to change later, and everything else is built on top of them. From there we build a real MVP in thin vertical slices: a genuine customer able to sign up, pay, and do the one thing the product exists for, in production, with the multi-tenancy, auth and billing real from the first slice rather than stubbed and rebuilt later. A demo that looks finished but has fake tenancy underneath is worse than nothing, because it hides the work that actually matters.
Then we iterate. A SaaS is a product, so we ship continuously, watch how real tenants use it, and let evidence rather than opinion drive what comes next — while holding the line against the per-tenant customisation that would fracture the codebase. The engineers who design your product are the ones who write it and keep it running, which is what operating what we build means in practice: safe migrations that do not lock out paying customers, observability scoped by tenant, and a clear answer to who is on-call. And if, having heard your requirements, we think you need a single-tenant application rather than a SaaS at all, we will say so before you commit — that judgement is part of the work.
The service behind it
Delivered throughWeb DevelopmentWhat we build with SaaS
The disciplines this technology most often shows up in — from a first build to taking over and stabilising an existing one.
How we deliver
- 01
Discover
We map the system, the constraints and the business it serves — including the parts nobody documented.
Architecture brief
- 02
Architect
Decisions get made, written down and defended before a line of production code exists.
Decision records
- 03
Build
Short cycles against working software. You see progress in the product, not in a status deck.
Shipping increments
- 04
Operate
Monitoring, incident response and iteration. The system is alive, so the engagement is too.
Runbooks & SLOs
Industries we use SaaS in
Domain knowledge changes what gets built. A few of the sectors we know before the first meeting.
Also in CMS & Commerce
Why teams choose us for SaaS
We get the irreversible decisions right first
Multi-tenancy and billing are the two things you cannot cheaply retrofit, and they are exactly where inexperienced teams cut the corner that costs a fortune later. The people designing your product have made these choices before and have seen how each one ages under real load. We spend the judgement up front, where it is cheapest.
We operate what we build
A SaaS is a product you run twenty-four hours a day, and we build for that reality because we live in it — tenant-scoped observability, migrations that do not lock out paying customers, a clear on-call story. We optimise for the three-in-the-morning maintenance case, not the launch-day demo, because that is where a SaaS actually lives.
Senior engineers only
A cross-tenant data leak is the failure that ends B2B SaaS companies, and it comes from exactly the kind of oversight a junior makes on an unfamiliar codebase. The engineers on your product are senior, they enforce tenant isolation structurally rather than hoping everyone remembers, and no one is learning the stakes on your customers.
Honest about the commitment
We will tell you plainly that a SaaS is a long-term operational business, not a project you commission and walk away from — and if what you actually need is a single-tenant application, we will say so before you spend money on machinery you do not need. We would rather lose the work than build you the wrong thing.
Typical timeline
- 01
Discovery and foundational architecture
One to three weeks settling the decisions that cannot be cheaply changed later — the tenancy model and how isolation is enforced, the billing and plan structure, the roles and organisation model — plus an honest call on whether you need a SaaS at all or a simpler single-tenant application.
- 02
MVP: the first paying slice
Several weeks delivering a real, thin end-to-end product in production — sign up, pay, and the one core job — with multi-tenancy, auth and billing genuine from the start rather than stubbed, so the hardest parts are proven against reality early.
- 03
Iterate toward product-market fit
Continuous shipping in short cycles driven by how real tenants use the product, expanding the feature set and plans while holding the discipline on customisation that keeps the codebase from fracturing.
- 04
Scale and operate
As the product grows, hardening the parts under strain — indexing and query plans on the tenant dimension, isolating heavy tenants, safe migrations, tenant-scoped observability and on-call — because from here a SaaS is a service you run indefinitely, not a build you finish.
How pricing works
- Fixed-scope MVP builds for a defined first version — the tenancy model, billing, auth and the core product loop — quoted once the plans, roles and the one job the product must do are clear.
- Monthly senior engagement for building and then running a SaaS over time, where the product evolves continuously and you want the same people who designed it operating it and answering for it.
- Architecture and rescue work on existing SaaS products — repairing drifted billing, hardening tenant isolation, or re-architecting a foundation that has outgrown its launch decisions — priced from an assessment.
- Because a SaaS is an ongoing operational business, the honest pricing conversation includes the cost of running it — infrastructure, observability, on-call — not just the cost of building it. We would rather you budget for that reality up front than discover it after launch.
Hire SaaS engineers
Need SaaS capacity on your own team? We embed named senior engineers into your existing team — reporting to your leads, working in your rituals — so you add capacity without a hiring cycle.
Hire SaaS engineersCommon questions
What is the most important early decision when building a SaaS?
The tenancy model — how you isolate one customer’s data and configuration from another’s — closely followed by how you bill. Both are load-bearing and ruinously expensive to change once you have paying customers. The choice between a shared schema with a tenant id, a schema per tenant, and a database per tenant sets the ceiling on your isolation, cost and scale, and quietly shapes everything built on top of it. We settle it deliberately at the start, against your actual requirements, rather than defaulting to whatever is fashionable and discovering the limits later.
Should I use a shared database or a separate database per customer?
It depends on your isolation, cost and scale needs, and it is a genuine trade-off. A shared schema is cheapest to run and simplest to operate and carries a large number of tenants comfortably, but isolation lives in your code, so it must be enforced structurally with row-level security rather than left to discipline. A database per tenant gives the hardest isolation and suits strict data-residency or compliance demands, but the operational weight — migrations, backups and connections multiplied by every customer — is heavy and grows with the business. Most B2B products start well on a shared schema designed so a demanding enterprise customer can later be lifted into their own database without a rewrite.
Why do you insist on getting billing right from the start?
Because a billing system that has drifted out of sync with reality is one of the most expensive things in software to repair, and it goes wrong quietly. Trials, upgrades and downgrades with proration, usage metering, failed payments and dunning, cancellations — each is a state that has to stay consistent between your database and Stripe, and a system that has been patched loosely will eventually charge customers wrong, which erodes trust faster than almost any other failure. We build billing as a deliberate, webhook-driven, reconciled system from the start, because retrofitting that discipline onto a drifted one costs far more than doing it properly first.
Is a SaaS a fixed project or an ongoing commitment?
An ongoing commitment, and we are blunt about it. A SaaS runs twenty-four hours a day and needs watching, patching, evolving and answering for indefinitely — it is a business you operate, not a build you commission and forget. That reality shapes the honest cost conversation, which includes running the product — infrastructure, observability, on-call — not just building it. If you want a system you can commission once and walk away from, SaaS is the wrong model, and we would tell you so before you spend anything.
How do you stop one customer from seeing another customer’s data?
By enforcing tenant isolation structurally, not by hoping developers remember to filter every query. Depending on the tenancy model, that means database row-level security, a query layer that cannot issue an unscoped read, tenant context that flows through every request, and explicit tests that one tenant cannot reach another’s records through any endpoint — including the ones added most recently. A cross-tenant leak is a data breach that can end a B2B company, so we treat isolation as a safety-critical boundary enforced in the data layer, where a single oversight cannot become a breach, rather than as application logic anyone can accidentally omit.
Building on SaaS?
A technical conversation with the engineers who would do the work. If we are not the right fit, we will say so on the call.