Use cases: - lots of boilerplate tasks - different tasks for different environments - dynamically compose tasks based on outside parameters