Use (UML) sequence diagrams for runtime scenarios. They clearly denote the responsibility of all participating building blocks - which can help in discussing building-blocks.
See the following example:
Downside (and a suggestion)
When using graphical modeling tools, creating and managing sequence diagrams might take up a lot of effort. You could speed up that process by using a textual DSL (domain-specific language) to describe the sequences and have somt tool render the diagrams for you.
The diagram above was rendered using the (free and open source) PlantUML with the following input:
@startuml note right of F: before start, a1-a5 have completed F -> G : start G -> G : init G -> H : create() G <--H : X G -> I : authorize( X ) I -> L : check(X) I <--H : ok G -> I : foo(X, H) I --> G : completed note right of G: G return result to A @enduml
See also tip 6-5.