1. A computer-implemented method of compiling source code of a software product including a plurality of components, comprising: receiving at least one changelist identifying at least one component of the plurality of components; testing the at least one component using a defined set of tests for each of the plurality of components; approving the at least one changelist when testing of the at least one component identified in the changelist results in compliancy; calculating dependencies between the plurality of components using the approved at least one changelist by: identifying a first group of components which do not have a build dependency; and identifying a second group of components which depend on the first group of components, wherein the first group of components and the second group of components form a plurality of dependency trees; identifying a shared component that is included in at least two of the plurality of dependency trees; and building the software product by concurrently building at least some of the plurality of components based on the calculated dependencies, wherein the shared component is built only once, and building the software product comprises building the first group of components concurrently and building the second group of components concurrently.