Przeczytaj wersję webową.

Zapewniaj jakość dzięki obserwowalności

2024-05-18

Cześć!

W ten ciepły majowy tydzień chciałbym was zabrać w podróż do krainy obserwowalności. Na tej wycieczce pokażę, jak praktyki dookoła monitoringu i prewencji pozwalają dbać o wysoką jakość waszych aplikacji.

W dwóch słowach wspominam również o nadchodzącej edycji szkolenia Tech Lead. Standardowo czeka na Ciebie również Inżynierska Prasówka. 😉

A więc w dzisiaj mam dla Ciebie:

Miłego czytania 😀


Inżynierska prasówka

Dzisiejszą Prasówkę rozpoczniemy od tematów dookoła produktywności, a zakończymy modelem Cynefin. Co w środku? Upadek Google, podejście do pracy w parach i ewolucję architektury monolitycznej, czyli same dobroci. Zapraszam!

  1. Sociotechnical Maestros with Gene Kim
    Johna Cutlera możecie kojarzyć z jego bloga, ale ostatnio uruchomił również podcast. W tym odcinku rozmawia z Gene Kim, autorem takich książek jak Accelerate czy DevOps Handbook. Powstała z tego świetna rozmowa o tym, w jaki sposób optymalizować pracę swojej organizacji.
    https://cutlefish.substack.com/p/sociotechnical-maestros-with-gene

  2. The Man Who Killed Google Search
    Temat wybitnie wysokopoziomowy. Co z tego wyciągnie inżynier? Świetne studium przypadku pokazuj w jaki sposób zmiany jakościowe są powolne, ale idą jak buldożer. Im idziesz dalej, tym trudniej zatrzymać spadek jakości. Ostatecznie nie ma już czego zbierać. Także znaj czym jest twoja jakość i umiej ją utrzymywać w trybie stałym.
    https://www.wheresyoured.at/the-men-who-killed-google/

  3. What if we rotate pairs every day?
    Jeśli mnie śledzisz dłużej, to wiesz, że nie pałam miłością do PR Review. I jako jedno z remediów proponuję pracę w parach. Tylko jak sprawić by nie pracować wciąż z tymi samymi osobami? Artykuł u Martina Fowlera opisuje wartościowy eksperyment dotyczący rotacji par. Po przeprowadzeniu zwiększył się ogólny poziom wiedzy, osoby podzieliły się najlepszymi pratykami, zmniejszyły się silosy. Warto wypróbować w swoim zespole.
    https://martinfowler.com/articles/rotate-pairs-experiment.html

  4. Evolution of Monolithic Systems
    Długi, ale zdecydowanie warty przeczytania artykuł o tym, w jaki sposób wychodzić poza ramy monolitycznych systemów. Większość takich postów tylko rzuca przykładami praktyk. Zacharias pokusił się o opisanie całej drogi, wraz z decyzjami jakie mamy do podjęcia i co możemy wziąć pod uwagę.
    https://chubernetes.com/evolution-of-monolithic-systems-c20156f06907

  5. Cynefin Is A GAMECHANGER For Software Developers
    Co oznacza, że tworzenie oprogramowania jest złożone? Jak to wpływa na naszą pracę i nasze plany? Dlaczego nic nie może być na czas? Dave Farley opowiada o tworzeniu oprogramowania i złożoności na podstawie modelu Cynefin. W mojej ocenie jest to najlepsze wprowadzenie do tego modelu – świetnie opisuje, dlaczego większość naszych problemów jest skomplikowana i złożone. I dlaczego należy pracować w małych partiach, aby szybko zbierać feedback z produkcji.
    https://www.youtube.com/watch?v=MRwZQGdllDY


Szkolenie Tech Lead

To już 4 edycja szkolenia Tech Lead? jak ten czas leci. 😉 Co pisali uczestnicy poprzednich edycji?

Prawdopodobnie jedno z najlepszych szkoleń w mojej karierze. Radek posiada ogromne zasoby wiedzy i doświadczenia. Jeśli ktoś przygotowuje się do liderowania, lub jest TL, to gorąco polecam.

W szkoleniu najbardziej podobała mi się jego aktywna forma. Każdy większy temat rozpoczynał się od zadania, które w mocny sposób aktywizuje grupę i pozwala głębiej zastanowić się nad omawianym problemem.

Organizacyjnie TOP. Radek miał wszystko bardzo dobrze zaplanowane. 💭

To chyba dobra rekomendacja, prawda? 😀

Dzięki szkoleniu nabierzesz umiejętności, które pozwolą Ci prowadzić pracę techniczną zespołu produktowego.

Zalety szkolenia:

  • Mała grupa - max 8 osób.
  • Dużo praktyki i zadań.
  • Sprawdzone i rekomendowane zagadnienia.
  • Masa materiałów dodatkowych.

Plan szkolenia - 5 sesji x 4 godziny:

  • Drivery biznesowe i architektoniczne
  • Projektowanie architektury za pomocą modelu C4
  • Projektowanie procesów za pomocą Event Storming Process Level
  • Ocena projektu i rozwiązania + określanie ryzyk
  • Definiowanie planu dostarczania

Startujemy 7 lipca i spotykamy się co tydzień.

👉 Zapisz się już dziś 👈

A jeśli masz jakiekolwiek pytania odnośnie do szkolenia - zadaj je w odpowiedzi na tego maila. Proforma, rezerwacja miejsca itd. Postaram się odpowiedzieć natychmiastowo 🚀.


Jak obserwowalność zapewnia jakość

W ramach poprzedniego newsletteru pisałem czym jest obserwowalność i jak można ją rozwijać w swoim produkcie - Niezawodność i obserwowalność. Dziś nieco pogłębimy te tematy.

Jeśli czytałeś mojego ebooka „Drivery architektoniczne" to pewnie znasz tę grafikę – atrybuty jakościowe.

IMG1.jpg

Jednym z wspominanych atrybutów tutaj jest obserwowalność. I możesz zadać słuszne pytania:

  • Czy obserwowalność wpływa w ogóle na jakość?
  • Jak miałaby zapewniać jakość?
  • Jak obserwowalność wpływa na mój produkt i klientów?

I owszem, obserwowalność bezpośrednio nie wpływa na jakość. Jednak pośrednio może wpływać tak mocno, że w ostateczności nie będzie Ci brakowało niczego poza obserwowalnością.

Spójrzmy najpierw na standardowe zapewnianie jakości – przez testy.

Nie ma Cię w newsletterze?
Zapisz się na radekmaziarka.pl

Testy jako jedyna metoda zapewniania jakości

Często w zespołach pokutuje myślenie, że jakość = testy. Kiedyś nawet takie było postrzeganie roli testera w zespole – że to on/ona dba o jakość, cała reszta zaś klepie kod.

Nawet przyjmując, że w zespole testują wszyscy (mam nadzieję, że tak właśnie postępujecie) to można zwrócić uwagę na cały szereg problemów z tym związanym:

Nie wszystko jesteś w stanie przetestować

Istnieje szereg sytuacji w których nie da się przetestować wszystkich przypadków, lub jest to zbyt drogie do implementacji. Przykładowo:

  • Testy musiałyby iść po E2E, które są wolne.
  • Przypadków jest za dużo, aby napisać do nich wszystkich testy.
  • Systemy zewnętrzne mogą działać niedeterministycznie i rozwalać nam testy.
  • Trudno jest zasymulować skrajne warunki – np. DDoS, awarię środowiskową.

Weźmy na tapet przypadek z życia wzięty:

  • Zakładając, że posiadamy 12 flag konfiguracyjnych, z których każda ma 4 wartości.
  • A jednocześnie to są konfiguracje z 3 różnych zewnętrznych serwisów.
  • Ostatecznie mamy 4^12 = 16 777 216 scenariuszy testowych.
  • Uruchomienie tych scenariuszy do końca zależy od nas, bo konfigurowane są poza naszym systemem.

Całościowe testy takiego scenariusza mogą być albo bardzo kosztowne do napisania, albo „kruche" – drobna zmiana rozsypie cały system.

Testujemy to, o czym wiemy

Rozwińmy zjawisko, które zacząłem opisywać wyżej.

Poza przypadkami, o których wiemy, istnieje szereg zdarzeń, które umykają naszej percepcji. Nie można nie zacytować tutaj Donalda Rumsfelda i jego Unknown Unknows 😃

IMG2.jpg

To doskonale wyjaśnia, dlaczego nie przetestujemy tych przypadków przed wdrożeniem. Tutaj oczywiście pomóc może solidna doza analizy, eksploracji i brainstormingu. Ale jedynie do pewnego stopnia. Nie siedzimy w głowie naszych klientów. Tym bardziej, jeśli jest ich 10/100/1000 razy więcej niż “naszych”.

To sprawia, że przypadki użycia przeciekają nam przez sito testowe i ostatecznie to dopiero klienci zweryfikują je na produkcji.

Testujemy funkcjonalnie, atrybuty jakościowe nam umykają

To co testujemy manualnie i automatycznie w 95% przypadków będzie skupione na pracy funkcjonalnej. Jednak konia z rzędem temu, kto będzie w stanie za pomocą testów przed wdrożeniem przetestować:

  • Konfigurowalność– jak wiele czasu użytkownicy poświęcają na to by dokonfigurować system pod swoje potrzeby.
  • Odporność– ile sumarycznie jest niedokończonych procesów biznesowych przez błędy systemów zależnych.
  • Dostępność– w jak wielu sytuacjach system nie odpowiadał na żądania użytkownika.
  • Wielojęzyczność– ile treści nie zostało przetłumaczonych dla użytkowników.

Moglibyśmy tak dalej.

Bez obserwowania systemu nie jesteśmy w stanie uzyskać dokładnej informacji o tym jak pracuje. To sprawia, że:

  • Zamiast posługiwać się konkretami, jesteśmy zdani na własne przeczucie.
  • Możemy łatwo przeoczyć stopniowy spadek jakości.

Nowoczesne zapewnianie jakości

Szersze spojrzenie na zapewnianie jakości się po prostu opłaca. Aby uzyskać tę perspektywę, możesz wykorzystać Agile Testing Quadrants autorstwa Janet Gregory i Lisa Crispin:

IMG3.jpg

Po lewej stronie mamy opisane znane nam techniki testowania. Jednak to są praktyki, które prowadzą nas podczas procesu dostarczania oprogramowania. Pomagają nam zadbać o jakość, zanim jeszcze kod pojawi się na produkcji.

Zwykle jednak zapominamy o drugiej stronie – o praktykach, które powiedzą nam jak pracuje nasz produkt.

Cytując autorów:

Even with this testing, there is no way to replicate every possible scenario that customers will do with your application. So, teams also need to keep an eye on production usage with monitoring dashboards and observability tools, so they can find and fix issues before customers are affected by them.

Monitoring i obserwowalność są kluczowymi praktykami, które budują jakość naszych produktów – przejdźmy więc ponownie przez argumenty przytoczone wyżej.

Testujemy co warto testować i obserwujemy resztę

Na etapie projektowania można podjąć decyzję, kiedy i w jaki sposób przetestować dany przypadek użycia:

  • Część przypadków testujemy automatycznie, ponieważ czujemy, że są dla nas kluczowe.
  • Część przypadków obserwujemy, bo są zbyt drogie do przetestowania bądź zbyt nieliczne by się nimi przejmować.

Dopiero gdy nasza hipoteza dookoła częstotliwości występowania przypadków okaże się nieprawdziwa, zaczynamy się skupiać na nich bardziej.

Obserwujemy to czego nie przewidzieliśmy

Dodatkową zaletą tej metody jest to, że jesteśmy w stanie szybko wychwycić przypadki nietypowe, o których sami nigdy byśmy nie pomyśleli. Dowiemy się, że użytkownicy klikają tam, gdzie nie trzeba, wpisują dziwne dane, czy crashują system w zupełnie abstrakcyjny sposób.

Gojko Adzic przygotował swego czasu niesamowitą prezentację o tym jak powiększył swój produkt 500 razy tylko dzięki temu, że zauważył nietypowe zachowania swoich użytkowników.

IMG4.jpg

Tego nie da się przetestować. To trzeba zobaczyć 😃

Obserwujemy atrybuty jakościowe

Obserwowalność jest dosknałą bazą do badania wskaźników jakościowych naszego produktu:

  • Konfigurowalność – zbieramy informacje co konfigurowano i ile to trwało.
  • Odporność – monitorujemy system zewnętrzny i liczbę problemów przez niego spowodowanych.
  • Dostępność – liczymy czasy odpowiedzi na zapytania klienta i timeouty.
  • Wielojęzyczność – znajdujemy wszystkie klucze, które zostały wyświetlone bez tłumaczenia.

Dostajemy więc dokładną informację o tym jak nasz system pracuje i czy z wymaganą jakością.

Zyskujemy na prędkości

Dodatkowym plusem jest zauważalne przyspieszenie prac.

W przypadku błędów na produkcji jesteśmy w stanie o wiele szybciej je zauważyć i od razu zareagować, np. cofnąć zmianę w całości.

Jak to pisali autorzy książki Continuous Delivery:

Assume that you may break something that will take more than a few minutes and know what to do to revert the changes and get back to the known-good revision in version control.

Efekt? Błędy na produkcji będą mniej wpływać na klientów. A to wpłynie pozytywnie na postrzeganą jakość.

Ale, aby to osiągnąć, trzeba mieć dobrą obserwowalność produktu.

Rozwiązania

Nie chcąc zostawiać Cię bez praktycznego zastosowania, omówmy przykład e-commerce i 2 obszary jakościowe:

  • Internacjonalizacja - chcemy by klienci mogli bez problemu korzystać z systemu w swoim języku.
  • Odporność na błędy - system obsłuży proces zakupowy, nawet jeśli bramka płatności nie zadziała.

Przejdziemy przez 3 elementy:

  • Kryteria
  • Monitoring
  • Prewencja

Miary i kryteria

Pierwszym obszarem, na którym nam zależy jest określenie, co chcemy obserwować i jak określimy, że to co obserwujemy jest zagrożeniem dla jakości.

Miarami będą więc:

  • Internacjonalizacja
    • Braki w tłumaczeniach tytułów i labelek - idealnie 0.
    • Braki w tłumaczeniach produktów - maksymalnie 1/100.
  • Odporność na błędy
    • Niedostępność bramki zewnętrznej - system zaproponuje inną bramkę, lub płatność później.
    • Churn klientów - w przypadku błędów, proces będzie kontynuować przynajmniej 95% klientów.

Monitoring i alerty

Następnym krokiem jest zdefiniowanie i wbudowanie odpowiedniego systemu monitorowania jakości. Możemy to robić w formie aktywnej i pasywnej:

  • Aktywnie – samemu sprawdzamy i symulujemy określone przypadki na produkcji, a następnie zbieramy dane.
  • Pasywnie – zbieramy informacje o tym jak pracują nasi użytkownicy.

Gdy tylko przekroczymy zdefiniowane progi, powinniśmy poinformować zespół i przystąpić do rozwiązywania problemu.

Można tutaj też zwrócić uwagę na błąd przeżywalności – jakich informacji nam brakuje i na ich podstawie wnioskować.

Przenosząc to na omawiamy e-commerce:

  • Odporność na błędy
    • Testy procesu zakupowego z wykorzystaniem dummy usera.
    • Dashboard z wyliczaniem % klientów, którzy kontynuują pracę / odpadają.
    • Logi z informacjami, kiedy nie zadziałał system płatności.
    • Alerty, gdy system zewnętrzny spowodował więcej niż 5% błędów w zdefiniowanym zakresie czasu.
  • Tłumaczenia
    • Zbieranie informacji jakie klucze nie mają wartości.
    • Dashboard z brakami w tłumaczeniach do kategoryzacji – obszar funkcjonalny, język, rynek.
    • Policzenie ilości kluczy/języków/rynków, które nie są wykorzystywane.
    • Alertowanie braków w tłumaczeniach.

Prewencja

Na końcu można się jeszcze zastanowić w jaki sposób możemy automatyzować prewencję. W większości przypadków lepiej jest pokazać / zrobić cokolwiek, nawet coś niedoskonałego niż nie zrobić niczego.

W przypadku e-commerce może to wyglądać następująco:

  • Odporność na błędy
    • Przełączamy się na innego providera płatności + ukrywamy niedziałającego.
    • W przypadku większej awarii wyłączamy funkcję ponawiania płatności i dajemy możliwość zapłacenia po zakupie.
  • Tłumaczenia
    • Uruchamiamy moduł automatycznego tłumaczenia na podstawie klucza i tłumaczenia bazowego.
    • Dodajemy flagę z informacją, że treść jest przetłumaczona maszynowo + opcja by użytkownik ręcznie ją zaakceptował.

Podsumowanie

Dróg do osiągania jakości za pomocą obserwowalności jest wiele. Ale pierwszym krokiem jest zawsze zaakceptowanie tego, że obserwowalność może wpływać na jakość. I mam nadzieję, że do tego Cię przekonałem 😊

Daj znać w odpowiedzi jakie są Twoje osobiste praktyki dookoła obserwowalności i w jaki sposób wspierają ulepszanie jakości!


📧 Prześlij dalej

Dzięki, że doczytałeś(aś) do końca. 😊

Wszystkie poprzednie wydania newslettera są dostępne tutaj.

Jeśli spodobał Ci się mój newsletter, prześlij go proszę osobom, którym też mógłby się spodobać. Z góry dziękuję.

A jeśli nie jesteś jeszcze w newsletterze, to zachęcam do zapisania się.

Polecam się na przyszłość!
Radek Maziarka

Radek Maziarka
"Inżynierskie podejście do produktów cyfrowych."

P.S. Co myślisz o tym newsletterze? Odpisz :)