Bei diesem Ansatz wird die Funktionsweise der Anwendung von innen heraus verändert. Ziel ist es, überflüssigen Code zu entfernen, bestehenden Code zu vereinfachen und an aktuelle Coding-Standards anzupassen. Dies kann auf einzelne Codebereiche oder die gesamte Anwendung angewendet werden, wie im anfänglichen Audit festgestellt.
Altsysteme bestehen oft aus zu eng gekoppelten Komponenten oder monolithischen Strukturen, was eine unabhängige Bereitstellung und Skalierung erschwert. Hierbei werden Monolithen in modulare oder Microservices-basierte Architekturen umgewandelt. Außerdem trennen wir unterschiedliche Funktionen über separate Service-Grenzen und restrukturieren Schichten innerhalb der bestehenden Architektur, wenn eine vollständige Überarbeitung nicht erforderlich ist.
Hier bieten wir die Umstrukturierung von Datenbanken mit redundanten Tabellen, undokumentierten Stored Procedures und uneinheitlichen Namenskonventionen. Dazu gehören Normalisierung oder Denormalisierung der Datenbankstruktur, Refactoring von Stored Procedures sowie Optimierung der Anwendungslogik und Abfragen.
Wir spezialisieren uns auf die Überarbeitung von API-Schichten älterer Anwendungen, insbesondere wenn diese schlecht strukturiert und undokumentiert sind. Dazu gehören Anwendungen, bei denen Geschäftslogik direkt der Benutzeroberfläche ausgesetzt ist, sowie solche mit veralteten Kommunikationsprotokollen. Das Ergebnis ist eine versionierte, dokumentierte RESTful API mit Authentifizierung.
Bibliotheken, SDKs und Frameworks werden überprüft und aktualisiert, insbesondere wenn sie veraltet sind und kein Support mehr besteht. Dadurch wird die Kompatibilität mit neuen Laufzeitumgebungen gewährleistet und mögliche Sicherheitslücken in den Bibliotheken verhindert.
Wir integrieren Unit-, Integrations- und Regressionstest-Suites parallel zum Refactoring. Ohne automatisierte Testabdeckung kann ein groß angelegtes Refactoring nicht sicher überprüft werden.
Wir lokalisieren Leistungsengpässe im Code und bei Datenbankabfragen und beheben sie effizient: langsame Endpunkte, N+1-Abfragen, nicht indexierte Abfragen und unzureichende Planung von Aufgaben im Hintergrund.
Dieser Prozess bereitet bestehende Anwendungen und Infrastrukturen für die Bereitstellung in der Cloud vor, ohne dass eine Migration erforderlich ist. Dazu gehören Cloud-Integration-Bewertung, Konfiguration der Umgebung, Identitäts- und Zugriffsverwaltung, Netzwerkarchitektur (VPC, Subnetze, Security Groups) sowie Implementierung einer CI/CD-Pipeline für Cloud-Anwendungen.
Branche: PropTech/HR-Technologie
Das Team hat an einer Legacy-.NET-Anwendung für Background-Checks von Bewerbern und Mietern gearbeitet. Alle vorhandenen Fehler wurden analysiert und behoben, umfassende Systemtests wurden durchgeführt und ein schriftlicher Bericht erstellt. Der Bericht enthielt eine Übersicht über den Systemzustand, vorhandene Probleme und mögliche Lösungen.
Branche: Gesundheitswesen
Das Team war für die Wartung und Weiterentwicklung mehrerer .NET-basierter medizinischer Anwendungen verantwortlich, die in Justizvollzugsanstalten eingesetzt werden. Dazu gehörten Anwendungen für Patientenakten, elektronische Verschreibungen und Medikamentenverwaltung. Im Rahmen des Projekts wurde das Refactoring von .NET Framework 4.5 zu ASP.NET Core auf einer Azure-Infrastruktur durchgeführt.
Branche: Finanzsoftware
Das Team hat das Refactoring einer Legacy-Online-Kreditplattform auf Basis des .NET Frameworks durchgeführt, die für kleine und mittlere Unternehmen entwickelt wurde. Die Plattform wurde auf .NET 9 und Azure umgestellt, sodass Kreditentscheidungen innerhalb von 24 Stunden erfolgen können.
Unser Team analysiert zunächst die Codebasis und Architektur, bevor wir mit dem Refactoring starten. Als Ergebnis liefern wir einen Bericht mit den gesammelten Erkenntnissen sowie einem priorisierten Refactoring-Plan. So kann man den Umfang kontrollieren und sicherzustellen, dass er die vom Kunden freigegebenen Grenzen nicht überschreitet.
Refactoring erfolgt in Phasen, die in kleinere Abschnitte mit konkreten Ergebnissen unterteilt sind. So kann der Auftraggeber die Ergebnisse jeder Phase etappenweise bewerten, sodass der Projektumfang je nach geschäftlichem Bedarf gesteuert werden kann.
Unser Team arbeitet parallel zur aktiven Entwicklung. Refactoring-Änderungen werden wie jede neue Funktion überprüft, getestet und bereitgestellt.
Alle Refactoring-Aktivitäten werden in jeder Phase dokumentiert. So kann das Team des Kunden die refaktorierte Codebasis selbstständig pflegen und erweitern, ohne auf externe Hilfe angewiesen zu sein.
Der Zeitrahmen variiert je nach der Komplexität der Codebasis und den vorhandenen Test-Suites.
Refactoring lohnt sich, wenn die Legacy-Anwendung korrekt funktioniert, der Code es dem Team jedoch erschwert, effizient damit zu arbeiten. Refactoring ist sinnvoller als eine vollständige Überarbeitung und weniger aufwendig als eine komplette Neuentwicklung.
Anzeichen dafür, dass Refactoring nötig ist: