Use back pressure anywhere a producer and consumer run at different and variable speeds: ingestion pipelines, log shippers, event streaming, API gateways under burst traffic, and any service that fans out work to a slower backend. The benefit is stability. The system degrades gracefully under overload instead of falling over, and you bound your memory use to a number you chose rather than to how much traffic arrives.
The cost is that slowness propagates backward. If your database is slow, back pressure makes the queue fill, which makes the API layer slow, which makes the load balancer queue, which makes the client wait. That is correct behavior, but it means a single slow component can stall the whole chain. You have to decide what happens at the edge, where there is no further upstream to push against.
That edge decision is the real design choice. The options are: block and make the client wait, shed load by rejecting requests with a 429 or 503, or drop lower priority data and keep the rest. Blocking preserves every request but can exhaust client connections. Load shedding protects the system but loses work. Many production systems combine a bounded buffer with a timeout, so they hold work briefly and shed it only when the backlog proves the slowdown is real.