Restart a failed or interrupted batch and have it pick up where it left off (within limits of transaction boundaries) to save time and resources. A key goal is that the management of the batch process (locating a job and its input and results, starting, scheduling, restarting) should be as easy as possible for a non-developer, like an application support team with some business back up.
Any batch should be able to restart gracefully, even if (depending on chosen execution or client implementation) it might have to go right back to the beginning.