The developer must forego the tendency to understand programming tasks in term of flow of execution.
The thinking must be in terms of the responsibilities of the objects, which must rely on the framework to determine when the tasks should execute.