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.