Sytuacja
W LOQBOX pobieranie płatności było zarówno wyzwaniem związanym ze skalą, jak i odpowiedzialnością wobec klientów. Sekwencyjny proces potrzebował około dziesięciu godzin na obsłużenie mniej więcej 200 000 płatności. Trzeba było również zapewnić bezpieczne ponawianie operacji.
Jako Lead Developer zapewniałem przywództwo techniczne w dziewięcioosobowym zespole inżynierskim. Zainicjowałem modernizację, zbudowałem pierwszy proof of concept, koordynowałem szersze wdrożenie i odpowiadałem za uruchomienie oraz monitoring na produkcji.
Decyzje, które miały znaczenie
Oddzielić przygotowanie od wykonania
Rozdzieliliśmy proces identyfikowania i obliczania płatności od workerów, które je realizowały. Poszczególne płatności można było następnie kolejkować i przetwarzać współbieżnie.
Współbieżność musiała respektować limity operatora płatności. Współpracowałem z dostawcą bramki, aby zrozumieć te ograniczenia, oraz z działem finansowym, aby upewnić się, że systemy przetwarzające dalsze zdarzenia poradzą sobie z ich bardziej skoncentrowanym napływem.
Sprawić, by ponowienie oznaczało tę samą płatność
Wprowadziliśmy deterministyczne identyfikatory płatności. Niepewne lub powtórzone żądanie zachowywało ten sam identyfikator, dzięki czemu dostawca rozpoznawał tę samą logiczną płatność. Ta właściwość nazywa się idempotencją: powtórzenie operacji nie tworzy kolejnego skutecznego obciążenia.
Bezpieczne ponawianie i współbieżność były częścią tego samego projektu. Zwiększenie szybkości miało sens tylko wtedy, gdy mogliśmy zachować poprawne działanie w przypadku błędów żądań lub niepewnych odpowiedzi.
Skoordynować całą zmianę
Współpracowałem z zespołami Product, Finance, Marketing i DevOps oraz z zewnętrznym operatorem płatności. Wdrożenie potrzebowało planu operacyjnego, a nie tylko działającego kodu. Wspólnie obserwowaliśmy uruchomienie, w tym wysoko wolumenowy cykl pobierania płatności pierwszego dnia miesiąca.
Jak pracowaliśmy razem
Niezawodność zależy również od sposobu, w jaki zespół się uczy. W LOQBOX wspierałem praktyczne przeglądy kodu, testy, etapowe wdrożenia, monitoring i runbooki, a także coaching i wyciąganie wniosków z incydentów bez szukania winnych.
Dostosowywałem informację zwrotną do osoby i sytuacji. Prywatne rozmowy osadzone w konkretnym kontekście pomagały ludziom zrozumieć problem, zadawać pytania i przejąć odpowiedzialność za kolejny krok.
Co się zmieniło
Przetwarzanie około 200 000 płatności skróciło się z mniej więcej dziesięciu do około dwóch godzin. Niektóre cykle kończyły się jeszcze szybciej. Nowy sposób ponawiania zapobiegał traktowaniu powtórzonych żądań jako nowych, skutecznych płatności.
Krótsze okno pobierania płatności ograniczyło także czas, który inżynierowie poświęcali na nadzorowanie procesu. Rezultat połączył szybsze przetwarzanie z jaśniejszym modelem operacyjnym i lepszą ochroną klientów.
Co zabieram ze sobą
Niezawodność jest częścią produktu. Chcę, aby decyzje techniczne uwzględniały klienta, zespół obsługujący system oraz inne działy, które polegają na jego działaniu.