Legacy systems refer to older software systems that are still vital to an organization's operations but use outdated technologies. It is risky and expensive to replace legacy systems. Organizations must weigh the costs and risks of maintaining the legacy system versus replacing or re-engineering it. Re-engineering aims to improve a legacy system's maintainability by restructuring its code and documentation without changing functionality. Reverse engineering analyzes a system to understand its design for re-specification or re-engineering.