Reuse strategies in software engineering