ConceptIntermediateQuality, Cost & Token Economics / Latency budgets and UX tradeoffs / #9

What is time-to-first-token and why is it the metric users actually feel?

LEAD · latency budgets and UX tradeoffs

Pathwright kept finishing its answers just as fast as it always had. The wait before it said anything at all had crept past three seconds, and the one speed number Varrow Systems watched had never been built to catch that.

The direct answer
Time-to-first-token is the wait between hitting send and the first word showing up. Total completion time is how long the whole answer takes, start to finish. They are different numbers and they do not move together: at Varrow Systems, median completion time held near 5.1 seconds for ten straight weeks while p95 time-to-first-token climbed from 780 milliseconds to 3.6 seconds, because a codebase search step ran to completion before the model could say a single word. Track p95 time-to-first-token every week, on its own, and set two thresholds on it: past 1.2 seconds, find out why; past 2.5 seconds, ship a fix that lets the model start talking while the search keeps running, not a smaller search.
Do this, in order
  1. Watch p95 time-to-first-token weekly, never a blended average response time alone.Why: completion time sat near 5.1 seconds the whole quarter while the wait before the first word nearly quintupled underneath it.
  2. Set two real thresholds on that number and act at each one, not just chart it.Why: a metric nobody acts on past 1.2 seconds, then past 2.5, is a dashboard decoration, not a metric.
  3. Fix the wait by letting the model start talking while the codebase search keeps running, not by searching less of the repo.Why: the sequential search-then-generate order is what actually built the delay, and a smaller search only trades speed for wrong answers on the hardest questions.
  4. Define the first token strictly as the start of the real answer, and audit that definition on a schedule.Why: a fast filler line played on cue can make the number look healthy while a person is still sitting in real silence.
  5. Reject a smaller default search radius for every account as the fix.Why: it cuts grounding on the biggest, hardest repos, exactly where a wrong answer costs the most trust.
  6. Recheck the metric itself whenever a new step gets added before generation starts.Why: the wait before the first word was a non-issue only while nothing blocked generation, and that stopped being true the day the search step shipped.

How to answer this, stage by stage

Nobody is grading whether you can define the term correctly. They are grading whether you know which half of the wait a person actually sits and feels.

1
Scope it to one concrete product before answering in the abstract
Say it like this
"Let's ground this in one product. Pathwright is an AI pair programmer built into the editor by Varrow Systems. A developer asks a question in a chat panel without leaving their code, and Pathwright answers using the files it can see. Torin Osterberg owns latency and speed on it, across a bit over six thousand licensed developer seats."
Why this works
An abstract "what is time-to-first-token" question turns into a definition recited from memory fast. One product turns it into a real person waiting on a real screen.
2
Say your structure out loud before touching a number
Say it like this
"I'm going to define the two numbers plainly, say which one a person actually feels and why, then say what moves before the business number does, how that gets gamed, and what I'd do at real thresholds."
Why this works
Tells the interviewer you have a method, not a glossary entry, before you've named a single figure.
3
Answer the actual question, before naming a metric
Say it like this
"Time-to-first-token is how long you wait after you hit send before the first word shows up. Total completion time is how long the whole answer takes, start to finish. Once that first word lands, a person's brain reads it as 'this is working,' even if the rest takes a while. Before that word, every second reads as 'this might be broken,' no matter how fast the full answer would have been."
Why this works
This is the actual question, answered directly, in plain words, before any metric name shows up.
4
Give the one decision
Say it like this
"So I'd track p95 time-to-first-token every week, on its own, not folded into one blended response-time average. And I'd set real thresholds on it, not just chart it."
Why this works
This is the answer to the question. Everything after this is why it's the right one.
5
Prove it with the failure, compressed
Say it like this
"At Varrow, median total completion time held near 5.1 seconds for ten weeks straight. Underneath it, p95 wait before the first word climbed from 780 milliseconds to 3.6 seconds, because a new codebase search step ran to completion before the model could start talking. At Grendon Robotics, one customer with a forty-thousand-file repo, the share of developers opening the chat panel three or more times a week fell from 68 to 41 percent in that same stretch, and nobody caught it until the quarterly account review."
Why this works
A real number with a real timeframe does more work than any adjective.
6
Close on the decision, not the arithmetic
Say it like this
"So: the wait before it starts is the number a person actually feels. Watch that on its own, act at a real threshold, and fix it by letting the model start talking sooner, not by showing it less of the code."
Why this works
Ending on the rule, not the last figure crunched, is what makes this sound like judgment instead of a definition read aloud.

Let's learn

What does "it's working" actually mean to someone staring at a blank chat window?

Pathwright is the tool Varrow Systems built so a developer can ask a coding question without leaving the editor: type it into a chat panel next to the code, and Pathwright answers using the files actually open and the repo around them.

Before something like Pathwright, a developer stuck on a bug used to alt-tab out to a browser, search around, maybe paste the error into a separate chat window, then come back. That round trip cost about seven minutes on average, and a busy developer made it something like ten times a day.

Knowledge spark: what's the difference? Time-to-first-token is the wait between hitting send and the first word showing up. Total completion time is how long the whole answer takes to finish, start to end. A short wait with a slow finish can feel fast. A fast finish with a long wait at the start feels broken the whole time, even though the total time might be shorter.

With Pathwright, the same question gets asked and answered without leaving the editor. On a small, typical repo, the first word shows up in well under a second, and the whole round trip shrinks to under a minute.

The turn here isn't that Pathwright's answers got worse, or slower to finish. Total completion time, the whole answer start to end, barely moved. What changed was the part nobody watched on its own: how long a developer sat looking at nothing before the first word showed up.

Pathwright never got slower once it started talking. The silence before it started did.
The leading edge: platform-wide p95 wait before the first word, this quarter
4.0s 2.0s 0 2.5s threshold 780ms starts to climb 3.6s Wk 1 Wk 5 Wk 10
Weekly p95 time-to-first-token, platform-wide. It crossed the 2.5 second line around week seven and reached 3.6 seconds by week ten, three weeks before Varrow's quarterly customer health review caught Grendon Robotics' engagement drop.

Here's what was actually driving that line. Pathwright had shipped a "deep repo search" step: before the model writes a single word, Pathwright searches the whole codebase for the files that matter, then hands that to the model to work with. Search time scales with how big a repo is and how much history it carries, and it happens before generation starts, not during it. On a small repo, the search finishes in well under a hundred milliseconds. On a large one, it can run for seconds, all before the first word appears.

The choice that mattered Torin's team built search and generation as one strict, sequential step at Pathwright's very first architecture review: search the whole repo, wait for it to finish, only then call the model. That made sense when every pilot repo had a few hundred files and the search itself took under a hundred milliseconds, invisible next to the model's own startup. It stopped making sense the day search itself began taking seconds on its own, and nobody split the two steps apart.
The lagging outcome: share of Grendon Robotics developers using Pathwright's chat panel weekly
100% 50% 0 68% Wk 0 41% Wk 10, this quarter
Before, Wk 0After, Wk 10
Share of Grendon Robotics' 280 licensed developers opening Pathwright's chat panel three or more times in a week. It only showed the drop in Varrow's quarterly customer health review, three weeks after weekly p95 wait-before-first-word had already crossed the 2.5 second line.

At its worst, a wait nobody measures on its own is worse than no metric at all, because the completion-time number everyone watches keeps saying the product is fine. Once Grendon's renewal risk score flipped to red in that same quarterly review, Varrow was looking at a $410,000-a-year contract nobody had a warning about, weeks after the number that would have warned them had already crossed its own line.

What I'd leave alone: developers working in small repos, a few hundred files or fewer, barely enter this conversation. Their searches already finish in well under two hundred milliseconds, so p95 wait-before-first-word for that group never gets close to either threshold. Building the fix around them would spend engineering time on a group that was never the problem.

The lesson: people don't feel how long an answer takes to finish. They feel how long they sit waiting for it to start. A calm completion-time average isn't proof a product feels fast. It's proof you're measuring the half of the wait a person never actually sits through.

Now here is the same thing as a story

Read the long version below when you want to feel why a calm completion-time number hid so much, not just be told that it did.

The speed dashboard lived on Torin Osterberg's second monitor, propped at a slight angle so he could glance at it without turning his head. He'd built it himself, back when Pathwright answered from a single small index and every pilot repo fit on one screen.

Pathwright had been live with paying customers for a little over a year. In the early months, Torin did more than glance at the dashboard. Every week or two, he'd sit and watch a handful of real request logs frame by frame, checking exactly where the milliseconds were going before the first word appeared.

For a long stretch, that checking confirmed the same thing: search was fast, generation was fast, and the wait before the first word barely existed as its own number. Somewhere around month six, the frame-by-frame checks thinned to once a month. By month ten, Torin was reading one line off the dashboard, average response time, and moving on if it looked like it always did. It always looked like it always did.

It came back during a user research review, a recording of a Grendon Robotics developer working through a hard bug with Pathwright open. A colleague running the session paused the video and said, "Watch this again. She's retyping the same question. She thinks it froze."

Torin didn't have an answer for why. He'd never actually pulled p95 wait-before-first-word on its own, only the blended average that folded it in with everything else.

He pulled ten weeks of logs. Platform-wide p95 wait-before-first-word had climbed from 780 milliseconds to 3.6 seconds. Median total completion time hadn't moved, still sitting near 5.1 seconds, the whole ten weeks, because the model's own token-by-token speed hadn't changed at all. The wait had all piled up in the part before the model said a word.

We did not lose four seconds off the clock. We lost the four seconds where nothing on the screen moved.

Grendon Robotics had the worst of it: a forty-thousand-file monorepo, the biggest Pathwright served, which meant the deep repo search took the longest there of any account. Its own p95 wait-before-first-word had gone from about 900 milliseconds to 4.4 seconds in the same ten weeks. The share of Grendon's 280 developers opening the chat panel three or more times a week had fallen from 68 to 41 percent, and it surfaced not in Torin's numbers but in Varrow's quarterly account review, where Grendon's renewal risk score had flipped to red.

It was never really about whether 5.1 seconds was a healthy completion time. There was no single response-time number that could describe a wait split into two very different halves, one a person watches and one they don't.

The decision that opened the door went back to Pathwright's very first architecture review, more than a year earlier. The team decided search and generation would run as one strict sequence, search first, wait for it, then generate, because at the time every pilot repo was small enough that search finished in under a hundred milliseconds, invisible next to the model's own startup. Nobody chose carelessly. It was the right order for the repos that existed that week.

Run those ten weeks again with one change: p95 wait-before-first-word tracked weekly from day one, next to completion time, not folded into it. By week three, the number crosses 1.2 seconds, and Torin's team goes looking, the way they eventually did, four weeks sooner. The fix ships before Grendon's engagement ever drops: the model starts talking from the current file and the last few turns of chat while the deep repo search keeps running in the background, then weaves in the fuller answer as the search results land. Grendon's panel usage never falls below 60 percent, and the account never turns red.

One design let a calm completion-time number speak for a wait it was never built to describe on its own. The other watches the part a person actually sits through, and it would have rung four weeks sooner, before a single account ever had a reason to stop trusting the panel.

What I'd tell myself, back at that first architecture review: the sequence was never wrong, exactly. It was right for the repos that existed then, and nobody gave the day it stopped being right a name.

LEAD, the four letters behind the 3.6 seconds

This isn't a story wearing a metric's clothes. It's a metric question, and LEAD is what separates the half of the wait a person feels from the half a dashboard was already measuring.

LLink. What business outcome actually matters?
Seat renewal on Pathwright's per-developer license. The whole product bet is that developers keep the chat panel open and trust it enough to ask their next question there instead of switching away.
Not the model's own token-generation speed, and not total completion time on its own. Renewal is what actually breaks if developers stop trusting the panel.
EEarly signal. What moves weeks before the outcome does?
p95 time-to-first-token, checked weekly. It climbed from 780 milliseconds to 3.6 seconds over ten weeks, while median total completion time, checked the same way everyone already checked it, sat at 5.1 seconds the whole time.
This is the hardest step, and the one most answers skip. A number that looks perfectly healthy right up until the morning a big account goes quiet is exactly what completion time was here.
AAbuse. How does this metric get gamed?
Play a fast filler line, "let me check that," the instant a request comes in, so the dashboard's first-token timer stops early, without the real answer being any closer to starting. Or define "first token" loosely enough to count a system message instead of the start of the real answer.
A metric that can be hit without doing the real work isn't measuring the real work.
DDecision. What would you actually do at each threshold?
Past 1.2 seconds sustained p95, for a week: investigate whether it's real repo growth or a step that's started blocking generation. Past 2.5 seconds: ship the pipeline fix, let the model start from what it already has while the deep search keeps running, and flag the account for a customer success check-in.
A metric nobody acts on is a dashboard. These two thresholds are what make it a decision instead of a chart.

Three things worth stating directly, since this is where the real judgment sits. The alternative Torin's team considered first, and dropped, was a smaller default search radius for every account, searching fewer files before answering, to cut the wait everywhere at once. It lost because it cuts grounding on the hardest, most valuable cross-file questions, right where a developer most needs the answer to be accurate, and it doesn't fix why the wait exists, it just hides less of the repo. The AI-specific failure worth naming by name is silent context truncation: shrinking how much of the codebase gets searched to hit a speed target raises the odds the model guesses at a file or function it never actually saw, instead of citing real code. The guardrail is a fixed codebase question-and-answer eval set that any change to retrieval scope has to clear before it ships, so grounding accuracy has a real number attached to it, not a hunch. That guardrail isn't free: the pipelined fix, letting the model start talking while search keeps running, needs a small model kept warm to start the response early, and that raises average inference cost per question from about $0.006 to about $0.009, a real cost accepted for the latency win, not wished away. And the bar Pathwright holds itself to was never zero wait across six thousand seats on repos of every size; no product serving repos from a hundred files to forty thousand can promise that. It's a threshold-specific bar, p95 wait-before-first-word held under 1.2 seconds for the typical week, checked every week against the real number, not one blended completion-time average standing in for a wait it was never built to describe.

And if you want to be sure it really works, try it somewhere else

Same four letters, an AI phone dispatcher instead of an in-IDE coding assistant, and this time it's a growing parts catalog driving the wait, not a growing codebase.

Ringwell is the AI phone agent Aldercrest Home Services uses to answer inbound HVAC calls, book appointments, and route emergencies to a live dispatcher. Chiara Vosburgh runs product on it.

The build-up: for voice, the wait a caller actually feels is time-to-first-sound, how long after they stop talking before they hear anything back. Average full call length barely moved for months, sitting near 132 seconds. Then Aldercrest rolled out a full-catalog lookup, so Ringwell could check real parts, warranties, and technician schedules before answering, the same kind of search-before-answer step Pathwright had shipped.

The decision Chiara would take back Building Ringwell's response pipeline strictly sequential too: look everything up, then speak. It made sense when the catalog was a few dozen part numbers. It stopped making sense once the catalog covered thousands of models across every service area, and the lookup itself started taking real seconds.

p95 time-to-first-sound climbed from 420 milliseconds to 2.9 seconds over eight weeks after the full-catalog lookup shipped, while average call length barely moved, 132 seconds to 138. Hang-up-before-response, callers who ended the call before hearing anything real, climbed from 4 to 19 percent over that same stretch, caught in a monthly call-quality audit, not in the call-length number anyone was already watching.

Hand sketched drawing in colour pencil on off-white paper. Left, a form with a checkmark, hand-lettered first sound, met, canned filler plays fast. A bold VS sits between the two halves. Right, a simple person figure, hand-lettered caller, still waiting for the real answer.
The dashboard's first-sound number can look perfectly healthy the moment a fast filler line plays. The caller is still sitting through real, useless silence right after it.

Same rank as before: track the wait a person actually sits through, on its own, and act before the number everyone already watches is forced to move. The fix is the same shape too: let Ringwell confirm what it heard, or answer the easy part, while the full catalog lookup keeps running, instead of making every caller wait for the whole lookup before a single word comes back.

Swap the trigger and it still runs.
Speed: an interviewer caps you at ninety seconds. Skip straight to it: the wait before it starts and the time it takes to finish are two different numbers, track the one a person actually sits through, set a real threshold on it, and fix the block, not the metric.
Cost: there's no budget this quarter for both the pipelining rewrite and a dashboard overhaul. The pipelining rewrite wins, since it fixes the real wait instead of just changing how the team watches it.
The model got better, for real: say Pathwright's underlying model doubles its generation speed. That's not proof the wait before the first word gets better. The wait is dominated by the search step that runs before generation even starts, so a faster model does nothing for the part a developer actually feels, until the blocking step itself gets fixed.

Where people run it wrong.
They watch one blended response-time average because it's the number every dashboard already shows, and never split out the wait before the first word.
They notice the complaints and "fix" it with a filler line or a typing indicator that plays fast, instead of shortening the real wait underneath it.
They wait for a business number, renewal, engagement, to move before acting, when the wait itself would have told the same story weeks earlier.

How to use it live. Say the real distinction out loud before naming a metric: "the wait before it starts and the time it takes to finish are two different numbers, and only one of them is what a person actually sits and feels." That buys a beat to think instead of reciting whatever the dashboard already shows.

Flashcards (tap any card to flip it)

1 · THE FRAMEWORK
What framework is this, and what's its one job?
Tap to flip
ANSWER
LEAD: find the signal that moves first. Built for metric questions, not a story about a single person's habit.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Torin Osterberg, who owns latency and speed for Pathwright at Varrow Systems. Built the product's original speed dashboard himself.
3 · THE HABIT
What did Torin stop doing because the dashboard always looked fine?
Tap to flip
ANSWER
He stopped watching the wait before the first word on its own, and started only reading one blended average response-time line off the dashboard.
4 · THE HIDDEN GAP
What did the calm 5.1 second completion time hide?
Tap to flip
ANSWER
In the same week platform-wide p95 wait-before-first-word hit 3.6 seconds, median completion time was still 5.1 seconds, same as always. Same product, same week, two very different pictures.
5 · THE OLD DECISION
What decision would Torin take back?
Tap to flip
ANSWER
Building codebase search and generation as one strict, sequential step at the first architecture review, and never revisiting it once repos grew large enough that search alone took seconds.
6 · THE NUMBER
Fill in the blank: platform-wide p95 wait before the first word climbed from 780 milliseconds to ___ over ten weeks.
Tap to flip
ANSWER
3.6 seconds. Median total completion time never moved off 5.1 seconds the whole time.
7 · THE REPLAY
Same ten weeks, new design, what changes?
Tap to flip
ANSWER
p95 wait-before-first-word crosses 1.2 seconds by week three. The model starts talking from what it already has while search keeps running, Grendon's panel usage never falls below 60 percent, and the account never turns renewal-risk red.
8 · CROSS-PRODUCT TRANSFER
Section 4 answers this same question again for a different product. Which product, and what's the matching blind spot?
Tap to flip
ANSWER
Ringwell, an AI phone dispatcher at Aldercrest Home Services. Same blind spot: a lookup step before speaking hid behind a call-length average that barely moved.

Check yourself Score: 0 / 0

True or false
1. True or false: total completion time and time-to-first-token always move together, so watching one tells you about the other.
  • True
  • False
Show hint
Check the direct answer and the two charts in Section 1.
Show answer
False. Completion time held near 5.1 seconds the whole ten weeks while time-to-first-token nearly quintupled underneath it. One measures the whole answer, the other measures only the wait before it starts.
Multiple choice
2. Why did platform-wide p95 wait-before-first-word climb from 780 milliseconds to 3.6 seconds while median completion time barely moved?
  • A. Because the model itself got slower at writing each word.
  • B. Because the codebase search step that runs before generation starts scales with repo size, and repos kept growing.
  • C. Because Pathwright started writing longer answers.
  • D. Because Varrow throttled requests during busy hours.
Show hint
Look at the paragraph right after the leading-edge chart in Section 1.
Show answer
B. Search time scales with how big a repo is, and it runs fully before the model can say a word. Once search finishes, the model writes at the same speed it always did, which is why completion time never moved.
Fill in the blank
3. At Grendon Robotics, the share of its 280 developers opening Pathwright's chat panel three or more times a week fell from 68 percent to ___ percent over the same ten weeks the wait before the first word kept climbing.
Show hint
Check the lagging-outcome chart in Section 1.
Show answer
41 percent. A drop the completion-time number never showed a single hint of, because it only ever measured the half of the wait developers weren't actually feeling.
Short answer, name the rejected alternative
4. What alternative did Torin's team consider for cutting the wait before the first word, and why did it lose?
Show hint
Look at the paragraph right after the four LEAD steps in the framework recap.
Show answer
Model answer: A smaller default search radius for every account, searching fewer files before answering. It lost because it cuts grounding on the hardest, most valuable cross-file questions, and it doesn't fix why the wait exists, it just hides less of the repo.
Short answer, apply it yourself
5. Pick an AI product you use that shows a "thinking" or loading state before it answers. Name one number it might report that could be hiding a growing wait before the real answer starts, and how you'd check.
Show hint
Think of a product where the loading spinner and the final answer both take time, but only one of them is what you actually sit and watch.
Show answer
Model answer: A photo-editing app's "average edit time" might look steady, since the actual processing speed never changed. But if it added a step that scans the whole photo library for similar images before editing, the wait before anything visible happens could grow while the reported average stays flat. I'd ask for time-to-first-visible-change on its own, tracked weekly, instead of trusting one blended edit-time number.
Multiple choice
6. If Varrow had checked p95 wait-before-first-word only once a month, the same cadence as completion time, instead of weekly, what would most likely have happened?
  • A. Nothing would change; the two numbers always move together.
  • B. The team would have caught the climb roughly a month later than the weekly check did, since a monthly check only samples the trend once every four weeks.
  • C. The wait-before-first-word number would have become impossible to compute on a monthly cadence.
  • D. Completion time would have started climbing too, at the same time.
Show hint
Think about what checking weekly actually buys over checking monthly, given the ten-week climb in the chart.
Show answer
B. The value of a leading signal comes from how often you look at it, not just which metric you picked. A monthly check would still have beaten the quarterly account review, but weeks slower than the weekly check that actually caught the climb.
Before you close the answer
Why this works
Tests whether you can name a leading indicator rooted in how a person actually experiences the product, not just recite "latency" as one blob. Most candidates say "track response time" and stop, without ever splitting the wait into the half a person feels and the half they don't.
Follow-up traps
"Isn't 3.6 seconds still pretty fast for searching a whole codebase?" Response: fast in absolute terms, slow against what a person tolerates before assuming something broke, and it kept climbing well past the threshold Varrow had already agreed meant real trouble.

"Why not just show a 'thinking' message the whole time, wouldn't that fix the feeling without touching the pipeline?" Response: that's the exact gaming move the A step names. It can make the first-token number look fine on a dashboard without shortening the real wait, and developers stop trusting the panel once they notice the filler never leads anywhere.
If pressed
The pipelined fix doesn't start the model on zero context. It starts on the last file the developer had open plus the last few chat turns, a lookup that's already near-instant, and only splices in the full repo search results once they land a moment later, mid-stream.
From U2xAI Academy

From answering questions to owning outcomes.

A live workshop where you ship a working AI agent, defend a launch decision, and walk away with a portfolio recruiters can't wave off, not just more questions to study.

  • A live AI agent you actually shipped
  • A launch decision you can defend under pressure
  • An interview-ready portfolio, not more flashcards
Know more