I2.02.2stall needs stagedesign

A long stall needs a stage explanation

Aliases: progress stall copy · named stage during hang · silent bar

What it is

The bar is still there, the number is not rising: that is a stall. A stall is not a failure, but it looks like one. Predictability requires that once the stall outlives the short stretch where inertia still says “it is moving”, a current stage fills the silence: verifying, queued on the server, writing to disk. The stage says “the work has changed shape, so the bar is allowed to sit still”. It does not invent a percent that keeps climbing.

Why it happens

Determinate progress binds “still working” to displacement. When displacement stops, the bind breaks, and only two readings remain: hung, or entered a kind of work the UI cannot show. A brief pause can ride inertia — jitter, a buffer filling. Past inertia, “broken” takes the explanation. Stage copy takes it back: it offers evidence that does not depend on displacement, proof the process is still in a state machine, just in a state with no countable numerator to add.

The stage also has to be a real stage, not comfort. Refreshing the same “processing” line forever still has zero information, same as writing nothing. A useful stage changes: upload → server scan → preview. Each change lets people recalibrate why the bar is still. What is recalibrated is the model, not the speed — speed may remain zero; the model must not be empty.

Where it stops holding

A pause shorter than the window in which thought still runs continuous does not need a stage; flashing subtitles are louder than silence. When there are few steps and each already has a visible scene change (wizard pages), the page is the stage; do not stack a tautology next to the bar. If the stage is a guess (the hang is actually unknown), a fake stage is worse than none, because the next second will falsify it. Prefer “still working; this step’s duration is unstable” over a carousel of invented operations. If the main thread freezes so the bar and the copy stop together, a stage cannot save it — put status on a layer that can still refresh. After reversals are banned, stalls become more common (the bar freezes when the total grows), so this leaf is paired with monotonic progress: if the bar may not jump back, it must be able to speak.

Applying it

  • Put a stall timer on progress. After it fires with no numerator growth, show the current stage rather than leaving the bar to fake life.
  • Use real, switchable operation names, and update them when the operation changes. Do not use an immortal “please wait”.
  • Keep cancel or switch-away available during the stall. A stage is not a reason to pin people to the screen.
  • How to check: inject a ten-second-plus server queue in which the percent does not move. The UI should name that queue. A frozen bar alone means predictability has already broken.

Related

  • Same group: I2.02.1 Progress must be monotonic and must not run backwards · I2.02.3 Inaccurate remaining-time estimates damage trust
  • Nearby: I2.01 Choosing skeleton versus spinner · I1.03 Attention-holding ceiling · I3.07 Background tasks
  • Search terms: progress stall · stage explanation · determinate hang

Cards in the same group

Quick Actions

Share

Share this page

ios_share

https://hci.top/en/handbook/I2.02.2