1. A method comprising the steps of: obtaining at least one design diagram from at least one previous software project, wherein said obtaining is carried out via a software module executing on a hardware processor; extracting, from said at least one design diagram, a domain and at least one service abstraction for implementing a certain function, wherein said extracting is carried out via a software module executing on a hardware processor, and wherein said extracting comprises: identifying the name for a candidate service abstraction; obtaining one or more interfaces for the candidate service abstraction; and obtaining one or more implementation artifacts for the candidate service abstraction, wherein the one or more implementation artifacts represent the one or more classes that participate in implementing the certain function; verifying that the candidate service abstraction adheres to one or more service requirements; and reusing the verified candidate service abstraction in a subsequent software project, wherein said reusing is carried out via a software module executing on a hardware processor, and wherein said reusing comprises (i) measuring a number of matching operations between the verified candidate service abstraction and the subsequent software project, n opMatch , via n opMatch =(E nops i /A nops i ), wherein A nops i represents the number of service operations pre-defined for the verified candidate service abstraction i and E nops i represents the operations for the verified candidate service abstraction i derived from said extracting step, and (ii) reusing the verified candidate service abstraction in the subsequent software project if the number of matching operations exceeds a predetermined reuse factor.