iTechArt logo

Dlaczego agenci wsparcia technicznego mogą być dobrymi deweloperami?

Development & QA

Zaczynając swoją przygodę z IT 10 lat temu na wewnętrznym Service Desku jednego z dużych operatorów komórkowych nie spodziewałem się, że los skieruje mnie na drogę tworzenia oprogramowania. Rozwiązując problemy użytkowników nie wiedziałem, jak bardzo zdobyta wtedy wiedza pomoże mi w dalszym rozwoju. Od dwóch lat, czyli od kiedy ostatecznie zdecydowałem się przekwalifikować z agenta wsparcia na dewelopera, nieustannie doceniam to, czego nauczyłem się w dawnej roli.

tomasz1.jpg

Tomasz Miłek

.NET Developer

Tomek pracował jako Technical Support Agent zanim został programistą .NET

W ostatnich latach wraz z rozwojem technologii, pojawianiem się większej ilości aplikacji I rozwiązań cyfrowych lawinowo rośnie zapotrzebowanie na inżynierów tworzących oprogramowanie. Jednak każda aplikacja, oprócz osób rozwijających kod, potrzebuje również osób, które te aplikacje będą utrzymywać i dbać o dobry kontakt z użytkownikiem końcowym. Jak powszechnie wiadomo, deweloperzy w znaczącej części nie są chętni do kontaktowania się z klientem. Perspektywa rozmowy może budzić obawy i stres. W ostatnich latach, na styku działów R&D oraz Customer Support, zwiększa się liczba osób łączących kompetencje miękkie (potrzebne w komunikacji z klientem) z kompetencjami technicznymi (potrzebnymi do analizowania, diagnozowania i naprawiania problemów technicznych). Czy są one dobrymi kandydatami na deweloperów? 

Jak twierdzi mój team lead, w moim przypadku się sprawdziło.

To kim właściwie jest agent wsparcia?

Zanim przejdziemy dalej, odpowiedzmy sobie na pytanie czym charakteryzuje się praca agenta wsparcia. Na potrzeby artykułu założę podział na dwa główne rodzaje zespołów: 

  • klasyczny service desk (wsparcie podstawowe, pierwsza i druga linia) 
  • technical suport (wsparcie zaawansowane, techniczne). 

Co do zasady możemy założyć, że praca agenta wsparcia pierwszej i drugiej linii sprowadza się do przyjmowania i realizacji zgłoszeń z różnych źródeł (email, telefon, system ticketowy) zgodnie z ustalonymi procedurami. Głównym obowiązkiem w tym przypadku jest kontakt z klientem i dbanie o wysoką jakość obsługi. Zazwyczaj nie jest tu wymagana wiedza techniczna. Osoby, które pełnią tę rolę, będą musiały włożyć zdecydowanie więcej pracy aby się przekwalifikować, kładąc duży nacisk na zdobycie podstawowej wiedzy wymaganej w pracy w charakterze programisty. 

Taką wiedzę i doświadczenie można zdobyć rzetelnie rozwiązując zgłoszenia, za każdym razem próbując zrozumieć i nauczyć się czegoś nowego, np. sięgając głębiej do dokumentacji technicznej. Bilety i ich rozwiązania na help desku w dużej mierze się powtarzają, jednak nic nie stoi na przeszkodzie, aby w ramach samorozwoju spróbować rozwiązać ten sam problem inaczej niż w znany i sprawdzony sposób.

Wsparcie zaawansowane, w przeciwieństwie do podstawowego, wymaga znajomości zagadnień technicznych z różnych obszarów: sprzętu, sieci lub oprogramowania. Skupmy się na ostatnim obszarze: aby dobrze wspierać aplikację, należy wiedzieć, jak działa: w jakim języku jest napisana, co oznaczają poszczególne błędy, czy i z jakiego rozwiązania bazodanowego korzysta aplikacja, czy działa w chmurze, a jeżeli tak, to w jakiej; jeżeli to aplikacja webowa, czy jest hostowana na serwerze Windowsowym czy Linuxowym, czy udostępnia swoje API, czy komunikuje się z zewnętrznymi API systemów zewnętrznych etc. Praca agenta w tym przypadku bardzo często sprowadza się do analizowania błędów, diagnozowania co mogło spowodować problem, doraźnego naprawiania usterek (np. przy pomocy skryptów bazodanowych, wsadowych, powershellowych lub innych), tworzenia i utrzymywania dokumentacji wewnętrznej, raportowania błędów (bugów) w aplikacji deweloperom lub innym osobom. W przypadku pojawienia się i rejestracji błędu bardzo istotne jest dokładne zrozumienie, odtworzenie (reprodukcja) oraz szczegółowy opis błędu tak, aby osoba (zazwyczaj deweloper), która będzie ów błąd naprawiać, nie musiała tracić cennego czasu na zrozumienie, co autor miał na myśli. Im lepszy opis usterki, tym większa szansa na szybszą i skuteczną naprawę. 

Najbardziej skomplikowany problem, jaki pamiętam, a jaki musiał rozwiązać mój zespół był związany z wadliwie działającą integracją pomiędzy dwoma krytycznymi z perspektywy klienta systemami. Nie wyobrażam sobie tego bez szerokiej wiedzy o tym, jak działają poszczególne API, jak działa protokół http oraz jaki wpływ ma to na performance bazy danych.

Dobry agent vs. dobry programista

Analizując powyższe możemy wymienić kilka cech dobrego agenta wsparcia technicznego: analityczny umysł, zdolność kojarzenia faktów, krytyczne podejście, cierpliwość, skrupulatność, zaangażowanie, dociekliwość i chęć samodoskonalenia się.  Co zatem powinno charakteryzować dobrego programistę? Umiejętność pracy w zespole, rozwiązywania problemów, logicznego myślenia, dokładność, analityczny umysł, cierpliwość, skrupulatność i chęć uczenia się. Brzmi znajomo? Tak, wiele z cech charakteryzujących dobrego agenta wsparcia technicznego pokrywa się z tymi dobrego programisty. 

Czy charakteryzując się wyżej wymienionymi cechami jesteśmy skazani na sukces? Niekoniecznie. Nawet najlepszy agent wsparcia, spełniając powyższe, może okazać się nie najlepszym kandydatem, jeżeli nie będzie posiadał pasji i nie będzie wykazywał się wystarczająco wysokim zaangażowaniem.  

Nawet jeśli mamy solidne podstawy z punktu widzenia wsparcia technicznego, w momencie zmiany charakteru pracy z odtwórczego (support) na twórczy (development), ilość nowej wiedzy, dokumentacji i niuansów jest tak duża, że możemy mówić o nowym początku. Umiejętność i chęć ciągłego uczenia się są tutaj kluczowe. Wiedza jest na wyciągnięcie ręki: można korzystać z platform e-learningowych takich jak Pluralsight lub Udemy, ale bardzo wiele merytorycznych szkoleń i tutoriali znajdziemy też na Youtube. Warto zaopatrzyć się w książki, dzięki lekturze których  lepiej zrozumiemy co i jak działa oraz co zrobić, żeby działało dobrze. Ja osobiście korzystałem zez platformy Pluralsight, która oferuje bardzo dużo szczegółowych szkoleń, pozwalających zacząć od zera. 

Ja zdecydowałem się wybrać .Net z powodu popularności tej platformy. Nie bez znaczenia był też fakt, że firma ,w której pracowałem, zatrudniała wielu specjalistów piszących w tym frameworku. To, że mogłem na bieżąco dopytywać starszych kolegów o szczegóły stanowiło (i stanowi) bezcenne doświadczenie na każdym etapie nauki. 

Na początku największym wyzwaniem było zrozumienie całej koncepcji tego, jak zbudowana jest ta platforma oraz w jaki sposób działa: co wynika z czego, co jest konieczne, aby program działał, co musi a co może być skonfigurowane etc. Wiedza, którą zdobyłem jako agent wsparcia, jest niewątpliwym atutem i dobrą bazą: wszak tworząc oprogramowanie rozwiązujemy problemy, a udoskonalając kod analizujemy i diagnozujemy błędy i miejsca, które wymagają poprawy lub usprawnień. Reprodukowanie błędów zgłaszanych przez użytkowników, aby odtworzyć kroki potrzebne do ich wywołania, jest zbieżne z tym co każdy programista robi debbugując kod.

Reasumując: ambitny agent wsparcia technicznego, który charakteryzuje się konkretnymi cechami osobowości, ma szansę i możliwość zostać dobrym deweloperem. Posiadając doświadczenie techniczne i w kontakcie z klientem ma bardzo dobra podstawę do tego, by ocenić wysoko swoje szanse na przebranżowienie. Jednak co istotne, samo doświadczenie i podstawy nie stanowią przesłanki, by z góry spodziewać się sukcesu: kluczowe okażą się umiejętność uczenia się, pasja i zaangażowanie oraz cierpliwość.