Problemy sklepów internetowych – przemyślenia, rozwiązania, sukcesy i porażki

Dziennik wdrożeń

Bez teorii. Tylko to, co faktycznie weszło na produkcję. Pisane przez człowieka, nie ai.

Logistyka 7 min

Dlaczego 40% koszyków ginęło na etapie wyboru kuriera

Problem nie leżał w cenach dostawy. Leżał w tym, że lista punktów odbioru ładowała się cztery sekundy, a przez pierwsze dwa miesiące nikt tego nie zmierzył, bo wykres konwersji wyglądał normalnie.

Czterdzieści procent koszyków, które doszły do ekranu wyboru dostawy, nie przechodziło dalej. Pierwsza hipoteza: za drogo. Druga: brakuje ulubionego przewoźnika. Obie były nietrafione.

Dlaczego wykres wyglądał normalnie

Konwersja całego sklepu nie odbiegała od średniej z poprzednich miesięcy, więc przez dwa miesiące nikt nie szukał problemu. Spadek na tym jednym kroku był kompensowany wzrostem ruchu z kampanii – w sumie wychodziło tyle samo zamówień, tylko przy większym koszcie pozyskania.

To jest w praktyce najczęstszy powód, dla którego problemy w lejku żyją miesiącami: patrzymy na wynik końcowy, a nie na poszczególne kroki.

Cztery sekundy

Wybór punktu odbioru otwierał mapę z listą punktów w okolicy. Lista ładowała się średnio 4,1 sekundy, a na łączu mobilnym w gorszych warunkach ponad 8. W tym czasie ekran pokazywał pustą ramkę bez żadnego wskaźnika, że coś się dzieje.

Przyczyną było zapytanie do API przewoźnika wykonywane synchronicznie dla każdego z trzech obsługiwanych operatorów, po kolei, bez cache. Punkty odbioru zmieniają się kilka razy w roku.

Co zrobiliśmy

  • Cache odpowiedzi na 24 godziny, z kluczem po kodzie pocztowym.
  • Trzy zapytania równolegle zamiast sekwencyjnie.
  • Szkielet listy w miejsce pustej ramki, żeby było widać, że trwa ładowanie.
  • Domyślne rozwinięcie ostatnio wybranego punktu u klientów powracających.

Czas ładowania spadł do 400 ms przy trafieniu w cache, czyli w około 85% przypadków. Porzucenia na tym kroku spadły z 40% do 12%.

Największą lekcją nie był cache, tylko to, że przez dwa miesiące mierzyliśmy niewłaściwą rzecz.