Back to compare picker

Streaming response vs Chat interface vs Progress bar vs Loading spinner vs Feed

Choose streaming response when the product can safely show partial generated text, tokens, tool progress, citations, or structured chunks as events arrive before the final answer is complete.

Decision dimensions

Dimension Streaming responseChat interfaceProgress barLoading spinnerFeed
UI or UX UI + UX - Incremental generated-output surface that renders response chunks before final completionUI + UX - Multi-turn conversation surface with transcript, composer, assistant responses, and conversation historyUI + UX - Measurable system-operation progress indicatorUI + UX - Bounded indeterminate wait indicator for a named action or regionUI + UX - Dynamic stream of article-like updates that may load or insert content at either end
UI guidance Render streamed output with a visible generation state, partial-answer label, stop control, final-complete state, and clear distinction between text that is still arriving and content that has passed final citation, safety, tool, or format checks.Render chat as an ordered transcript with visible user and assistant roles, turn boundaries, timestamps or relative position, current draft composer, submitted prompt, response status, source or tool indicators, and conversation-level controls.Show a labeled bar with a track, filled value, and nearby helper text that reports the measurable unit such as percent, bytes, rows, files, records, or stages.Render a compact spinner only beside, inside, or over the affected action, component, or page region, and pair it with concise text that names what is loading or processing.Render the feed as a labelled stream of item boundaries where each item has a source or author, timestamp, title or body summary, type, actions, and enough context to stand alone as an article-like update.
UX guidance Use a streaming response when showing partial generated output helps users start reading or monitoring work before the model finishes, and when the product can explain that early chunks may still change, be filtered, or lack final sources.Use a chat interface when users need a multi-turn assistant conversation where later prompts can depend on earlier turns, responses can be inspected or continued, and conversation history can be saved, resumed, deleted, or limited by policy.Use a progress bar when the system can honestly report movement toward a known finish and users need to decide whether to wait, cancel, retry, continue elsewhere, or return later.Use a loading spinner for short indeterminate waits where the system is actively working but cannot yet expose progress; resolve it quickly to content, success, cancellation, progress, or error.Use feed when users consume a continuing stream of posts, updates, stories, events, or collaboration activity and need to keep their reading position while new or older content appears.
Good UI A policy assistant shows Answer generating, streams paragraphs into a stable answer region, marks citations pending, exposes Stop generation, then changes to Complete when citations and safety checks finish.A research assistant chat shows user and assistant bubbles, turn numbers, source chips, streaming status, Stop, Copy answer, Regenerate, New chat, and a conversations list with the active chat title.A document upload card says Uploading evidence.zip, shows 64%, 32 of 50 MB, a Cancel action, and keeps the rest of the form usable.A Pay invoice button becomes Processing payment with a small spinner, disables only duplicate payment actions, and leaves the invoice reference visible.A project feed shows source avatar, actor, timestamp, object name, excerpt, item type, unread marker, reply and save actions, and a visible queued-new-items banner while the reader is midstream.
Bad UI A generated answer appears word by word with no partial label, no stop control, and a Copy button that looks ready before sources arrive.A chat panel shows one undifferentiated wall of text with no user or assistant roles, no submitted prompt, and no visible conversation identity.A blue bar fills across the top of the page with no label, no percent, and no affected object.A blank page shows a large spinner with no text, no affected object, and no idea what is loading.New posts appear above the current paragraph and shift the page while the user is reading.
Good UX A user sees the first-token state quickly, reads early outline bullets while the answer continues, stops generation after enough detail, and sees the result labelled Partial with Continue and Regenerate options.A user asks for a policy summary, follows up with Compare that to the renewal clause, sees that the second answer used the first answer and selected file, then exports the two-turn transcript.A user uploads evidence.zip, sees progress move from 12% to 64%, cancels before commit, retries after a network error, and gets a completed receipt only after server processing succeeds.After submit, users see payment PAY-2048 processing, can tell the button is temporarily unavailable, and then get either success or retry guidance.A user pauses live updates, reads three older posts, sees 2 new updates waiting, then chooses Jump to latest when ready.
Bad UX A user copies an early legal recommendation before the final paragraph reverses the conclusion after a tool result arrives.A follow-up uses prior conversation context after chat history has been switched off, without explaining that current-session context still exists.A fake progress bar inches to 99% for minutes with no elapsed time, cancel, retry, or background option.The spinner blocks the whole workspace for a small table refresh and prevents users from continuing other work.A feed keeps loading forever, hides the footer, and gives no way to resume from a saved position.
Best fit Generated text or structured content can be read or monitored before completion.The user needs a back-and-forth assistant conversation with follow-up questions and answer refinement.A system operation has a measurable total or bounded progress value.A short action, request, save, submit, refresh, sync, or fetch is actively processing and progress cannot be meaningfully measured.Users consume a continuing stream of updates, posts, stories, comments, media, or collaboration activity.
Avoid when Intermediate chunks may expose unsafe, private, or misleading content.The task can be completed with a single structured prompt box, form, or command.Progress cannot be measured or would be guessed.The content layout is predictable and a skeleton would better preserve structure.The content is a finite set of objects that users need to filter, sort, select, compare, or manage.
Required state Queued or receiving state before first output arrives.Empty new chat with conversation title, mode, history or retention status, and a labelled composer.Idle state before the operation starts.Idle state with no spinner and the action or region ready.Default feed with heading, order label, rendered item count or range, and article-like items.
Accessibility burden Expose stream milestones such as started, still generating, stopped, failed, citation ready, and complete as status messages.Expose the transcript as an ordered region and use a sequential update strategy such as role=log for appended messages where appropriate.Provide an accessible name that identifies the operation and affected object.Give the spinner or affected region an accessible name that identifies the operation.Give the feed a heading or accessible label and expose the current order or filter in text.
Common misuse Showing a blinking cursor with no state, stop control, or elapsed feedback.Treating chat as a large textarea plus latest answer with no durable turn identity.Fabricating progress values just to make users feel movement.Showing an unlabeled spinner on a blank page.Calling any vertical card list a feed even when it is a bounded object collection.

Streaming response

UI or UX
UI + UX - Incremental generated-output surface that renders response chunks before final completion
UI guidance
Render streamed output with a visible generation state, partial-answer label, stop control, final-complete state, and clear distinction between text that is still arriving and content that has passed final citation, safety, tool, or format checks.
UX guidance
Use a streaming response when showing partial generated output helps users start reading or monitoring work before the model finishes, and when the product can explain that early chunks may still change, be filtered, or lack final sources.
Good UI
A policy assistant shows Answer generating, streams paragraphs into a stable answer region, marks citations pending, exposes Stop generation, then changes to Complete when citations and safety checks finish.
Bad UI
A generated answer appears word by word with no partial label, no stop control, and a Copy button that looks ready before sources arrive.
Good UX
A user sees the first-token state quickly, reads early outline bullets while the answer continues, stops generation after enough detail, and sees the result labelled Partial with Continue and Regenerate options.
Bad UX
A user copies an early legal recommendation before the final paragraph reverses the conclusion after a tool result arrives.
Best fit
Generated text or structured content can be read or monitored before completion.
Avoid when
Intermediate chunks may expose unsafe, private, or misleading content.
Required state
Queued or receiving state before first output arrives.
Accessibility burden
Expose stream milestones such as started, still generating, stopped, failed, citation ready, and complete as status messages.
Common misuse
Showing a blinking cursor with no state, stop control, or elapsed feedback.

Chat interface

UI or UX
UI + UX - Multi-turn conversation surface with transcript, composer, assistant responses, and conversation history
UI guidance
Render chat as an ordered transcript with visible user and assistant roles, turn boundaries, timestamps or relative position, current draft composer, submitted prompt, response status, source or tool indicators, and conversation-level controls.
UX guidance
Use a chat interface when users need a multi-turn assistant conversation where later prompts can depend on earlier turns, responses can be inspected or continued, and conversation history can be saved, resumed, deleted, or limited by policy.
Good UI
A research assistant chat shows user and assistant bubbles, turn numbers, source chips, streaming status, Stop, Copy answer, Regenerate, New chat, and a conversations list with the active chat title.
Bad UI
A chat panel shows one undifferentiated wall of text with no user or assistant roles, no submitted prompt, and no visible conversation identity.
Good UX
A user asks for a policy summary, follows up with Compare that to the renewal clause, sees that the second answer used the first answer and selected file, then exports the two-turn transcript.
Bad UX
A follow-up uses prior conversation context after chat history has been switched off, without explaining that current-session context still exists.
Best fit
The user needs a back-and-forth assistant conversation with follow-up questions and answer refinement.
Avoid when
The task can be completed with a single structured prompt box, form, or command.
Required state
Empty new chat with conversation title, mode, history or retention status, and a labelled composer.
Accessibility burden
Expose the transcript as an ordered region and use a sequential update strategy such as role=log for appended messages where appropriate.
Common misuse
Treating chat as a large textarea plus latest answer with no durable turn identity.

Progress bar

UI or UX
UI + UX - Measurable system-operation progress indicator
UI guidance
Show a labeled bar with a track, filled value, and nearby helper text that reports the measurable unit such as percent, bytes, rows, files, records, or stages.
UX guidance
Use a progress bar when the system can honestly report movement toward a known finish and users need to decide whether to wait, cancel, retry, continue elsewhere, or return later.
Good UI
A document upload card says Uploading evidence.zip, shows 64%, 32 of 50 MB, a Cancel action, and keeps the rest of the form usable.
Bad UI
A blue bar fills across the top of the page with no label, no percent, and no affected object.
Good UX
A user uploads evidence.zip, sees progress move from 12% to 64%, cancels before commit, retries after a network error, and gets a completed receipt only after server processing succeeds.
Bad UX
A fake progress bar inches to 99% for minutes with no elapsed time, cancel, retry, or background option.
Best fit
A system operation has a measurable total or bounded progress value.
Avoid when
Progress cannot be measured or would be guessed.
Required state
Idle state before the operation starts.
Accessibility burden
Provide an accessible name that identifies the operation and affected object.
Common misuse
Fabricating progress values just to make users feel movement.

Loading spinner

UI or UX
UI + UX - Bounded indeterminate wait indicator for a named action or region
UI guidance
Render a compact spinner only beside, inside, or over the affected action, component, or page region, and pair it with concise text that names what is loading or processing.
UX guidance
Use a loading spinner for short indeterminate waits where the system is actively working but cannot yet expose progress; resolve it quickly to content, success, cancellation, progress, or error.
Good UI
A Pay invoice button becomes Processing payment with a small spinner, disables only duplicate payment actions, and leaves the invoice reference visible.
Bad UI
A blank page shows a large spinner with no text, no affected object, and no idea what is loading.
Good UX
After submit, users see payment PAY-2048 processing, can tell the button is temporarily unavailable, and then get either success or retry guidance.
Bad UX
The spinner blocks the whole workspace for a small table refresh and prevents users from continuing other work.
Best fit
A short action, request, save, submit, refresh, sync, or fetch is actively processing and progress cannot be meaningfully measured.
Avoid when
The content layout is predictable and a skeleton would better preserve structure.
Required state
Idle state with no spinner and the action or region ready.
Accessibility burden
Give the spinner or affected region an accessible name that identifies the operation.
Common misuse
Showing an unlabeled spinner on a blank page.

Feed

UI or UX
UI + UX - Dynamic stream of article-like updates that may load or insert content at either end
UI guidance
Render the feed as a labelled stream of item boundaries where each item has a source or author, timestamp, title or body summary, type, actions, and enough context to stand alone as an article-like update.
UX guidance
Use feed when users consume a continuing stream of posts, updates, stories, events, or collaboration activity and need to keep their reading position while new or older content appears.
Good UI
A project feed shows source avatar, actor, timestamp, object name, excerpt, item type, unread marker, reply and save actions, and a visible queued-new-items banner while the reader is midstream.
Bad UI
New posts appear above the current paragraph and shift the page while the user is reading.
Good UX
A user pauses live updates, reads three older posts, sees 2 new updates waiting, then chooses Jump to latest when ready.
Bad UX
A feed keeps loading forever, hides the footer, and gives no way to resume from a saved position.
Best fit
Users consume a continuing stream of updates, posts, stories, comments, media, or collaboration activity.
Avoid when
The content is a finite set of objects that users need to filter, sort, select, compare, or manage.
Required state
Default feed with heading, order label, rendered item count or range, and article-like items.
Accessibility burden
Give the feed a heading or accessible label and expose the current order or filter in text.
Common misuse
Calling any vertical card list a feed even when it is a bounded object collection.
Decision rules
  • Choose streaming response when the product can safely show partial generated text, tokens, tool progress, citations, or structured chunks as events arrive before the final answer is complete.
  • Choose chat interface when the design problem is the whole multi-turn conversation container with transcript history, user and assistant turns, conversation controls, and follow-up context.
  • Choose progress bar when users need measurable operation completion for upload, export, import, or batch processing rather than partial generated content.
  • Choose loading spinner when the wait is short, active, and cannot expose useful partial output or measurable progress.
  • Choose feed when users browse chronological browsing surfaces for completed items, posts, or events rather than one response that is actively being generated.
  • A streaming response must show receiving, first token, partial output, paused or stalled stream, stop generation, completed stream, failed stream, moderation hold, retry, and final answer states.
  • Do not treat streamed text as final while sources, safety checks, tool calls, JSON validity, code fences, tables, citations, or final usage metadata are still pending.
  • If a stream is interrupted, preserve the partial output with a clear label and provide retry, continue, copy partial, discard, or regenerate actions according to task risk.
  • When streaming includes citations, tool calls, or structured output, mark which parts are pending, verified, revised, or removed instead of letting early chunks look fully grounded.
  • For assistive technology, batch or summarize frequent deltas and announce meaningful milestones such as answer started, still generating, stopped, failed, complete, or citation ready.
Inspect live examples
Failure modes
  • Partial generated text looks complete, so users copy or act before final checks, citations, or tool results arrive.
  • The interface streams every token to a live region and overwhelms screen reader users.
  • A stopped stream is displayed like a complete answer with no partial label or continue action.
  • A failed stream erases useful partial output and the original prompt.
  • Early citations appear beside claims before the cited source has actually been resolved.
  • A spinner hides useful first-token progress even though output could be streamed safely.