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, infrastructure and the migrations between them, and a large share of it touches money. Buy it as a delivered project or as engineers embedded in your own team — or start with a consultation that leaves you free to walk away from any vendor, us included.

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

DevOps and platform

Pipelines, environments and the infrastructure under them — defined in code, rebuildable from the repository, and owned by your team rather than by whoever remembers the console clicks.

  • Infrastructure as code: Terraform, OpenTofu
  • CI/CD with gates that can actually fail
  • Containers on Kubernetes or a managed runtime
  • Secrets, backups and restore drills
05

Migrations

Moving a running system — to another cloud, off a legacy platform, onto a new schema or a different payment processor — without asking your customers to notice. Every cutover ships with its rollback.

  • Cloud to cloud, on-premises to cloud
  • Expand-and-contract schema changes
  • Billing and payment-gateway moves
  • Rehearsed cutover, written rollback
06

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.

Consultation · no vendor lock-in

An exit plan for every dependency.

Lock-in is rarely a contract. It is a proprietary API threaded through the code, data in a format only one vendor reads, and infrastructure that exists only as clicks in a console. We find those, price what leaving would cost, and fix the ones worth fixing.

You get a written map of every external dependency, what it would take to leave each one, and the changes in the order we would make them — yours to act on with us or without us.

Infrastructure
Where it hidesResources created by hand in one provider's console, known only to whoever clicked them.
InsteadTerraform or OpenTofu in your repository, reviewed and applied like any other code.
Compute
Where it hidesBuild and deploy steps written against a single platform's proprietary tooling.
InsteadOCI container images that Kubernetes, Cloud Run or ECS can all run unchanged.
Data
Where it hidesProprietary database features in the hot path, with no tested way to get the data out.
InsteadPostgres where it fits, migrations in version control, and an export you have actually restored.
Observability
Where it hidesOne vendor's agent and query language woven through every service.
InsteadOpenTelemetry instrumentation, so the backend that stores it is a configuration choice.
Payments
Where it hidesCheckout, webhooks and stored cards written directly against one processor's API.
InsteadA gateway seam in your own code, and the processor's data-export route documented before you need it.
Secrets and access
Where it hidesCredentials pasted into vendor dashboards, with no record of what uses them.
InsteadOne secret manager, referenced by name, rotated on a schedule you can see.
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.