exponential backoff without the weird cruft