In order to decrease the time and effort of the software development process and increase the quality of the software product significantly, software engineering required new technologies. Nowadays, most software engineering design is based on reuse of existing system or components. Also, it is become a main development approach for business and commercial systems. The concept of reusability is widely used in order to reduce cost, effort, and time of software development. Reusability also increases the productivity, maintainability, portability, and reliability of the software products. That is the reusable software components are evaluated several times in other systems before. The problems faced by software engineers is not lack of reuse, but lack of widespread, systematic reuse. They know how to do it, but they do it informally. Therefore, strong attention must be given to this concept. This study aims to propose a systematic framework considers the reusability through software life cycle from two sides, build-for-reuse and build-by-reuse. Furthermore, the repository of reusable software components is considered, and the evaluation criteria from both sides are proposed. Finally, an empirical validation is conducted by apply the developed framework on a case study