code: func (b *Backoff) Step() time.Duration {
  	if b.Steps < 1 {
  		if b.Jitter > 0 {
  			return Jitter(b.Duration, b.Jitter)
  		}
  		return b.Duration
  	}
  	b.Steps--
  
  	duration := b.Duration
  
  	// calculate the next step
  	if b.Factor != 0 {
  		b.Duration = time.Duration(float64(b.Duration) * b.Factor)
  		if b.Cap > 0 && b.Duration > b.Cap {
  			b.Duration = b.Cap
  			b.Steps = 0
  		}
  	}
  
  	if b.Jitter > 0 {
  		duration = Jitter(duration, b.Jitter)
  	}
  	return duration
  }
docs: // Step returns the next interval in the exponential backoff. This method
  // will mutate the provided backoff.