Back pressure is often useful. Slow down the pipeline from the bottleneck to the source. At some point it’s important to cause failures, informing the source. Those failures can also be intentionally delayed. These techniques are used by networking systems to keep services from falling over. Tuning the knobs for when to fail, when to delay, etc is a hard problem. That is probably why there are so many congestion control algorithms for TCP.