1. A method of executing a distributed application comprising: executing a distributed application in a sequence of phases, each phase having a corresponding set of executable code, and wherein code corresponding to each phase is executed asynchronously across multiple processes; and initiating each phase of the plurality of phases in response to a synchronization event, wherein the synchronization event comprises an event triggered and handled externally to the distributed application.