Ruby on Rails w Fin-tech - Najlepsze Praktyki Programistyczne wg iRonin
Tworząc finansowe aplikacje internetowe nie ma miejsca na pomyłki. W naszym artykule o programowaniu systemu zarządzania leasingiem (Lease Management System) opartego na Ruby on Rails, znajdziesz najlepsze praktyki dotyczące pracy z systemami, w których pieniądze klientów są krytycznie ważne na każdym etapie kodowania, w każdym elemencie infrastruktury i o każdej porze dnia.
Projekty fin-tech wymagają rygorystycznej kontroli, gorliwości, wiedzy i najlepszych programistycznych praktyk
Jeśli mielibyśmy wskazać jeden przypadek, w którym skrupulatność i rygor są obowiązkowymi elementami w tworzeniu oprogramowania, to trudno znaleźć bardziej adekwatny przykład niż projekt fin-tech.
Kiedy stawką są pieniądze klientów, jeden błąd może pogrążyć reputację systemu.
Dzisiejszy artykuł pokaże, jak zapewniamy wysoką jakość, najwyższą wartość i najlepsze praktyki kodowania w Ruby on Rails pracując nad złożonym systemem zarządzania leasingiem dla amerykańskiego start-up'u z branży fin-tech. Przeczytajcie, czemu ten projekt dostarcza wielu wyzwań oraz jest źródłem cennych doświadczeń, a dodatkowo poznajcie wskazówki dotyczące najlepszych praktyk w branży finansowej.
Przedstawiamy Lease Management System
Powiedzmy, że chcecie kupić nowy telewizor, ale wciąż czekacie na następną wypłatę. Co robicie? Rezygnujecie z zakupu? Jedną z opcji na zdobycie nowego sprzętu bez konieczności czekania na fundusze jest kupienie go na raty. W ten sposób rozciągacie płatność na konkretny czas – w skrócie, kupujecie produkt na kredyt.
Nasz klient stworzył platformę dla tego typu sprzedaży ratalnych w Stanach Zjednoczonych. Składa się ona z dwóch systemów. Pierwszy, skierowany do przedsiębiorców to miejsce, gdzie klienci kupują produkty; drugi – Lease Management System (LMS) jest odpowiedzialny za tworzenie kredytów, zarządzanie ratami i wszystko, co związane z płatnościami użytkowników.
System dla przedsiębiorców zapisze i przechowa wszystkie potrzebne dane, a następnie przekaże je do LMS, który zawiera kalendarz wszystkich zaplanowanych płatności, wpływów gotówkowych, opóźnionych płatności, przedterminowych wpłat itp.
Wkracza iRonin: tworzenie, rozszerzanie, monitorowanie, ostrzeganie, naprawianie
Eksperci z iRonin pracują nad systemem zarządzania leasingiem, gdzie liczą się dwa ważne aspekty: duża dostępność i skalowalność. Im więcej osób korzysta z systemu - tym bardziej on się rozrasta; w rezultacie, niegdyś mała, tylko desktopowa aplikacja musiała zostać przepisana jako znacznie większa aplikacja internetowa.
Nasz zespół brał aktywny udział w migracji infrastruktury, testowaniu nowych wersji systemu, tworzeniu nowych, wydajniejszych funkcji, powiększaniu systemu, rozszerzaniu architektury systemowej IT oraz dostarczaniu feedbacku dla projektu zorientowanego na użytkownika.
Kiedy system był już gotowy, nasze główne zadanie polegało na monitorowaniu i ostrzeganiu oraz wprowadzaniu rozwiązań z zerowym czasem przestoju, aby zoptymalizować działanie systemu. Ponadto, naprawialiśmy wszystkie pojawiające się usterki, co pomogło w stworzeniu bardziej odpornego systemu. Codziennie przeprowadzane są kontrole spójności systemu leasingowego z zewnętrznymi platformami. Dzięki tym kontrolom jesteśmy w stanie niemal od razu zauważyć bugi lub niecodzienne aktywności i natychmiast zareagować.
Kiedy liczy się każdy cent, polegamy na sprawdzonych technologiach
Nasz wymarzony zespół technologii dla tego konkretnego oprogramowania dla usług finansowych zawiera:
- Ruby on Rails– nasz ulubiony framework dla aplikacji internetowych;
- PostgreSQL– sprawdzona w boju baza danych;
- Redis- open-source'owy magazyn danych, który działa w pamięci operacyjnej, używany jako baza danych, cache i broker wiadomości;
- Sidekiq– wykonuje zadania w tle dla procesów pisanych w Ruby;
- ElasticSearch – solidna wyszukiwarka tekstowa;
- Kibana– sprytny plug-in wizualizujący dane; współdziałający z ElasticSearch;
- Amazon Web Services – dla usług komputerowych w chmurze i hosting'u struktur IT (wewnętrznych i zewnętrznych);
- HoneyBadger – narzędzie zaprojektowane specjalnie dla developerów Ruby on Rails, które monitoruje wyjątki i przestoje;
- NewRelic– pomaga nam monitorować aplikację internetową i działanie struktury IT;
- Amazon S3– do przechowywania danych; kochamy go za skalowalność.
Dwa zespoły, 8 godzin różnicy i jeden cel
Nasz zespół składa się z kilku starszych specjalistów pracujących w Polsce, podczas gdy większość programistów naszego klienta znajduje się w USA – to 8 godzin różnicy! Pomyślicie, że to utrudnienie, a tymczasem różnica czasu pozwala nam na pracę nad systemem przez 24 godziny na dobę.
Zespół iRonin może bez przeszkód testować nowe funkcje, podczas gdy w USA jest noc i system nie jest obciążony. Wszystkie prace w tle oraz kontrole przeprowadzane są w godzinach nocnych, i jeśli coś się nie będzie zgadzać lub odpowiednio działać, to zespół programistów od razu to zauważy i naprawi. Ten nocny monitoring jest wygodny dla nas i bardzo opłacalny dla klienta! Kiedy budzi się rano, to system jest już sprawny i gotowy do działania.
Jak poradzić sobie z międzykontynentalnym projektem?
Pracujemy zdalnie z amerykańskimi firmami od samego początku działalności iRonin, co stawia nas w doskonałej pozycji, aby ciągle usprawniać metody komunikacji pomiędzy oddalonymi geograficznie zespołami. Aby być zawsze na bieżąco, skupiamy się na przejrzystej komunikacji w czasie stund-up'ów i sign-off'ów dotyczących postępów w przydzielonych zadaniach i ogólnego stanu systemu.
Wszyscy są dostępni bez przerwy na Slacku, w programach zarządzania projektami (Jira) oraz poprzez e-mail. Kilka razy w tygodniu zbieramy się na globalnej video-konferencji, w czasie której omawiamy bieżące sprawy, plany na przyszły rozwój produktu lub podejmujemy decyzje dotyczące architektury systemu.
Nasz głos zawsze się liczy – naszym pomysłom ufa klient oraz (według niektórych, przede wszystkim!) jego programiści. Jesteśmy w pełni zintegrowani z zespołem amerykańskim i czujemy się jak część rodziny dążącej do wspólnego celu.
Nasza komunikacja nie ogranicza się jedynie do zespołu klienta – rozmawiamy też bezpośrednio z developerami postronnych systemów, co przyśpiesza rozwój projektu. Zaangażowanie jest w tym wypadku kluczem do sukcesu.
Wyzwania złożonego projektu fin-tech
Projekty IT w technologii finansowej są niezwykle wymagające. W każdym przedsięwzięciu związanym z IT błędy systemowe męczą programistów, którzy muszą włożyć wiele wysiłku w ich odnalezienie oraz naprawę. W sektorze fin-tech bugi są jeszcze bardziej szkodliwe, gdyż związane są z bardzo delikatną sprawą – pieniędzmi konsumenta.
Projekt przy którym pracujemy jest złożony, zawiera wiele różnych funkcjonalności, przypadków użycia - także tych skrajnych. Niektóre ze scenariuszy bardzo trudno przewidzieć. Na przykład, jeśli opóźnieniu płatności użytkownika winna jest strona trzecia, firma nie będzie chciała obciążać go dodatkowymi karami. System musi być na tyle elastyczny, aby umożliwić łatwe radzenie sobie z podobnymi losowymi wypadkami.
Nasze tricki i wskazówki na sprawny rozwój systemu IT w fin-tech
Projekty w technologii finansowej nie są dla strachliwych – tam, gdzie liczy się każdy cent nie ma miejsca na pomyłki, bo one kosztują! Jak więc działać, by mieć pewność, że unikniemy błędów?
- Loguj wszystko– Ścieżki audytu są kluczem do przeprowadzenia dogłębnej analizy po-zdarzeniowej, jeśli cokolwiek stanie się z systemem. Loguj każdą aktywność użytkowników, każdą interakcję komponentów, każdą transakcję w bazie, każdy błąd lub problem. O wiele łatwiej jest naprawiać usterki i znajdować brakujące centy, kiedy wiesz dokładnie, co poszło nie tak.
- Nigdy nie modyfikuj zapisów o płatnościach– Zamiast tego twórz nowe zapisy, które poprawią błędy poprzednich.
- Zwracaj szczególną uwagę na mądre praktyki testowania– Każdy newralgiczny fragment kodu jest wielokrotnie testowany.
- Wszystkie wdrożenia przeprowadzaj w godzinach zmniejszonego ruchu– To jest dla nas szczególnie proste, dzięki położeniu zespołu iRonin w innej strefie czasowej! Wszystkie usprawnienia przeprowadzamy z zerowym czasem przestoju i upewniamy się, że każde z nich jest odwracalne. Nowe funkcje początkowo udostępniane są małej grupie użytkowników, później rozszerzamy je na cały system.
- Aktualizuj narzędzia i biblioteki.
Jak utrzymać system bezpiecznym i chronionym
Pracując przy projekcie fin-tech musimy zwracać szczególną uwagę na bezpieczeństwo. Nasz reżim ochronny dla tego oprogramowania obejmuje:
- Silne hasła
- Szyfrowaniedanych osobowych, również w rejestrach
- Upewnienie się, że nikt nie może skopiować danych produkcyjnych. Taka kopia może być stworzona, ale informacje wrażliwe zostaną zaszyfrowane lub zmodyfikowane przez skrypt do zrzucania danych
- Przeprowadzanie okresowych testów potencjalnych zagrożeńdla bezpieczeństwa w zewnętrznych bibliotekach
- Zatwierdzanie plików przed ich przetworzeniem– sprawdzanie ich rozmiaru, rozszerzenia i typu
- Dodawanie bezpiecznych nagłówków HTTP w celu uniknięcia różnorakich ataków, na przykład XSS (Cross-Site Scripting)
- Komunikowanie się z zewnętrznymi systemami używając UUID'ów dla danych i URL, zamiast uwidaczniania sekwencji ID (co może prowadzić do zagrożenia bezpieczeństwu systemu).
Ściąga dotycząca najlepszych praktyk w projektach fin-tech
Projekty w technologii finansowej to nie miejsce dla początkujących deweloperów. Do tej pracy będziecie potrzebować najlepszych z najlepszych.
Zobaczcie naszą ściągę z najbardziej trafnymi radami, jak nie namieszać w finansowych danych:
- Szybko zgłaszaj usterki i od razu reaguj
- Przeprowadzaj audyt
- Ciągle przeprowadzaj kontrole spójności
- Dane muszą być bardzo dokładne
- Nie lekceważ znaczenia ochrony i bezpieczeństwa danych
- Kontroluj i bądź właścicielem infrastruktury IT
- Ograniczaj dostęp do systemu z zewnątrz przy pomocy VPN-ów
- Używaj najbardziej zabezpieczonych algorytmów haszujących
- Szyfruj wrażliwe dane
- Nie zamieszczaj wrażliwych danych w logach
- Ograniczaj tempo przychodzących żądań HTTP
- Dostosuj dane wprowadzone przez użytkowników do założonego formatu
- Limituj ilość jednoczesnych sesji na jednym koncie
- Nigdy nie przechowuj sum pieniędzy w formacie zmiennoprzecinkowym - używaj liczb całkowitych (np. 12,44 USD zapisane jako 1244 centy)
Miękkie umiejętności też się liczą
Poza naszym technicznym doświadczeniem, wnieśliśmy do projektu również cenne umiejętności miękkie. Nie bez powodu klientowi zależało, żeby nad projektem pracowali tylko najlepsi doświadczeni deweloperzy. Potrzebne było spore doświadczenie w tworzeniu dużych systemów, nie tylko tych związanych z fin-tech.
Co takiego wyróżnia doświadczonego developerów?
- Doświadczenie w sprawnym rozwiązywaniu problemów – również z firmami zewnętrznymi, takimi jak dostawcy usług zewnętrznych
- Myślenie analityczne
- Zwracanie uwagi na detale
- Odpowiedzialność za własne działania
- Wytrwałość
- Samodzielność
Możemy z dumą potwierdzić, że zespół starszych specjalistów w iRonin posiada wszystkie te cechy i więcej. Trudne problemy i ambitne zadania traktujemy jako ekscytujące wyzwania i okazję do zdobycia nowej wiedzy i rozwinięcia dodatkowych umiejętności. Ponadto cieszy nas realny wpływ na projekt i możliwość oglądania efektów swojej ciężkiej pracy każdego dnia – to inspirujące!