← Wszystkie notatki

Mój zegar stresował znajomego. Zniknął w niecałą dobę

Sławek Łukjanow · · Nie jednym promptem · odcinek 8 · Read in English

Wieczór, telefon Marty brzęczy. WhatsApp od znajomej: "Hej. Mąż mówi, że liczenie czasu w aplikacji go stresuje 😂". I po chwili, żeby nie było wątpliwości: "W Zakupomacie".

Pierwsza myśl? Śmiech. Marta odpisała "Hehe czas mężowi odliczony na zakupach ;)". Druga myśl przyszła trochę później i już tak śmieszna nie była...

Zegar, który miał być zabawą

Kilka dni wcześniej, późnym wieczorem, wrzuciłem do Zakupomatu na listę pomysłów jedną linijkę: "Zegar odliczający czas zakupów???". Trzy znaki zapytania, bo sam nie byłem pewien, czy to ma sens. Następnego dnia zegar już był. Rusza po odhaczeniu pierwszego produktu na liście, tyka obok "Kupione", a po "Zakończ zakupy" gratulacje mówią, ile to trwało. Ot, ciekawostka.

Dzień później poszedł do sklepów w wersji 1.9.0. Razem z grą "Łap do koszyka!", 26 językami, widokiem skupienia, statystykami rodziny i ustawieniami. W "Co nowego" zegar dostał jedną, ostatnią linijkę.

I tu jest najlepsze. Marta zapytała jeszcze: "A jak gra? Grał?". Odpowiedź: "Nie. Chyba nie zauważył."

Gra - cały weekend pracy, kilka wersji balansu, osobny odcinek tego cyklu - niezauważona. Jedna linijka o zegarze - zauważona. Tylko nie tak, jak bym chciał 😂

Dlaczego to w ogóle problem

Bo zakupy z rodziną to nie wyścig. Ktoś stoi przy półce z jogurtami i zastanawia się, który brać, dziecko ciągnie w stronę słodyczy, a na telefonie obok listy tyka czas. 12:34... 12:35... 12:36... Dla mnie to była statystyka. Dla kogoś innego - bat nad głową.

Mogłem to potraktować jako żart. Ale żart jednej osoby to często coś, co myśli kilka innych, które nic nie napisały. Nikt nie wysyła maila do twórcy aplikacji, że "zegar mnie stresuje". Po prostu otwiera aplikację trochę mniej chętnie.

Marta odpisała więc: "W następnej wersji zrobi wyłączanie odliczania". "Zrobi", czyli ja. Zobowiązanie złożone w moim imieniu 😉

Złamałem własną regułę

Rano założyłem zgłoszenie i napisałem Claude'owi: dajemy możliwość wyłączenia, a może nawet domyślnie nie pokazujemy.

I tu Claude zrobił coś, za co go lubię. Zanim napisał linijkę kodu, zatrzymał się i zapytał. Bo kilka dni wcześniej zapisaliśmy w brainie projektu regułę (D-043): każde ustawienie domyślnie robi to, co aplikacja robiła przed nim. Kto nie zagląda do Ustawień, nie widzi żadnej różnicy. Zegar domyślnie ukryty to łamanie tej reguły - wprost.

Rozważyłem trzy drogi:

  • Przełącznik, zegar domyślnie włączony - zgodnie z regułą. Tylko że ten, kogo zegar stresuje, nigdy nie pójdzie szukać, jak go wyłączyć. Znajomy dalej by się stresował, tylko z przełącznikiem gdzieś w Ustawieniach.
  • Wyrzucić zegar całkiem - a są przecież ludzie (np. ja!), którzy go lubią.
  • Zapytać przy pierwszych zakupach - czyli kolejne okienko dokładnie wtedy, kiedy człowiek ma ręce zajęte koszykiem. Nie.

Wybrałem: zegar domyślnie ukryty, włączasz w Ustawieniach. Także dla tych, którzy mieli go już w 1.9.0. Kto go lubi, ten go włączy. Kogo stresował - już nie zobaczy.

Claude zaproponował jeszcze, żeby przy okazji schować czas na ekranie gratulacji. Tu powiedziałem nie. Podsumowanie po zakupach to coś innego niż odliczanie w trakcie - to już po wszystkim, nikt nie goni. Zostało.

Ważne jest dla mnie to, że wyjątek nie poszedł "po cichu". Jest zapisany jako osobna decyzja (D-052), z powodem i z tym, co mogłoby ją odwrócić. Reguły piszemy po to, żeby świadomie je łamać, a nie żeby udawać, że ich nie ma.

Pierwszy hotfix w historii

"W następnej wersji" brzmiało dobrze na WhatsAppie. Tylko że następna wersja to tygodnie zbierania funkcji. A zegar tykał w telefonach już teraz.

Od lipca w repo leży opisana procedura hotfixa: gałąź release/1.9.x odbita od wersji, która jest w sklepie, tylko z jedną poprawką, osobny numer wersji, wydanie i powrót zmian na główną gałąź. Opisana... i ani razu nieużyta 😮

Szczerze? Tym razem nie była nawet potrzebna. Na głównej gałęzi od 1.9.0 nie było w aplikacji nic poza tą poprawką, więc zwykłe wydanie dałoby dokładnie to samo. Ale właśnie dlatego to był idealny moment, żeby ją przećwiczyć. Na spokojnie, zanim przyjdzie prawdziwy pożar i nie będzie czasu sprawdzać, czy procedura w ogóle działa.

Więc pojechaliśmy: gałąź od tagu 1.9.0, przeniesiona poprawka, wersja 1.9.1, "Co nowego" w 26 językach (jedno zdanie, oznaczone jako "ze zgłoszeń"), build iOS wysłany do Apple, tag Androida, który sam buduje i wrzuca szkic do Google Play.

Po drodze kilka rzeczy, które warto było zobaczyć teraz, a nie w pożarze:

  • Bezpiecznik zadziałał. Claude chciał opublikować szkic w Google Play, a jego własny tryb bezpieczeństwa powiedział stop. Tak samo przy mergowaniu bez review. Ostatni klik do sklepu zostaje u człowieka - dopiero moje "Publikuj na Android" puściło wersję dalej. I bardzo dobrze.
  • Strona wie za dużo. Opis zegara na zakupomat.app zmieniłem razem z kodem. Gdybym go wdrożył od razu, strona mówiłaby o ustawieniu, którego w sklepie jeszcze nie ma. Claude to złapał i zmiana strony poszła osobno, na po wydaniu.
  • "Zamknięte" to nie "u ludzi". Zgłoszenie zamknęło się samo w momencie merge'a - zanim ktokolwiek dostał poprawkę.
  • Zapomniany krok. Wyszło, że wersja 1.9.0 na iOS nie trafiła na listę wydanych wersji, z której aplikacja wie, że jest w tyle i podpowiada aktualizację. Drobiazg, ale wyszedł tylko dlatego, że ktoś przeszedł całą ścieżkę od początku do końca.

Wynik

Wiadomość na WhatsAppie - wieczorem. Wersja 1.9.1 w App Store i w Google Play - następnego dnia wieczorem. Mniej niż doba.

Zegar żył w sklepie 4 dni. Teraz siedzi w Ustawieniach i czeka na tych, którzy lubią presję 😉

Co z tego zostaje

  • Decyzja D-052 w brainie projektu - wyjątek od reguły, z uzasadnieniem.
  • Ścieżka hotfixa, która przestała być teorią. Gałąź release/1.9.x zostaje na następny raz.
  • Lekcja, którą zapamiętam: najmniejsza zmiana w wersji potrafi być tą, którą ludzie odczują najmocniej. Gry nikt nie zauważył, zegar - tak.

Funkcja nie musi być błędem, żeby ją cofnąć. Wystarczy, że komuś przeszkadza w codzienności. A wtedy liczy się nie to, jak dobry był pomysł, tylko jak szybko umiesz go wycofać.


Co to znaczy dla Twojego zespołu: procedurę awaryjną warto przećwiczyć wtedy, kiedy nic się nie pali - przy małej, bezpiecznej zmianie. A własne reguły warto łamać jawnie: z zapisaną decyzją i powodem, a nie po cichu. W ANSLAN pracujemy tak samo - decyzje i wyjątki od reguł zapisujemy razem z powodem.

Zakupomat to aplikacja do wspólnych zakupów rodziny - darmowa i bez reklam: zakupomat.app. Zegar zakupów znajdziesz w Ustawieniach 🙂