In a two party system you never want both party A and party B buffering at the same time because it creates artificial delays in the system.
As an example, let’s take a common setup between two teams and a ticketing workflow.
The ops team doesn’t want to bother the engineering team so they wait until they think there is a lull before reporting an issue. The eng team triages requests coming in into tickets and then the team prioritizes tickets before assigning and completing them.
The two teams are both buffering and the time it takes to resolve an issue is now the sum of:
- The time it takes to notice the issue
- The time waiting to report it (buffer)
- The time to make a ticket
- The time to prioritize a ticket (buffer)
- The time it takes to resolve the issue
With both sides buffering, an unpredictable amount of time is introduced into the system causing delays. In this example, it would be much more efficient to report issues immediately.
Now imagine several teams in a complicated system where tickets are passed and prioritized between them. Each stage is buffered, adding more time to the system, and decreasing throughput.
(This is also why I don’t think teams should introduce ticketing too early because it’s too easy to double buffer!)
See also:
- Automation reduces marginal cost of nonautomated tasks
- Conway’s Law shows us these communication structures leak out into what companies build
- Automating cooperation decreases the cost of coordination