Articles
Notes from inside the build.
What we learned shipping the last few projects, written up while we still remember why the code looks like that.
SYSTEM.LOG // INSIGHTS FROM THE BUILD // UPDATED CONTINUOUSLY

Have something useful to share?
Write an article
The agent is not the product
The useful work is not making an agent act. It is deciding what it may do, when a person must approve it, and how failure is recovered.
4 min read
Trace the journey, not the service
Healthy services can still produce a broken checkout. Observability becomes useful when it follows the user's outcome across every boundary.
4 min read
Performance budgets belong in planning
Performance cannot be polished in at the end. A useful budget turns speed into a constraint the whole team can trade against.
4 min read
Offline is a product state
A lost connection is not an exceptional case on mobile. Designing it as a real state makes the app calmer, safer and easier to trust.
4 min read
A design system is a delivery system
Components are only the visible layer. The real system is the path that turns repeated product decisions into reliable delivery.
4 min read
Feature flags need an exit plan
Flags make releases safer, but temporary control paths become permanent complexity unless removal is part of the original work.
4 min read
Retrieval is a product decision
A model cannot rescue the wrong evidence. Reliable retrieval starts with content ownership, useful boundaries and honest failure behaviour.
4 min read
The vertical slice is the real architecture
Architecture becomes real when one user outcome crosses the interface, services, data and deployment path—not when every layer has a diagram.
4 min read
Push notifications are a distributed system
Accepted is not delivered, and delivered is not useful. Reliable notifications require product thinking across a long, lossy chain.
4 min read
Idempotency is a product feature
Retries are inevitable. Idempotency protects users from turning one uncertain action into two payments, orders or messages.
4 min readShipping LLM features without shipping nonsense
Evals, guardrails and the boring plumbing that decides whether an AI feature survives contact with users.
2 min readExpo in production, two years on
What holds up, what still needs native code, and how OTA updates change the way a small team releases.
2 min readThe migration nobody noticed
Moving a high-traffic journey onto a new stack without a launch date, a freeze, or a drop in conversion.
2 min readRunbooks beat heroics
What we hand over so the team that inherits a system can run it at 3am without calling us.
2 min readExplore the index
Swipe to exploreFrom note to next step
Useful thinking. Applied to your product.
Senior design and engineering across mobile, web, AI and the backend behind them.