Does it make sense to match against Duration.Zero and skip the timer? We also need to handle Duration.Top, I think. This whole block might be easier to reason about with a pattern match:

```scala
  backoffs match {
    case Stream.Empty => FutureOps.missingValueFor(k)
    case nextDuration #:: tail => nextDuration match {
      case Duration.Zero => getWithRetry(k, tail)
      case Duration.Top => Future.None
      case other => timer.doLater(other)(getWithRetry(k, tail))
    }
  }
```