When an AI assistant answers, the text usually appears a few words at a time, as if someone were typing. It is not a gimmick. Generating a complete answer can take several seconds, and how that time feels matters as much as how long it is.
The waiting problem#
The Doherty threshold describes how people stay engaged when a system responds within roughly 400 milliseconds, and how their attention begins to drift when they are left waiting. A few seconds of spinner is long enough to glance at another tab, and once people look away, some of them don’t come back.
Streaming turns waiting into reading#
Streaming shows the first words as soon as they exist. The total time to a full answer may be the same, but people start reading almost immediately, and the wait becomes part of the reading rather than a gap before it. The system also feels more responsive, because something is visibly happening.
Before
A spinner for eight seconds, then a full wall of text appears all at once.
After
An instant “Thinking…” acknowledgement, then text flowing from the first second, with a clear sign when it has finished.
When streaming doesn’t help#
Streaming is right for long, readable text. It is less helpful, and sometimes harmful, in other situations:
- Structured answers such as tables, forms or code, which reshuffle as they arrive and are hard to read half-built.
- All-or-nothing results such as a price, a yes or no, or an approval, where a partial answer is meaningless or misleading.
- Actions such as booking or sending, where people need to know the whole thing worked before moving on.
In those cases, show clear progress instead: what is happening, and roughly how long is left.
The details that matter#
- Acknowledge instantly. Within a fraction of a second, show that the request was received, even if the answer isn’t ready.
- Offer a stop button. If the answer is heading the wrong way, people should be able to stop it and rephrase.
- Don’t drag the page. Auto-scrolling while someone is reading earlier lines pulls the text away from them. Only follow new text if they are already at the bottom.
- Keep the layout still. Buttons and panels shouldn’t jump around as text arrives.
- Make “finished” obvious. A clear end state, with actions such as copy or retry, tells people the answer is complete.
A useful test: watch someone use the feature and notice where their eyes go while text is arriving. If they are reading, streaming is working. If they are hunting for a button that keeps moving, it isn’t.
A quick checklist#
- Does something visible happen within half a second of every request?
- Is streaming used only where partial text is useful?
- Can people stop an answer part-way?
- Does the page stay still while text arrives?
- Is it obvious when the answer is complete?