Het begon met twee klachten in dezelfde week. Een klant had een set gereedschap besteld die volgens de site op voorraad was en kreeg een mail dat het drie weken zou duren. Een andere klant belde juist om te vragen waarom een artikel op de site als uitverkocht stond terwijl het in de fysieke winkel gewoon in het schap lag.

Als de voorraad niet klopt in een webshop, is de eerste reflex om naar het voorraadbeheer te kijken. Bij dit ijzerwarenbedrijf, met ruim vierduizend artikelen en een fysieke winkel ernaast, lag de oorzaak ergens anders. Het duurde drie weken voordat iemand doorhad dat er structureel iets misging in plaats van incidenteel.

De situatie: voorraad die niet klopt in de webshop

De shop draaide op WooCommerce met voorraadbeheer aan. De voorraadstanden kwamen uit het kassasysteem van de winkel, dat elke nacht een csv-bestand op een server zette. Een importplugin las dat bestand ‘s ochtends om zes uur en werkte de aantallen bij. Zo’n opzet is heel gebruikelijk en op zichzelf prima.

Wat het lastig maakte om de fout te zien: het klopte meestal wel. Van de vierduizend artikelen liepen er dagelijks een stuk of veertig uit de pas, en die veertig waren elke dag andere. Bij zo’n verhouding schrijven mensen het toe aan toeval, aan een medewerker die iets vergat af te boeken, aan een retour die niet was verwerkt.

Hoe we het spoor terugliepen

  1. Een lijst maken van afwijkingen. We exporteerden op één ochtend de voorraadstanden uit de shop en uit het kassasysteem en legden ze naast elkaar. Zesenveertig verschillen.
  2. Kijken of er een patroon in zat. Dat zat er: alle zesenveertig waren artikelen die in de nacht ervoor waren verkocht via de webshop, niet via de winkel.
  3. De volgorde van gebeurtenissen uitschrijven. Het kassasysteem maakte zijn bestand om drie uur ‘s nachts. De import draaide om zes uur. Alles wat tussen drie en zes uur online werd verkocht, werd door de import overschreven met het oudere aantal.
  4. Controleren of dat klopte met de cijfers. De verkopen in dat venster van drie uur kwamen exact overeen met de artikelen die afweken.

De import werkte precies zoals hij was ingesteld: hij zette het aantal uit het bestand als absolute waarde in de shop. Hij trok niets af en telde niets op. Elke ochtend gooide hij dus de online verkopen van de nacht weg. En omdat er ook ‘s ochtends nog werd verkocht in de winkel, kwamen die verschillen er de volgende nacht weer bovenop.

Waarom het drie weken duurde

Dit is het deel waar de meeste lezers iets aan hebben. De storing was al die tijd zichtbaar, maar niemand keek op de juiste plek.

De medewerker die de klachten afhandelde, corrigeerde de voorraad met de hand en ging door. Elke correctie loste het geval van dat moment op, waardoor het probleem nooit groot genoeg werd om te melden. De eigenaar zag alleen de omzet, en die daalde niet zichtbaar. En het kassasysteem meldde netjes dat de export was gelukt, wat hij ook was.

Er was geen enkele plek waar iemand kon zien dat de import bezig was met het overschrijven van verkopen. De importplugin schreef wel een logboek weg, maar niemand had dat ooit geopend en er stond ook niets alarmerends in: honderd regels bijgewerkt, geen fouten.

Wat we hebben veranderd

  1. Het venster gesloten. De export uit het kassasysteem verplaatst naar half zes en de import naar zes uur. Daarmee kromp het gat van drie uur naar dertig minuten.
  2. De import op verrekenen gezet in plaats van overschrijven, zodat online verkopen uit dat halfuur niet meer verdwenen. Niet elke koppeling kan dat; deze wel, maar de instelling stond uit.
  3. Een dagelijkse controle toegevoegd die het aantal afwijkingen tussen beide systemen telt en een mail stuurt zodra dat boven de vijf komt. Geen ingewikkelde monitoring, gewoon een vergelijking.
  4. De nabestelmelding aangepast. Artikelen met een voorraad van nul werden verkocht als nabestelling zonder dat de klant dat duidelijk zag. Dat is nu een zichtbare melding op de productpagina.
  5. De medewerker gevraagd handmatige correcties te noteren in plaats van ze alleen door te voeren. Dat lijstje was binnen een week het beste diagnosemiddel dat we hadden.

Die laatste maatregel is misschien wel de belangrijkste. Een correctie die niemand vastlegt, is een storing die onzichtbaar blijft.

Wat het had gekost

Zeven bestellingen die niet geleverd konden worden en geannuleerd zijn. Naar schatting twintig artikelen die drie weken lang als uitverkocht op de site stonden terwijl ze in het schap lagen; wat daar aan omzet is misgelopen, weet niemand precies. Ongeveer zes uur handwerk aan correcties en klantcontact. En één klant die in een beoordeling schreef dat de voorraadinformatie op de site onbetrouwbaar was, wat langer blijft staan dan de storing zelf.

Het herstel kostte een dagdeel. Dat is de verhouding die we bij dit soort koppelingsproblemen bijna altijd zien: het oplossen is niet duur, het niet opmerken wel.

Vijf dingen om zelf na te kijken

  • Weet u of uw voorraadkoppeling overschrijft of verrekent? Dit is de belangrijkste vraag van allemaal, en veel ondernemers weten het antwoord niet.
  • Hoe groot is het gat tussen het maken en het inlezen van het bestand? Alles wat in dat gat wordt verkocht, loopt risico.
  • Wordt er ergens geteld hoeveel afwijkingen er zijn? Zonder teller is elke afwijking een incident en nooit een patroon.
  • Ziet een klant duidelijk wanneer iets een nabestelling is? Dat scheelt de meeste klachten, ook als de voorraad een keer niet klopt.
  • Wordt er periodiek een steekproef gedaan? Twintig artikelen per maand handmatig vergelijken kost tien minuten en vangt dit soort dingen binnen dagen op.

Hoe u het voorraadbeheer in uw shop zelf inricht, staat uitgebreider in het artikel over voorraadbeheer in WooCommerce. Loopt de aanvoer bij u via importbestanden, dan is de uitleg over productimport via csv het vervolg daarop.

Zulke steekproeven en koppelingscontroles laten zich goed inplannen als vast onderdeel van het maandelijkse beheer van een webwinkel. WebMaintor houdt bij shops met een externe voorraadbron standaard een afwijkingsteller bij, juist omdat dit type storing zich zo goed verstopt.

Concrete volgende stap: exporteer morgenochtend uw voorraadstanden uit beide systemen en leg ze naast elkaar. Tien minuten werk, en u weet meteen of u dit probleem heeft.