With no sound basis, show elapsed time rather than invent remaining
Aliases: don't fake remaining · elapsed only · withhold ETA
What it is
Extrapolation needs ingredients: measurable completed work, a non-zero time window, some measure of work still to do. Missing one, “N minutes left” is invented. Invention is worse than silence, because it occupies the remaining-time channel. When the basis is too thin, the honest display is elapsed time (“2 minutes 10 seconds used”) plus a stage — not a finish line with no denominator. Elapsed time is an observation, not a prophecy, and it does not depend on a steady rate.
Why it happens
Remaining time is remaining quantity over rate. If remaining quantity is unknown (indeterminate progress, a generative job, a queue position not disclosed), the division has no dividend. If rate is unknown (has not started moving, main thread frozen, a window of zeros), the division has no divisor. Showing remaining anyway means stuffing in a default, a guessed “about a minute”, or a number borrowed from other users’ averages that has nothing to do with this run. Those numbers look like real extrapolation; people cannot tell, so they plan against a prophecy. Elapsed time never enters the division: it only reports how far the clock has walked, and lets people decide whether to keep waiting against their own patience model, without pretending the system has computed a finish.
Elapsed-only has a side effect: it does not jump when rate jitters, because it does not extrapolate. The jump is removed at the root. The cost is that people lose a finish line for decisions, which must be patched with stages and cancellability, not with a fake finish.
Where it stops holding
When the total is known and the rate window is already long enough, elapsed-only is laziness: extrapolation is due, and the decision burden is being pushed onto people. Historical averages that are homogeneous with this job (same kind of export, same region) can be a weak basis for a wide range, labelled as “jobs like this usually”, not as this run’s extrapolation; unlabelled, it is invention. A queue that can give a position can use that position as a kind of remaining quantity; it need not fall back to pure elapsed. When elapsed itself becomes pressure (“you have already waited 20 minutes”), pair it with cancel; do not use elapsed to nag people into staying on a process with no finish.
Applying it
- When remaining quantity is unknown or the rate window is invalid, turn remaining time off. Show elapsed plus the current stage.
- Do not fill the hole with a product-level default “about 1 minute”. That is invention.
- Once the window and the total become valid, upgrade to a range or a point, and make the cut from elapsed to estimate visible.
- How to check: on a generative job with indeterminate progress and unknown total, if the UI still says “3 minutes left”, ask where the 3 came from. If it came from a default or an unrelated average, it is invented. Turn it off, leave elapsed, and see whether people can still decide to cancel or switch away — if they can, the degradation is sufficient.
Related
- Same group: I2.10.1 Remaining-time estimates extrapolate recent rate; a rate shock makes them jump · I2.10.2 A range reflects uncertainty more honestly than a single precise number · I2.10.3 Revise the estimate as progress continues; do not freeze the first figure
- Nearby: I2.02 Predictable progress · E6.09 Determinate and indeterminate progress · I2.01 Choosing skeleton versus spinner
- Search terms:
elapsed time only·no basis for ETA·withhold remaining time