Writing
Blog
Concise technical articles on systems I work with day to day: typing, databases, streaming APIs, automation, and production operations. Sources live in content/blog.
- ·observabilitymicroservices
Correlation IDs and trace context across services
Propagating request identifiers through gateways, workers, and async jobs so incidents get a single timeline instead of log archaeology.
- ·TypeScriptAPI design
Zod at the API boundary: validate, then trust your types
Runtime validation for untrusted JSON, consistent 400 responses, and schemas that can align with OpenAPI and handler logic.
- ·DockerDevOps
Docker multi-stage builds for production Node.js images
Separating build-time dependencies from runtime artifacts, running as non-root, and keeping images small enough to pull quickly at scale.
- ·engineering-practicefeature-flags
Feature flags: controlled rollout without architectural debt
Centralizing flag identifiers, evaluating at boundaries, and retiring flags so experiments do not become permanent branches.
- ·backenddistributed-systems
Webhook idempotency and the transactional outbox
Designing for at-least-once delivery: deduplication keys, safe retries, and publishing after commit without dual-write hazards.
- ·CI/CDGitHub Actions
GitHub Actions: matrices and required checks without YAML sprawl
Centralizing lint, typecheck, and tests in one workflow—matrixed where it matters, protected by branch rules.
- ·Node.jsstreams
Node.js streams: memory-safe handling of large uploads
Why buffering entire request bodies fails at scale, and how pipeline and backpressure keep the process stable under load.
- ·Reactobservability
React error boundaries: resilience and signals that scale
Isolating UI failures, shipping structured client logs, and keeping PII out of the payload—patterns that hold up in production.
- ·PostgreSQLperformance
PostgreSQL: indexes and EXPLAIN for predictable latency
A practical workflow for turning slow queries into stable plans—EXPLAIN, composite indexes, and when partial indexes pay off.
- ·TypeScriptarchitecture
Domain modeling in TypeScript at scale
Using discriminated unions and nominal typing so invalid states are unrepresentable—and refactors stay mechanical.