# Blog

Notes on building software, debugging production systems, and the occasional side quest.

## Posts

- [The BullMQ retry setting that doubled our load](https://aidanhibbard.dev/posts/bullmq-retry-footgun) (2026-02-18) — We wanted resilience. We got a DDoS we authored ourselves.
- [OAuth token refresh races](https://aidanhibbard.dev/posts/oauth-token-refresh-races) (2026-01-08) — Two requests, one refresh token, and a partner integration that worked 99.9% of the time.
- [Webhooks are at-least-once whether you like it or not](https://aidanhibbard.dev/posts/webhooks-at-least-once) (2025-12-14) — Your handler ran twice. Your database only noticed once. That is not a vendor bug.
- [Debugging a memory leak in a Next app](https://aidanhibbard.dev/posts/building-durable-chats) (2025-11-11) — Finding a needle in a haystack, blindfolded, and the hay is on fire.
- [Debugging a memory leak in a Next app](https://aidanhibbard.dev/posts/debugging-a-memory-leak) (2025-11-11) — Finding a needle in a haystack, blindfolded, and the hay is on fire.
- [A Nuxt hydration mismatch that was not a date bug](https://aidanhibbard.dev/posts/nuxt-hydration-gotcha) (2025-10-02) — The server HTML was correct. The client disagreed anyway. Of course it did.
- [Why I built nuxt-processor](https://aidanhibbard.dev/posts/shipping-nuxt-processor) (2025-09-20) — Background jobs in Nuxt kept being a side quest. I wanted them to be boring.