A work flow description database represents long running work flows as a set of work units, called steps, with information flows therebetween. The description database defines each step's input and output signals, input condition criteria for creating an instance of the step, an application program associated with the step, and criteria for selecting a resource to execute the step. A work flow controller controls the process of executing instances of each defined type of work flow. Execution of a long running work flow begins when a corresponding set of externally generated input event signals are received by the work flow controller. During execution of a work flow, each step of the work flow is instantiated only when a sufficient set of input signals is received to execute that step. At that point an instance of the required type of step is created and then executed by a selected resource. After termination of a step, output signals from the step are converted into input event signals for other steps in the work flow in accordance with data stored in the work flow description database. Each step executes an application program and is treated as an individual transaction insofar as durable storage of its results. Log records are durably stored upon instantiation, execution and termination of each step of a work flow, and output event signals are also logged, thereby durably storing sufficient data to recover a work flow with virtually no loss of the work that was accomplished prior to a system failure.