Czasami nastaje taki dzień, który w kalendarzu musi zostać zakreślony na czarno. Dla różnych osób przybiera on różną formę: dla programisty może to być „spaghetti kod”, w którym koniecznie trzeba dopisać nową funkcję, a dla Dyrektora IT będzie to konieczność wdrożenia nowego narzędzia i zintegrowania go ze skomplikowanym ekosystemem łatanej od lat infrastruktury IT w firmie. Coś co łączy te sytuacje, to specyficzne zjawisko, którego występowania często do ostatniej chwili nie jesteśmy świadomi – zjawisko długu technologicznego. Dług ten, nawet nieuświadomiony, daje nam poczucie komfortu, pozwala odwlekać w nieskończoność trudne decyzje, wysiłek czy nawet przyznanie się do błędu. A że jest to życie na kredyt, niech przestrogą będą słowa śpiewane przez Billy’ego Gibbonsa: „To zbyt proste, to zbyt proste, by dobrze się czuć”, które w tym wypadku układają się w gorzką pieśń o konsekwencjach odkładania rzeczy na później.

Poznaj wroga

Dług technologiczny oznacza dodatkową pracę, która musi zostać wykonana, w celu zrealizowania jakiegoś zadania ze względu na wcześniejsze zaniedbania w projekcie. Zjawisko to często pojawia się w projektach informatycznych, kiedy pewne zaniedbania względem prac powodują, że pojawia się dług w postaci czasu, który należy przeznaczyć na doprowadzenie projektu do oczekiwanego stanu. We wcześniejszym przykładzie Dyrektora IT, który staje przed wyzwaniem wdrożenia nowego narzędzia, spłata długu będzie polegała na tym, że integracja z przestarzałą, rozwijaną długie lata, często bez odpowiedniej dokumentacji infrastrukturą będzie najprawdopodobniej procesem długim i bolesnym. Poza samym wdrożeniem, konieczne będzie zainwestowanie sporo pracy w dostosowanie całego systemu i naprawę zbierających się przez lata nierozwiązanych problemów.

Długiem technologicznym określa się również problemy, które pojawiają się w niechlujnie napisanym kodzie. Osobiście jestem skłonny stwierdzić, że same problemy nie są długiem technologicznym, a bardziej odsetkami od zaciągniętego długu. Sam dług zaciągamy natomiast, wykonując dowolną czynność, która przyczynia się do dostarczenia kodu nie całkiem spełniającego oczekiwania, nie tylko pod względem zadań jakie ma wykonać, ale też wydajności, czytelności, utrzymywalności i tego, w jaki sposób można go w przyszłości rozwinąć. Powodów takiego stanu rzeczy może być wiele.

Źródła technologicznego długu

Chcąc sprostać wyzwaniu, które stawia nam dług technologiczny, należy przyjrzeć się jego przyczynom, wśród których najczęstsze są następujące zjawiska:

  • brak zaangażowania pracowników w wykonywane zadania;
  • niewystarczające pokrycie funkcjonalności testami;
  • brak testów automatycznych;
  • przestarzałe narzędzia lub technologie używane w projekcie;
  • brak doświadczenia zespołu;
  • presja czasu;
  • brak dokumentacji lub jej niska jakość.

Powyższa lista nie jest oczywiście kompletna, a niektóre aspekty mogą być ze sobą ściśle powiązane. Programiści mogą tworzyć kod niskiej jakości z bardzo wielu powodów: ze względu na brak motywacji, wiedzy lub doświadczenia albo z powodu presji czasu lub braku odpowiednich narzędzi. Programista jest często jedynie pośrednią przyczyną długu, gdyż zarządzanie należy do kierownika projektu, który podejmuje decyzje dotyczące czasu, narzędzi, technologii czy przydzielenia tego, a nie innego pracownika. Czasem trudno jednoznacznie wskazać przyczyny powstawania długu. Do jego powstania mogą prowadzić małe błędy w projekcie lub strategiczne decyzje – na przykład konieczność dostarczenia rozwiązania w bardzo krótkim czasie. Geneza zjawiska w każdym projekcie może być odmienna i bardzo skomplikowana, co jednak nie zmienia faktu, że bez względu na jego pochodzenie, długiem technologicznych należy skutecznie zarządzać.

Dług technologiczny nie zawsze taki zły

Błędem jest jednoznaczne traktowanie długu technologicznego jako czegoś, czego zawsze należy za wszelką cenę unikać. Podobnie jak zaciągnięty kredyt może pozwolić firmie rozwinąć skrzydła, dług technologiczny, zaciągany z głową, może być w wielu przypadkach pomocny.

Dług technologiczny można podzielić na trzy typy, które wyraźnie pokazują, że dług długowi nierówny:

  • Bałagan – powstający w wyniku niedbałości, kiepskich praktyk, niedojrzałości biznesu.
  • Nieunikniony dług – dług, którego wystąpienia nie jesteśmy wstanie przewidzieć. Dobra decyzja podjęta dzisiaj może w przyszłości być przyczyną powstania długu.
  • Strategiczny dług – dług zaciągany świadomie, kiedy wynikające z niego korzyści są większe niż jego konsekwencje.

Może się zdarzyć, że zaciągnięcie długu przynosi bardzo wymierne korzyści. Szczególnie w sytuacji, kiedy projekt wisi na włosku, a dostarczenie odpowiedniej partii programu staje się „być albo nie być” dla projektu. Decyzja o zaciągnięciu takiego długu może nawet uratować cały projekt (a czasem całą firmę). Z tego typu decyzjami należy być jednak bardzo ostrożnym, gdyż nieodpowiednie zarządzanie powstałym w ten sposób długiem może prowadzić do katastrofy.

Czy jestem zadłużony?

Jeśli jesteśmy świadomi swoich długów, jesteśmy w stanie je regularnie spłacać – bez szkody dla bieżącego funkcjonowania, zadłużenie nie jest problemem. Najgorsza jest nieświadomość, ponieważ nie spodziewając się zagrożenia, nie będziemy mieli możliwości odpowiednio się przygotować. Na szczęście w projektach informatycznych symptomy świadczące o istnieniu długu technologicznego pojawiają się dosyć szybko i są widoczne gołym okiem.

Oto kilka pytań diagnostycznych, zaproponowanych przez redakcję portalu Webmastah:

  • Czy rozwijanie oprogramowania jest coraz wolniejsze?
  • Czy zdarzają się częściowe lub całościowe przestoje w działaniu systemu?
  • Czy powracają te same błędy?
  • Czy czas wdrażania nowych funkcjonalności stale wzrasta?
  • Czy twoja aplikacja działa wolno?
  • Czy twoi programiści niechętnie pracują nad projektem?
  • Czy popychałeś zespół do wdrażania nowych funkcjonalności szybciej, niż było to planowane?
  • Czy zdarzają się błędy trudne do odtworzenia lub rozwiązania?

Nawet jeśli na wszystkie pytania odpowiedź jest negatywna, nie należy czuć się przesadnie bezpiecznie. Niektórzy eksperci są zdania, że dług technologiczny jest stałym elementem posiadania lub rozwoju oprogramowania i infrastruktury informatycznej.  

Załóżmy więc, że w każdym projekcie informatycznym dług technologiczny w jakiejś postaci występuje. Oznacza to, że bardzo ważne jest skuteczne zarządzanie tym długiem. Czyli nie wystarczy kontrola i neutralizowanie skutków, dużo ważniejsze jest metodyczne podejście do jakości aplikacji i zapobieganie wystąpieniu długu tam, gdzie nie chcemy go zaciągać.

Jak zarządzać długiem technologicznym?

Długiem technologicznym należy zarządzać i przeciwdziałać mu tam, gdzie nie jest planowany. Ważne są:

1. Budowa świadomości wagi jakości w firmie. Sama jakość musi być postrzegana jako wartość, o którą należy dbać. Bez tego trudno zarządzać długiem, gdyż niewiele jesteśmy w stanie zrobić bez odpowiedniego podejścia pracowników. Ich zaangażowanie jest kluczowe.
2. Kontrola procesów. Stała informacja o tym, co dzieje się w projekcie, pozwoli szybko reagować na problemy.
3. Quality assurance. Opieka nad jakością oprogramowania, sprawowana przez specjalistów, nie tyko w zakresie testów, ale też wszystkich aspektów jakości.
4. Testy. Im szybciej rozpocznie się testy, tym wcześniej zlokalizowane zostaną problemy. Testy na poziomie dokumentacji i testów jednostkowych bardzo szybko eliminują dług.
5. Stosowanie dobrych praktyk, np.:

  • przestrzeganie reguł nazewnictwa dla funkcji, procedur itp.;
  • stosowanie stylu kodowania (ang. coding style), polegającego na wprowadzaniu odpowiednich wcięć;
  • tworzenie dokumentacji technicznej;
  • zapobieganie podstawowym błędom, np. przekroczeniu rozmiaru tabel (ang. table overflow), problemom przy inicjalizowaniu zmiennych itp.;
  • zarządzanie wydaniami/kopiami zapasowymi (ang. backup);
  • poprawianie kodu w celu uzyskania lepszej czytelności i łatwiejszego utrzymania, rozwoju w przyszłości (ang. refactoring);
  • algorytmika: upraszczanie funkcji;
  • programowanie w parach, aby tworzyć kod lepszej jakości (ang. pair programming);
  • przeglądy (code review): zastanawianie się nad użytymi rozwiązaniami, usuwanie widocznych błędów.

6. Szkolenie pracowników.
7. Promowanie testów jednostkowych jako podstawowego narzędzia, w tym TDD jako standardowego narzędzia wytwarzania oprogramowania przez programistę.

Tak jak poprzednio, także i ta lista jest niestety niekompletna. Dług może mieć bardzo różne źródła, często charakterystyczne dla konkretnej firmy czy nawet projektu. Należy więc wypracować własną technikę zarządzania długiem, najważniejsze natomiast, żeby nie ignorować go do momentu, kiedy jest już za późno i katastrofa, jak komornik, zapuka do naszych drzwi.

Autorem wpisu jest:
Leszek Zieliński

Od 2011 roku realizuje i kieruje projektami QA. Ekspert w obszarze testów manualnych, zarządzaniu testami, doskonaleniu procesów testowych, mający również doświadczenie w testach automatycznych. Posiada certyfikat ISTQB Full Advanced Tester. Zafascynowany metodologią Rapid Software Testing, jak i podejściem Software Testing as a Service. Absolwent Politechniki Śląskiej w Gliwicach. Po godzinach działacz społeczny.

Dodaj komentarz

Komentarze:

Skontaktuj się z nami

Chcesz dowiedzieć się więcej o naszych usługach? Napisz do nas – odpowiemy na każdą wiadomość.

Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma, w celach handlowych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma, w celach marketingowych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma w celach rekrutacyjnych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma na potrzeby przyszłych rekrutacji.
W związku z obowiązującymi przepisami dotyczącymi ochrony danych osobowych tj. Ustawą o ochronie danych osobowych z dnia 10 maja 2018 roku, jak również treścią Rozporządzenia Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (RODO), informujemy, że: 1. Administratorem danych osobowych jest JCommerce Sp. z o.o. z siedzibą w Katowicach, ul. Ściegiennego 3, 40-114 Katowice (KRS: 00007393418).
2. Powyższe dane osobowe przetwarzane będą przez JCommerce Sp. z o.o. – w zależności od udzielonych przez Panią/Pana zgód (podstawa prawna przetwarzania: art. 6 ust. 1 pkt a) RODO):
• w celach handlowych,
• w celach marketingowych.
3. Podanie powyższych danych osobowych nie jest wymogiem ustawowym, umownym lub warunkiem zawarcia umowy. Nie jest Pan/Pani zobowiązany/a do podania powyższych danych osobowych, jednak brak ich podania uniemożliwi realizacje ww. celu.
4. Posiada Pan/ Pani prawo dostępu do treści swoich danych, w tym otrzymania ich kopii i ich sprostowania, usunięcia, ograniczenia przetwarzania, prawo do przenoszenia danych, prawo do sprzeciwu wobec przetwarzania, prawo do cofnięcia zgody w dowolnym momencie, jeśli została udzielona. Wycofanie zgody nie wpływa jednak na zgodność z prawem przetwarzania, którego dokonano na podstawie zgody przed jej wycofaniem; oświadczenie o cofnięciu zgody na przetwarzanie danych osobowych należy złożyć w siedzibie JCommerce Sp. z o.o. lub przesłać na adres mailowy zgody@jcommerce.pl. Cofnięcie zgody na przetwarzanie danych osobowych skutkuje brakiem możliwości realizacji ww. celów przetwarzania;
5. Dane osobowe są udostępniane przez JCommerce Sp. z o.o. upoważnionym pracownikom i osobom współpracującym z JCommerce Sp. z o.o. na podstawie umów cywilnoprawnych, przez których realizowany jest cel przetwarzania;
6. Wszelkie pytania dotyczące ochrony danych osobowych oraz realizacje przysługujących praw, prosimy kierować na adres odo@jcommerce.pl;
7. W zależności od udzielonej zgody, dane osobowe będą przetwarzane przez czas niezbędny do realizacji ww. celów przetwarzania. W przypadku wniesienia sprzeciwu, JCommerce Sp. z o.o. przestanie przetwarzać Pani/Pana dane w ww. celu, chyba że będzie w stanie wykazać, że w stosunku do tych danych istnieją ważne prawnie uzasadnione podstawy, które są nadrzędne wobec Pana/Pani interesów, praw i wolności, lub niezbędne do ewentualnego ustalenia, dochodzenia lub obrony roszczeń;
8. Nie przekazujemy Pani/Pana danych poza teren Europejskiego Obszaru Gospodarczego oraz do organizacji międzynarodowych.
9. Pani/Pana dane osobowe nie podlegają zautomatyzowanemu podejmowaniu decyzji, w tym profilowaniu.
10. Ma Pani/Pan prawo wniesienia skargi do organu nadzorczego gdy uzna Pan/Pani, iż przetwarzanie ww. danych osobowych narusza przepisy ogólnego rozporządzenia o ochronie danych osobowych z dnia 27 kwietnia 2016 r.