Re-Engineering bezeichnet die systematische Analyse und Neugestaltung bestehender Software, mit dem Ziel, sie funktional zu erhalten, aber technisch oder strukturell deutlich zu verbessern. Es geht über reines Refactoring hinaus und kann Architekturwechsel, Plattformwechsel oder grundlegende Restrukturierungen einschließen.
Typische Phasen sind Reverse Engineering (Verstehen der vorhandenen Software), Restructuring (technische Umgestaltung) und Forward Engineering (Implementierung der modernen Variante). Werkzeuge reichen von Codeanalysetools (z. B. Sourcegraph, NDepend, Sonar) über Migrationsframeworks bis hin zu modellgetriebenen Generatoren.
Einsatzzweck ist die Reaktivierung wertvoller Systeme, deren Geschäftslogik weiter benötigt wird, deren technische Basis aber nicht mehr tragfähig ist. Statt komplett neu zu bauen, nutzt Re-Engineering vorhandenes Wissen und investiert es in eine moderne Form.
Der Begriff wurde 1990 von Elliot Chikofsky und James Cross in dem Aufsatz "Reverse Engineering and Design Recovery: A Taxonomy" eingeführt. Re-Engineering ist seitdem fester Bestandteil der Software-Wartungs- und Evolutionsdisziplin und wird heute zunehmend mit agilen und Cloud-Native-Methoden kombiniert.
In der Praxis kommt Re-Engineering häufig in Branchen mit stark regulierter, wertvoller Spezialsoftware vor – etwa in Banken, Versicherungen, Industrie und öffentlicher Verwaltung. Es ist ein anspruchsvolles Unterfangen: Wer Re-Engineering ohne klare Zieldefinition betreibt, riskiert ein langjähriges Projekt ohne klaren Endzustand.