subinc labs
Services

Development, carriedthrough to production.

We take on software that has to be correct under load and stay changeable afterwards. Most of our work is backend and infrastructure, and a large share of it touches money. Buy it as a delivered project, or as engineers embedded in your own team.

Start a conversation
01

Backend and infrastructure

APIs, data models, background processing, and the operational surface around them. Schema design and migrations treated as first-class work rather than an afterthought.

  • Go, TypeScript, Postgres
  • Event-driven and batch processing
  • Migrations and schema integrity
  • Observability and alerting
02

Systems that handle money

Billing, ledgers, payments and reconciliation. The domain we know best, because we operate one ourselves and carry the consequences of getting it wrong.

  • Double-entry ledgers
  • Subscription and usage billing
  • Payment gateway integration
  • Reconciliation and reporting
03

Web applications

Operator consoles, customer-facing products, and the interfaces that make a complex system usable without lying about what it is doing.

  • React and Next.js
  • Design systems and primitives
  • Accessibility as a requirement
  • Performance budgets that hold
04

Taking over existing systems

Inheriting a codebase someone else wrote, understanding it honestly, and making it safe to change. Often the most valuable thing we do.

  • Codebase audit and mapping
  • Test and guard coverage
  • Incremental modernisation
  • Knowledge transfer

Isolation belongs in the query.

Switch tenant and the list changes. Then ask for a row by id across the boundary — the answer is not-found, not forbidden, because the row was never in the result set to be refused.

The difference is not pedantry. A 403 tells the caller the id is real, which is all anyone needs to enumerate another tenant’s book one guess at a time.

Acting as
GET /invoices
in_7f2aHalden Gridpaid$49.00
in_9c41Ostara Foodsopen$1,299.00
GET /invoices/
404 { "error": { "code": "NOT_FOUND" } }

That id is real, and it belongs to the other tenant. The answer is not-found rather than forbidden — a 403 would confirm the id exists, which is an oracle for enumerating someone else's invoices.

Two ways to buy it

Same engineers, same standard. What differs is who holds the priorities.

Model 01

Project delivery

We take a problem, agree what done means, and carry it there. The risk of getting the shape wrong is ours.

Who sets priorities
We do, against a scope we agreed with you
What you are buying
An outcome, with the unknowns named up front
How it changes
A written change to the scope, priced before it starts
How it ends
Handover with the context to own it — or we keep running it
Model 02

Outsourcing — dedicated engineers

Engineers who work to your board and your priorities, inside your repo and your review process, holding to the engineering standard on this page while they do it.

Who sets priorities
You do, sprint by sprint
What you are buying
Capacity, named people, working in your team
How it changes
Scale the team up or down between months
How it ends
A notice period. The work has been in your repo the whole time
How an engagement runs

Four stages, and we tell you which one you are in.

01

Conversation

You describe the problem. We tell you plainly whether it is something we should take on, and what we would want to know before quoting.

02

Scope and shape

A written scope with the unknowns named as unknowns. We would rather show you the risk early than discover it together at week six.

03

Build

Working software in front of you throughout, not at the end. Whatever we assert about progress, you can open and check.

04

Handover or continue

Either we hand it over with the context needed to own it, or we keep running it. Both are fine; being vague about which is not.

Want to see the standard we hold ourselves to?

Our own product is the honest sample. Same engineering, with nobody else to blame for the decisions.