Jak oceniać, zarządzać i unikać długów technicznych
Jeśli dług techniczny brzmi jak coś zaczerpniętego z podręcznika finansów, to dlatego, że termin ten jest związany z finansami. Jednak w prawdziwym tego słowa znaczeniu dług techniczny jest związany z programowaniem. Jest to idea polegająca na tym, że podczas opracowywania projektu oprogramowania pewne niezbędne kroki są pomijane lub po prostu całkowicie odrzucane, aby dotrzymać terminu.
W dążeniu do opracowania idealnej aplikacji lub oprogramowania programiści często nie mają czasu — tak jak każda przypadkowa osoba wykonująca dowolne zadanie. W związku z tym zazwyczaj sensowne jest dokonanie pewnego rodzaju kompromisu między dostarczeniem doskonałego produktu z doskonałym kodem a maksymalizacją czasu.
Pytanie brzmi: czy istnieje granica tych kompromisów? Czy istnieją nieodłączne szkody, które mogą wynikać z tego kompromisu? Wreszcie, czy programista naprawdę ma się lepiej na dłuższą metę? W tym artykule o długach technicznych postaram się odpowiedzieć na wszystkie te pytania.
Co to jest dług techniczny?
Definiując dług techniczny, będziemy musieli odwołać się do człowieka, któremu przypisuje się wygenerowanie tego terminu w pierwszej kolejności: Warda Cunninghama. Według Cunninghama dług techniczny odnosi się do dodatkowej pracy rozwojowej, którą trzeba włożyć w zaprogramowanie kodu, aby uzupełnić deficyt wynikający z zaprogramowania go w krótkim okresie.
Aby było bardziej obrazowo, wyobraź sobie, że masz za zadanie posprzątać zagracony pokój i spóźniasz się na zajęcia. Aby upewnić się, że wykonasz instrukcje i zdążysz na zajęcia, szybko sprzątasz, zamiatając większość śmieci pod kanapę. Konsekwencją tego jest to, że w końcu będziesz musiał poświęcić trochę czasu na uporządkowanie bałaganu. W przypadku tworzenia oprogramowania, jeśli pominiesz niezbędne kroki i podążysz łatwiejszą drogą, z „niezbyt czystymi” kodami, później będzie trudniej wyczyścić kod w przyszłości. W dominie projektu oprogramowania występuje wiele faz, a im dłużej ignorujesz istniejący problem, tym dłużej trwa jego rozwiązanie.
Rodzaje długów technicznych
Długi techniczne są różnego rodzaju, w tym:
Planowane długi techniczne
Dzieje się tak w sytuacjach, gdy organizacje celowo decydują się na techniczne zadłużenie. To, jak omówiono wcześniej, zwykle polega na przekroczeniu ustalonych terminów i osiągnięciu określonego celu. Angażując się w planowane długi techniczne, organizacja musi jasno określić, z czego jest skłonna zrezygnować, a z czego nie. Musisz prowadzić dokładne zapisy, pamiętając, że w końcu będziesz musiał wrócić i poprawić błędy, które pominąłeś na początku.
Niezamierzone długi techniczne
Ten rodzaj długu technicznego jest bezpośrednim przeciwieństwem pierwszego. Powstaje, gdy organizacja nie przewiduje lub nie planuje długu technicznego. Powodem tego jest zazwyczaj zerwanie komunikacji między różnymi jednostkami w organizacji lub kiepskie praktyki pracy między jednostkami.
Nieuniknione długi techniczne
Jest to rodzaj długu technicznego, któremu żadne działanie ze strony organizacji nie mogło zapobiec. Na przykład, biorąc pod uwagę szybkie zmiany technologiczne, logiczne jest, że niektóre kody napisane w przeszłości nie będą spełniały obecnych przewidywanych standardów.
Ponadto ten rodzaj długu technicznego może powstać, gdy wymagane są zmiany, gdy kod jest już napisany. Jeśli w połowie projektowania oprogramowania zostaną wprowadzone pewne zmiany, może to zepsuć dynamikę, sprawiając, że stary kod stanie się przestarzały lub niepotrzebny.
Przyczyny długu technicznego
Niektóre przyczyny długu technicznego zostały omówione powyżej, ale wymienię je po kolei, aby były jaśniejsze.
Pośpiech
Najczęstszą przyczyną długu technicznego jest pośpiech. Deweloperzy często mają rygorystyczne terminy, z których niektóre obejmują terminy uruchomienia określonego oprogramowania. Często jest zrozumiałe (i oczekiwane) w tego rodzaju sytuacjach, że deweloper może po drodze zaciągnąć dług techniczny. Ten rodzaj długu technicznego jest często zamierzony i może powodować problemy, które mogą obejmować błędy w kodzie lub powstawanie kodów spaghetti.
Przeoczenie/błąd
Czasami programiści po prostu piszą złe kody, co ostatecznie prowadzi do długów technicznych. Niezależnie od tego, czy zły kod istnieje w wyniku błędu programisty, czy nie, faktem jest, że błędy powodują długi techniczne, a ponieważ nie są skalowalne, w końcu trzeba będzie je naprawić.
Brak świadomości skutków
Czasami długi techniczne powstają, ponieważ programista nie zdaje sobie sprawy lub nie uznaje, jak szkodliwe są długi techniczne na dłuższą metę. Może to wynikać z uzasadnionej nieznajomości szkodliwych skutków wybierania skrótów podczas programowania lub może to być umyślne lekceważenie konsekwencji.
Zamiar
Długi techniczne mogą powstać celowo w wyniku celowych działań programisty lub organizacji.
Brak modułowości
Dzieje się tak głównie dlatego, że jeden kod może jednocześnie obsługiwać różne logiki biznesowe. Tego rodzaju sytuacja znacznie utrudnia obsługę oprogramowania. Z każdym kodem napisanym przez programistę wzrasta prawdopodobieństwo, że napotka on wyzwania związane z modułowością.
Ocena długu technicznego
Długów technicznych nigdy nie należy obliczać ręcznie, ponieważ byłoby to dość uciążliwe. Oznaczałoby to konieczność ręcznego wprowadzenia kodu w celu określenia bieżących problemów i ewentualnych przyszłych. Oprócz tego, jak czasochłonny jest proces ręczny, istnieje możliwość, że kody zmieniłyby formę pod koniec procesu ręcznego.
Jednym ze sposobów przeprowadzenia ewaluacji jest wykonanie analizy statycznej przy użyciu wspierających ją narzędzi. Niektóre narzędzia, których można użyć, to Coverity, SonarQube, Check Style i Closure Compiler.
Zasadniczo istnieją dwa sposoby obliczania długów technicznych. W pierwszym podejściu można go było uzyskać, obliczając wskaźnik długu technicznego po współczynniku kodu. W tym przypadku wstępne oszacowanie lub całkowity czas potrzebny na opracowanie aplikacji zostanie wykorzystany do określenia czasu potrzebnego do naprawienia długu technicznego.
W drugim podejściu można bezpośrednio skorzystać z szacunków podanych przez różne narzędzia, takie jak SonarQube. Zostanie to połączone z wykazami długów technicznych oraz ich kodami referencyjnymi. Z narzędzi można uzyskać dokładne oszacowanie czasu potrzebnego do naprawy.
Ocena długu technicznego da ci poczucie, ile dni zajmie naprawienie długu technicznego. Im więcej długów, tym dłużej zajmie Ci ich naprawienie.
Rozwiązanie długów technicznych
Co zrobić, jeśli wystąpiły długi techniczne i nie wiesz, co robić? Istnieją pewne kroki, które możesz podjąć, aby zarządzać długami technicznymi.
Po pierwsze, powinieneś przyznać, że istnieją techniczne długi i poinformować o tym swój zespół. Komunikując się, powinieneś jasno określić, co się stało i co należy zrobić, aby to naprawić. Powinieneś upewnić się, że jasno komunikujesz potrzebę zajęcia się długiem technicznym przy najbliższej okazji.
Po poinformowaniu zespołu o długach technicznych można zastosować trzy podejścia. W przypadku pierwszego podejścia można zdecydować się na kontynuację systemu w obecnej postaci. W tym scenariuszu aplikacja będzie używana w obecnej postaci.
Alternatywnie możesz zdecydować się na refaktoryzację aplikacji. Refaktoryzacja ma na celu zmniejszenie złożoności aplikacji, a także uporządkowanie struktury aplikacji. Dzięki refaktoryzacji zachowanie oprogramowania nie ulegnie zmianie; jedyną dotkniętą częścią będzie struktura wewnętrzna.
Wreszcie, jeśli dwie omówione powyżej opcje nie działają, będziesz musiał całkowicie zastąpić kod. Jednym z problemów jest to, że może to prowadzić do nowych długów technicznych, ale na dłuższą metę może to być lepszy kompromis.
Unikanie długów technicznych w przyszłości
Oczywiście nie ma wątpliwości, że unikanie długów technicznych jest zdecydowanie mądrzejsze niż próba ich naprawienia, gdy się pojawią. Oprócz tego, że oszczędza zarówno czas, jak i stres, zapewnia również brak konsekwencji wynikających z posiadania długów technicznych od samego początku.
Można argumentować, że długi techniczne same w sobie nie są złe. Generalnie są problematyczne, ponieważ są długami, które trzeba spłacić, a ludzie nie są najbardziej odpowiedzialnym gatunkiem na ziemi. Konsekwentne wybieranie słabszej opcji generalnie osłabia siłę twojego oprogramowania i utrudnia późniejsze ulepszanie funkcjonalności. Podsumowując, unikanie długów technicznych jest najlepszym rozwiązaniem dla każdego.
Jak więc zapobiegać powstawaniu długów technicznych:
Utwórz Backlog projektu
Chodzi o to, aby wszyscy byli na bieżąco z procesem i byli na bieżąco z wymaganiami dotyczącymi każdego wykonywanego zadania. Tworzenie zaległości pozwala wszystkim zobaczyć zadania, które nie zostały wykonane, oraz ścieżki, którymi należy podążać, aby je osiągnąć.
Przedstaw jakość nad szybkość
Jeśli sam jesteś programistą, musisz nauczyć się przedkładać wysokiej jakości pracę nad dużo pracy. Upewnij się, że Twoje kody są czyste, a Twoje aplikacje lub inne oprogramowanie są opracowane do perfekcji. Zrozum, że pokusa pójścia na skróty nie będzie tego warta, ponieważ w końcu nadal będziesz musiał wykonywać zadania, które odrzuciłeś.
Jeśli kierujesz zespołem, musisz przekazać te same wartości członkom zespołu. Członkowie powinni być nauczeni tworzenia rozwiązań zorientowanych na wyniki i unikania pójścia na skróty.
Stwórz świadomość
Ogólnie rzecz biorąc, dogłębna wiedza na temat tego, czym jest dług techniczny i jak go uniknąć, może być przydatna przede wszystkim w zapobieganiu ich powstawaniu. Gdy uzbroisz swoich programistów w wymaganą wiedzę, będą oni lepiej unikać pułapek związanych z długami technicznymi.
Wprowadź dobre praktyki kodowania
Niektóre praktyki związane z kodowaniem zwiększają prawdopodobieństwo, że popadniesz w dług techniczny. Dlatego byłoby wspaniale unikać ścisłego łączenia, stosować abstrakcję i refaktoryzację.
Wprowadź zaktualizowaną technologię
Regularne aktualizacje technologii mogą być doskonałym sposobem na uniknięcie długów technicznych. Podczas aktualizacji musisz upewnić się, że używana jest najnowsza struktura, bazy danych i oprogramowanie.
Wniosek
Długi techniczne w zdecydowanej większości przypadków są nieuniknione, o ile nadal rozwijasz programy i piszesz kody. Jednak prawdopodobieństwo ich wystąpienia można znacznie zmniejszyć, jeśli zastosuje się powyższe kroki. Również w przypadku długów technicznych nie jest stracona wszelka nadzieja. Zachowaj spokój, bądź pewny siebie, działaj odpowiednio.