generalize interfaces
generalize implementations
improve Task.run() signature