Field notes
Corrections and hard-won sentences from operator work. The place for "we were wrong."
Start with
- 2 min readCTR is a trapClick-through rate looks like a quality score on remnant display. On our flights it mostly measured how clicky the inventory was, not whether a person arrived.
- 2 min readFour times we said the seat could not do itFour capabilities we published as absent after checking one endpoint. Placement excludes, dayparting, pacing, and schema were all on a different surface.
- 1 min readBuild the web Worker before you deploy itwrangler deploy inside the web app can ship the existing OpenNext build. A new route then 404s on the live domain even though the laptop rendered it.
All pieces, newest first
15 pieces
- Build the web Worker before you deploy itwrangler deploy inside the web app can ship the existing OpenNext build. A new route then 404s on the live domain even though the laptop rendered it.1 min read
- The reporting user is not the other Beeswax loginTwo logins on one instance can see different advertisers. Falling back to the other username does not fix a 401. It silently audits someone else's book.1 min read
- Why an applied finding came back openThe unique index only covered open and acknowledged. The night after apply, the scan inserted a second open row and un-made the decision.1 min read
- A compute bill from a one-minute cronA one-minute cron made 147 database transactions a minute with no user traffic. Fixes cut it to 24. Such crons do not belong on a scale-to-zero database.2 min read
- CTR is a trapClick-through rate looks like a quality score on remnant display. On our flights it mostly measured how clicky the inventory was, not whether a person arrived.2 min read
- Decisions need a revert commandA trafficking change that exists only in someone's head is not reversible. Write the revert command first. Applied and never judged is the failure.2 min read
- Four times we said the seat could not do itFour capabilities we published as absent after checking one endpoint. Placement excludes, dayparting, pacing, and schema were all on a different surface.2 min read
- OpenAI 429 is not always a rate limitHTTP 429 covers a transient rate limit and an exhausted credit balance. Classify insufficient_quota before you retry. A missing GPT signal is never a pass.2 min read
- OPTIONS, not /fieldsBeeswax /rest/v2 object /fields 404s everywhere. DRF OPTIONS on the object returns actions.POST with real field metadata, including 66 bid-modifier keys.2 min read
- Reporting that doubled spend and paused the fleetEastern time stamped as UTC, plus a dedupe key on the derived hour, duplicated rows. Summed spend doubled from $24.46 to $48.92 and the fleet paused.3 min read
- Targeting and bid-modifier keys are different listsThis seat's targeting catalog has 50 keys. Bid modifiers have 66, including both clocks. Treating them as one list hid dayparting from us for three months.2 min read
- The sentence that cost four monthsThe error "Bidding strategy CPM is not enabled for pacing" is true for CPM. The reach-out line is boilerplate. CPM_PACED accepts daily even pacing.2 min read
- We were measuring nothing and reading zero as fineCreatives had empty creative_addons. invalid_impressions and viewable_impressions read zero because nothing was measuring, not because traffic was clean.2 min read
- What we learned by buying our own remnantWe bought open-exchange display to study supply for consumer advertisers. CTR, empty measurement add-ons, and a few domains lie with a straight face.2 min read
- Zero clicks that were a field nameRequest Beeswax Reporting delivery clicks as clicks, plural, not click. ad_click_tokens are redirect plumbing, not delivery truth. Corrected June 26, 2026.2 min read