management. Systematic Systematic software reuse is a strategy for increasing productivity and improving the quality of the software industry. Although it is simple in concept, successful software reuse implementation is difficult in practice. A reason put forward for this is the dependence of software reuse on the context in which it is implemented. Some problematic issues that need to be addressed related to systematic software reuse are: a clear and well-defined product vision is an essential foundation to a software product line (SPL). an evolutionary implementation strategy would be a more pragmatic strategy for the company. there exist a need for continuous management support and leadership to ensure success. an appropriate organisational structure is needed to support SPL engineering. the change of mindset from a project-centric company to a product-oriented company is essential. Examples Software libraries A very common example of code reuse is the technique of using a software library. Many common operations, such as converting information among different well-known formats, accessing external storage, interfacing with external programs, or manipulating information (numbers, words, names, locations, dates, etc.) in common ways, are needed by many different programs. Authors of new programs can use the code in a software library to perform these tasks, instead of "re-inventing the wheel", by writing fully new code directly in a program to perform an operation. Library implementations often have the benefit of being well-tested and covering unusual or arcane cases. Disadvantages include the inability to tweak details which may affect performance or the desired output, and the time and cost of acquiring, learning, and configuring the library. Design patterns A design pattern is a general solution to a recurring problem. Design patterns are more conceptual than tangible and can be modified to fit the exact need. However, abstract classes and interfaces can be reused to implement certain patterns. Frameworks Developers generally reuse large pieces of software via third-party applications and frameworks. Though frameworks are usually domain-specific and applicable only to families of applications. Higher-order function In functional programming higher-order functions can be used in many cases where design patterns or frameworks were formerly used. Retrocomputing Retrocomputing encompasses reuse of code, simply because retro programs are being run on older computers, or emulators for them. Computer security In computer security code-reuse is employed as a software exploit method. When an attacker is not able to directly input code to modify the control flow of a