A controller comprising: a memory; and a processor coupled to the memory and configured to: control a first device, a second device, and a third device, wherein the first device, the second device, and the third device are part of a distributed graph processing network, determine that the second device has failed, determine that the third device has failed, and instruct a minimum recovery among the first device, the second device, and the third device by instructing the second device and the third device, but not the first device, to roll back to their last snapshots; determine a last completed checkpoint; the controller being characterised in that it is further configured to: determine a second time of a second snapshot of the second device during the last completed checkpoint; determine a third time of a third snapshot of the third device during the last completed checkpoint; make a determination that the second time is before the third time; order the second snapshot before the third snapshot based on the determination; instruct, until a second convergence, which is the iteration time by which the vertex values do not change, the first device to process a second sub-graph associated with the second device using second inputs of the second device from the second snapshot; and instruct the first device, after completion of the second convergence and until a third convergence, to process a third sub-graph associated with the third device using third inputs of the third device from the third snapshot. a memory; and a processor coupled to the memory and configured to: control a first device, a second device, and a third device, wherein the first device, the second device, and the third device are part of a distributed graph processing network, determine that the second device has failed, determine that the third device has failed, and instruct a minimum recovery among the first device, the second device, and the third device by instructing the second device and the third device, but not the first device, to roll back to their last snapshots; determine a last completed checkpoint; control a first device, a second device, and a third device, wherein the first device, the second device, and the third device are part of a distributed graph processing network, determine that the second device has failed, determine that the third device has failed, and instruct a minimum recovery among the first device, the second device, and the third device by instructing the second device and the third device, but not the first device, to roll back to their last snapshots; determine a last completed checkpoint; determine a second time of a second snapshot of the second device during the last completed checkpoint; determine a third time of a third snapshot of the third device during the last completed checkpoint; make a determination that the second time is before the third time; order the second snapshot before the third snapshot based on the determination; instruct, until a second convergence, which is the iteration time by which the vertex values do not change, the first device to process a second sub-graph associated with the second device using second inputs of the second device from the second snapshot; and instruct the first device, after completion of the second convergence and until a third convergence, to process a third sub-graph associated with the third device using third inputs of the third device from the third snapshot.