feelsfast.fyi
Back

Batch File Upload

3 min read

The user picks twelve files and clicks Upload. The wall-clock time crosses ten seconds easily — past the unit-task boundary, the user is going to disengage if the perception layer does not earn its keep. The pattern stack is bigger than the single-file case, but the principles are the same.

This scenario sits in the 10 S+ band. The perception layer carries it through the time-aware feedback progression: per-file determinate progress, aggregate progress at the top, engagement cue past the 10 s boundary, background sync option for the long tail. Myers 1985 Myers 1985 covers the per-file determinate signal; Block & Zakay 1997 Block & Zakay 1997 covers the engagement trade past 10 s; Doherty 1982 Doherty 1982 is the background-sync rationale.

Determinate Progress Bar + Percentage Count

Upload a 4.2 MB file. Naive: generic spinner with no progress signal. Tuned: optimistic filename render, determinate progress bar, success affordance with checkmark.

1 – 10 S
Interactive

Off

On

What is happening

The single-file demo stands in. For a real batch, the tuned UI stacks:

  1. Per-file rows — name, size, individual progress bar. The user sees the entire queue at once.
  2. Aggregate progress at the top — total bytes transferred over total bytes queued. Determinate.
  3. Engaging affordance past 10 s — the active queue, the upload speed, the estimated time remaining. The user has something to read while they wait.
  4. "Do this in the background and notify me" option for very long batches — defer off the user's perceived path entirely via background sync.
  5. Cancellation per file and per batch — the user can drop individual transfers without aborting the whole queue.

What to tune

  1. Pre-action — file rows render immediately (name, size, queued state) before any bytes transfer.
  2. First 1 s — per-file progress bars start filling. Aggregate bar at the top tracks total bytes transferred / queued.
  3. 1 – 10 s — bars run in parallel (4–8 concurrent transfers). Cancellation visible per file and per batch.
  4. Past 10 s — active-queue display: upload speed, estimated time remaining, files in flight. "Notify me when done" appears.
  5. Completion — each file flips to a checkmark + metadata. Final summary row; never silent.

When perceived performance hurts you here

Batch uploads have the same trap engaging loading does — a 60-second batch with rich engagement feels short while it runs and long in retrospect. For users who upload batches multiple times per session, the retrospective cost compounds.

The cleaner answer: lean on per-file determinate progress (the user learns what's happening), aggregate progress for orientation, and background sync past the 30 s mark so the user can leave the surface. Skip the motivational quotes — the queue itself is engaging enough.

The other failure: serialising the uploads when they could be parallel. A batch UI that processes one file at a time triples the apparent duration; for small files the bottleneck is connection round-trips, not bandwidth. Parallelise to ~4–8 concurrent uploads where the network supports it.

Accessibility

  1. Per-file aria-busy flags so screen readers can navigate to active items.
  2. Aggregate role="progressbar" at the top of the queue.
  3. Polite live region for batch-level state changes ("3 of 12 complete") — every minute or two, not every file.
  4. Cancellation must be keyboard-reachable for each file and for the batch.
  5. Don't trap focus on the queue — the user might want to navigate elsewhere while it runs.

Other patterns that fit

Same band, same surface — switch in whichever maps best to your UI.

Backwards-decelerating Progress Bar

Two bars, same actual duration. Naive: linear fill from 0 → 100 %. Tuned: same fill, but eased to be fast at the start and slow as it approaches the end, with backwards-moving ribbed pattern overlaid. Harrison et al. 2010 measured ~11–12 % perceived speed-up vs. linear at the same real wall-clock time. Free perception with no engineering cost.

1 – 10 S

Off

Press Run to start

On

Press Run to start

Rotating Tips

Engaging copy during a long wait. Naive: a static "Loading…" line for the full duration; the user has nothing to do but stare. Tuned: a "Did you know?" card cycles through a handful of perception facts every ~2.5 s with a soft cross-fade. Same wait — but the time fills with information instead of absence.

10 S+

Off

Press Run to start

On

Press Run to start

Put into Background + Success Message

Past the 10-second wall, foreground waiting is the wrong unit. Naive: spinner blocks the panel; the user must keep watching. Tuned: a "Run in background" affordance demotes the wait to a small corner indicator and surfaces a toast when the work lands. Foreground attention is freed; the result still arrives loudly.

10 S+

Off

Press Run to start

On

Press Run to start

Entertainment Loader

T-Rex Run-style mini-game during a long wait. Naive: a spinner for the full duration. Tuned: a clickable runner game — press Jump to leap over incoming mushrooms. The wait stops being time the user is paying and becomes time they are spending. Block & Zakay 1997: filled time has shorter retrospective duration than empty time.

10 S+

Off

Press Run to start

On

Press Run to start

References · 3

  1. Myers 1985

    Myers, B. A. (1985). The importance of percent-done progress indicators for computer-human interfaces. Proceedings of CHI '85, 11–17. Per-file determinate progress beats per-batch generic feedback.

  2. Block & Zakay 1997

    Block, R. A., & Zakay, D. (1997). Prospective and retrospective duration judgments: A meta-analytic review. Psychonomic Bulletin & Review, 4(2), 184–197. The trade-off engagement makes during long batch uploads.

  3. Doherty 1982

    Doherty, W. J., & Thadani, A. J. (1982). The Economic Value of Rapid Response Time. IBM Technical Report GE20-0752-0. Background sync moves the wait off the user's perceived path entirely for batch uploads.