Back to compare picker

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

Use streaming response for rendering partial generated output as events arrive; chat interface for the whole multi-turn conversation surface; progress bar for measurable operation completion; loading spinner for short indeterminate waits; and feed for chronological browsing of finished items or activity.

Learn the decision

Match the interaction to the person's task

Use streaming response for rendering partial generated output as events arrive; chat interface for the whole multi-turn conversation surface; progress bar for measurable operation completion; loading spinner for short indeterminate waits; and feed for chronological browsing of finished items or activity.

Streaming response

Use it when: Generated text or structured content can be read or monitored before completion.

Make this state clear: Queued or receiving state before first output arrives.

Observe the result: 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.

Study the full pattern →

Chat interface

Use it when: The user needs a back-and-forth assistant conversation with follow-up questions and answer refinement.

Make this state clear: Empty new chat with conversation title, mode, history or retention status, and a labelled composer.

Observe the result: 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.

Study the full pattern →

Progress bar

Use it when: A system operation has a measurable total or bounded progress value.

Make this state clear: Idle state before the operation starts.

Observe the result: 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.

Study the full pattern →

Loading spinner

Use it when: The operation has defined resolution, timeout, cancellation, or failure paths.

Make this state clear: Inline processing state for a button or small local action.

Observe the result: After submit, users see payment PAY-2048 processing, can tell the button is temporarily unavailable, and then get either success or retry guidance.

Study the full pattern →

Feed

Use it when: Users consume a continuing stream of updates, posts, stories, comments, media, or collaboration activity.

Make this state clear: Default feed with heading, order label, rendered item count or range, and article-like items.

Observe the result: A user pauses live updates, reads three older posts, sees 2 new updates waiting, then chooses Jump to latest when ready.

Study the full pattern →

Practice the judgment: Imagine this situation: Partial generated text looks complete, so users copy or act before final checks, citations, or tool results arrive. Write the person's goal, choose one of these patterns, and show the state that helps the person continue. Use the decision rules and source trail below to explain your choice.

Review the underlying principle →

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.Prevent duplicate or conflicting actions while the operation is in flight, but keep context, status, safe cancellation, and timeout recovery available when the wait exceeds the expected threshold.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 streaming JSON answer is displayed as valid data before the closing braces and schema check have completed.A conversation auto-scrolls to a new answer while the user is reading an older cited turn, then hides the old prompt after regenerate.A progress bar reads 100% complete while virus scanning and server acceptance are still pending.A search results panel shows skeleton rows, a spinner, and a progress bar for the same request.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.Latest answer is disconnected from the prompt and context that produced it.Users leave after 100% transfer even though server processing later rejects the file.The spinner blocks the whole workspace for a small table refresh and prevents users from continuing other work.The feed jumps to the top whenever a new post arrives.
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.The operation has defined resolution, timeout, cancellation, or failure paths.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.The wait is short and only needs scoped activity feedback.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.Inline processing state for a button or small local action.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 Letting partial output look finished before the final event arrives.Auto-scrolling during streaming while the user is reading an older message.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 streaming JSON answer is displayed as valid data before the closing braces and schema check have completed.
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
Letting partial output look finished before the final event arrives.

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 conversation auto-scrolls to a new answer while the user is reading an older cited turn, then hides the old prompt after regenerate.
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
Latest answer is disconnected from the prompt and context that produced it.
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
Auto-scrolling during streaming while the user is reading an older message.

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 progress bar reads 100% complete while virus scanning and server acceptance are still pending.
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
Users leave after 100% transfer even though server processing later rejects the file.
Best fit
A system operation has a measurable total or bounded progress value.
Avoid when
The wait is short and only needs scoped activity feedback.
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
Prevent duplicate or conflicting actions while the operation is in flight, but keep context, status, safe cancellation, and timeout recovery available when the wait exceeds the expected threshold.
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 search results panel shows skeleton rows, a spinner, and a progress bar for the same request.
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
The operation has defined resolution, timeout, cancellation, or failure paths.
Avoid when
The content layout is predictable and a skeleton would better preserve structure.
Required state
Inline processing state for a button or small local action.
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
The feed jumps to the top whenever a new post arrives.
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.

Saved items