Logo update cost across three designs One logo, 100K products: read cost vs write fan-out teaching numbers: 800 reads/s, 1.5 ms lookup, 2K/s backfill Reference reads: +1 lookup each tax: 1.2 core-s/s change: 1 atomic row stale window: none freshness: immediate fallback: the table itself pick when instant matters Embedding reads: zero extra change: 100K writes mixed window: ~50 s no resume cursor freshness: worst death mid-batch: mix stays almost never pick this Derived view reads: zero + version tag change: 100K async guard: logo_v check resume from cursor lag budget: 5 s, alerted covers 10K per sweep pick when 5 s is fine authority: brands(logo_url, logo_v) - retry only the unwritten cursor range duplicate outbox events die on the version guard - lag past budget falls back decision: the acceptable lag number picks the method - a copy is a debt with an update path