Services · SaaS development

Multi-tenant products, built to survive their second year

Most SaaS products are easy to demo and hard to operate. The parts that decide whether a product is still maintainable eighteen months in — tenancy, roles, billing, background work, audit — are the parts we build first, because retrofitting them is what stalls a product.

What we build

Concrete deliverables, not adjectives

Tenancy and organisation models
Organisations at the top, teams under them, and a permission model that answers 'who can see this row' in one place rather than in every query. Reach runs this model: an organisation owns its members, its numbers and its credit balance, and usage is attributed back to the person who spent it.
Metered and credit-based billing
Usage that has to be counted before it can be charged: per-unit rates, prepaid balances, tiered pricing, top-ups, and the reconciliation job that makes the ledger agree with the provider. Reach prices in credits across seven volume brackets, in two currencies, with tax handled at the billing address.
Background job pipelines
The queue is where SaaS products actually fail. Broadcasts, imports, exports and webhooks run as durable jobs with retry policy, dead-letter handling and per-recipient status — not as a request that has to finish before the browser gives up.
Admin and support tooling
The screens your own team lives in: account lookup, credit adjustment, delivery investigation, feature toggles. Built early, because support requests answered by a database client do not scale past the first few customers.
What's included

The parts a demo doesn't show

Four stacked capability cards — real-time, schema migration, idempotent integrations, observability — among code, cloud and settings tiles
Real-time where it matters
Socket channels for the things a person is watching happen — delivery receipts landing, an inbox thread updating — and plain polling for everything else. Real-time everywhere is a cost, not a feature.
Schema you can migrate
Relational schema under a migration tool, versioned with the code. A product that cannot ship a schema change on a Tuesday is a product that stops changing.
Idempotent integrations
Webhook handlers and provider callbacks written to be delivered twice, because they will be. Every external event carries a key, and replaying it changes nothing.
Observability from day one
Structured logs keyed by tenant and request, health endpoints, and job-level metrics — so a delivery question has an answer that is not a guess.
How we work

The order things actually happen in

  1. Model the tenancy first

    Before a screen exists: who owns data, who can see it, what happens when someone leaves an organisation, how usage is attributed. Nearly every expensive rewrite we have seen starts by answering this late.

  2. Build the spine

    Auth, organisations, roles, the job queue and the billing ledger — thin but real — so every feature after this lands on finished foundations instead of temporary ones.

  3. Ship feature slices

    One capability end to end at a time: schema, API, UI, background work, and the admin view for it. A slice that is not operable is not finished.

  4. Harden before launch

    Load-shaped testing on the queue, failure drills on the provider integrations, and a run-book for the first support call. Then deploy.

Technology

The stack, and why each piece is in it

Application services
Java · Spring Boot · Node.js · TypeScript · ExpressSpring Boot where the domain is heavy and long-lived; Node with TypeScript where the work is I/O-bound and the team wants one language across the stack. Reach's API is the second of these.
Data
PostgreSQL · MySQL · MongoDB · DynamoDB · RedisPostgres is the default — a billing ledger wants transactions. MongoDB and DynamoDB appear where the shape is genuinely document- or key-oriented. Redis carries the job queue and the ephemeral state.
Front end
React · Next.js · AngularNext.js when the pages need to be indexed and fast on first paint; a plain React SPA when the product lives behind a login and routing is the only server concern.
Delivery
Docker · AWS ECS & Fargate · CI/CD pipelinesContainers so the thing that runs in production is the thing that ran on a laptop, and a pipeline that builds, migrates and deploys without anyone opening a console.

Tell us what you want built

A short brief is enough to start — what you're trying to do, and roughly for whom. We'll tell you honestly whether it's a fit.