To, czego nie widać

Empiryzm zakłada, że źródłem poznania są doświadczenie. Doświadczenie są lepsze od idei, bo opiera się na sprawdzalnej, materialnej rzeczywistości.

To właśnie empiryzm leży u podstaw metodyk zwinnych, ze swoim słynnym „inspect and adapt”.

Empiryzm poznawczy trafia jednak na powien problem. Wprawdzie teoretycznie wszystko, co materialne można poznać empirycznie, ale nie do wszystkiego mamy (i chcemy mieć) praktyczny dostęp – to jednak nie powstrzymuje nas przed wydawaniem opinii.

Patrzenie tylko na powierzchnię wystarcza, aby mieć swój osąd. Ale pod spodem jest to, czego nie widać – węwnetrzna złożoność, która umyka.

Na własnej skórze się o tym przekonałem pracując nad PizzaPortal, gdy po roku pracy w zespole kilkanastu osób w trzech krajach zostałem skrytykowany za brak funkcji, która przecież jest łatwa we wdrożeniu. Ten sam mechanizm widziałem dzisiaj jak wypuściliśmy stronę zamow.itaxi.pl, gdzie dostaliśmy sugestię dodania kilku linijek kodu, aby strona lepiej wyglądała na komputerze.

Z perspektywy krytykującego to oczywista sprawa i szybka poprawka. Dla nas w sumie też, ale poza samym kodem musimy brać pod uwagę także:

  • zaplanowaną listę funkcji do wdrożenia,
  • ustalone priorytety biznesowe,
  • konkretną grupę docelową w głowie,
  • dług technologiczny, którym trzeba zarządzać,
  • uzgodniony proces testowania i akceptacji kodu,
  • dostępność zespołu programistycznego,
  • konieczność skupienia na tym, co jest dla nas najważniejsze,

… oraz kilka innych czynników, z których żaden nie jest widoczny na powierzchni (i nie powinien być).

1a66d8e4-fc83-40dc-9bbc-c19d0ed93197-501-000001b4dc0b29f5_tmp
xkcd tłumaczy to najlepiej

Często łapię się na tym, że krytykuję bezsensowne rozwiązania w różnych usługach. Zawsze z zewnątrz wydają się idiotyczne, ale gdy przepuszczam je przez filtr własnych doświadczeń to odechciewa mi się obgadywać je publicznie. Bo wiem, że efekt końcowy to wypadkowa decyzji i priorytetów, które są dla mnie niewidoczne.

Podobnie się czuję, gdy planuję nową super funkcję i ta wydaje się bardzo prosta do czasu konsultacji z zespołem, który odkrywa przede mną wewnętrzną złożoność problemów jakie nas czekają przy implementacji.

Rzeczy wydają się proste, gdy nie patrzy się na nie wystarczająco głęboko.

Długie ogony

Jesteśmy przyzwyczajeni do myślenia o długim ogonie jako czymś jednoznacznie pozytywnym.

Długi ogon daje nadzieje na znalezienie sobie niszy, która jest zbyt mała dla wielkich danego rynku, aby była interesująca, ale wystarczająco duża, aby zwalidować nową ideę biznesową bez realnej konkrencji. Mikrodziałalności mogą nawet nigdy z takiej niszy nie wyjść i ciągle satysfakcjonująco funkcjonować dzięki katalizującej roli Internetu i postępującemu minimalizowaniu kosztów marginalnych.


Długie ogony mają jednak swoją drugą stronę. Takiemu rozkładowi ulegają także elementy, których (technologiczna) obsługa może być nieproporcjonalnie kosztowna. Obsługa niezwykle rzadkiej kombinacji systemu operacyjnego i przeglądarki w najlepszym przypadku wymaga podobnego nakładu czasu co najpopularniejszej kombinacji, ale nie będzie generować podobnej liczby zamówień. W gorszych przypadkach problemy z replikacją błędów, przestarzałą technologią i dziurawą dokumentacją spowobują niepotrzebne marnotrawienie budżetu w imię pogoni za perfekcyjnym, „bug-free” produktem, który zadowoli 100% użytkowników. 

Z mojego doświadczenia wynika, że lepiej jest okresowo odcinać 20% „złego” ogona użytkowników i tak zaoszczędzone środki przeznaczyć na bardziej perspektywiczne działania. Wspomniane 20% użytkowników w większości nawet nie zauważy, że coś się zmieniło – ich przywiązanie do naszego produktu i tak jest iluzoryczne.

Z tej perspektywy arbitraż między „dobrymi” (koncentracja) i „złymi” (obcinanie) długimi ogonami wydaje się być dobrym sposobem na minimalizację długu technologicznego w organizacji.

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:)