Co to jest stos technologiczny?

18 august 2022
Jakub Rojek Jakub Rojek
Zdjęcie autorstwa Gabriel Freytez z Pexels (https://www.pexels.com/pl-pl/zdjecie/assorted-iphone-lot-341523/)
Categories: Industry, Programming

W software house'ach, podobnie jak w innych zorganizowanych grupach programistycznych, same umiejętności kodowania nie są wystarczające. Nawet najlepsi programiści nie muszą oznaczać sukcesu, jeśli zostaną zostawieni sami sobie i dostaną pełną dowolność. Dzieje się tak z wielu powodów - potrzeby kogoś, kto będzie "trzymał ster" i właściwy kierunek rozwoju projektu, braku osoby do rozmów z klientem oraz partnerami, ale także niekiedy ze względu na zbyt... ambitne charaktery. Programiści w większości uwielbiają sprawdzać nowe technologie, języki, frameworki, a do tego potrzebują nowych projektów lub odrębnych zadań. Czasami takie eksperymenty są wskazane, ale czasami wręcz przeciwnie. Zresztą pisaliśmy o tym w artykule o technologicznych pistoletach.

Innym powodem, dla którego należy pilnować programistów, jest chęć utrzymania standardów i niedopuszczenie do sytuacji, w której zespół w każdym projekcie korzysta z innych narzędzi tylko dlatego, że miał taki kaprys. Oczywiście, gdy istnieje odpowiednie uzasadnienie, to należy rozważyć wprowadzanie nowych elementów technologii, jednak zazwyczaj przysparza to więcej problemów niż pożytku:

  • konieczność edukacji wszystkich członków zespołu w zakresie danego narzędzia,
  • konieczność aktualizacji i utrzymywania licencji danych usług,
  • dłuższy czas wprowadzenia nowej osoby do danego projektu (nie może wykorzystać wiedzy z poprzedniego),
  • bardziej sfragmentowana i skromniejsza wiedza ogólna dotycząca danej technologii.

Oczywiście, z drugiej strony można powiedzieć, że w ten sposób rozszerza się kompetencje zespołu i znajomość narzędzi. To jest prawda, ale jednak tego typu działania nie mogą być przeprowadzane gwałtownie, z projektu na projekt, a istnieją osoby, które najchętniej wywracałyby technologie do góry nogami przy każdej aplikacji. Dlatego firmy definiują coś, co nazywa się stosem technologicznym (ew. z angielskiego stackiem technologicznym).

Jest to spis technologii i narzędzi wykorzystywanych w firmie. Niesie on ze sobą wiele zalet. Przede wszystkim pozwala ustandaryzować wiedzę, jaką powinni nabyć i rozszerzać programiści pracujący w danym środowisku. Z jednej strony nakłada to pewne ograniczenia, ale z drugiej - pozwala zwiększyć prawdopodobieństwo, że członkowie zespołu nie zostaną sami ze swoim problemem, a tym samym nie zostaną zablokowani przy realizacji swoich zadań. W dodatku skłania do pogłębienia wiedzy w danym zakresie, a nie poznawania wielu bibliotek po łebkach.

Ponadto, opisanie stosu technologicznego (przynajmniej w części) pozwala stworzyć listę kompetencji technicznych przedstawianą klientowi. Bardzo wiele osób, przeglądając stronę internetową software house'u, zwaraca uwagę na techniczne aspekty - trochę z ciekawości, a trochę dlatego, że może to świadczyć o zaawansowaniu technicznym organizacji. Z pewnością zauważyliście, że my na naszej stronie również mamy taką sekcję.

Dodatkowo, z oczywistych względów jest to ciekawa informacja dla kandydatów do pracy i niejednokrotnie, na prośbę rekrutowanego, omawialiśmy używane technologie podczas rozmów kwalifikacyjnych. W końcu każdy chce wiedzieć (choćby mniej więcej), z czym będzie się mierzył i co warto sobie przyswoić przed wejściem do firmy. Nie jest to wymagane, ale wiadomo, że dobre przygotowanie pomaga w utrzymaniu spokoju psychicznego w nowym środowisku.

Oczywiście, stos technologiczny nie oznacza, że zespół jest do niego ograniczony - ta lista nie zawiera kompletu technologii wykorzystywanych w firmie. Jeśli organizacja, która operuje głównie w technologiach związanych z Node.js użyje w jednym projekcie Javy z konieczności, to nie staje się ona automatycznie składnikiem stacku. Spis może też zawierać narzędzia niewykorzystywane bezpośrednio w samym oprogramowaniu, ale ważne dla zespołu - system do zarządzania zadaniami, obsługi repozytoriów, komunikaty itd. Są to jednak już raczej wytyczne wewnętrzne - nadal najważniejsze są języki oprogramowania oraz biblioteki lub frameworki.

Skoro stos technologiczny nie zawiera wszystkiego, z czym firma zetknęła się przy dotychczasowych projektach i powinien dotyczyć tylko domyślnych technologii danej organizacji, to czy czasem nie będzie on dość skromny? To zależy od wielkości firmy. Przede wszystkim, stos powinien zawierać narzędzia, które w pełni obejmują zakres usług programistycznych. Z tego powodu u nas widzicie Angulara dla frontendu oraz Yii 2 dla backendu, a dodatkowo Ionic dla aplikacji mobilnych. To jednak nie oznacza, że nie wykorzystujemy innych komponentów - gdy spojrzycie na nasze portfolio, to zobaczycie dodatkowo NestJS, który stanowi backende w Feedybacky. Jednak do tego, aby NestJS stał się standardem w firmie, droga jest jeszcze kręta oraz wyboista. Nie jest powiedziane, że daleka, ale nie jest to coś, co proponowalibyśmy klientom już teraz. Co nie zmienia faktu, że firma może gromadzić wiele podobnych technologii w swoim stosie i dostosowywać je do sytuacji.

Pozostaje zatem pytanie - kiedy stos technologiczny ulega zmianie? Na pewno nie są to gwałtowne modyfikacje, ale jednak następują. Nie jest bowiem prawdą, że stos powinien być stały, gdyż oznaczałoby to, że zespół się nie rozwija i nie idzie z duchem czasu. Nie ukrywajmy, że technologie, którymi przedstawialibyśmy się kilka lat temu byłyby inne. Natomiast tak, jak wspomniałem - te zmiany nie są raptowne i wynikają z wielokrotnego i dłuższego korzystania z danego narzędzia oraz jego oceny pod kątem między innymi:

  • użyteczności dla tworzonego oprogramowania,
  • łatwości i dostępności użycia (np. w powszechnie występujących konfiguracjach),
  • dojrzałości, dostępnej dokumentacji oraz społeczności,
  • wsparcia producentów i twórców bibliotek,
  • integracji z innymi narzędziami.

Jak w takim razie znaleźć miejsce na wypróbowanie nowej technologii w firmie, jeśli terminy gonią, a tworzone oprogramowanie powinno być stabilnie? Dróg jest kilka:

  • wprowadzić jeden nowy komponent (biblioteka/moduł/element architektury itd.) naraz oraz obserwować, co i jak się zmieniło,
  • wykorzystać okazję przy projekcie wymagającym specyficznej technologii do jej poznania,
  • zidentyfikować miejsce na poboczny projekt pomagający firmie i tam sprawdzić nowe rozwiązania.

Jako firma przebyliśmy każdą z tych dróg i pewnie jeszcze nieraz to zrobimy. W jednym z projektów uznaliśmy, że bardziej sprawdzi się PostgreSQL niż standardowo używany MySQL, więc bardziej zaprzyjaźniliśmy się z systemem do zarządzania bazą danych z logiem niebieskiego słonia i staliśmy się w nim bardziej kompetentni. W innej aplikacji musieliśmy wziąć pod uwagę obsługę danych (wraz z ich analizą) przybywających na żywo, do czego najlepiej nadawała się (i była też związana z pracą klienta) biblioteka pandas, co oznaczało wprowadzenie Pythona i przy okazji frameworka Tornado. A ostatnim przykładem jest wspomniany już Feedybacky jako projekt poboczny, który przy okazji chcieliśmy wypróbować do testów nowego backendowego frameworka, NestJS-a.

Rzadziej mówi się o stosie technologicznym w kontekście konkretnego projektu, ale i to się zdarza, jeżeli myślimy o dużych przedsięwzięciach. Tym niemniej, to pojęcie najczęściej związane jest z całymi firmami i jego wielkość może być różna, proporcjonalna do rozmiaru software house'u. Zawsze ujawnienie konkretnego stosu jest bardzo ciekawą informacją i to dla wszystkich stron - programistów, zarządzających, handlowców, klientów oraz kandydatów. Każdy lubi widzieć, co jest w "bebechach".

Pozdrawiam i dziękuję - Jakub Rojek.

We like to write, even a lot, but on a daily basis we develop web and mobile applications. Check some of the programs we have made.

About author

Jakub Rojek

Lead programmer and co-owner of Wilda Software, with many years of experience in software creation and development, but also in writing texts for various blogs. A trained analyst and IT systems architect. At the same time he is a graduate of Poznan University of Technology and teaches at this university. In his free time, he enjoys playing video games (mainly card games), reading books, watching american football and e-sport, discovering heavier music, and pointing out other people's language mistakes.

Jakub Rojek