decide() returns served: "fallback". Users see your control, which is correct behaviour; the cause is in result.error.code.
Every call times out
If every decision istimeout while direct curl calls are fast, the deadline is being spent before the request starts: a client constructed per request, a cold start, or an event loop busy with other work. Construct the client once, and measure result.durationMs.
Only some calls fall back
A fallback rate of a few percent on a cold edge runtime is normal and costs nothing but a few unrecorded decisions. Logerror.code and requestId and look for a pattern by runtime or region.
Without the SDK
The same causes apply; the status anderror code in the response tell them apart. See Errors.