Backoff should have some randomness (to help avoid thundering herds) and be capped at some fixed time (for good UX). See stream_client_common.js. In fact, maybe this should share code with that?