Zurück zur Startseite

Die Preis-Engine, die die Montags-Tabelle abgelöst hat

Jeden Montagmorgen öffnete ein Entwickler bei einem B2B-Marktplatz eine geteilte Tabelle, kopierte die Preis-Multiplikatoren der Woche in ein Management Command und ließ es gegen die Produktion laufen. Zweihundert Listing-Kategorien hingen an diesem Ritual. Es hielt Preise drei bis sieben Tage veraltet, und einmal stellte es Premium-Listings zum zehnfachen Preis online.

Leistungen

Backend Engineering, Produkt

Branche

B2B-Marktplatz

Jahr

2023-2024

DIE HERAUSFORDERUNG

Sechs Stunden zum zehnfachen Preis

Die Tabelle war das Preissystem. Account Manager trugen unter der Woche Multiplikatoren ein, der Entwickler importierte sie am Montag. Niemand konnte sehen, was eine Änderung bewirkt, bevor sie live war, und Tippfehler landeten direkt bei den Käufern. Der schlimmste Fall war ein saisonaler Multiplikator, der als 12,5 statt 1,25 eingetragen wurde: Premium-Listings standen sechs Stunden lang zum zehnfachen Preis online, bis es jemand bemerkte. Zwischen den Vorfällen war der Prozess schlicht langsam: Ein Markt, der sich am Dienstag bewegte, bekam am folgenden Montag seinen Preis.

DIE LÖSUNG

Regeln als Daten, in Reihenfolge ausgewertet

Die Engine behandelt Preisregeln als Daten. Jede Regel ist ein Datenbankeintrag mit einer Priorität und einer Handler-Klasse, deren apply() den aktuellen Preis und den Marktkontext erhält und einen neuen Preis zurückgibt. Account Manager bearbeiten sie im Django Admin: einen Nachfrage-Schwellenwert, eine Angebotsuntergrenze, einen saisonalen Modifikator. Eine veröffentlichte Änderung ist sofort live, ohne Deployment. Diese Freiheit ist zugleich das Risiko: Ein Regelsatz, den niemand prüft, richtet denselben Schaden an wie die Tabelle, nur schneller. Deshalb bringt die Engine einen Vorschaumodus, Preisgrenzen pro Kategorie und ein Auswertungsprotokoll mit. Ein Pricing-Produkt von einem Drittanbieter wurde verworfen: Diese Tools sind für Millionen SKUs und das Auslesen von Wettbewerberpreisen gebaut, während dieser Marktplatz 200 Kategorien nach regionalen Nachfragemustern, Zustandsklassen der Geräte und saisonalen Branchenzyklen bepreist, die kein Standardprodukt abbildet.

Die Pipeline. Jede Regel sieht die Ausgabe der vorherigen; Begrenzung und Protokoll kommen zuletzt:

Python
class PricingEngine:
    def evaluate(self, listing, context):
        """Evaluate all active rules in priority order."""
        price = listing.base_price
        log = []

        rules = PricingRule.objects.filter(
            is_active=True,
            category=listing.category,
        ).order_by('priority')

        for rule in rules:
            handler = rule.get_handler()
            old_price = price
            price = handler.apply(price, context)
            log.append({
                'rule': rule.name,
                'input': old_price,
                'output': price,
                'delta': price - old_price,
            })

        # Clamp to category bounds
        price = max(listing.category.price_floor, price)
        price = min(listing.category.price_ceiling, price)

        PriceEvaluation.objects.create(
            listing=listing,
            base_price=listing.base_price,
            final_price=price,
            rules_applied=log,
            context=context,
        )
        return price

Eine Regeländerung in der Vorschau

Der Entwurf startet mit einem Peak-Aufschlag von 40 % statt 25 %. Vergleiche die Spalten, dann veröffentliche oder verwirf ihn. Schiebe die Nachfrage hoch und das Angebot runter, bis die Obergrenze den Entwurf begrenzt, und beobachte, wie die komponierte Anpassung über die größte Einzelregel hinauswächst.

Regel-EngineUnveröffentlichte Änderungen

Marktkontext

85 %
50 %

Auswertungs-Pipeline

RegelVeröffentlichtEntwurf
Basispreis€ 120,00€ 120,00
Nachfrage-Aufschlag+1 % pro Nachfragepunkt über dem Schwellenwert70 % ×1,15€ 138,00×1,15€ 138,00
Knappes Angebot+1 % pro Angebotspunkt unter der Untergrenze30 % ×1,00€ 138,00×1,00€ 138,00
Saison-ModifikatorNur in der Hochsaison. Nebensaison ist fix bei -15 %40 % (Veröffentlicht: 25 %) ×1,25€ 172,50×1,40€ 193,20
Begrenzung€ 60,00 - € 300,00×1,00€ 172,50×1,00€ 193,20
Endpreis€ 172,50+12 %€ 193,20

Preis über den Nachfragebereich

Preis über den NachfragebereichEndpreis für jedes Nachfrageniveau bei aktuellem Angebot und aktueller Saison. Gestrichelte Linie: veröffentlichter Regelsatz. Durchgezogene Linie: Entwurf. Veröffentlicht: € 150,00 - € 195,00. Entwurf: € 168,00 - € 218,40.
+61 %Komponierte Anpassung
+40 %Größte Einzelregel
2Auswertungen protokolliert
0Regelsätze veröffentlicht

Ein Regel-Handler. Schwellenwert und Rate sind Konfiguration, die Rechnung ist Code:

Python
class DemandSurgeRule(BasePricingRule):
    """Increase price when demand exceeds threshold."""

    def apply(self, price, context):
        demand = context.get('demand_percentile', 50)
        if demand > self.config['threshold']:
            surplus = demand - self.config['threshold']
            multiplier = 1 + (surplus * self.config['rate'])
            return round(price * multiplier, 2)
        return price
Absicherung

Wenn eine Regel falsch ist

Vorschaumodus. Eine Regel in der Vorschau wird bei jeder Berechnung ausgewertet und protokolliert, der Live-Preis bleibt unverändert; der Admin zeigt pro Listing Live-Preis und projizierten Preis nebeneinander. 'Was macht diese Regel wirklich?' ist vor dem Veröffentlichen beantwortet.

Grenzen. Jede Kategorie hat eine Unter- und eine Obergrenze, einmal angewendet nach der letzten Regel, sodass keine Kombination von Regeln einen Preis darüber hinaus treiben kann. Drei Regeln, die sich zu 200 % Aufschlag verstärken, enden trotzdem an der Obergrenze; ein Nebensaison-Rabatt fällt nie unter die Untergrenze in die negative Marge.

Das Protokoll. Jede Berechnung wird als PriceEvaluation-Datensatz gespeichert: Listing, Basispreis, jede ausgelöste Regel mit ihrem eigenen Delta, Endpreis. Wenn ein Käufer einen Preis hinterfragt, liest der Support diesen Datensatz, statt die Regeln der Woche zu rekonstruieren.

DAS ERGEBNIS

Was sich am Montagmorgen geändert hat

Am Montagmorgen passiert jetzt nichts mehr. Account Manager ändern Regeln, wenn sich der Markt bewegt, prüfen sie in der Vorschau gegen Live-Preise und veröffentlichen am selben Tag. In den ersten sechs Monaten hat der Vorschaumodus 14 fehlkonfigurierte Regeln gestoppt, bevor sie Käufer erreichten. Die Tabellen-Ära brachte etwa einen Preis-Vorfall pro Monat; seit dem Launch gab es keinen. Der Support klärt einen strittigen Preis aus dem Auswertungsprotokoll in rund drei Minuten statt 45. Der Umsatz pro Listing stieg im ersten Quartal nach dem Launch, und die Engine bepreist heute 200 Kategorien, ohne dass jemand eine Zahl kopiert.

WICHTIGE KENNZAHLEN

+18%Umsatz pro Listing, erstes Quartal nach Launch
0Preis-Vorfälle seit Launch
50kPreisauswertungen pro Tag
KUNDENSTIMME

"Ich ändere eine Regel im Admin, sehe mir die Vorschau neben dem Live-Preis an und veröffentliche. Niemand wartet mehr auf den Montag, und seit dem Launch habe ich keinen Entwickler mehr gebeten, einen Import zu starten."

Head of Sales

B2B-Marktplatz · Vertrieb

FÜR DEIN PROJEKT

  • Wann es passt

    Preise ändern sich nach Zeitplan oder von Hand, und die Verantwortlichen können keine Änderung ohne Entwickler ausliefern. Dieselbe Form passt auf Gebühren, Provisionen und Rabatte.

  • Was du prüfen solltest

    Wie ein Preis heute berechnet wird. Wenn zwei Anpassungen gleichzeitig greifen können, entscheide, ob sie sich stapeln oder überschreiben, und halte das fest, bevor es Code gibt.

  • Was es braucht

    Eine Regeltabelle mit Prioritätsfeld, einen Admin zum Bearbeiten, einen Vorschaupfad und ein Auswertungsprotokoll. Hier waren das Django und PostgreSQL, keine neue Infrastruktur, als Backend- und Produkt-Engagement über 2023-2024.

FAQ

TECHNOLOGIE-STACK

Django
Python
PostgreSQL

Seit mittlerweile 10 Jahren arbeiten wir immer wieder gerne mit Daniel zusammen. Wir schätzen dabei sehr seine schnellen Reaktionszeiten rund um die Uhr und sein Allroundwissen. Egal ob Serverkonfigurationen oder Programmierungen, er hat immer die passende Lösung.

Manuel Kasbarian - Geschäftsführer, SophistiX

Schließe dich Manuel an und starte dein nächstes Projekt mit Zuversicht.

Schreibe mir