Auth, tenant isolation, billing, admin tooling, deployment and the operational work after launch. We've built this stack for our own products, which is different knowledge from having built it once for a client.

The single most consequential decision in a multi-tenant build is where isolation is enforced, and the most common answer is the wrong one. If a tenant filter lives in application code, you are one forgotten WHERE clause from returning one customer's data to another, and that's a breach, a disclosure obligation and usually a company-ending event for a small SaaS.
The correct answer is enforcement at the database, via row-level security, so a query from one tenant physically cannot return another's rows regardless of what the application layer forgot.
The second thing that goes wrong is billing, which is always harder than it looks, proration, plan changes mid-cycle, failed payments, dunning, usage overages. Teams routinely underestimate it by a factor of three.
The third is that nobody builds admin tooling until support becomes impossible, at which point engineers are running SQL against production to answer customer questions. That's both a security problem and a scaling ceiling.
Multi-tenant or per-client deployment, based on who your buyers are. Regulated and enterprise customers often want their own instance, and that's a legitimate architecture, not a downgrade.
Row-level security policies, verified with real authenticated requests, not with a service key that bypasses them, which is how teams convince themselves it works when it doesn't.
A real permission model rather than an is_admin boolean, because the boolean always becomes three booleans and then a mess.
Subscriptions, usage, proration and failed-payment handling. Retrofitting billing into a live product is materially harder than building it in.
So support questions get answered without production SQL access. This is what lets you scale support past the founders.
Genuine dev, staging and production separation, with a pipeline that runs checks before anything ships.
One missing filter from a breach. It belongs in the database, enforced by policy.
If your buyers are regulated or enterprise, per-client deployment is often easier to sell and to reason about. We'll ask about your sales motion before assuming.
It always takes three times longer than estimated and is much harder to add to a live product.
If you have an existing codebase, the first work is an honest audit. Rewrites are usually the expensive answer to a diagnosable problem.
Outlia and Setta are our own multi-tenant SaaS products, running in production with real customers. Row-level security, per-tenant configuration, admin tooling and billing are decisions we've made with our own money at stake.
One thing we learned the hard way and now check everywhere: verify RLS with an authenticated anon-key request, never with a service key. A service key bypasses row-level security entirely, so testing with one will happily confirm that a broken policy works.
Depends on your buyers. Regulated or enterprise customers often want their own instance, and per-client deployment is simpler to reason about security-wise. Multi-tenant is cheaper to operate at volume. We'll walk the trade-off with your actual sales motion in mind rather than defaulting.
Row-level security at the database, so a query from one tenant physically cannot return another's rows. Application-layer filtering alone is one forgotten clause away from a breach. And we verify with authenticated requests, because a service key bypasses RLS and will falsely confirm a broken policy.
Yes, and it's common. The first work is an honest audit before anyone promises a timeline or proposes a rewrite.
Stripe, typically, with subscriptions, usage-based components, proration and dunning. It's consistently underestimated and we scope it as real work rather than a week at the end.
On a retainer, or we hand over with documentation. Both are genuinely available, we're not trying to build dependency.
A focused first version in four to eight weeks depending on scope. We'd rather launch one workflow properly than five half-built.
Anqor is a small studio, so you deal with the person who builds it. If this isn't the right fit for your business, I'd rather say so on the first call than sell you something you don't need.
LinkedIn →If it's sound we'll tell you. If isolation is enforced in the wrong layer, you want to know now rather than after a disclosure.