All writing
2 min read

Building software businesses actually grow on

What I've learned shipping a multi-tenant B2B platform that real shops run their day on — and why boring reliability beats clever features.

ProductEngineeringSaaS

There's a particular kind of pressure that comes from software people use to run their livelihood. A side project can be down for a weekend. A point-of-sale terminal cannot.

That constraint shapes everything about how I build.

Reliability is the feature

When a shop owner opens their dashboard at 9am, they don't care that the analytics pipeline is reactive, or that the loyalty engine uses an event-sourced model. They care that the number is right and it loaded fast.

The most luxurious thing software can do is simply work, every single time.

Everything clever I've built has been in service of that one boring promise.

Multi-tenancy is a trust contract

The moment two businesses share one system, you're holding a trust contract. One tenant's data must never leak into another's — not in a query, not in a cache, not in a log line.

// Every query is scoped. No exceptions, no "just this once".
public Flux<Order> ordersFor(String businessId, String branchCode) {
    return orderRepository.findByBusinessIdAndBranchCode(businessId, branchCode);
}

The discipline isn't glamorous. It's a hundred small decisions that all say the same thing: isolation by default.

Ship the seam

The interesting work lives at the seam — where the backend's correctness meets the interface's feel. A fast query that renders into a janky table is a failure. A beautiful screen powered by stale data is worse.

I try to own both sides of that seam. It's where craft actually shows up.