God save the production!

Post opublikowany na LEANQA.PL

… czyli czego nauczyła mnie o produkcie naprawa spłuczki wc

a

Z jakiegoś powodu (bliżej mi nieznanego) fabuła dzisiejszej historii znowu sięga swego początku do toalety (sic!).

Pewnego dnia zaczęło cieknąć ze spłuczki, to znaczy, jesteś w toalecie, odbyto rytuał, chcesz go zakończyć z klasą, naciskasz guzik i … nie ma wody. W zasadzie to już nie jest wyciek pamięci, gdzie wystarczy zrestartować usługę. To już jest awaria.

Prawda jest taka, że ciekło od dawna, ale w końcu rozkręciłeś spłuczkę i wziąłeś się za to porządnie, przeczyściłeś, dokręciłeś, rozmontowałeś, zmontowałeś. Ruszałeś coś, czego nie powinieneś. Ciekło, leciutko. Teraz nie ma w ogóle wody. Twoja produkcja stanęła?

Ok. Spokojnie. Przecież jak każdy chłop domu masz przy sobie gumkę od majtek i WD-40 oraz plastelinę. Właśnie przypomina Ci się, że ciekło już od dawna, ale miałeś to w d… bo wystarczało poruszenie spłuczki, opukanie, włącz/wyłącz – zawsze jakiś workaround wchodził.

Pierwsze co robisz – wszyscy mają opuścić mieszkanie w szalupach! (potrzebujesz się skupić). Masz! Wymyśliłeś, przecież nie musisz tego naprawiać dzisiaj, zakręcisz zawór i przejdziemy na sterowanie ręczne (wiadro z wodą). Wołasz, wszystkich i radośnie oznajmiasz swoim użytkownikom, że biznes uratowany, można robić swoje – niestety nie licz na docenienie swojej wspaniałomyślności 🙂 Druga Twoja myśl – w zasadzie, po co jest ta spłuczka, tyle lat ludzie żyli …i w lesie robili (ok, nie idź tą drogą :)) Podejmujesz jednak większe środki – zalepiasz dziurę gumą od majtek … napuszczasz wody – działa. Well done! Ha! Ale jestem kozak, phi co tam taka spłuczeczka.

Pierwszy test jednak okazał się zbyt optymistyczny, kolejne spłukiwanie przelewa wodę (coś się poruszyło podczas naprawy, jakaś idealna hiperpozycja została naruszona, tj. odpadł kamień). Ok, na razie tak zostaniemy, będziemy manualnie odkręcać zaworek przed spłukiwać i zakręcać po – przynajmniej wiadomo, że zużyjemy dokładnie tyle wody, ile powinno, a nie jakieś tam pół spłuczki na paproszki.

Twoi użytkownicy jednak chodzą niezadowoleni, podejmujesz się w kolejnym kroku (bardziej przemyślanym i zaplanowanym) refaktoryzacji kluczowych elementów, a w zasadzie ich podmianę na nowe komponenty. Sztywna architektura, sprawia, że podmiana spłuczki ukazuje błąd w pływaku, sama wymiana powoduje, że zaczynają przeciekać śruby, które nigdy nie przeciekały. Ratujesz się silikonem i … gumką od majtek. Wymiana pływaka … jasne, ale jak widzisz, że masz odkręcić kolanko od rury doprowadzającej wodę i inną śrubę mocującą, to wiesz, że Twoja produkcja może stanąć na dłużej niż dzień. To nie są luźne powiązania, ruszasz jedno, naruszasz drugie.

Koniec końców długa przygoda, która rozpoczęła się od próby naprawy irytująco cieknącej wody (czasami), kończy się na wymianie prawie wszystkich elementów – prawa Murphiego? Można było to przewidzieć?

Myślę, że gdyby nie była to spłuczka w domu, od której użytkownicy są uzależnieni – odeszliby do konkurencji. Produkcja była zagrożona kilkukrotnie, wraz z ryzykiem eskalacji awarii (powódź) na resztę łazienki. Ok, czas na retro i wnioski do software`u.

Co poszło dobrze?

  • Nie rzuciłem się z motyką na słońce i nie rozkręcałem w amoku wszystkiego, starałem się element po elemencie naprawić i testować, nawet jak psułem więcej, to “produkcja” działa – mniej lub efektowniej, ale działała.
  • Zanim podjąłem kroki, zastanowiłem się ile metrów gumki od majtek i sznurka oraz silikonu mam w domu i w razie gdy pójdzie coś nie tak, co będę mógł uratować a czego nie.
  • Stopniowa eksploracja z umiarkowanym ryzykiem pozwoliła mi zrozumieć, jak to razem działa (architektura).
  • Utrzymana produkcja.

Co poszło nie tak?

  • Nie przygotowałem się ani czasowo, ani materiałowo pod dużą naprawę (brak estymacji).
  • Z początku działałem chaotycznie i zbyt optymistycznie, licząc, że uda się obejść bez wymiany grubych elementów, starałem się lepić dziury, niż podejść do tematu poważnie – straciłem na to sporo czasu, a efekt był taki, że pogorszyłem sytuację.
  • Nie wziąłem pod uwagi ryzyk, które się zmaterializowały.
  • Nie przeanalizowałem dokładnie architektury i wszystkich zależności co poskutkowało tym, że jak naprawiłem jeden element, to psuło się w innym miejscu (ok, tak serio to ciężko było przewidzieć, że po latach użytkowania, kamień na śrubach robi szczelność :)).

Moje przemyślenia w odniesieniu do produktów oprogramowania

Być może poniższe przemyślenia nie wychodzą jednoznacznie z mojej przygody ze spłuczką, jednak doprowadziły mnie do tego miejsca, że zacząłem zadawać sobie pytania i stawiać wnioski:

  • Działanie produkcji jest najważniejsze – szczególnie jej kluczowej funkcjonalności
  • Traktuj ryzyka poważnie – czy jesteś gotowy na ich materializację w kontekście zatrzymania produkcji?
  • Jak długo Twoi klienci pozostaną przy Tobie, jeżeli staniesz? Jaki jest Twój maksymalny downtime.
  • Poprawa “małego” błędu, który jest denerwujący (ale użytkownicy przyzwyczaili się do niego) może kosztować Cię bardzo dużo – szczególnie jeżeli testujesz na produkcji – może czasami nie warto od górnie wprowadzać tej zmiany, tylko sprawdzić na wybranej grupie (testy A/B).
  • Jednocześnie “mały” błąd może być tak uciążliwy, że użytkownicy zaczną odchodzić do konkurencji – tutaj się kłania badanie aktywności użytkowników na naszych “endach”, ile i gdzie spędzają czasu, w jakich punktach mają problemy itp.
  • Refaktoryzacja w sztywnej architekturze i kodzie odziedziczonym wiąże się z bardzo dużym ryzykiem i kosztami – zanim do niego podejdziesz, pokuś się o głębszą analizę z uwzględnieniem czynnika kosztów, kiedy naprawa jest droższa od wymiany komponentu na nowy.
  • Czy Twoja architektura jest na tyle elastyczna, że pozwala na łatwe “wymiany” /podmiany poszczególnych komponentów/zależności, a kod na tyle czysty, że jest możliwy jego refactoring, czy są testy, które uchronią Cię przed wpadką?
  • Bez testów nawet małe zmiany w kluczowej funkcjonalności wiążą się z ryzykiem zatrzymaniem produkcji.
  • Zastanów się, w jakim ekosystemie działasz, ile jest zależności i zmiennych, czy nie zależysz od czegoś zbyt mocno, w taki sposób, że zmiana w tej zależności spowoduje, że Twój biznes stanie?
  • Twój ekosystem to też infrastruktura, w jakiej się wystawiasz – jej czas dostępu, sposób utrzymania, koszty, jego rozwój – jak to wpływa na Ciebie? Czy nieoczekiwane podbicie wersji Javy na Twoim środowisku jest ok?
  • Jakie masz alternatywy gdy dostawca usługi A którego dnia się zwinie?
  • etc. miejsce na Twoje przemyślenie np. “Decu, ty to nawet spłuczkę potrafisz zepsuć 😉

Jak jest u Ciebie?

Zdajesz sobie sprawę, jak bardzo trywialna rzecz może sprawić, że jutro Wasz system stanie? Zastanów się nad tym przez chwilę i daj znać w komentarzu.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.