category
Engineering
Building real products: architecture decisions, trade-offs, and lessons from shipping.
-
Why Go for the service, Rust for the tool Third in the Why this over that series: I write both daily. The split that emerged isn't about language quality, it's about what each artifact is for. -
Why SSE over WebSockets Second in the Why this over that series: most realtime features are one-way, and server-sent events give you reconnection, proxy-friendliness, and plain HTTP for free. -
Why SQLite over Postgres (sometimes) First in the Why this over that series: for single-user and single-box systems, the world's most deployed database in one copyable file is not the compromise. It's the correct choice. -
Designing for the network you actually have Building consumer apps for African networks: latency budgets in round trips, the retry rule that prevents double charges, offline queues, payload discipline, and telling users the truth while the rail is slow. -
Never retry a timeout A timeout is not a failure, it is an unknown outcome. The double-charge lesson every payments engineer learns exactly once, formalised into rules you can apply today. -
The engineering behind Aevu How a calm, comment-free social app gets built: interest-first ranking, a media pipeline that is really a state machine, and moderation that fails closed. -
In defence of boring technology The most productive stack is the one you stop thinking about.