Het einde van de nachtelijke CSV-export
Oververkoop tijdens campagnes is bijna nooit een magazijnprobleem. Het is een zestien uur oud voorraadbestand, en vervangen draait vooral om idempotentie.
Vraag een retailer waarom hij op Black Friday oververkocht en u hoort iets over het magazijn. Kijk naar de koppeling en u vindt meestal een CSV die om 02:00 uur het ERP verlaat en om 02:40 uur in de winkel landt, met de voorraad van de vorige avond erin.
Het grootste deel van het jaar is die vertraging onzichtbaar. Tijdens een campagne kan één uur verkeer een maatreeks leegtrekken, en elke order daarna is een terugbetaling, een servicecontact en een klant die niet terugkomt.
Het bestand vervangen door een event stream is het makkelijke deel. Het lastige is dat de winkel nu duizenden kleine updates krijgt in plaats van één grote, en dat elke daarvan dubbel, in verkeerde volgorde of helemaal niet kan aankomen.
De regels doen er dus meer toe dan het transport. Elk bericht draagt een versie en een idempotentiesleutel. Hetzelfde bericht tweemaal toepassen doet niets. Een ouder bericht na een nieuwer wordt weggegooid in plaats van weggeschreven. Een mislukt bericht gaat naar een dead-letter queue die een mens kan inzien, niet naar een log dat niemand leest.
We houden het nachtelijke bestand ook nog een tijd aan, maar als reconciliatietaak in plaats van bron van waarheid. Zijn stream en bestand het om 03:00 uur oneens, dan krijgt iemand een melding met de specifieke artikelnummers. Die parallelle periode maakt de omschakeling saai.
Bij één retailer met veertig markten ging de voorraadnauwkeurigheid daarmee van 'meestal wel goed' naar een meetbaar getal, en oververkoop tijdens campagnes daalde tot vrijwel nul. Aan de winkel zelf veranderde niets.