ExerciseRunner does not need to be a separate interface.