Designing backend systems for throughput and safety
Over a decade building wallets, protocols, and payment rails, a few tradeoffs come up again and again:
Throughput is a systems property, not a hot loop
Most latency wins don’t come from a faster function. They come from batching, from removing a request waterfall, or from moving work off the critical path. At Yellowcard, batching requests cut cost and lifted margins; the code got simpler, not cleverer.
Safety is designed in, not bolted on
Owning the security posture of a protocol taught me that audits find what your architecture allows. Clear boundaries, small trusted surfaces, and explicit invariants make the auditor’s job, and the on-call engineer’s, tractable.
Build the smallest thing that can fail safely, then make it fast.
What this blog will be
Short, concrete notes on backend infrastructure, distributed systems, and blockchain engineering: the kind of thing I wish I’d read earlier.
// the shape of most of my wins
const results = await batch(requests, { size: 50 });