Writing: essays and notes on product engineering

Long-form writing by Sangeet Banerjee on realtime systems, infrastructure UX, growth engineering, and software craft.

Back to Sangeet Banerjee homepage

Status that lies

By Sangeet Banerjee. Published 2025-10-08. 2 min read.

Priority-based polling, cursor prefetch, and why cloud status still feels wrong without a clock.

Tags: ux, infrastructure, cloud

All writing

Status that lies: article facts

Title
Status that lies
Author
Sangeet Banerjee
Published
October 8, 2025
Updated
October 8, 2025
Reading time
2 min read
Summary
Priority-based polling, cursor prefetch, and why cloud status still feels wrong without a clock.
URL
https://sangeet.xyz/blogs/status-that-lies
Tags
ux, infrastructure, cloud
Excerpt
On Huddle Cloud I refreshed the virtual machine details page more times than I want to admit. The UI said running. Provisioning was still going. Or the other way around. That is status that lies: it looks live, it is behind, and there is no clock. Why consoles lie Infrastructure is slow and eventual. Providers update when they want. The UI wants to feel instant. Cached list vs fresher detail. Optimistic “creating…” that never reconciles. Badges with no timestamp. Users smash refresh until they trust their eyes. Not one timer for everything We did not poll every status on the same interval. Fetches ran on different timers and sequences depending on how important that page, feature, or control was. Something on a detail screen you were staring at got tighter loops. Background list rows could breathe. A button that only mattered after a mutate got its own path. Priority first. Equal polling everywhere wastes bandwidth and still feels laggy where it matters. Prefetch when intent shows up When someone moved the cursor toward a status, a row, or a page we thought they would open next, we prefetched so the next view did not start cold. You will guess wrong sometimes. That is fine. Predict…
All posts
2 min read

Status that lies

priority-based polling, cursor prefetch, and why cloud status still feels wrong without a clock.

uxinfrastructurecloud

On Huddle Cloud I refreshed the virtual machine details page more times than I want to admit. The UI said running. Provisioning was still going. Or the other way around.

That is status that lies: it looks live, it is behind, and there is no clock.

Why consoles lie

Infrastructure is slow and eventual. Providers update when they want. The UI wants to feel instant.

Cached list vs fresher detail. Optimistic “creating…” that never reconciles. Badges with no timestamp. Users smash refresh until they trust their eyes.

Not one timer for everything

We did not poll every status on the same interval.

Fetches ran on different timers and sequences depending on how important that page, feature, or control was. Something on a detail screen you were staring at got tighter loops. Background list rows could breathe. A button that only mattered after a mutate got its own path.

Priority first. Equal polling everywhere wastes bandwidth and still feels laggy where it matters.

Prefetch when intent shows up

When someone moved the cursor toward a status, a row, or a page we thought they would open next, we prefetched so the next view did not start cold.

You will guess wrong sometimes. That is fine. Predicting “they are about to look here” beats waiting until the click to start the round trip.

Honesty still matters

Even with smart polling:

  • Show last updated
  • Separate “request accepted” from “resource ready”
  • Prefer server truth after mutations
  • Say when sync failed instead of painting a happy badge

A badge without a time is decoration. A badge with “checked 40s ago” is usable when stale.

What I would do first next time

  1. Priority map: what deserves a fast sequence vs slow
  2. Cursor / route intent → prefetch
  3. updatedAt on anything operators stare at
  4. One owner for resource state so list and detail stop inventing rivals

Status problems feel like timezone bugs: the UI looks sharp while the clock is wrong.