the cheapest model call is the one you delete
updated Jun 21, 2026
Riichi’s daily puzzle started as a Claude-generated hand. The answer was never the model’s — shanten and the optimal discard come from a library — but the model invented the hand and wrote the explanation. Then I spent weeks defending that one call.
The defence grew into an apparatus. A six-attempt retry loop to skip degenerate hands. A dedup module, because the model kept converging on the same textbook hand and one day literally served yesterday’s puzzle. Nonce seeding to force variety. A cache table, a cron to pre-warm it, a streamed skeleton to hide the latency. Every piece was a sensible patch on the piece before it.
Eventually I asked what all of it was for, and the honest answer was: to make an LLM behave like a curated list. So I wrote the curated list. Hand-authored puzzles in a version-controlled file, picked by day index. One commit deleted the retry loop, the dedup module, the cron, the cache, and the skeleton. It’s also just better for a learning tool: I control the difficulty curve, the content reviews in a PR diff, validation moved into CI, and the cost is zero.
When the scaffolding around a model call outweighs the call, take the model out. It’s the same skill as knowing where to put it in.
the hub · warm terminal