Zum Inhalt springen

Bestandssystem

Die INTERSPORT Digital GmbH verantwortet den Onlineshop intersport.de für den Sportfachhandelsverbund INTERSPORT.

  • E-Commerce
  • Systemablösung & Migration
  • Systemintegration & Datenarchitektur
  • Cloud & Betrieb
  • Team-Aufbau & Enablement
intersport.de (öffnet in neuem Tab)
Beispielansicht des Bestandssystems: Verfügbarkeit eines Artikels über Zentrallager, Filialen und Marktplatzpartner, dazu aktuelle Bestandsereignisse.
LAUFZEIT
Februar 2024 bis Oktober 2025
Go-Live 14. Januar 2025 · anschließend neun Monate Ausbau und Übergabe
TEAM
3 Entwickler:innen, 1 Architekt, 0,5 Product Owner im Produktteam Buy
nach dem Go-Live gemeinsames Team mit INTERSPORT Entwickler:innen
BRANCHE
Sportfachhandel, E-Commerce
LEISTUNGSUMFANG
Ablösung des bestehenden Bestands-Monolithen
Konzeption und Modellierung der Bestandsdomäne · ereignisgetriebene Architektur mit Anbindung von Händler-, Lager- und OMS-Daten · zeitgleiche Migration mit der Shop-Ablösung
IM VERBUND MIT
unserem Kooperationspartner TalentFormation Network
sowie weiteren Entwicklungspartnern der anderen Domänen

Ein Storno ist teurer als ein entgangener Verkauf: Der Kunde hat bereits gekauft. Wir haben für INTERSPORT das Bestandssystem gebaut, das die Verfügbarkeit über Hunderte Händler und die Zentrallager hinweg zusammenführt - und den Batch-Monolithen abgelöst, der das vorher nicht konnte.

INTERSPORT erfüllt Bestellungen aus dem Zentrallager, direkt aus einzelnen INTERSPORT-Filialen und über Marktplatzpartner. Über 90 Prozent der Transaktionen laufen über Geschäftspartner. Die Bestandslage ist damit nicht nur verteilt, sondern ändert sich an jeder Quelle unabhängig - und jeder Verkauf im Shop verändert sie zusätzlich. Das Altsystem, ein über Jahre gewachsener Monolith, arbeitete diese Daten im Batch ab. Die Bestandsschnittstellen waren langsam, und das Konzept ließ eine zeitnahe Sicht schlicht nicht zu. Der Shop verkaufte damit systematisch gegen einen Bestand von gestern. Was daraus folgte, bekam der Kunde: Eine Bestellbestätigung, und Tage später ein Storno.

Was erreicht wurde

Vorher verkaufte der Shop gegen einen Bestand von gestern. Was daraus folgte, bekam der Kunde: Eine Bestellbestätigung, und Tage später ein Storno.

  • <1,25%

    Stornoquote nach der Ablösung. Vorher >5%

  • >90%

    der Transaktionen werden von Geschäftspartnern erfüllt - Zentrallager, Filialen, Marktplatz

  • 1 Bestand

    aus vielen Quellen. Zentrallager, Filialen und Marktplatzpartner ändern ihre Bestände unabhängig voneinander, und jeder Verkauf im Shop verändert sie zusätzlich.

Was wir gebaut haben

Zwei Datenströme, ein Bestand

Der Bestand ergibt sich aus zwei Quellen, die das System zusammenführt. Zum einen melden die Händler und die Zentrallager ihre Bestände an die Zentrale - mehrmals untertägig, nicht einmal über Nacht. Zum anderen ist das System an das Order-Management-System angebunden und kennt darüber die unfakturierten Aufträge sowie jeden weiteren Schritt im Prozess: Versand, Händlerstorno und alles, was einen Bestand sonst noch bewegt. Diese Ereignisse laufen per Push ein, nicht per Abfrage.

Erst beides zusammen ergibt eine belastbare Aussage. Der gemeldete Bestand allein ist immer schon veraltet, sobald er ankommt - was ihn korrigiert, sind die Verkäufe, die seitdem passiert sind. Genau diese Verrechnung war im Altsystem nicht möglich.

Die abhängigen Systeme fragen nicht bei jedem Klick nach: Sie halten den für sie relevanten Ausschnitt als eigene Replik vor, die über Kafka laufend aktualisiert wird. Der Warenkorb der Vertikale Buy ist der prominenteste dieser Verbraucher → Zum Showcase Checkout

Warum wir keine Reservierung gebaut haben

Der übliche Weg, Überverkäufe zu verhindern, ist eine Reservierung: Ware wird beim Betreten des Checkouts für einige Minuten gesperrt. Wir haben bewusst darauf verzichtet.

Eine Reservierung ist im Kern ein Umgang mit Unsicherheit - man sperrt Ware, weil man nicht genau weiß, wie viel davon noch da ist. Wer den Bestand zeitnah kennt, braucht diese Absicherung nicht und zahlt für sie einen Preis: Jede Sperre blockiert Ware, die jemand anders in derselben Minute gekauft hätte. Bei Filialware im Einzelstück ist das kein Randfall, sondern der Normalfall. Wir haben deshalb die Genauigkeit verbessert, statt Ware wegzusperren. Wer zuerst kauft, bekommt sie.

„This was not just a technical migration - it was a fundamental shift in how we operate digital commerce at Intersport. In under 12 months, we built a brand-new shop system, established a fully-fledged product organization, and took full ownership of our core processes.“

M. Ruppert, Head of ProductINTERSPORT Digital GmbH

Aus einem LinkedIn-Beitrag von M. Ruppert, März 2025

Wie wir dahin gekommen sind

Vom Batch-Monolithen zur Ereignisarchitektur

Der Auftrag war nicht, das Altsystem zu modernisieren, sondern seine Fachlichkeit neu zu schneiden. Aus dem Monolithen wurde eine ereignisgetriebene Architektur mit Apache Kafka auf AWS MSK als Rückgrat: Einzelne Services, die auf Bestands- und Auftragsereignisse reagieren, statt einer nächtlichen Verarbeitung, die den ganzen Datenbestand durchgeht.

Der Zuschnitt folgt dabei der Aufgabe, nicht einem Architekturideal. Die meisten Services sind AWS Lambdas, die von MSK-Ereignissen ausgelöst werden. Wo Quellen abgefragt statt gemeldet werden, laufen stattdessen Kotlin-Services auf ECS - Polling braucht einen Prozess, der wartet, und dafür ist eine Funktion das falsche Werkzeug.

Zwei Ablösungen an einem Tag

Der alte Shop setzte auf dem alten Bestandssystem auf. Beide hingen damit voneinander ab und ließen sich nicht nacheinander ersetzen. Wir haben deshalb zuerst den neuen Datenstand im Parallelbetrieb aufgebaut und mit dem alten abgeglichen - und dann beide Altsysteme zum selben Zeitpunkt durch ihre Nachfolger abgelöst.

Die neun Monate nach dem Go-Live

Ein Bestandssystem lässt sich vor dem Start nicht fertig bauen. Erst der echte Betrieb zeigt, wie sich Bestände tatsächlich bewegen: Welche Quellen ungenau melden, wo der Takt nicht reicht, an welcher Stelle ein Prozessschritt zu spät ankommt. Wir sind deshalb nach dem Go-Live noch neun Monate geblieben - mit zwei Entwicklern statt vier.

Der erste Schritt war, die Stornoquote überhaupt sichtbar zu machen. Sie war vorher keine Zahl, die jemand täglich vor Augen hatte, sondern ein Nebenprodukt vieler Einzelfälle. Erst als sie messbar war, ließ sie sich systematisch senken: Von über fünf Prozent auf unter 1,25 Prozent.

Übergabe in interne Verantwortung

Das erklärte Ziel des Programms war, die Abhängigkeit von externen Dienstleistern zu beenden. Wir haben deshalb nicht nur gebaut, sondern parallel das interne Team aufgebaut, das die Vertikale heute verantwortet - drei neue Entwickler:innen, vom ersten Tag an im Team statt in einer Übergabe am Ende. Die Verkleinerung von vier auf zwei Entwickler nach dem Go-Live war dabei kein Sparzwang, sondern der Übergabemechanismus selbst. Einer der beiden hat in dieser Phase die Product-Owner-Aufgaben für das Bestandssystem übernommen - bis die Fachlichkeit intern verankert war. Wie das funktioniert hat, steht ausführlich im Checkout-Showcase → Zum Showcase Checkout

Anwendung und Infrastruktur

  • Kotlin
  • Apache Kafka auf AWS MSK
  • Avro mit Glue Schema Registry