Refactor the old job implementation to separate out behaviour into different interfaces
Commit please