C.W.K.
Stream
Lesson 03 of 05 · published

Budgets Keep You Honest

~10 min · latency-budgets, measurement, benchmarks, discipline

Level 0Unlit
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"A number you wrote down before you built it is the only thing that can tell you you're failing."

Why Write Budgets Down

The 10–40 second disaster happened partly because no one had written down what "fast enough" meant. Without a number, every individual decision looks reasonable — of course cleanup should be smart, of course it should use the good brain — and the total quietly becomes unusable. A latency budget is a commitment made before the temptations arrive. It converts "this feels slow" into "this exceeds the budget by 8 seconds," which is an argument that ends debates instead of starting them.

Firekeeper's Budgets

hotkey -> recording starts      under 150 ms   (after warm start)
first partial transcript        under 1.5 s    (normal speech)
final STT, short utterance      under 1 s
final STT, 30 s dictation       under 3 s      (Apple Silicon)
cleanup, ordinary dictation     under 2 s      (warm local model)

# Each stage owns a number. The sum is the product.

Note that the budgets are per-stage. That matters: a single end-to-end number tells you that you're slow but not where, and a slow stage can hide behind a fast one. Per-stage budgets mean a regression names itself — when cleanup blows past 2 seconds, you don't go hunting through the mic code.

The Benchmark Harness Makes It Real

Budgets you don't measure are wishes. Firekeeper ships a small benchmark CLI that runs recorded clips through each engine and model and prints the transcript plus the latency, so "which is faster" is data instead of vibes. The same discipline applies to cleanup lanes: if you can't measure the per-stage cost on your own machine, you'll rediscover the 40-second bug the next time an innocent-looking reuse creeps in.

Write the budget before you write the feature. A performance target set in advance is a design constraint; one set after the fact is a rationalization. When each stage owns a number from the start, every implementation choice gets checked against it automatically — and the choices that would have quietly added 30 seconds get rejected at design time instead of discovered by a disappointed user.
Warm start is part of the budget, not an excuse. The 150ms hotkey-to-recording target assumes a warm engine — which is exactly why prewarming at launch is a feature, not an optimization. If your budget is only achievable on the second invocation, the first invocation is the one users judge you by. Design the warm-up so the budget holds on the first press of the day.

Code

Per-stage budgets, so regressions name themselves·text
STAGE                        BUDGET      OWNER
-----                        ------      -----
hotkey -> recording          <150 ms     hotkey + audio (needs prewarm)
first partial transcript     <1.5 s      STT engine
final STT (short)            <1 s        STT engine
final STT (30s clip)         <3 s        STT engine
cleanup (ordinary)           <2 s        cleanup lane

# One end-to-end number says "slow".
# Per-stage numbers say "cleanup is slow, and by how much".

External links

Exercise

For a feature you've built, write per-stage latency budgets after the fact, then measure the real numbers. Which stage blows its budget? Now ask the uncomfortable question: would you have made the same implementation choice if that number had been written down first?
Hint
Usually at least one stage is 5-10x over, and it's almost always the stage where you reached for a powerful, convenient component. The budget written in advance wouldn't have made you smarter — it would have made the cost visible at the moment of choosing, which is the only moment the choice is cheap to change.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.