Tags
Architecture
6 notesMake the broadcast survive a restart
The first version sent your whole campaign from a single goroutine — and lost everything if the process blinked. Rebuilding it as a durable per-recipient queue.
Designing BillParty offline-first: constraints as features
BillParty has no backend, no accounts, no cloud — on purpose. How a hard constraint (works on a plane, lives on one phone) became the product's best feature.
Tests as living contracts
A good test suite isn't a safety net you tolerate — it's the executable specification of what your system promises, including the properties that must always hold.
Make decisions reversible
You can't reliably predict the right call. So optimize for cheap mistakes: prefer decisions you can walk back over ones you have to get right the first time.
Boundaries before features
Why I draw the lines between modules before writing a single feature — and how it keeps a codebase from rotting as it grows.
Why I store money as integers
Floats and currency don't mix. A short note on a decision I make on every project that touches money — and why it keeps balances exact.