Use (UML) sequence diagrams for runtime scenarios. They clearly denote the responsibility of all participating building blocks - which can help in discussing building-blocks.

Example

See the following example:

short and interesting UML sequence diagram

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

See also tip 6-5.