Skip to content

03/Philosophy

How I decide, not just what I built.

A short set of principles I actually hold to under pressure, each one drawn from a decision on a real system rather than a poster on a wall. Where a principle cost me something or changed a design, the case study that proves it is one click away.

01

Reliability before novelty

A system people depend on earns the right to be interesting only after it is dependable.

The identity gateway sits on the login path for three products. That single fact decided its design: it holds no session state of its own, and a slow or failed downstream profile fetch returns partial identity instead of a failed login. Statelessness and graceful degradation were not optimizations I reached for later. They were the requirements that let the keystone exist at all.

Seen in Issara Authorizer
02

Security is a feature, designed in

If safety is something you add at the end, you have already shipped the gap.

Token verification runs RS256 against the provider JWKS with issuer validation, and the unsigned decode used only to display an expiry time is kept deliberately separate from the signature-verified decode that authorizes a request. That boundary is invisible in a demo and decisive in production. The same instinct put PII redaction in front of every external model call in Booppa, as a default rather than a setting someone has to remember.

Seen in Issara Authorizer
03

The simplest design that holds

Prefer the architecture with fewer moving parts to own, not the one that looks the most capable.

Three products needed one identity, with no shared database between them. The capable-looking answer is a new central user store that every product syncs to. The simpler answer, the one I chose, federates at login and uses the provider's own metadata as the correlation ledger. There is no new stateful system to keep consistent, because the simplest design that satisfies the requirement is usually the one still standing in three years.

Seen in Issara Authorizer
04

Build for the engineer reading it in five years

Maintainability is the feature that every other feature depends on.

Modernizing a backend that was serving live traffic, I replaced it a piece at a time behind the running system rather than betting everything on a single rewrite and a cutover weekend. Incremental is slower to feel finished and far easier to reason about, review, and roll back. The test I hold every decision to is whether someone inheriting the code, including me, will still understand why it is shaped this way long after the context has faded.

Seen in Cascade
05

Measure before you optimize

Guessing where the cost is wastes the effort and usually moves it somewhere worse.

A dashboard over a large schema was slow because it issued a separate aggregate query per category, not because the database was underpowered. The fix was to push conditional aggregation down into a single query and serve the read path with HTTP caching, once the actual cost was visible. I would rather spend an hour confirming where the time goes than a day optimizing a path that was never the bottleneck.

Seen in ILM Platform
06

Technology serves the problem, not the resume

The right tool is the one that fits the constraint in front of you, even when it is unfashionable.

A national postal operator needed a resident-feedback surface, on a WordPress platform that was a given rather than a choice. The real problem underneath was relational, so I modeled it as an indexed relational schema inside that constraint instead of forcing a more impressive stack that the situation did not call for. Choosing the boring tool that solves the business problem is a decision, and usually the correct one.

Seen in SingPost

The throughline

None of these are clever. They are the habits that keep a system correct, secure, and understandable years after it ships, which is the only kind of system worth putting your name on. If you want to see them applied rather than stated, the case studies are where they live.