Dein Team ist gut – aber der Code bremst sie aus. 🐌
Ich modernisiere gewachsene Systeme, sodass Feature-Entwicklung wieder Wochen statt Monate dauert. 🚀
Keine automatisierten Tests während Entwicklungstätigkeit
Finale Systemtests erfolgen manuell auf unterschiedlichen Testgeräten
Aktionen:
Vereinheitlichung der Entwicklungs- und Test-Prozesse
Einführung automatisierter Tests und Integration dieser in die CI/CD-Prozesse
Anbindung von Ranorex zur Unterstützung und teilweisen Ablösung der manuellen Systemtests
JIRA
GitLab CI
Ranorex
Migration einer CLI-Anwendung zu einem Webservice
Ausgangslage:
Ausbremsung des Redaktionsteams durch eine nur periodisch laufende CLI-Anwendung zur Datenbereitstellung
Aktionen:
Migration der Stand-alone CLI-Anwendung zu API-basierter Web-Anwendung, um Daten in Echtzeit zur Verfügung zu stellen
PHP
JavaScript
Symfony
Adobe Analytics
Anbindung einer zentralen Kassensoftware
Ausgangslage:
Hohe Lizenzkosten durch Nutzung einer dedizierten Abrechnungssoftware für einen Online-Shop
Aktionen:
Migration einer bestehenden Schnittstelle zur Anbindung einer Konzern-zentralen Kassensoftware
PHP
XML
Diebold Nixdorf
Anbindung ERP-System an EDI-Software
Ausgangslage:
Nutzung einer Access-Datenbank als ERP-System
Forderung der Kunden nach Übermittlung von Rechnungen via EDI
Aktionen:
Anbindung der Access-Datenbank an die EDI-Software EDI4ALL
Betreuung der Migration inkl. Absprache der Schnittstellen mit den EDI-Kommunikationspartnern
Microsoft Access
VBA
EDI
Erhöhung der Barrierefreiheit bestehender Web-Komponenten
Ausgangslage:
Bestehende Web-Komponenten sind teilweise nicht barrierefrei
Aktionen:
Migration der bestehenden Web-Komponenten zur Erhöhung der Barrierefreiheit auf Basis eines bestehenden WCAG-Audits
TypeScript
Stencil
WCAG
Migration einer Simulations-Software zu CUDA
Ausgangslage:
Java-basierte Simulations-Software liegt seit ca. 5 Jahren brach und soll wieder eingesetzt werden
Zwecks Parallelität soll die Ausführung der Simulationen mithilfe von CUDA auf GPUs durchgeführt werden
Aktionen:
Analyse der Java-basierten Simulations-Software zwecks Identifikation der relevanten Funktionalitäten
Neuentwicklung der Simulations-Software mithilfe von C/C++ und CUDA
Java
C/C++
CUDA
Migration einer Tracking-Landschaft zu DataLayer
Ausgangslage:
Direkte Abhängigkeit des Quellcodes von der Adobe-Analytics-API
Wunsch nach autarker Befähigung des Web-Analytics-Teams ohne Zuarbeit der Entwicklungsteams
Aktionen:
Migration der heterogenen Tracking-Landschaft zu DataLayer-basierter Lösung
Entkopplung der Adobe-Analytics-API
PHP
JavaScript
Symfony
Adobe Analytics
Ablösung eines selbstentwickelten E-Commerce-Frameworks
Ausgangslage:
Selbstentwickeltes E-Commerce-Framework führt vermehrt zu Problemen
Wunsch nach der Nutzung von Pimcore, um Standardfunktionalitäten abzubilden
Wunsch nach der Anbindung weiterer Payment Service Provider (PSPs)
Aktionen:
Refaktorisierung des bestehenden E-Commerce-Frameworks, um es schrittweise in Pimcore zu integrieren
Anbindung der Zahlungsanbieter Concardis, PayPal und CrefoPay
PHP
JavaScript
Pimcore
Concardis
PayPal
CrefoPay
Refaktorisierung und Erweiterung eines bestehenden Eclipse-Plugins
Ausgangslage:
Java-basiertes Eclipse-Plugin für die Erfassung von Benutzerinteraktionen liegt seit ca. 4 Jahren brach und soll wieder eingesetzt werden
Aktionen:
Identifikation und Entfernung der nicht relevanten Quellcode-Bestandteile
Refaktorisierung und Erweiterung des Eclipse-Plugins
Entkopplung der Bereitstellung von erfassten Daten
Ergänzung weiterer Datenaustauschformate
Java
Eclipse
RCP (Rich Client Platform)
ANTLR
Migration zu Oracle Analytics
Ausgangslage:
Einsatz der End-Of-Life-Software Oracle BI Publisher 10
Aktionen:
Migration vom Oracle BI Publisher 10 zu Oracle Analytics
PHP
Oracle BI Publisher
Oracle Analytics
RabbitMQ
Kurzprofil
Seit 2017 selbstständig als Entwickler und Berater für Modernisierung und Refactoring.
Erfahrung aus E‑Commerce, Industrie/Produktion, Logistik und Plattformprodukten.
Ein neuer Entwickler vor einem undokumentierten Legacy-System ist wie ein Archäologe ohne Ausgrabungsplan. Wie ich Onboarding in Legacy-Projekten so gestalte, dass das gewonnene Wissen im System bleibt.
PHP-Dateien, die Logik und HTML in einem vermischen, sind schwer zu testen, schwer zu warten und schwer zu übergeben. Wie ich Twig schrittweise einführe – ohne den laufenden Betrieb zu gefährden.
Tightly coupled Code ist eines der häufigsten Probleme in gewachsenen PHP-Systemen. Event-basierte Architektur ist eine der elegantesten Lösungen – und sie lässt sich schrittweise einführen, ohne alles auf einmal umzubauen.
"Wir sollten das in Microservices aufteilen" ist oft der erste Reflex bei Legacy-Monolithen. Meistens ist es die teuerste und riskanteste Entscheidung. Was stattdessen sinnvoller ist.
Refactoring-Budgets gegenüber nicht-technischen Entscheidern zu rechtfertigen ist eine eigene Disziplin. Wie ich technische Komplexität in Sprache übersetze, die im Boardroom ankommt.
Bevor ich Legacy-Code refactore, schreibe ich Tests, die das bestehende Verhalten dokumentieren – nicht das gewünschte. Charakterisierungstests sind kein Qualitätssignal, sondern ein Sicherheitsnetz.
Projekte, die noch alles per require und include laden, lassen sich systematisch auf Composer migrieren. Wie Autoloading, Versionierung und externe Pakete schrittweise einziehen.
Kein Test ist kein Zufall – es ist das Ergebnis von Zeitdruck, gewachsener Codebasis und fehlender Infrastruktur. Wie ich PHPUnit in ein bestehendes System einführe und den ersten sinnvollen Test schreibe.
SQL-Injection, fehlende Input-Validierung, veraltete Session-Mechanismen – alter PHP-Code ist oft unsicher. Ein systematischer Ansatz zur Risikoanalyse und Behebung.
Viele kleine PHP-Anwendungen laufen noch auf Shared-Hosting-Paketen – mit PHP 7.2, manuell gepflegten Konfigurationsdateien und keiner Möglichkeit zur lokalen Reproduktion. Wie ich solche Systeme in Container-Umgebungen überführe.
Viele gewachsene PHP-Anwendungen arbeiten noch ohne Klassen und Namespaces. Wie ich strukturlosen prozeduralen Code schrittweise und sicher in OOP überführe.
MySQL 8 bringt striktere SQL-Modi, geänderte Standardwerte und inkompatible Authentifizierung. Ein Leitfaden, was in der Praxis wirklich bricht – und wie ich es systematisch behebe.
Die Bundesregierung plant eine Steuer auf die Übergabe gewachsener Softwaresysteme. Das Gesetz zur Regulierung von Software-Vermächtnissen soll zum 1. Januar 2027 in Kraft treten – und trifft vor allem kleine Betriebe hart.
Wie ein mittelständisches PHP-Projekt nach einem Produktionsausfall den Weg von manuellen FTP-Uploads zu einer reproduzierbaren CI/CD-Pipeline gefunden hat – schrittweise und ohne großen Aufwand.
Automatisierte Deployments sind kein Luxus moderner Greenfield-Projekte. Wie ich eine CI/CD-Pipeline schrittweise in Systeme einführe, die historisch per FTP deployed wurden.
Selbstgebautes Routing, eigene ORMs, hausgemachtes Templating – viele mittelständische PHP-Systeme laufen noch damit. Wann es Zeit ist, das zu ändern, und wie.
Pinsel statt Debugger, Ausgrabungsstätte statt Codebase: Wer täglich in gewachsenen PHP-Systemen arbeitet, entwickelt Fähigkeiten, die in keinem Stellenprofil stehen – aber auf jeder Ausgrabung Gold wert wären.
Schlechte Entwickler hinterlassen keinen Legacy-Code. Zeitdruck, fehlende Dokumentation und wechselnde Anforderungen schon. Was das für Modernisierungsprojekte bedeutet.
Eine bestehende MS-Access-Datenbank sollte über eine PHP-Anwendung zugänglich gemacht werden – pragmatisch, ohne Datenverlust und mit klarem Migrationsweg. Wie das mit Doctrine DBAL funktioniert hat.
Das Strangler Fig Pattern ist das bewährteste Muster für schrittweise Systemablösung. Wie ich es in PHP-Projekten einsetze – ohne den laufenden Betrieb zu gefährden.
Vibe Coding beschleunigt die Entwicklung – bis der erste Bug auftaucht, den niemand erklären kann. Wie ich KI-generierten Code systematisch greifbar und wartbar mache.
Tech-Debt ist kein Schicksal. Mit den richtigen Metriken und einer klaren Visualisierung lässt sich Legacy-Code gezielt abbauen, statt blind zu refactorn.