1. A method comprising: segmenting a workflow into a plurality of sub-processes; associating a checkpoint with the end of each sub-process; attempting execution of one of the sub-processes; and if successful, storing a set of parameters at the checkpoint; otherwise, using a previously stored set of parameters to reattempt execution of the sub-process.