Writing.
Notes on building systems, understanding failures, and making software that works.
Start here
- Eleven departments, one afternoon: how UCAM Cloud ran UIU's Fall 2026 section selectionUIU's Fall 2026 section selection on UCAM Cloud: eleven departments in one window for the first time, 7 million requests with 8 server errors, a 114 ms p99, 29,047 course seats placed and none over capacity.
- Advising day: the afternoon a whole semester picks its seats at onceWanna know something crazy? A platform that sleeps most of the year, then takes thousands of requests a second in one afternoon and what bot defense did to the flood.
- Distributed rate limiting at the edge with Cloudflare Durable ObjectsWhy the per-colo rate-limit binding leaked my API limits, and how one single-threaded Durable Object per key running a sliding window counter fixed it.
- Postmortem: DocPipe v1 hung under loadA sanitised postmortem for the DocPipe v1 service hang — root cause, timeline, fix, and the soak test that prevents the failure mode from coming back. Google SRE Chapter 15 format.
Case studies
- UCAM Cloud: course registration that has to be right in the first minuteHow I built the first production version of UIU's course-registration platform in three months: registration that took five to six hours now takes most students under a minute.
- Atlas: the cloud behind source control for coding agentsHow I designed and built Atlas's cloud backend on Cloudflare: sync that accepts the same work twice, Shared Threads for people and agents on one task, and per-organisation isolation.
All writing
2026
- Eleven departments, one afternoon: how UCAM Cloud ran UIU's Fall 2026 section selection
- UCAM Cloud: a realtime seat board that never blocks section selection
- Advising day: the afternoon a whole semester picks its seats at once
- ULID: the unique ID that sorts itself
- Distributed rate limiting at the edge with Cloudflare Durable Objects
- Counting views at the edge for a dollar a month without a single cookie
- Postmortem: DocPipe v1 hung under load
- Three bugs that hung my PDF service | DocPipe
- Beyond the Chat Window: How Claude Code Actually Persists Knowledge Between Sessions
- EduQueue Deep Dive: The Asynq Worker Pool, ChromeDP PDF Pipeline & Live-Reload Settings
- EduQueue Deep Dive: Multi-Provider Email Failover, Bounce Idempotency & Tracking Pixels
- EduQueue Deep Dive: OTP-Authenticated Operator Console & Append-Only Email Analytics
- From GitHub Actions to Self-Hosted CI/CD: My Woodpecker Migration Guide with Docker
2024
- Understanding IPFS: The InterPlanetary File System
- Architecting Distributed Real-Time Translation with WebSockets and Redis
- OpenChat's Architecture: Scaling Real-Time Chat with Go, Redis, and WebSockets
- Building an App in 5 hours | Experimenting with AI (claude.ai) Capabilities for Flutter
- dated - Simplifying DateTime Operations in Dart
- GPG Signing git commits on macOS keeps asking for passphraseNote
- IUT 11th National ICT Fest OpenAPI Hackathon Team DevSprint's Solution for the Preliminary Round
- Working with JSON in Dart for Beginners
- Dapr — Simplifying Distributed Application Development
- Securing Your Code with AWS CodeCommit | A Step-by-Step Guide
- Git And Github | A Comprehensive Guide
- Setting Up Development Environment For Flutter A Step-by-step Guide