Lukas Janda github hey@lukasjanda.com

// 2026-10-08

Adding sources would not have helped

The funnel was capped by the thing doing the judging, not the thing doing the collecting. One model call per item was the whole problem.

I had a system reading nine sources a night and I wanted it reading more. The obvious move was to add sources. It would have achieved nothing, and it took a budget calculation rather than an experiment to see why.

The arithmetic

The system runs on a platform that allows 50 outbound requests per invocation. The spend looked like this:

- 6 source fetches - 1 email send - 35 scoring calls — one per item

Scoring was 83% of the budget. Adding a tenth source would have collected more items and scored exactly the same 35 of them. The surplus would have become a backlog, and because the queue was newest-first, the older items in it would have aged out without ever being looked at.

The collector was not the constraint. The judge was.

Ten at a time

Instead of one item per model call, I put ten in a single prompt and asked for an array back, each result carrying the index of the item it belonged to.

The same 35 requests now cover 350 items. Throughput went from 35 a night to over 200 — without adding a single source.

The part that needed care

Batching concentrates failure. One malformed response used to cost one item; now it could cost ten.

So the parser was built to lose ranking rather than data. It always returns exactly as many results as there were inputs. Anything the model skipped, mangled, or gave an invented index for stays marked unscored — and unscored items still reach the digest, flagged, rather than disappearing. A bad reply costs me ordering. It never costs me the lead.

I also checked the thing I was actually worried about, which is whether judging ten items together makes the judgements worse. Running the same six postings individually and as a batch, scores moved by one to three points and no verdict flipped — nothing crossed the threshold in either direction, and obvious junk still scored zero. Some of that movement is just sampling noise; models are not deterministic one at a time either.

What I took from it

When something feels throughput-bound, work out where the budget actually goes before adding capacity at the front. I spent an hour on a spreadsheet-shaped question and got a 10× improvement from a change that touched one function.

The instinct to add sources was an instinct to add input to a system that could not process the input it already had.