Timeouts must decrease as you go inward

If an inner call can take as long as the outer request is allowed, there is no time left to retry it or to return a useful error.

client            30s
  gateway         25s
    api           20s
      db query     5s     ← room for two retries
      cache        1s
      third party  3s     ← and a fallback

the rule: every layer's timeout is shorter than its
caller's, by enough to do something about a failure.

equal timeouts everywhere means the caller gives up
first and the work continues, unobserved.

The equal-timeout failure is the one that wastes resources invisibly: the client has gone, the connection is closed, and the database query runs to completion holding a worker and a connection. A budget passed down the call chain — each hop subtracting its own elapsed time — is the rigorous version and is more machinery than most systems need. A documented ladder of constants gets most of the benefit and requires somebody to maintain it.