Bits & Whistles

Notes

Occasional writing about the unglamorous parts of the work.

Why we stopped using a spreadsheet for invoicing

11 June 2026

For three years our invoices lived in one sheet with a tab per client. It worked, in the sense that nothing was ever lost and nobody was ever quite sure what had been paid. The replacement is forty lines of Python and a table. The interesting part was not the code — it was writing down the rules we had been carrying in our heads, like what happens when a client pays two invoices at once with one transfer.

A note on retries and idempotency keys

3 February 2026

Every integration we have ever fixed was broken in the same place: a request that timed out, was retried, and created a second order. If the receiving system accepts a key that means "this is the same request as before", your retry logic becomes safe and your support load drops. If it doesn't, you need a reconciliation job, and you should budget for it.