Niedziela, 14:42

Niedziela, 14:42.

Marcin G. zajmujący się w PizzaPortal social media wysłał maila o niespotykanie dużej liczbie komentarzy na Facebooku o zamkniętych w środku dnia restauracjach w PizzaPortal.pl na terenie Rumii, Białegostoku i Gdyni. Przeczytałem to szybko, sprawdziłem, że na moim iPhonie wszystko ok, na wszelki wypadek sprawdziłem także mobile web – nie widać nic podejrzanego. 

Na szybko w głowie znalazłem kilka powodów takiej sytuacji: chwilowa przerwa z dostępem do prądu w restauracjach, statusy ich dostępności nie odświeżyły się na czas jak w innych kanałach. Subiektywne połączenie kilku odseparowanych przypadków… Jednym słowem – wysokie prawdopodobieństwo fałszywego alarmu.

Chwilę później dostajemy wiadomość, że „Gdańsk także padł”. O 14:58 pisze do mnie Adam, nasz product owner, że sprawa zaczyna wyglądać poważnie. Minutę później zaczynamy rozmawiać przez telefon, w tym czasie zdążyłem już rozłożyć moje mobilne biuro w kawiarni na Saskiej Kępie obok której przechodziłem z moją Pauliną (widząc co się dzieje Paulina poprosiła o menu).

Podczas rozmowy sprawdziłem statystyki: zamówień wykonanych na Androidzie są trzykrotnie mniej niż powinno być w stosunku do analogicznych niedziel o tej samej porze, ale nie zauważyłem żadnych problemów z innymi platformami. Adam będąc ciągle na linii potwierdza, że aplikacja PP na Androidzie w każdym sprawdzanym mieście pokazuje wszystkie restauracje jako zamknięte. Czyli to już nie tylko Trójmiasto i Białystok…

Zaczynam w głowie wyliczać potencjalne hipotezy. Z nich ta,  że problem jest ograniczony tylko do Androida zaczyna mieć największy sens. Ma to swoje dobre i złe strony. Dobra jest taka, że tylko jeden kanał jest odcięty a zła, że to nie jest tymczasowa usterka całego backendu a systematyczny błąd.

Gdyby problem pojawił się na więcej niż jedna platformie to nasze poszukiwania skierowałyby się w stronę API, ale wszystko wskazywało na problem z samą aplikacją. Poprosiłem Adama, aby odczekał jeszcze 10 minut i jeśli nic się nie poprawi to żeby napisał wiadomość na specjalną skrzynkę Emergency do naszego działu IT Ops – chciałem dać ostatnią szansę przypadkowi. Kiedy my będziemy sprawdzać hipotezę z aplikacją, IT Ops zajmie się tematem API.

15:23. Informuję na kanale na Slacku nasz zespół w Senfino o problemie. Dawid (proxy product owner) z Marcinem L. (Android Dev) zaczynają analizować sytuację.

15:33. Wysyłam na grupę mailową managementu PP trzyakapitowe streszczenie sytuacji.

15:37. Przychodzi zamówiona przez Paulinę sałatka.

15:40. Dzwoni Tomek (CEO Senfino) i zestawia trójstronne połączenie z Dawidem (proxy product owner po stronie Senfino). Mamy dwie kwestie do przedyskutowania: skąd wziął się problem oraz, ważniejsze w tym momencie, jak możemy ograniczyć szkody.

Okazuje się, że błąd leżał w sposobie parsowania godzin otwarcia restauracji. Informacje o niedzieli podawane w API zostały źle zinterpretowane przez klienta (aplikację na Androidy). W poniedziałek sześć dni wcześniej wrzuciliśmy do Google Play wersję z ogromną dawką refactoringu kodu, w którym godziny otwarcia była jedynie małym fragmentem poprawek.

Ten błąd był na tyle paskudny, że jedynie dawał znać o sobie w niedzielę, więc nasze standardowe QA działające od poniedziałku do piątku nie miało jak go wykryć. W każdym razie błąd został znaleziony. Teraz tylko musimy szybko go naprawić, aby ograniczyć problemy.

Rozważaliśmy powrót do poprzedniej, działającej wersji, ale robiąc tak stracimy mnóstwo wartościowych poprawek, a także nasz nowy system wysyłania wiadomości do użytkowników wewnątrz aplikacji. Inną opcją było jak najszybsze wdrożenie poprawki i wgranie niej do Google Play. Obydwie z tych możliwości nie były dobre z prostego powodu: użytkownicy Androida bardzo wolno przechodzą na nową wersję software’u – większość z nich zauważyłaby aktualizację dopiero w przyszłym tygodniu, a my musimy zrobić coś teraz.

Zbliżał się wieczór, początek zwiększającego się ruchu w naszym serwisie.

Ostatecznie Tomek z Dawidem wpadają na pomysł, aby wykorzystać właśnie wdrożony system do komunikacji z użytkownikami, aby przekierować ruch z aplikacji na stronę mobilną. Każdy, kto otworzy aplikację zobaczy pełnoekranową informację, że aplikacja ma dzisiaj gorszy dzień i zapraszamy pod adres mobile.pizzaportal.pl aby wykonać zamówienie. Takie rozwiązanie nie będzie wymagało aktualizacji aplikacji, a jedynie stworzenia specjalnej kampanii reklamowej.

System komunikacji to jednak kawałek królestwa Ewy, nasze szefowej marketingu. Najpierw chcę uzyskać od niej zgodę na skorzystanie z tej metody (która może być inwazyjna dla niczego nie spodziewającego się użytkownika).
15:47. Ewa nie odbiera telefonu.

15:49. Dzwonię do Lecha, CEO PizzaPortal.pl. Tłumaczę sytuację, mówię, że nie możemy czekać. Lech daje zielone światło na akcję.

15:56. Informuję zaintresowane strony, że idziemy z planem wysłania wiadomości do użytkowników. Dawid zaczyna konfigurować komunikat – nabrał w tym wprawy przy implementacji i testowaniu systemu.

16:08. Ewa oddzwania. Tłumaczę sytuację do tego miejsca, nie może osobiście pomóc bo właśnie jedzie samochodem. Kontaktuje Dawida z Alicją z marketingu, która jest w domu przed komputerem i sprawdzi ze swojej strony poprawność konfiguracji wysyłki.

16:10. Czas posprzątać bałagan i powiązać ostatnie sznurki. Management PP dostaje aktualizację z naszym proponowanym rozwiązaniem. Customer Care i Social Media także. Kończymy z Pauliną sałatkę.

16:36. Dawid wysyła testową wiadomość. Zdzwaniamy się po raz jeszcze raz, aby poprawić ostatnie rzeczy. Spacerujemy już z Pauliną przez Saską Kępę do domu.

16:57. Nasze rozwiązanie jest aktywne. Rozmawiamy na Slacku o tym, że koniecznie musimy uodpornić nasze QA na ten przypadek – będziemy o tym dyskutować w poniedziałek na naszym product planningu.

Dotarliśmy pod nasze mieszkanie. Zasłużyliśmy na herbatę.

Straty tego dnia z braku zamówień na Androidzie bolą – nasza niedziela była całościowo gorsza o około 5% od standardowej. Widać to dobrze na wykresie zamówień poniżej – spadek niebieskiej linii 6.03 to właśnie omawiany przypadek. Nie ma jednak powodu, aby obwiniać kogoś (czy też siebie) za błąd popełniony po raz pierwszy tak jak w tym przypadku. Z czystej statystyki wynika, że przy tak wielowymiarowym produkcie to po prostu musi się zdarzyć. Ważne jest jednak jak się na nie reaguje.

  
Sytuacje takie jak ta mają swoją dynamikę podyktowaną emocjami. Wszyscy szukają klucza do zrozumienia co tak naprawdę się stało – i muszą to zrobić szybko, bo każda minuta to niezrealizowane zamówienia, a więc utracone pieniądze. Łatwo więc wpada się w paranoje i podważa swoje umiejętności, a emocje i stres potrafią doprowadzić do niepotrzebnej paniki. Dokładnie wtedy, gdy ważna jest koncentracja i jasne myślenie.

Ps. Ten wpis publikuję już po wdrożeniu poprawki i sprawdzeniu, że następnej niedzieli było już wszystko w najlepszym porządku:)

  • Zaremba – mój ulubiony head of product w Polsce.

  • Marcin Zaremba

    Czerwienie sie ☺️

  • Moosix

    Gruba akcja. Ostatnio mieliśmy podobnie, tyle że klient na iOS wysyłał kod waluty z małych liter a back-end błędnie spodziewał się tylko wartości z dużej litery. Eh .
    Jedna uwaga odnośnie artykułu, nie zgodzę się z tym, że właściciele Androidów rzadziej lub wolniej aktualizują aplikacje. Na iOS trzeba czekać od 5 do 14 dni na akceptację nowej wersji apki przez Apple. A potem kolejne kilka dni aż ludzie zaktualizuja aplikację. Więc średnio ten czas na iOS jest 2 razy dłuższy niż na Androidzie.

  • Marcin Zaremba

    Tak, ale gdy juz masz update to bardzo szybko wszystkie iosy przechodza na najnowsza wersje – chodzilo mi tutaj o szybkosc adopcji. Poza tym aktualizacjenappki w app store potrafia byc szybsze od wgrywania calkiem nowej appki (+ jest takze tzw. Szybka sciezka). Gdyby problem dotyczyl iosa w tym wypadku to nawet nie bralibysmy aktualizacji nawet pod uwage:)

  • Matt

    Widzę, że Paulina odegrała ważną rolę w tej historii :D gdzie poszliście na sałatkę? Bo chyba trochę długo na nią czekała :( (pytanie w 100% serio)

  • Marcin Zaremba

    W Think Love na Francuskiej – maja dobre rzeczy!

  • Wiktor Żołnowski

    Ciekawa historia i naprawde dobra reakcja! Takie bledy powinny byc jednak wykrywane przez dobrze napisane testy automatyczne.

  • Matt

    Dzięki, na pewno się tam wybiorę z dziewczyną ;)

  • Czyta się to jak Marsjanina. Ale ukłon za świetną akcję i rozwiązanie problemu.

  • Marcin Zaremba

    Zgadza się! Tak wlasnie bedzie sie teraz dzialo… Az do nastepnego bledu ktorego nie przewidzimy:)

  • Pingback: Zarządzanie kryzysowe w PizzaPortal – Marcin Aks Grochowina()