Debouncing terminology

04 Apr 2017

When I get stuck on a computer thing, I tend to ask a question in an irc channel or Slack or Zulip.

Sometimes it takes a while for my question to be answered. This is OK! Sometimes the act of asking the question helps me get unstuck. Often I end up making some progress after asking the question. At this point I can say “nevermind, I don’t need this question answered anymore,”

or I can wait for an answer anyway. Sometimes even if I say I don't need an answer, someone will have been typing up a response already and be excited to share it, so I can ignore the their response instead.
And sometimes the answer is still useful - maybe they suggest a different solution than the one I found!

Often before I get the answer back, I make enough progress to come up with a new question!

If I’m asking a specific person these questions, it might especially make sense to cancel the first question so they can focus on my next question.

But if it’s to a group, this might not get me my second answer any quicker. I might as well read these answers to the questions I’ve figured out.

If I’m trying to value the question answerers' time, I might limit myself to one question every 10 minutes. If I have more than one question while in my 10 minutes cool-down period, I’ll ask the most recent one since it’s the most relevant.

If I want a response faster from a single question-answerer that doesn’t listen to me when I try to cancel previous questions, I might wait a bit each time I have question to see if I come up with another more relevant one.

For a single dedicated question-answerer that won’t stop what they’re doing to answer a new question, this might get me the answer to my latest question more quickly on average, despite this added self-imposed delay.

If getting a quick answer to an earlier question would still be somewhat useful, I might immediately ask the first question, resorting to the waiting-before-asking strategy only when the question-answer is busy answering a question.

A similar approach ignores the time between questions completely, instead keeping at most a single question in flight:

If the transmission of questions and answers takes a significant amount of time and I want to keep the question answerer as busy as possible to wring the maximum amount of knowledge out of them, I might instead try to keep up to two questions in flight; depending on the relative value of old responses, the profile of question answering times, and the transmission times of questions and answers.

I’m not actually talking about asking questions in this post, although that’s a great topic! [Julia] has written some great things about that.

Instead this is about debouncing techniques! I usually think of using them in JavaScript to limit requests to a server, but they’re more general than that.

I do have a real question though: what are these techniques called?

  • cancelling a request: cancelling
  • limiting to 1 request per time period: throttling
  • waiting for fixed time after each request to replace: debouncing
  • maintaing no more than 1 request in flight: ?
  • debouncing, but no delay if no request currently in flight (letting the first request through un-debounced): ? (“debouncing, letting first request through,” “debouncing while a request is out”)
  • maintaining no more than n requests in flight: ?

Let me know!