Software Engineering principles and practices promote the reuse of existing elements to maximize the performance of development and maintenance processes. The core concepts of reusability are aligned with the FAIR (Findability, Accessibility, Interoperability, and Reusability) principles. From our perspective, FAIR principles are not only related to data in a software system, because there are other resources and parts of a system that are related to data indirectly or require data schemas and models for their description and management. Examples of these resources are services, business logic processes, contracts, security policies, architectures, components, deployment resources, execution rules, or interaction alternatives, among other possible examples. Actually, any resource in a system may need to be discovered either internally by a subprocess, or externally by any client that might be interested in finding, accessing, interoperating, or reusing it. This paper addresses a systematic literature review to analyze the current principles, paradigms, and technologies that can be applied to enable discovering and reusing mechanisms in modern software systems, and how traditional and outdated approaches have been adapted to support present issues. From this analysis, we outlined the challenges and open research lines that can be addressed to achieve a suitable reuse strategy.