Generalized Retryable to try to make it easier to reuse