A computer-implemented method for executing program builds comprising: analyzing file dependency information contained within a first file for a first program build; determining, based on the file dependency information, which jobs may be executed in parallel during the first program build; scheduling jobs for the first program build based on the analysis of the file dependency information, wherein jobs which may be executed in parallel are scheduled to execute in parallel during the first program build; and executing the jobs according to the schedule; the method being characterised in that it further comprises: collecting file usage information from each of the jobs as the jobs are executed; analyzing the file usage information to detect a conflict associated with a first job executed in parallel with a second job, wherein the second job alters a file used by the first job when the first job is executed, and wherein a conflict is detected in the first job when a version of the file used by the first job is different from a version of the file that would have been used by the first job if the first job and the second job were executed in sequential order; re-executing the first job using the version of the file that would have been used by the first job if the first job and the second job were executed in sequential order; supplementing the file dependency information with the file usage information including an indication of a dependency of the first job on the second job determined from the detection of the conflict; analyzing both the supplemented file dependency information and the file usage information for a second program build; determining, based on the supplemented file dependency information, which jobs may be executed in parallel during the second program build; and scheduling jobs for the second program build based on the analysis of the supplemented file dependency information and the file usage information, wherein jobs which may be executed in parallel are scheduled to execute in parallel during the second program build. analyzing file dependency information contained within a first file for a first program build; determining, based on the file dependency information, which jobs may be executed in parallel during the first program build; scheduling jobs for the first program build based on the analysis of the file dependency information, wherein jobs which may be executed in parallel are scheduled to execute in parallel during the first program build; and executing the jobs according to the schedule; the method being characterised in that it further comprises: collecting file usage information from each of the jobs as the jobs are executed; analyzing the file usage information to detect a conflict associated with a first job executed in parallel with a second job, wherein the second job alters a file used by the first job when the first job is executed, and wherein a conflict is detected in the first job when a version of the file used by the first job is different from a version of the file that would have been used by the first job if the first job and the second job were executed in sequential order; re-executing the first job using the version of the file that would have been used by the first job if the first job and the second job were executed in sequential order; supplementing the file dependency information with the file usage information including an indication of a dependency of the first job on the second job determined from the detection of the conflict; analyzing both the supplemented file dependency information and the file usage information for a second program build; determining, based on the supplemented file dependency information, which jobs may be executed in parallel during the second program build; and scheduling jobs for the second program build based on the analysis of the supplemented file dependency information and the file usage information, wherein jobs which may be executed in parallel are scheduled to execute in parallel during the second program build. collecting file usage information from each of the jobs as the jobs are executed; analyzing the file usage information to detect a conflict associated with a first job executed in parallel with a second job, wherein the second job alters a file used by the first job when the first job is executed, and wherein a conflict is detected in the first job when a version of the file used by the first job is different from a version of the file that would have been used by the first job if the first job and the second job were executed in sequential order; re-executing the first job using the version of the file that would have been used by the first job if the first job and the second job were executed in sequential order; supplementing the file dependency information with the file usage information including an indication of a dependency of the first job on the second job determined from the detection of the conflict; analyzing both the supplemented file dependency information and the file usage information for a second program build; determining, based on the supplemented file dependency information, which jobs may be executed in parallel during the second program build; and scheduling jobs for the second program build based on the analysis of the supplemented file dependency information and the file usage information, wherein jobs which may be executed in parallel are scheduled to execute in parallel during the second program build.