1. A method comprising: defining a plurality of resource pools including a first pool and a second pool, where each resource pool has a plurality of assigned resources; receiving a plurality of jobs to be executed; for each job of the plurality of jobs, assigning a respective resource pool, of the plurality of resource pools, to be used in completing the job; determining a preliminary schedule for executing the jobs on their respective resource pools; determining whether the preliminary schedule will cause any jobs to miss service level agreement (SLA) deadlines corresponding to the job; executing the plurality of jobs on their respectively assigned resource pools; and on condition that a first job, of the plurality of jobs and assigned to the first resource pool, will miss an associated SLA deadline under the preliminary schedule, re-assigning first resource from the second pool to the first pool during at least some of the time of the execution of the first job by the first resource pool.