Jak przekonać kierownictwo do radzenia sobie z długiem technicznym?

158

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 ?

Desolate Planet
źródło
5
„współpracować z programistami” „przekazać to kierownictwu” O co pytasz? Deweloperzy czy menedżerowie? Czyje zachowanie chcesz zmienić?
S.Lott,
45
Dług techniczny jest jak dług finansowy - na dłuższą metę o wiele łatwiej jest po prostu nie gromadzić go na początku. Płać wszystkie rachunki techniczne raz w tygodniu.
Lawrence Dol
7
Mike> Myślę, że żyjesz w znacznie mniej restrykcyjnym świecie, ponieważ terminy i ograniczone budżety dominują w świecie, w którym żyję. Jeśli oprogramowanie nie dostosowuje się dobrze do przyszłych potrzeb i wymaga dużo pracy, aby to naprawić, zarząd często jest bardziej zaniepokojony ignorowaniem i wciąż wykorzystuj funkcje. Teraz wiele firm, nad którymi pracowałem, wprowadziło karty czasu pracy, więc programiści muszą rejestrować swoją pracę, a jeśli nie inwestuje się czasu w to, gdzie kierownictwo widzi potencjalny biznes, marnujesz swój czas.
Desolate Planet,
4
Wydaje mi się, że można powiedzieć, że jest to problem z korzyściami krótkoterminowymi a długoterminowymi. Jeśli zespół oprogramowania uporządkował system w taki sposób, że wdrożenie nowych funkcji zajęło niecałą godzinę zamiast jednego dnia, jest to natychmiastowa korzyść. Jeśli kierownictwo widzi, że próbujesz ulepszyć kod i postępujesz wbrew temu, czego chcą, jesteś trochę buntownikiem w ich oczach. Nie wiem, jakie jest najlepsze rozwiązanie, ale wydaje się, że to taki powszechny problem i widziałem, co robi z zespołami.
Desolate Planet,
3
Scott> Aby odpowiedzieć na pytanie, chciałbym zmienić nastawienie kierownictwa. Programiści znają kod i mają doświadczenie z pierwszej ręki, co do ulepszenia kodu, aby ułatwić. W poprzednim zadaniu, kiedy wydaliśmy nową wersję aplikacji, liczba błędów stale rosła w strasznym tempie. Starałem się wprowadzić strategie testowe, ale często wydaje mi się to straconą przyczyną.
Desolate Planet,

Odpowiedzi:

191

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.

jmort253
źródło
30
moje doświadczenie jest zasadniczo takie samo. Dług techniczny zostaje oczyszczony w miarę dodawania nowych funkcji. Czasami szacunki niektórych „powiązanych” poprawek / funkcji są uzupełniane w celu uwzględnienia czyszczenia tych rzeczy.
Ken Henderson,
4
+1 udostępniać moje uczucia dokładnie ... chyba pan wyraził się o wiele bardziej dyplomatycznie;)
Michael Brown
7
Dobra odpowiedź. Jeszcze nie widzę firmy, która chętnie podpisuje się pod projektem „refaktoryzacji”, który nie przyniósłby żadnej korzyści klientowi, a jedynie porządniejszego kodu. Refaktoryzuj zgodnie z rzeczywistym użyciem.
JBRWilkinson
7
„Kiedy spotkałem się z szefem w celu omówienia tego, powiedział, że powinienem uwzględnić refaktoryzację we wszystkich moich szacunkach”. - Takie podejście przyjąłem i stanowisko wielu programistów w zespołach, w których pracowałem. Jednak gdy tych 9 do 5 programistów, jak ich nazywamy, są zaniepokojone swoimi recenzjami i podwyżkami, nie będą tworzyć więcej pracy dla siebie. Będą podążać za tym, co myśli kierownictwo, przecież to one im płacą.
Desolate Planet,
8
@ jmort253: istnieje jeden (niewielki) problem z tą poza tym doskonałą polityką -> nie jest możliwe wprowadzenie znacznych zmian (tj. zmiana bazy danych, jak powiedział PO). Należy je jednoznacznie rozwiązać.
Matthieu M.,
48

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.

Bernard Dy
źródło
43

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:

  • Szacunki nowych funkcji są znacznie wyższe, niż powinny. Lub całkowicie niemożliwe.
  • Zły kod powoduje pojawienie się więcej złego kodu
  • Lista błędów rośnie, nawet jeśli programiści zawsze je naprawiają
  • Członkowie zespołu odchodzą (to samo może wskazywać na problem, jak wyjaśniono w tej doskonałej odpowiedzi )
Nicole
źródło
7
+1, chociaż myślę, że ostatnia kula powinna brzmieć: „Dobrzy / najlepsi członkowie zespołu odchodzą”
Ken Henderson
12
Nieco dług techniczny jest czasem inwestycją. Jeśli ścigasz się z inną firmą i ten, kto uruchamia się jako pierwszy, zdobywa rynek dla siebie, wówczas sensowne jest tworzenie skrótów w kodzie, aby uruchamiać się szybciej. Nikt nie będzie dbał o to, że masz doskonały kod, jeśli masz zero płacących klientów.
quant_dev,
3
@ quant_dev, jeśli postrzegasz to jako dychotomię między „szybszym” a „doskonałym kodem”, wtedy oczywiście tak będziesz myśleć. Nie ma powodu, dla którego skróty nie mogą być technicznie prawidłowe, w takim przypadku nie są uważane za dług techniczny.
Nicole,
2
@Reneesis „Nie ma powodu, dla którego skróty nie mogą być technicznie prawidłowe” - to po prostu nieprawda.
quant_dev
3
A czasem wcale nie jest to dług techniczny, to po prostu bałagan: sites.google.com/site/unclebobconsultingllc/…
TrueWill
30

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ć.

Karl Bielefeldt
źródło
20

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.

Péter Török
źródło
12

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.

biziclop
źródło
5
+1 Ale ci 9-5 programistów, cóż, chcesz dla nich drzwi obrotowe, najlepiej z jakąś formą akceleratora.
Orbling
3
@Orbling: +1. Jeśli nie dbają o to wystarczająco, naprawdę powinni pracować gdzie indziej. WIELKIE jest, że deweloperzy przychodzą do ciebie z „Właśnie wpadłem na ten pomysł ...”.
szybko_now
3
@Orbling W niektórych obszarach rozwoju mogą być przydatne. Wcale nie jestem fanem „snobizmu deweloperów”, ale musisz znaleźć niszę dla każdego, aby mogła się przydać. Najgorsze, co możesz zrobić, to założyć, że wszyscy są tacy jak ty.
biziclop
Osobiście uważam, że przemysł jest silnie przeciążony. Tam, gdzie mam siedzibę, większość zadań związanych z oprogramowaniem ma obecnie 300 dobrych kandydatów. Przy takim poziomie konkurencji pracodawca może pozwolić sobie na zatrudnienie pracodawców, którzy dokładają wszelkich starań i są lepsi od przeciętnych.
Orbling
„Przechodzę na modernizację w celu refaktoryzacji, aby zaoferować namacalne korzyści (punkty sprzedaży)” - o tym ciągle słyszę od naszego głównego architekta, więc będę musiał to poprzeć.
Mario T. Lanza,
12

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?”

Orbling
źródło
12

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ęść.

EricSchaefer
źródło
5
Nie mogę zgodzić się więcej: „Dług techniczny jest jak dług finansowy - na dłuższą metę łatwiej jest po prostu nie gromadzić go na początku. Płacić wszystkie rachunki techniczne raz w tygodniu”
Lawrence Dol
7

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ę.

przestępstwa umysłowe
źródło
6

Po wyjaśnieniu długu technicznego twoje kierownictwo powinno być przekonane do jego spłaty:

Wyobraź sobie, że masz bardzo brudną kuchnię pełną gówna. Przed przygotowaniem posiłku musisz najpierw poświęcić godzinę na sprzątanie. I tak jest za każdym razem, gdy chcesz jeść. Ponadto, przygotowując posiłek, musisz zachować szczególną ostrożność, aby upewnić się, że bzdury nie wpadną do posiłku.

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.

BЈовић
źródło
4

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.

Załóżmy, że kupujesz lodówkę. I można było kupić lodówkę za 1000 USD, która działała OK od Acme Corp. Lub lodówkę za 2000 USD od Acme Deluxe Fridges, która wyglądała tak samo na zewnątrz i miała te same specyfikacje techniczne, ale miała niższe koszty konserwacji ze względu na czystszą architekturę wewnętrzną.

Jako klient, który sam byś kupił?

A co według inżynierów Acme Deluxe jest lepszą odpowiedzią?

Jasonk
źródło
3
Trudno mi określić twoje stanowisko w tej sprawie. Myślę, że twoja odpowiedź brzmi „zależy od tego, czego chce klient”. Problem polega na tym, że nie każdy klient rozumie, że tańsza lodówka wycieknie stopionego, nieprzyjemnego worka z sekcji zamrażarki, będzie głośno hałasować i ostatecznie przestanie działać po 5 latach, podczas gdy drugi będzie działał płynnie i cicho przez 20 lat i nie będzie wymieniany, dopóki właściciele nie uznają go za stylowy i odsprzedają go w zamian za nowy model. Mimo to podoba mi się twoje pytanie. To prowokuje do myślenia. +1
jmort253
Pierwsza linijka - „To musi być bardzo przekonujący argument [], że nie mogłem teraz wykorzystać tych pieniędzy, aby zrobić coś ważniejszego dla mnie”. Korzystam z przykładu lodówki szczerze mówiąc, nie dbam o to, co dzieje się w mojej lodówce. Chcę tylko wynik. (zimne jedzenie za rozsądną cenę). Szczerze mówiąc, nie dbam o to, czy inżynierowie lodówki uważają, że jest to lepszy produkt wewnętrznie. Mogę się z nimi skonsultować, ale tak naprawdę to nie jest ich decyzja.
jasonk
3

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.

JB King
źródło
Zgadzam się z tym w pełni i coraz częściej go znajduję. Ostatnio gromadzę listę wad, które zostały ponownie otwarte, ponieważ nie wprowadzono właściwej poprawki lub wad o podobnym charakterze. Mam nadzieję, że programiści poświęcili czas. Czasami tak, czasem nie, ale tego rodzaju dane są użyteczną podstawą do pokazania kierownictwu, w jaki sposób niezdrowy produkt wpływa na ich działalność.
Desolate Planet
2
W moim obecnym miejscu pracy nadgodziny są przydzielane z niewłaściwych powodów. Gdyby zainwestowano czas w utrzymywanie aplikacji w dobrej kondycji zamiast problemów z gaszeniem pożarów, zaoszczędzono by pieniądze na nadgodzinach, a programiści byliby bardziej upoważnieni niż wypaleni i zirytowani kierownictwem.
Desolate Planet
Ale kierownictwo (w większości przypadków poprawnie!) Widzi to w ten sposób. Mam magimix z lat 80., który wciąż działa, a ty każesz mi go wymienić tylko dlatego, że jest stary, a kolor jest niemodny!
James Anderson
2

Powinieneś przestać na to narzekać.

Dlatego:

  1. Nigdy nie planują używać oprogramowania dłużej niż rok
  2. to tylko strata czasu na poprawianie go, jeśli ich plan polega na zrzuceniu go później
  3. jest kilka prawdziwych problemów, które wymagają naprawy
  4. programiści muszą nauczyć się radzenia sobie z utrzymaniem, nawet jeśli nie zawsze jest to zabawne
  5. narzekanie, że wiesz lepiej, co trzeba zrobić, jest aroganckie - ktoś inny podejmuje decyzję i powinieneś być z tego zadowolony
  6. W każdym razie ufają ci, że piszesz dobry kod

Więc najlepszym rozwiązaniem jest:

  1. Gdy powiedzą ci nowe zadanie, postaraj się je jak najlepiej zrealizować w danym czasie
  2. Napisz to doskonale za pierwszym razem. Jeśli chcesz to zmienić później, popełniłeś błąd za pierwszym razem, a każda zmiana zawsze zmierza w złym kierunku - i jest to okazja do nauki dla programistów, kiedy popełniasz błędy.
  3. Nie proś o to dodatkowego czasu, nie dostaniesz go, są terminy, które znasz.
tp1
źródło
3
W większości się z tym zgadzam, z wyjątkiem tego, że wiadomo, że nawet kiepskie oprogramowanie ma tendencję do przetrwania znacznie dłużej, niż oczekują twórcy. Ale masz rację, lepiej nie narzekać. Zamiast tego, jeśli zobaczysz pewne faktoring o ograniczonej skali, który pomoże w zrozumieniu kodu, być może warto iść do przodu i wprowadzać zmiany BEZ ZEZWOLENIA podczas konserwacji / napraw błędów (i niesie ze sobą ryzyko).
Angelo
@Angelo - Czy nie byłoby lepiej wyrazić swoje obawy, niż pozwolić zespołowi cierpieć w milczeniu? Widziałem, co ten problem robi z morale zespołu, a także z ilością czasu / pieniędzy marnowanych na nadgodziny. Nie uważam tego za „jęczenie” jako takie. Wskazujesz po prostu ryzyko związane z projektem, a jeśli twoje pomysły mogą przyspieszyć terminy realizacji i usprawnić procesy, to dlaczego nie spróbować wyrazić swoich obaw? Jeśli to spadnie z głuchych uszu, to przynajmniej wiesz, gdzie stoisz.
Desolate Planet
2
Państwo musi narzekać głośno , inaczej jest to twoja wina czy innych ludzi kodu przerwy ( „Wiedziałeś, że był to bałagan i nie mów nikomu?”). Wstanie i powiedzenie „Hej szefie, to gówno prędzej czy później trafi w fanów” jest niezbędne, aby zespół deweloperów mógł funkcjonować.
Alex
1

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:

  1. Reguły biznesowe giną w czasie.
  2. Dokumentacja i implementacja są całkowicie niezsynchronizowane.
  3. To, co widzisz jako błąd, użytkownicy widzą jako funkcję.
  4. I odwrotnie, wiele „funkcji” będzie postrzeganych przez użytkowników jako wady.
  5. Nie dostaniesz od użytkowników wpisu - będą traktować twoje „ustalanie faktów” jako „kujony zadające głupie pytania”, uznają wysiłek testowy za stratę czasu, będą nalegać na dodanie nowych funkcji, tym samym wydłużając projekt, już opóźniłem się.
  6. Możliwe, że kod źródłowy nie pasuje w 100% do uruchomionego pliku wykonywalnego.
  7. Podczas gdy Twój wydział zajmuje się rozwojem refaktoryzacji, firma naprawdę tego nie chce.
  8. Możliwe, że Twoje przefakturowanie będzie wymagało „czystszych ulepszonych interfejsów”, przeciągając w ten sposób inne projekty do bagna opóźnionego dostarczenia i nieudanych testów.
  9. Po skończeniu projektu (znacznie ponad 50% tych wysiłków kończy się niepowodzeniem) stracisz całą wiarygodność - będziesz musiał przenieść się do innej firmy w innym mieście, aby znaleźć kogoś, kto będzie gotowy cię też wysłuchać.
  10. Jeśli projekt „się powiedzie”, wszyscy zapamiętają, jaki to był koszmar - ty .......

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”.

James Anderson
źródło
1
„Rozumiem, że nigdy nie byłeś zaangażowany w projekt ponownego napisania / zastąpienia lub nawet aktualizacji i istniejącego systemu” - Źle, 7 lat.
Desolate Planet
1
Całkowicie się zgadzam, że pełne ponowne napisanie często jest katastrofą. Ale mam trzy przykłady z ostatnich 8 lat mojej kariery. Jednym z nich był długi slog, który sprawił, że byliśmy w stanie lepiej utrzymać produkt, ale nie przyniósł żadnej wartości biznesowej; innym był krótki przepis, który był całkowitym sukcesem; trzecia to decyzja o odmowie, która ostatecznie zabiła firmę. Wybierz swoją truciznę.
Tom Harrison Jr
1

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!

Matt Cashatt
źródło
1
w jaki sposób odpowiada to na zadane pytanie: „W jaki sposób powiadamia się o tym kierownictwo, aby zainteresować ich załatwieniem zadłużenia technicznego?”
komara
1
@gnat: W jaki sposób większość „odpowiedzi” odpowiada bezpośrednio na to pytanie? Zobacz na przykład odpowiedzi Jamesa Andersona, tp1 lub odpowiedzi u góry z największą liczbą głosów. Ale aby odpowiedzieć na twoje pytanie, podałem alternatywną analogię, której może użyć OP. Wydaje mi się, że po prostu nie zgadzasz się z moją opinią w tej sprawie. To w porządku, ale nie ma powodu, by głosować.
Matt Cashatt,
1
na podstawie mojej lektury najlepsza odpowiedź, którą odsyłasz, wydaje się bezpośrednio dotyczyć odpowiedzi na zadane pytanie, w oparciu o odpowiednie doświadczenie „Kiedy spotkałem się z szefem w celu omówienia tego ...” Co do twojej opinii, raczej zgadzam się z tym, ale głosuję na podstawie w sprawie jakości treści, a nie tego, czy popieram określoną opinię, czy się nie zgadzam. Model głosowania na stosie wymiany pytań i odpowiedzi jest dość kiepski, gdy (źle) jest używany w badaniach opinii publicznej
gnat
1
Polecam więc przeczytać to jeszcze raz. Opisanie rozmowy z szefem na temat metody pokrycia długu technicznego poprzez uzupełnienie szacunków dotyczących przyszłych prac nie odpowiada na pytanie: „W jaki sposób przekazuje się to kierownictwu, aby zainteresować go uregulowaniem długu technicznego?” zarówno. Niemniej jednak nie głosowałem za odrzuceniem odpowiedzi, ponieważ dodała ona do rozmowy. Więc wszystko, co udało ci się zrobić, to wyciszenie opinii w sprawie, z którą się zgadzasz bez istotnego powodu. „Programiści” powinni być miejscem, w którym możemy rozmawiać. Nie wszystko jest binarne.
Matt Cashatt,
1

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 .

Jay Elston
źródło
1

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:

  • Istniejący kod znajdował się w nieobsługiwanym łańcuchu narzędzi (MicroPower Pascal), który działał tylko na prawie nieobsługiwanej platformie programistycznej (PDP11-23).
  • Znalezienie programistów, którzy mogliby pracować nad narzędziami i celami, stało się prawie niemożliwe.
  • Docelowy sprzęt nie byłby już dostępny, gdyby potrzebne były części zamienne, a producent coraz bardziej niechętnie świadczył usługi naprawcze.
  • Problemy w kodzie powodowały łatwe do zidentyfikowania niezadowolenie klienta i bezpośrednie koszty obsługi.
  • Dodanie nowych funkcji, a nawet poprawienie błędów stało się prawie niemożliwe z powodu ograniczeń docelowego sprzętu, co spowodowało konieczność przefakturowania innych obszarów, aby zapewnić miejsce podczas rozwiązywania problemów.
  • Opracowanie i przetestowanie wszystkich zmian było 8-godzinne.

Raport wyszczególnił problemy wraz z szacunkami bieżących kosztów i oferował 3 opcje:

  1. Zatrzymaj się w miejscu, w którym byliśmy, a być może nawet nie naprawimy błędów w najbliższej przyszłości.
  2. Zoptymalizuj kod tylko pod kątem miejsca, bez względu na łatwość konserwacji, zwracając uwagę, że każdy, kto próbuje utrzymać zoptymalizowany kod, musi być mądrzejszy niż ktokolwiek dokonał optymalizacji.
  3. Wdrażaj ponownie, z testowalnością i łatwością konserwacji jako ważnymi czynnikami, w standardowym, powszechnie nauczanym języku (ANSI C), na nowym, niedrogim sprzęcie COTS, (PC-104), z wieloma dostawcami dostępnymi u siebie zaprojektowana karta interfejsu, która umożliwia pracę z pozostałym istniejącym sprzętem. Dodanie ograniczonego zestawu nowych funkcji w ramach rozwoju, takich jak pamięć nieulotna, zegar kontrolny zapewniający automatyczne ponowne uruchomienie w przypadku awarii, niektóre jednostki ulegały awariom wiele razy dziennie i wymagały wezwania serwisu o wartości 40 GBP w celu zresetowania , lepsza diagnostyka w procesie.

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:

  1. Napisz zestaw testów, które wykażą problem, który również może się nie powieść bez refaktoryzacji
  2. Refaktor w ramach rozwoju wskazuje, że testy wciąż się nie udają.
Steve Barnes
źródło