A computer-implemented method for developing software, the method comprising: providing a source component repository storing source code of plural software components, wherein the source code of each software component is individually editable, wherein each software component is for performing a single and complete function and wherein each software component is independent of any runtime environment; providing a binary component repository storing binary code of the plural software components, wherein the binary code of each software component is individually downloadable; editing the source code of a component of the plural software components; downloading the binary code of at least one other component of the plural software components; and generating from a combination of the edited component and the at least one downloaded component a target application that is dependent on a particular runtime environment; wherein the generating step comprises: forming a packaged component describing the component combination; and performing dependency injection comprising providing (S3.2) information identifying a set of fixed implementation classes and information regarding the particular runtime environment to the packaged component to implement an interface between the packaged component and the particular runtime environment; wherein the generating step is completed before runtime of the target application. providing a source component repository storing source code of plural software components, wherein the source code of each software component is individually editable, wherein each software component is for performing a single and complete function and wherein each software component is independent of any runtime environment; providing a binary component repository storing binary code of the plural software components, wherein the binary code of each software component is individually downloadable; editing the source code of a component of the plural software components; downloading the binary code of at least one other component of the plural software components; and generating from a combination of the edited component and the at least one downloaded component a target application that is dependent on a particular runtime environment; wherein the generating step comprises: forming a packaged component describing the component combination; and performing dependency injection comprising providing (S3.2) information identifying a set of fixed implementation classes and information regarding the particular runtime environment to the packaged component to implement an interface between the packaged component and the particular runtime environment; wherein the generating step is completed before runtime of the target application. forming a packaged component describing the component combination; and performing dependency injection comprising providing (S3.2) information identifying a set of fixed implementation classes and information regarding the particular runtime environment to the packaged component to implement an interface between the packaged component and the particular runtime environment; wherein the generating step is completed before runtime of the target application.