The "a network call can fail in ways a function call can't" cost (mentioned above) needs actual, deliberate handling — otherwise one struggling service tends to take down every other service that calls it, cascading a single, localized problem into a system-wide outage. A handful of patterns are the standard answers:
These patterns compound: a well-behaved service-to-service call typically has a timeout, a bounded number of retries with backoff, sits behind a circuit breaker, and draws from a bulkheaded resource pool — not because any single one of these is exotic, but because each protects against a distinct failure mode the others don't cover.