Silence is not "no"

Think of it when your code calls another program over a network, or a request “failed” and you do not know what happened on the other side.

In everyday life

You post a cheque and hear nothing for two weeks. Silence does not mean it was lost: the bank may have cashed it. Send a second cheque without checking, and you may pay twice.

One case

A shop’s checkout asks the bank to charge $80 and waits up to 5 seconds. The bank takes 7 seconds, charges the card, and replies too late. The checkout has already shown “Payment failed”. The customer clicks Pay again and is charged $160.

Silence is not “no”
The ideaHow things break
Silence is not “no”

A limit on how long a program waits for an answer. When the time runs out, it stops waiting and treats the request as failed, even though the other side may still be working on it.

How things break, Foundations

Every case

Over a network, silence has three meanings: the request was lost, the other side is slow, or the reply was lost. The caller cannot tell which. With no time limit, it waits forever and holds a user, a connection or a workerA program, or one part of a program, that takes one job at a time and does it. the whole time. With a limit, it stops waiting, but “timed out” means “unknown”, not “did not happen”.

The word

Engineers call this

timeoutA limit on how long a program waits for an answer. When the time runs out, it stops waiting and treats the request as failed, even though the other side may still be working on it.

Put a time limit on every call to another program. When it fires, treat the result as unknown: check what happened, or repeat only an action that is safe to repeat.

Where this idea leads

Skills that encode it

  • sol-loop tstack“Timeout, error, or no reply is not approval”: silence from the reviewer never counts as a yes.
  • make-bot-ui pstackGives every webhook call a fixed limit, “timeout: 8 seconds”, and “one try, no retry”.