The Trade-Offs of Software Reuse