<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Off By One</title><description>Postmortems, tutorials and explainers on Postgres, Node, Go, testing and reliability. Real code, real EXPLAIN output, written by four developers.</description><link>https://sitemoment.com/demo/minimal-off-by-one/</link><language>en</language><item><title>A boring monorepo layout that has survived three years and 40 packages</title><link>https://sitemoment.com/demo/minimal-off-by-one/posts/pragmatic-monorepo-layout/</link><guid isPermaLink="true">https://sitemoment.com/demo/minimal-off-by-one/posts/pragmatic-monorepo-layout/</guid><description>Three top-level folders, one dependency rule and pnpm filters for CI. The monorepo structure we keep coming back to, and what we stopped doing.</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate><category>Tooling</category><category>Node.js</category><author>Hana Sato</author></item><item><title>How to read a flame graph without guessing</title><link>https://sitemoment.com/demo/minimal-off-by-one/posts/reading-flame-graphs/</link><guid isPermaLink="true">https://sitemoment.com/demo/minimal-off-by-one/posts/reading-flame-graphs/</guid><description>Width is time, height is call depth, colour means nothing. A practical guide to reading CPU flame graphs from Go&apos;s pprof, using a real regression we fixed.</description><pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate><category>Performance</category><category>Go</category><author>Marek Dvořák</author></item><item><title>Renaming a column without downtime: expand, migrate, contract</title><link>https://sitemoment.com/demo/minimal-off-by-one/posts/zero-downtime-column-renames/</link><guid isPermaLink="true">https://sitemoment.com/demo/minimal-off-by-one/posts/zero-downtime-column-renames/</guid><description>ALTER TABLE ... RENAME COLUMN takes a millisecond and breaks every running pod. A step-by-step expand and contract rename in Postgres, with the trigger we use.</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>Postgres</category><category>Reliability</category><author>Ilse Brandt</author></item><item><title>TIL: our trial countdown was wrong one day a year, and only in Europe</title><link>https://sitemoment.com/demo/minimal-off-by-one/posts/testing-time-dependent-code/</link><guid isPermaLink="true">https://sitemoment.com/demo/minimal-off-by-one/posts/testing-time-dependent-code/</guid><description>A date test that passed for months failed on a CI runner in Berlin. What we learned about DST, local midnight and testing code that reads the clock.</description><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate><category>Testing</category><category>Node.js</category><author>Hana Sato</author></item><item><title>Feature flags without a vendor: one table, one function, one rule</title><link>https://sitemoment.com/demo/minimal-off-by-one/posts/feature-flags-without-a-vendor/</link><guid isPermaLink="true">https://sitemoment.com/demo/minimal-off-by-one/posts/feature-flags-without-a-vendor/</guid><description>For most teams, feature flags are a Postgres table, a hashing function and a policy about expiry dates. Here is ours, and when we would pay for a product instead.</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate><category>Tooling</category><category>Postgres</category><author>Hana Sato</author></item><item><title>40 MB an hour: the Node memory leak hiding behind setMaxListeners(0)</title><link>https://sitemoment.com/demo/minimal-off-by-one/posts/node-memory-leak-event-listeners/</link><guid isPermaLink="true">https://sitemoment.com/demo/minimal-off-by-one/posts/node-memory-leak-event-listeners/</guid><description>A postmortem of a slow leak in a Node ingest service: how two heap snapshots, one retainer chain and a silenced warning led us to the bug.</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><category>Node.js</category><category>Performance</category><author>Tobi Okeke</author></item><item><title>The index that did nothing: reading an EXPLAIN plan line by line</title><link>https://sitemoment.com/demo/minimal-off-by-one/posts/the-index-that-did-nothing/</link><guid isPermaLink="true">https://sitemoment.com/demo/minimal-off-by-one/posts/the-index-that-did-nothing/</guid><description>We added an index to fix a 1.2 second query and the plan did not change. Here is how EXPLAIN ANALYZE told us why, and the partial index that worked.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>Postgres</category><category>Performance</category><author>Ilse Brandt</author></item><item><title>A retry helper with full jitter, in about 40 lines of Go</title><link>https://sitemoment.com/demo/minimal-off-by-one/posts/retry-helper-with-jitter/</link><guid isPermaLink="true">https://sitemoment.com/demo/minimal-off-by-one/posts/retry-helper-with-jitter/</guid><description>Exponential backoff without jitter turns one outage into synchronized waves of retries. Here is a small Go helper that gets backoff, jitter and cancellation right.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>Go</category><category>Reliability</category><category>Testing</category><author>Marek Dvořák</author></item><item><title>Idempotency keys for webhooks: the ten lines that stop double charges</title><link>https://sitemoment.com/demo/minimal-off-by-one/posts/webhook-idempotency-keys/</link><guid isPermaLink="true">https://sitemoment.com/demo/minimal-off-by-one/posts/webhook-idempotency-keys/</guid><description>Webhook providers deliver at least once, so your handler will see duplicates. A unique key and one transaction in Postgres make that harmless.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><category>Reliability</category><category>Postgres</category><author>Ilse Brandt</author></item></channel></rss>