If blocking is about to occur, interrupt the role that could prevent the block.


If a role is about to block on a critical resource, interrupt the role that provides that resource so they stop what they're doing to keep you unblocked. 


Interrupts Unjam Blocking


This approach assumes a small amount of work by one role can keep another role in work for a longer time.  There will be practical limits to this.  Where a role spends more time producing a resource than the consumer of that resource spends consuming it, they could spend all their time producing that resource and thus cause blocking to some other role by failing to produce another resource, an issue addressed in Don’tInterruptAnInterrupt.  If work were divided perfectly and all roles were staffed at their optimum levels, then everyone would be on the “critical path” all the time, and all roles would be just about to block all the time, but would never actually block.  We cannot hope do achieve this ideal, but it is worth striving for.  Yet get the balance slightly wrong, and a role could be causing blocks all the time, again see the discussion for Don’tInterruptAnInterrupt.