1. A method for initializing a module comprising: identifying a module for initialization, wherein the module is dependent on a plurality of modules and wherein the plurality of modules is listed in a dependency graph of the module; and performing a plurality of processing phases on the module and the plurality of modules in the dependency graph, wherein the performing comprises, for each module: executing a processing phase of the plurality of processing phases on the module; determining whether the processing phase has been executed on each of the plurality of modules in the dependency graph of the module, wherein determining whether the processing phase has been executed comprises walking the dependency graph of the module to determine an initialization status of each of the modules in the dependency graph, wherein the initialization status indicates which processing phase of the plurality of processing phases was last performed on a module; and when the processing phase has been executed on each of the modules in the dependency graph of the module, executing a subsequent processing phase of the plurality of processing phases on the module, wherein at least one processing phase of the plurality of processing phases comprises executing custom initialization code.