Ever since software development became an engineering discipline, software development teams everywhere in the world have faced similar development and deployment problems. Among other things, developers today are concerned about:
Reusing code that has been tested and used in other applications
Developing flexible applications that can be customized to the users needs, but not at the expense of overburdening the development team
Addressing anomalies and add features after the application has been shipped, while avoiding a complete rewrite of the application
Improving application development time by leveraging against software code developed by third party software vendors
Developing distributed and non-distributed applications in a similar ...