gRPC
Service-to-service RPC
Used for service-to-service RPC on the content platform — strongly-typed contracts and streaming have paid for themselves in debug time.
A working list of the tools, languages, and patterns I reach for — with a quick note on where each one came in handy.
Service-to-service RPC
Used for service-to-service RPC on the content platform — strongly-typed contracts and streaming have paid for themselves in debug time.
JavaScript runtime + web framework
My default for HTTP services when latency matters less than iteration speed. Comfortable with async patterns, middleware, and ops.
Python web framework
When the team wants Python and proper type hints — pydantic models keep request/response shapes honest end to end.
API design patterns
Versioning, idempotency, and resource modelling — opinionated about cache headers and clear error envelopes.
Streaming + pub/sub
Comfortable wiring producers and consumers, but lean on managed queues unless ordering or replay genuinely matter.
Distributed system patterns
Outbox pattern, idempotent consumers, and the boring choreography that keeps a distributed system from corrupting itself.
Containerisation
Day-to-day for local dev and prod images alike — multi-stage builds, slim base images, and reproducible toolchains.
CI/CD pipelines
Pipelines that test, build, and deploy without anyone watching — including the unhappy paths.
Cloud infrastructure
Just enough cloud to be dangerous: VPC, S3/GCS, RDS, Lambda, secrets management, and IAM policies that actually scope down.
Shell glue
The glue. Small reliable scripts beat half-broken Python utilities every time.
Multi-agent orchestration
Designing multi-agent systems with explicit planning loops, tool graphs, and the guardrails that keep them on task.
Prompt + tool engineering
OpenAI, Anthropic, and local-model wiring via LangChain / LlamaIndex — plus the prompt engineering that doesn't pretend prompts are magic.
Browser automation + parsing
Playwright and a handful of resilient patterns for sites that don't want to be scraped politely.
Typed JavaScript
Strict mode, inferred types, and zod at the boundary — the combo that makes refactors feel safe.
Compiled, concurrent
Reaching for it when latency or memory matters; love how little hidden cost there is per line.
Everyday scripting
Scripting, data work, ML-adjacent code, and small services — the everyday language.
UI + SSR
App Router, server components, and the discipline to keep the client bundle small.
Stylesheets
Hand-tuned design tokens, utility helpers, and component partials — the way this site is built.
E-commerce templating
Theme dev with Liquid + custom sections — pragmatic, not glamorous.