1. A method for scheduling an information technology (IT) project, comprising: receiving a project request at an interface of a project manager comprising one or more processors, the project request comprising a required utilization metric for a plurality of tasks associated with the request; determining, using the one or more processors, the plurality of tasks associated with the project request; for each one of the plurality of tasks associated with the request, identifying a plurality of servers in a server pool, each one of the plurality of servers coupled to the project manager via a network, each of the plurality of servers in the server pool operable to perform at least one of the plurality tasks; retrieving a schedule for each of the plurality of servers in the server pool; receiving historical utilization metrics from a collection agent that monitors servers in the server pool; forecasting a future utilization level for at least one of the plurality of servers based on the historical utilization metrics indicating a trend or pattern; determining a threshold utilization metric for each of the plurality of servers in the server pool; for each one of the plurality of tasks, selecting, using the one or more processors, a one of the servers from the plurality of servers in the server pool that has capacity to perform an associated one of the plurality of tasks, wherein selection of the servers to perform the tasks is based on: the schedule for each one of the plurality of servers in the server pool, the future utilization level forecasted for at least one of the plurality of servers, and the threshold utilization metric for each of the plurality of servers in the server pool, p 1 scheduling each of the plurality of servers selected to perform an associated one of the plurality of task to perform the associated one of the plurality of tasks; determining that a piece of hardware associated with one of the plurality of servers scheduled to perform the associated one of the plurality of tasks has crashed; and re-scheduling one or more tasks and adjusting a project timeline of each of the plurality of servers selected to perform the plurality of tasks associated with the request.