AdTech · AWS-Migration
Revenue-Infrastruktur für eine globale AdTech-Plattform.
Von Legacy zu Cloud-native in 12 Monaten.
Ein neu gegründetes Team übernahm gewachsenen PHP-Legacy-Code für das Revenue-Reporting einer globalen AdTech-Plattform im neunstelligen Umsatzbereich. Auftrag: Modernisierung und Migration in eine skalierbare AWS-Umgebung bei laufendem Betrieb. Laufzeit: 12 Monate.

Die Ausgangssituation
Neues Team. Alter Code. Kein Netz.
Ein neu gegründetes Team wurde aus einem bestehenden großen Team ausgegründet und übernahm die Verantwortung für den PHP-Legacy-Code des Revenue-Reportings. Der Code lief produktiv, aber er war über Jahre gewachsen – ohne Testabdeckung, ohne dokumentierte Infrastruktur, ohne Infrastructure as Code.
Revenue-Feeds von externen Partnern wurden täglich importiert und normalisiert, Kampagnen-Reports an interne Teams und externe Partner ausgeliefert. Das System musste täglich korrekte Daten liefern – in einem Umfeld wo Fehler unmittelbare geschäftliche Konsequenzen haben. Jede Änderung war ein Risiko weil niemand wusste was sie auslösen würde.
Die Herausforderung
Modernisieren bei laufendem Betrieb.
Keine Testabdeckung bedeutet keine Sicherheit. Jede Änderung am Legacy-Code war ein Blindflug. Incidents passierten regelmäßig, die Ursachen waren schwer zu finden, die Fixes riskant.
Gleichzeitig gab es keine Infrastructure as Code. Die AWS-Infrastruktur war manuell konfiguriert, nicht dokumentiert, nicht reproduzierbar. Was in der Cloud lief war nur dem bekannt der es aufgesetzt hatte. Die Aufgabe war das System zu modernisieren, auf PHP 8 zu migrieren, in eine saubere AWS-Umgebung zu überführen und gleichzeitig täglich korrekte Revenue-Daten zu liefern. Zwölf Monate, laufender Betrieb, kein Ausfall erlaubt.
Mein Ansatz
Verstehen.
Absichern.
Migrieren.
Codebase verstehen und absichern
Legacy-Code analysiert und Testabdeckung von 0 auf über 90% aufgebaut. PHPUnit für Unit Tests, Codeception für Acceptance Tests die das Systemverhalten gegen externe Partner absichern. Erst wenn Änderungen sicher sind kann man modernisieren.
PHP 8 Migration
Gesamten Legacy-Code auf PHP 8 migriert inklusive Anpassung aller veralteten Komponenten. Symfony als Framework-Basis modernisiert. Schrittweise, kontrolliert, mit Testabdeckung als Sicherheitsnetz.
Cloud-Migration auf AWS
Migration in eine skalierbare AWS-Umgebung: ECS für containerisierte Services, EC2 für compute-intensive Workloads, SQS und SNS für asynchrone Verarbeitung, RDS für relationale Daten, Athena und Glue für analytische Abfragen und Datentransformation. Gesamte Infrastruktur in Terraform als Code, versioniert und reproduzierbar. Nichts mehr manuell konfiguriert.
Estimates Per Click Berechnung für Media Buyer
Estimates-Per-Click-Berechnung als eigenständiger Service entwickelt. Die Werte werden täglich berechnet und als Export bereitgestellt damit Media Buyer ihre Kampagnen datenbasiert optimieren können. Budget in hochperformante Channels lenken, schwache Channels reduzieren. Direkte Verbindung zwischen technischer Infrastruktur und messbarem geschäftlichem Outcome.
Datenverfügbarkeit über AWS DataZone
Revenue-Daten werden über AWS DataZone intern allen Abteilungen bereitgestellt. Kein manuelles Verteilen von Reports mehr, kein Datensilo. Jede Abteilung hat Zugriff auf die Daten die sie braucht.
Legacy-Code ohne Tests, ohne IaC, mit regelmäßigen Incidents?
Finden Sie in wenigen Minuten heraus, wie hoch Ihr Risiko wirklich ist.
Was schwierig war
Absichern gegen Systeme, die einem nicht gehören.
Testen gegen fremde Partnersysteme. Die Revenue-Feeds kamen von externen Partnern, und genau an dieser Grenze entstehen die Fehler: ein Feld, das plötzlich leer bleibt, ein Betrag mit anderem Dezimaltrennzeichen, eine Zeitzone, die sich zur Sommerzeit verschiebt. Gegen Produktivsysteme Dritter kann man nicht testen, und ihre Testumgebungen bilden genau diese Fälle nicht ab.
Die Antwort waren Acceptance-Tests, die das Systemverhalten an dieser Grenze festhalten: aufgezeichnete echte Feeds als Grundlage, ergänzt um die Fehlerfälle, die im Betrieb schon einmal aufgetreten waren. Damit war nicht jeder künftige Fall abgedeckt, aber jeder vergangene. Das reichte, um den Code darunter anzufassen, ohne bei jeder Änderung zu raten.
Der Rest war eine Frage der Haltung: Alles, was von außen kommt, wird als potenziell falsch behandelt. Ein Import, der bei fehlerhaften Daten laut abbricht, ist besser als einer, der sie still verarbeitet. Im Revenue-Reporting fällt eine falsche Zahl sonst erst auf, wenn ein Partner sie beanstandet.
Das Ergebnis
Stabiler. Schneller. Für alle verfügbar.
Incidents
Testabdeckung von 0 auf über 90% erklärt warum die Incidents um 90% gesunken sind.
Testabdeckung
PHPUnit für Unit Tests, Codeception für Acceptance Tests – das Systemverhalten ist vollständig abgesichert.
Infrastructure as Code
Gesamte AWS-Infrastruktur in Terraform – versioniert, reproduzierbar, kein manuelles Klicken mehr.
Ein gewachsener PHP-Legacy-Code ohne Tests, ohne dokumentierte Infrastruktur und mit regelmäßigen Incidents in eine moderne, stabile AWS-Umgebung überführt. Die Testabdeckung von 0 auf über 90% erklärt warum die Incidents um 90% gesunken sind. Die Infrastruktur ist vollständig als Code versioniert. Estimates-Per-Click-Werte werden täglich berechnet und stehen Media Buyern für die Kampagnenoptimierung zur Verfügung. Revenue-Daten stehen über AWS DataZone allen Abteilungen zur Verfügung. Eine Modernisierung bei laufendem Betrieb in einem neunstelligen Umsatzumfeld ohne einen einzigen Tag Ausfall.
Eingesetzte Technologien
Bewährte Tools. Kein Experiment.
- Golang
- gRPC
- Symfony
- PHP 8
- AWS ECS
- EC2
- SQS
- SNS
- RDS
- Athena
- Glue
- DataZone
- DynamoDB
- S3
- IAM
- Terraform
- Docker
- OpenTelemetry
- Datadog
- Grafana
- CloudWatch
- PHPUnit
- Codeception
- Testcontainers
Kundenstimmen
Was Auftraggeber sagen.
„Großes Dankeschön an Tim! Die AWS-Migration war für uns ein echt dicker Brocken, aber du hast das absolut souverän gelöst. Vor allem bei den kleinen Fehlern, die zwischendurch aufgetaucht sind, warst du sofort zur Stelle und hast nicht locker gelassen, bis alles lief.“
„Super Zusammenarbeit! Herr Rutte hat unseren alten PHP-Shop schnell und zuverlässig modernisiert, auf den neuesten Stand gebracht und nebenbei noch viele sinnvolle Verbesserungen eingebaut. Kommunikation war unkompliziert, Deadlines wurden eingehalten – absolut empfehlenswert.“
Häufig gefragt
Was Auftraggeber vorher wissen wollen.
Wie migriert man ein Reporting im neunstelligen Umsatzbereich ohne Ausfall?
Schrittweise und mit einem Rückweg für jeden Schritt. Zuerst Infrastructure as Code für die Zielumgebung, dann Datenabgleich zwischen alt und neu, dann Umlenkung einzelner Auswertungen. Erst als beide Seiten wochenlang identische Zahlen lieferten, wurde die alte Strecke abgeschaltet.
Woher kamen 90 Prozent weniger Incidents?
Aus drei Quellen: Testabdeckung über 90 Prozent an den Stellen, die Geld bewegen; reproduzierbare Umgebungen statt handgepflegter Server; und Überwachung, die Probleme vor den Kunden bemerkt. Die Ursachen waren selten exotisch, sie waren nur vorher unsichtbar.
Was passiert nach zwölf Monaten mit dem Wissen?
Es bleibt im Team. Das war Teil des Auftrags: ein neu gebildetes Team sollte den Code nicht nur übernehmen, sondern weiterentwickeln können. Deshalb Pairing statt Zuarbeit und dokumentierte Entscheidungen statt Abschlussbericht.
