When it is the right answer
Polling gets sneered at in interviews, which is funny given how much of it runs in production at the companies doing the interviewing. The conditions for using it without apology are concrete.
Check your numbers first. Forty support agents polling a dashboard every 10 seconds is 4 requests a second. Building a WebSocket fleet, with its sticky routing and heartbeats and reconnect logic, to save 4 requests a second is theatre.
Check whether the window is bounded second. A payment confirmation page only needs to be fresh for the 30 seconds after checkout, so poll hard during that window and then stop, which costs nearly nothing.
Check what staleness your users tolerate third. A build dashboard showing green 15 seconds late has failed nobody.
The operational wins
Weigh the operational wins too, which have nothing to do with load. Polling is stateless, so it works untouched behind any CDN, any balancer, any serverless platform, and that last one supports polling out of the box and supports nothing else nearly as cleanly.
Enjoy what you do not have: no long-lived connections to drain during a deploy, no reconnect storms, no proxy quietly killing idle sockets after 60 seconds. You debug with curl and load test with any HTTP tool ever written.
Watch for the tells that you have outgrown it. Your interval keeps shrinking under product pressure. Your empty-response rate sits above 95 percent at real volume. Your users refresh by hand because the page feels dead.
Move when one of those shows up, to long polling if you must keep plain request semantics, or to server-sent events if your server can push. Until then, the boring loop with a timer is not a compromise. It is the right tool sized to the problem.
Worked example
Ana's team at a logistics company debates real-time infrastructure for an internal exceptions dashboard used by 35 dispatchers. One engineer sketches a WebSocket design with Redis pub/sub and sticky sessions, estimated at three weeks including deploy tooling. Ana counts instead: 35 users, a 10 second interval, 3.5 requests per second against an endpoint that reads one indexed Postgres view. They ship the polling version in a day and a half. Eight months later the dashboard has survived four framework upgrades and two AWS incidents without a single page about it, while the team that built WebSocket notifications for the customer app maintains a runbook for reconnect storms. The dispatchers never noticed the 10 seconds.