To pytanie często zadaję sobie podczas pracy z programistami. Do tej pory pracowałem w czterech firmach i uświadomiłem sobie brak dbałości o utrzymanie kodu w czystości i radzenie sobie z technicznymi zadłużeniami, które utrudniają przyszły postęp w aplikacji. Na przykład, pierwsza firma, dla której pracowałem, napisała bazę danych od zera, zamiast używać czegoś takiego jak MySQL, co stworzyło piekło dla zespołu podczas refaktoryzacji lub rozszerzania aplikacji. Zawsze starałem się być szczery i jasny z moim menedżerem, gdy omawia prognozy, ale kierownictwo nie wydaje się zainteresowane ustalaniem tego, co już jest, i strasznie jest widzieć wpływ, jaki ma to na morale zespołu.
Co sądzisz o najlepszym sposobie rozwiązania tego problemu? Widziałem ludzi pakujących się i wychodzących. Firma staje się wtedy drzwiami obrotowymi, a programiści wchodzą i wychodzą, a kod staje się gorszy. Jak powiadamiasz o tym kierownictwo, aby zainteresować ich załatwieniem długu technicznego ?
źródło
Odpowiedzi:
Kiedy spotkałem się z szefem w celu omówienia tego, powiedział, że powinienem uwzględnić refaktoryzację we wszystkich moich szacunkach. Powiedział, że to nie jest problem, o którym chce myśleć. Zamiast tego powinienem sobie z tym poradzić.
Nie jest to problem, o którym kierownictwo chce myśleć. Nie są inżynierami. Po prostu uczyń to niewypowiedzianą częścią wszystkich swoich szacunków, a przekonasz się, że dług techniczny zmniejsza się.
Jednak nigdy nie będzie idealny. Dług techniczny, podobnie jak dług karty kredytowej, to inwestycja w szybsze pozyskiwanie klientów i szybszy wzrost udziału w rynku w stosunku do konkurencji. Podobnie jak kredyt, jeśli właściwie zarządzany, może sprawić, że odniesiesz sukces.
źródło
To tak, jak powiedział Gandhi, gdy zapytano go, czy jego taktyka zadziała z kimś takim jak Hitler. Powiedział: „To byłoby trudne”. Ale myślę, że istnieje słuszny argument, że odpowiedź naprawdę brzmi „Nie”. Niestety nie sądzę, że to, co próbujesz zrobić, można zrobić. Nie chodzi o to, że staram się być pesymistą, ale raczej staram się być szczera.
Problem nie polega na tym, że menedżerowie potrzebują przekonania. Lepsi już rozumieją, że dług może być zabójcą, jeśli się nim nie zarządzi. Ale niezależnie od tego, czy rozumieją, czy nie, czy są dobrymi menedżerami, czy złymi, wszyscy napotykają presję dostarczenia, a ich dostawa jest oceniana przez ich szefów na podstawie daty. Jakość ma znaczenie tylko wtedy, gdy jest bardzo zła, w którym to przypadku jest to wina programistów lub wyjątkowo dobra, w którym to przypadku sprawiła to błyskotliwość zarządzania. Jakość musi być „wystarczająco dobra”.
Myślę, że podoba mi się to, co powiedział Renesis w swojej odpowiedzi, ponieważ jest to jeden z niewielu, którzy rozumieją, że zarząd myśli inaczej niż inżynieria. I myślę, że wszyscy widzieliśmy postępy firm, które stały się zorientowane na datę i bardziej zarządzane projektami, w przeciwieństwie do klientów i jakości. Rozumiem przez to typowe firmy, a nie te naprawdę zdecydowane, które mają odwagę powiedzieć „To się skończy, kiedy to się skończy” (jak Apple Computer lub id Software - i tak, rozumiem, że czasami ludzie nie mają wolności przyjąć takie podejście).
Ale oto rzecz: firmy, które stawiają na najwyższą jakość ... co o nich zauważasz? Zgadza się, są one prowadzone przez inżynierów, a nie sprzedawców, marketerów, kierowników projektów i księgowych. Pomyśl o HP, Apple, id, Google, Microsoft i IBM. Wszystko zaczęło się i odniosło sukces przez inżynierów, a nie sprzedawców, chociaż sprzedawcy z pewnością odegrali rolę i jestem pewien, że wielu debatowałoby nad powiązaniem Microsoft z jakością :). A z tych, którzy zjechali z góry, uciec od przywództwa opartego na inżynierii. W tym oświadczeniu jest jednak mnóstwo argumentów, ponieważ istnieje wiele firm technicznych, które ostatecznie zawiodły z powodu niemożności dostosowania się do zmieniających się czasów i zarządzania własnym rozwojem. Nie uważam przywództwa opartego na inżynierii za przyczynę tych niepowodzeń, dla mnie to „ to kwestia umiejętności i umiejętności prowadzenia działalności gospodarczej, które są niezależne od osoby, która jest programistą lub księgowym. Myślę jednak ogólnie, że inżynieria jest zaangażowana w rygor odpowiedzialności i dyscypliny, z korzyścią dla firm, w których inżynieria jest elementem.
Poważnie, rozejrzyj się. Bardzo brakuje przywództwa IT. Nacisk kładziony jest zawsze na koszty i czas, a rzadko na jakość, o ile jest wystarczająco dobra. Liderzy IT rzadko zgłaszają się do CEO, teraz jest to zawsze CFO. IT utkwiło w obsłudze produkcji i coraz częściej jest kierowane do kierowników projektów, którzy koncentrują się na mniejszych, łatwiej przyswajalnych i mierzalnych kawałkach, nie znaczących zmianach wartości rewolucyjnej (nie to, że jest to niekoniecznie złe; dzielenie i podbijanie to dobra rzecz, ale wizja musi być tam, aby uzyskać duży obraz).
Przykro mi, że tak długo zajmuję ten post, ale ostatecznie myślę, że twoje pytanie, w jaki sposób zadbać o zarządzanie długiem technicznym, często lepiej jest znaleźć odpowiedniego lidera, niż zmienić istniejącego. Wyjaśnienie długu technicznego zwykłym myślicielom oznacza, jak powiedział Renesis, skupienie się na pieniądzach i kosztach, i myślę, że dużo traci na tłumaczeniu; nawet jeśli ci się uda, będzie to miało znaczenie tylko wtedy, gdy kupi go lider w firmie. Przekonanie swojego menedżera średniego do właściwego postępowania prawdopodobnie tylko go zwolni.
źródło
Pierwszą rzeczą do zrobienia jest zmiana brzmienia. Nazywanie go „długiem technicznym” daje kierownictwu pomysł, że pozwolenie na inwestycję jest pewnego rodzaju inwestycją - kiedy tak naprawdę jest bardziej jak wirus. (Jestem jak Dave Ramsey z technicznego długu.)
Zezwolenie na niezapłacenie wiąże się z ogromnym kosztem, którego nie można zobaczyć ani łatwo oszacować.
Wymień problemy, takie jak następujące do zarządzania:
źródło
Moje kierownictwo faktycznie podjęło poważny wysiłek, aby rozwiązać problem długu technicznego, co jest jednym z powodów, dla których lubię tam pracować, ale jest to wysiłek długoterminowy i nigdy nie boli przypomnieć im, dlaczego warto go podjąć.
Jednym ze sposobów, w jaki wywieram presję, jest ilekroć poproszę o oszacowanie, a można by zaoszczędzić czas, gdybym nie musiał radzić sobie z konkretnymi problemami z zadłużeniem technicznym, uwzględniam to w moich szacunkach . Na przykład: „ Wykrywanie tego błędu zajmie mi 2-3 dni, ale jeśli rozwiązaliśmy już te 2 inne błędy o niskim priorytecie, które były w kolejce od zawsze, prawdopodobnie zajęłoby to mniej niż jeden ” . odpowiedzią będzie, aby iść naprzód i naprawić te inne, gdy jesteś przy tym.
Zgadzam się również z innymi odpowiedziami na temat rozważania ulepszeń jako części pracy i robienia ich na bieżąco, jeśli nie jest to zbyt szkodliwe. Moje obecne zadanie polega na dodawaniu do bardzo źle zaprojektowanego kodu. Zamiast dodawać bałaganu, pisząc mój nowy kod, aby go dopasować, spędzam trochę czasu z góry konsolidując wspólną funkcjonalność, więc wysyłanie pakietu staje się wywołaniem funkcji jednej linii zamiast ciągłego powtarzania 15 linii nieznacznie zmodyfikowanego kopiowania i- wklej płytę grzewczą.
Wiem na pewno, że pozwoli to zachować zdrowie psychiczne niektórych opiekunów w dalszej części drogi. Wiem, bo jestem dzisiaj tym opiekunem. Wierzę jednak, że przyspieszy to moje bieżące zadanie związane z włączeniem tej funkcji i debugowaniem jej teraz.
Inną techniką, której użyłem w przeszłości i którą powinienem zrobić ponownie, jest utrzymywanie refaktoryzującej gałęzi DVCS w osobnym drzewie roboczym w tym czasie przestoju podczas kompilacji, oczekiwania na długi test lub po prostu zmiany tempa trochę, kiedy wypali cię błąd. Tak długo, jak od czasu do czasu łączysz się z górą, aby nie rozchodzić się zbyt daleko, możesz refaktoryzować zmiany przy niewielkim marginalnym wysiłku. 15 minut tu i tam dziennie może naprawdę z czasem się sumować.
źródło
Możesz spróbować analogii karty kredytowej. Zapytaj ich: „czy czujesz się komfortowo, pozostawiając wyciągi z karty kredytowej niezapłacone przez dłuższy czas?”
Menedżerowie rozumieją koszty i korzyści, ale (zwykle) nie techniczne terminy używane przez nas, programistów. Termin „dług techniczny” został już wynaleziony, aby pomóc pokonać tę barierę komunikacyjną, ale może być konieczne jej wyraźniejsze sformułowanie. Większość menedżerów wie bardzo dobrze (często z własnego doświadczenia), że zaległe płatności kartami kredytowymi rosną ze straszliwą stopą procentową, więc boli ich pozostawianie niezapłaconych. Może to pomóc im w zrozumieniu powagi problemu związanego z entropią oprogramowania.
Ale jeśli to ich nie przekonuje, spróbuj zebrać dowody rzeczowe i dokonać obliczeń. Np. Ile kosztuje firma - zarówno w gotówce, jak i straconym czasie - na zastąpienie odchodzącego pracownika.
źródło
Nikt nie da pieniędzy na zamianę czegoś, co działa na coś, co (przy odrobinie szczęścia) również działa.
To, co możesz zrobić, to zaproponować zastąpienie go czymś, co robi więcej, tj. Połączeniem obsługi długu technologicznego w ulepszenie, które przynosi natychmiastowe i wymierne korzyści biznesowe.
Oczywiście powinieneś być otwarty na ten temat, nie mówimy tutaj o „wkradaniu się” do nowego projektu tutaj.
Uważam, że druga strona jest trudniejsza w obsłudze dla programistów. Zasadniczo sprowadza się do tego: dla niektórych programistów upewnienie się, że Twój kod jest najlepszym możliwym kodem, jaki możesz wymyślić, jest kwestią profesjonalnej dumy. Dla innych jest to kolejna praca, której celem jest szybkie wykonanie zadania i powrót do domu.
Żadna ilość przekonujących zmian nie zmieni tej sytuacji, a jeśli wprowadzisz obowiązkowy standard jakości kodu, twoi programiści od dziewięciu do pięciu znajdą sposób na działanie systemu, podczas gdy twoi dedykowani programiści nieuchronnie będą zirytowani całą procedurą (która nie jest nie są skierowane przeciwko nim, ale nie można powiedzieć, że deweloper X musi przestrzegać zasad, podczas gdy Y może robić, co chce).
To, co działa, ale wciąż może być bardzo frustrujące, polega na tym, że twoi bardziej zaangażowani i kompetentni programiści nadzorują bazę kodów, prawdopodobnie dobry kompromis między pójściem naprzód a uporządkowaniem tego, co tam jest.
źródło
Faktem jest, że w wielu firmach, szczególnie biorąc pod uwagę obecną sytuację gospodarczą, za każdą godzinę trzeba komuś zafakturować.
Albo schodzą szybko .
Chyba że obecni klienci są skłonni zapłacić za refaktoryzację, co jest bardzo mało prawdopodobne, chyba że ma znacznie ulepszoną wydajność lub funkcje. Wtedy nie stanie się to na starszych podstawach kodu. Być może będziesz w stanie podkraść się do budżetu na nowsze projekty, jeśli klienci mają głębokie kieszenie, ale jeśli nie będziesz musiał zmieniać interfejsów API w refaktoryzacji, nie będzie to przydatne dla starszych projektów i może wprowadzić sytuacja, w której firma obsługuje dwie bazy kodów, co powoduje dodatkowe problemy i koszty.
Jako inżynier chciałbym przeredagować stary kod, który nie jest już naprawdę odpowiedni do celu, za każdym razem, gdy coś staje się przestarzałe lub przestarzałe. Ale jak powiedzieli mi moi MD we wszystkich firmach, w których kiedykolwiek pracowałem: „Kto zapłaci?”
źródło
Zawsze staram się posprzątać. Nie skończę, dopóki kod nie będzie czysty. Problem z długiem technicznym polega na tym, że większość ludzi go nie rozumie. Najlepszym sposobem na rozwiązanie tego problemu jest nie gromadzenie żadnego z nich. Jeśli menedżerowie ufają programistom, że zdecydują, jak rozwiązać problem, możesz uczynić higienę kodu częścią każdego zadania programistycznego. Jeśli nigdy nie zarejestrujesz złego kodu, nie narosisz długu. Jeśli zastosujesz się również do zasady harcerstwa (zawsze zostawiaj kod czystszy, niż go znalazłeś), twoje istniejące długi powoli znikną.
Nie uważam refaktoryzacji za zadanie odrębne od implementacji funkcji. Jest to jego integralna część.
źródło
Jeśli masz do czynienia z nietechnicznymi menedżerami, pomogłoby Ci to, gdybyś mógł przedstawić swoją dyskusję w kategoriach, które rozumieją. Jeśli potrafisz skonstruować realistyczny przypadek pozytywnego zwrotu z inwestycji w pracę poświęconą na spłatę zadłużenia technicznego, możesz gdzieś się dostać. To ćwiczenie będzie zależeć od twoich okoliczności, ale przykładem może być coś takiego:
Przeanalizuj, ile czasu programiści są zmuszeni poświęcić na pomoc techniczną w kwestiach związanych z produkcją, a następnie przekonaj się, że naprawienie nieuporządkowanego starego kodu spowodowałoby A. zmniejszenie liczby problemów związanych z obsługą, B. ułatwienie pomocy technicznej w rozwiązywaniu problemów bez eskalacji do rozwoju i C. skrócić czas, kiedy Rozwój wydaje na problemy produkcyjne, kiedy się pojawiają. Ujmij to w kategoriach oszczędności zaoszczędzonych dzięki temu, że programiści nie są związani pracami wsparcia. Zwróć też uwagę, że każda godzina, którą programista poświęca na wsparcie, jest „podwójnym krokiem”, ponieważ nie tylko płacisz programistom za wsparcie, ale także spalasz koszty alternatywne tego, co może robić ten programista (dodawanie nowych funkcji itp. .)
Tak, niektóre z liczb będą voodoo / smoke-and-mirrors ... to OK, brudna tajemnica zarządzania polega na tym, że wiedzą, że większość liczb, które rzucają, to totalne BS Tak długo, jak dasz im coś pozornie konkretne w pracy, aby mogli dostać to do głowy, masz szansę na walkę.
źródło
Po wyjaśnieniu długu technicznego twoje kierownictwo powinno być przekonane do jego spłaty:
Kuchnia to Twój kod, posiłek to Twój produkt, a jedzenie to Twój produkt.
Jeśli mogą sobie pozwolić na dłuższe oczekiwanie na wdrożenie zmiany, bez bezpiecznej siatki testów jednostkowych, oznacza to, że coś jest nie tak w Twojej firmie.
źródło
Musi to być bardzo przekonujący argument, jeśli chodzi o oryginalny produkt i uzasadnienie biznesowe, że nie mógłbym teraz wykorzystać tych pieniędzy, aby zrobić coś ważniejszego dla mnie. Czy ci się to podoba, czy nie, twoje kierownictwo lub klienci płacą za to i musisz być w stanie sprzedawać, aby ich przekonać.
Przeformułujmy to, aby pozycjonować się jako klient. Dobra stara rola.
Jako klient, który sam byś kupił?
A co według inżynierów Acme Deluxe jest lepszą odpowiedzią?
źródło
„ Dług techniczny ” może być trudny do przedstawienia kierownictwu, ponieważ nie widzą takiej potrzeby. Pytanie może zostać sformułowane w ten sposób, czy w firmie jest mistrz, który powiedziałby: „Spójrz, poświęcamy X% czasu na opracowanie tutaj długu technicznego. Daj nam 3 miesiące, aby pokazać, że to działa dobrze” lub coś w tym rodzaju podobny. Istnieje roszczenie do autonomii, ale także ramy czasowe, ponieważ w przeciwnym razie kierownictwo może zastanawiać się, jak długo, dopóki nie zobaczą wyników, które są dość niebezpiecznym terytorium.
Pierwszą kwestią jest jednak to, czy postrzegają to jako problem. Jeśli osoba słabo widząca nie wie nic o okularach i jakiego rodzaju zmianach może zapewnić, w jaki sposób może zrozumieć, dlaczego badanie wzroku może być cenne? Ten sam pomysł, w którym temat jest raczej techniczny i niestety niełatwy do oszacowania.
źródło
Powinieneś przestać na to narzekać.
Dlatego:
Więc najlepszym rozwiązaniem jest:
źródło
Rozumiem, że nigdy nie byłeś zaangażowany w projekt ponownego napisania / zastąpienia, a nawet aktualizacji istniejącego systemu.
To jedne z najtrudniejszych projektów do pomyślnego ukończenia. Niektóre problemy, z którymi się spotkasz, to:
Wzywam was do unikania wszelkich projektów ponownego pisania / refaktoryzacji, takich jak plaga, mogą być jednymi z najbardziej zniechęcających doświadczeń w karierze zawodowej.
W wyrażeniu „Jeśli nie jest zepsute, jest wiele mądrości, nie naprawiaj tego”.
źródło
Z mojego życia nie rozumiem, dlaczego niektórzy ludzie tak ślepo boją się zmian - śmierdzi brakiem własnych umiejętności.
Zeszłej nocy oglądałem program w Parku Narodowym Yosemite i zauważono, że od 1940 r. Do późnych lat 90. XX w. Nie wyrosło ani jedno nowe drzewo Sequoia. Odkryto, że powodem tego była ścisła polityka zapobiegająca spalaniu się pożarów lasów i że szyszki sosny Sequoia potrzebowały ciepła od ognia do otwarcia i uwolnienia nasion.
Widzisz, pożar co około dziesięć lat był zdrowy. Oczyścił wszystkie nagromadzone drewno martwe i jeżynę, aby zachować zdrowie istniejących drzew (procesów) i zrobić miejsce dla nowych (funkcji).
Obecnie pracuję nad projektem, który ma wyraźne podstawy do przebudowy: starsze oprogramowanie zostało napisane w całości przy użyciu formularzy internetowych .NET. Prawie cała logika biznesowa jest połączona z logiką widoku znaczników HTML / serwera i nie może być rozszerzona na inne aplikacje, gdy firma się rozwinęła.
Zadaniem kierownictwa jest to, że mają oni odpowiednie zaufanie do swoich programistów, co, zdaję sobie sprawę, jest rzadkim luksusem.
Tak, zadaj sobie pytanie, czy odbudowa jest naprawdę konieczna. Staraj się ponownie wykorzystać istniejący kod, który działa tam, gdzie możesz. W razie potrzeby zintegruj ten kod z odbudową. Po prostu nie pozwól nikomu cię przekonać, że obawa przed odważnymi zmianami to jedyny sposób, aby istnieć jako programista.
Powodzenia!
źródło
Musisz podać swojemu zarządowi powód finansowy, aby poradzić sobie z długiem technicznym, oraz ramy zarządzania zmniejszaniem tego długu technicznego.
Jednym z takich ram jest utrzymanie mapy technologicznej . Rozpoczęcie od mapy drogowej pomoże Ci powstrzymać się od spłacania długu technicznego, a także może pomóc w zmniejszeniu istniejącego zadłużenia.
W wielu udanych projektach długoterminowych stowarzyszono komitety sterujące i plany działania w celu ukierunkowania rozwoju. Są one szczególnie pomocne, gdy zaangażowanych jest wiele zespołów programistów i interesariuszy.
Sugeruję, aby omówić tę strategię ze swoimi menedżerami (i, jeśli to możliwe, tymi, którzy podejmują decyzje o tym, gdzie wydawane są pieniądze).
Ogólne podejście do tworzenia mapy drogowej i zarządzania nią jest proste, ale wymaga wsparcia zespołu zarządzającego. Najpierw określ cel. Zdefiniuj elementy długu technicznego i opracuj docelową architekturę systemu, która zmniejszy elementy długu technicznego. Pamiętaj, że nie musi to być idealne, po prostu wykonalne i lepsze niż obecnie. Weź pod uwagę oprogramowanie, narzędzia programistyczne, platformy sprzętowe, główne nowe funkcje, które mogą zostać dodane do systemu. Wykonaj analizę kosztów. Jeśli masz pożądaną architekturę, jakie są wymierne korzyści z przeprowadzania refaktoryzacji? (Korzyści obejmują skrócony czas testowania, bardziej niezawodne oprogramowanie, bardziej przewidywalne cykle programowania itp.) Jeśli możesz wykazać wystarczające korzyści z przeprowadzania refaktoryzacji, możesz uzyskać wsparcie zarządzania.
Po uzyskaniu mapy drogowej i pomocy w zarządzaniu opracuj serię kroków (zwanych także planem), które musisz podjąć, aby osiągnąć pożądany stan. Dobrym pomysłem może być powołanie komitetu sterującego, który utrzymuje mapę drogową, szkoli i edukuje zespoły programistów na mapie drogowej i okresowo sprawdza zmiany pod kątem integralności architektonicznej.
Mapy drogowe są naprawdę przydatne i być może 13. pytanie w teście Joela powinno brzmieć „Czy masz mapę drogową?”
Oto wideo z pierwszej godziny ostatniej sesji mapy drogowej Red Hat Linux .
źródło
Będąc już zaangażowanym w poważną przeróbkę (nie tylko refaktoryzację), mogę zgodzić się, że przekonanie facetów finansowych do zgody na projekt było jedną z głównych przeszkód. Przezwyciężenie tej przeszkody wymagało ode mnie napisania, przedstawienia i obrony raportu wskazującego na szereg problemów, które oznaczały, że biznes firmy będzie martwy w wodzie w perspektywie krótko- i średnioterminowej.
Kluczowe czynniki wpływające na osiągnięcie porozumienia:
Raport wyszczególnił problemy wraz z szacunkami bieżących kosztów i oferował 3 opcje:
Po wdrożeniu trzeciej opcji moja 3-miesięczna umowa przerodziła się w 3 lata bardzo ciężkiej pracy, zarówno przy opracowywaniu nowego oprogramowania i sprzętu, ale z bardzo dobrym wynikiem.
W przypadkach o mniej ekstremalnym zadłużeniu technicznym staram się przyjmować to, co nazywam refaktoryzacją partyzantki:
Gdy występuje problem z określonym modułem:
źródło