A framework in which to study software productivity is presented. Approaches to understanding software development processes and improving software productivity also discussed include using and designing automated software development tools, studying human factors in software development, and applying software productivity measurement and evaluation techniques. An environment to facilitate the reuse of software components in described. Such an environment supports the identification, creation, categorization, storage, selection, usage, and maintenance of reusable components. A metasystem environment that allows users to define functionalities, structures, and constraints of various software components is discussed. Information about these components is used by a knowledge-based system to support the selection, configuration, and distribution of reusable components. Reasons for the slow progress in software productivity research and ways to improve it are given.