code: func (p *Backoff) Next(id string, eventTime time.Time) {
  	p.Lock()
  	defer p.Unlock()
  	entry, ok := p.perItemBackoff[id]
  	if !ok || hasExpired(eventTime, entry.lastUpdate, p.maxDuration) {
  		entry = p.initEntryUnsafe(id)
  	} else {
  		delay := entry.backoff * 2 // exponential
  		entry.backoff = time.Duration(math.Min(float64(delay), float64(p.maxDuration)))
  	}
  	entry.lastUpdate = p.Clock.Now()
  }
docs: // move backoff to the next mark, capping at maxDuration