1. A method for deferring software implementation, the method comprising: creating one or more source code files having a plurality of software components provided therein; annotating a selected set of the software components with metadata defining one or more criteria, thereby creating one or more annotated source code files; compiling the annotated source code files to create one or more intermediate code files; and loading one or more of the selected set of software components from the intermediate code files based on the criteria.