Jak rozmawiać z kierownictwem o kodzie 'genialnym'?
EDIT:
Dziękujemy wszystkim za wspaniałe rady, komentarze i opinie.
Jak się okazuje, nikt nie był “złym facetem” w tej sytuacji. Porady, które tu otrzymałem pomogły mi w ponownym skontaktowaniu się z byłym liderem projektu. Jak się okazuje, moja firma, bez żadnego widocznego powodu, otrzymała wczesną wersję “w rozwoju” bazy kodowej. Stara firma przysłała nam wersję gotową do produkcji, a jako wisienkę na czele publicznie pochwaliła mnie za skuteczne odwrócenie inżynierii niekompletnego produktu na głębokość, którą miałem.
TL;DR
odziedziczyłem projekt. Krótko mówiąc, kod, który mam obowiązek utrzymywać, jest zły. Tak zły, w rzeczywistości, produkt jest nie tylko niekompletny, ale i niefunkcjonalny i jest od lat.
_Jak komunikuję się z zarządem, w sposób, który nie jest dla nich wstydliwy, w sposób, który nie sprawia, że wyglądam na leniwego lub głupiego, że cenny produkt jest w fatalnym stanie? _
- *
Clarification: this question vs technical debt
_This question has to do with me challenging long-standing beliefs about a product without committing career suicide. _ Zamiast zajmować się stricte zadłużeniem technicznym, jest takie: kierownictwo sugeruje, że być może kod jest tak skomplikowany, że nie mogę go zrozumieć, i pozostawione błędy są z projektu; _ że oryginalny programista jest tak meta, że to, co wygląda na błędy, jest właściwie uderzeniem geniusza. Być może innym powodem, dla którego nie chodzi tu o dług techniczny jest to, że różnica między kodem “geniusza” a długiem technicznym polega na tym, że kierownictwo informuje, że nie powinienem zmieniać kodu “geniusza”, a kod “geniusza” nie jest długiem technicznym: jest to sekretna czarna magia. **Chciałbym, żeby kierownictwo myślało o tym jako o długu technicznym. Zamiast tego nie. Zarząd nie zajmuje się bezpośrednio czasem, kosztami lub pieniędzmi – chociaż to jest jakiś problem.
Szczegóły
Przez większość czasu, nie byłbym zdenerwowany komunikując to zarządowi. Niestety, długa linia konserwacji kawałka przez ludzi, z których niektórzy mieli małe doświadczenie w rozwoju, którzy tylko “dotykali” kodu na tyle długo, aby dodać łatkę tu czy tam, a następnie przejść dalej, namalował obraz do zarządzania przez lata, że projekt jest tylko jeden krok od bycia gotowym do produkcji.
To żałośnie nie jest tak. Krótka lista problemów w genialnym kodzie, na które natknąłem się w bazie kodu ~1.5Gb to…
- Są te same funkcje, te same nazwy zmiennych o tym samym zakresie w całej bazie kodu (w języku, który tego nie obsługuje).
- Funkcje są zdefiniowane, ale nigdy nie są wywoływane.
- Niekompletne wersje używanych bibliotek.
- Twardo kodowane URI i adresy IP bez dokumentacji co do ich działania.
- Losowo wybrane trasy API, które nie zwracają nic lub bełkotują; które nie są wtedy używane.
- Twardo kodowane, niezaszyfrowane hasła i prywatne klucze ssh.
Powinienem dodać, że gdy po raz pierwszy zacząłem nad tym pracować, **_nie został on nawet skompilowany. I kiedy dostałem go do kompilacji, zawiódł w czasie pracy.
To koszmar.
Problem w tym, że kierownictwo otrzymało zapewnienie, po kim go odziedziczyło, a po poprzednich programistach “gung-ho”, że “działa”, więc zainwestowało w niego znacznie więcej… A teraz kasa jest mi przekazywana. I chcą go wyprodukować w ciągu około 2 miesięcy.
Kiedy sugeruję, że poprzedni programiści mogli nie być do końca uczciwi lub całkowicie zrozumieli produkt, kierownictwo wysyła mieszane sygnały o “po prostu to zrób” i “dlaczego jeszcze tego nie zrobiłeś” … i “nie jesteśmy pewni, czy kiedykolwiek to zadziałało” do “to działało, kiedy to otrzymałeś” i “nigdy nie widzieliśmy, żeby to działało” do “to już jest w produkcji”.
[EDIT: wkleił większość następnego akapitu do sekcji TL;DR. ]
Management również zasugerował, że być może jest to tak złożone, że nie mogę tego zrozumieć, i pozostawione błędy są z projektu; _że oryginalny programista jest tak meta, że to co wygląda na błędy, to tak naprawdę uderzenia geniusza.Przyznam, nie jestem geniuszem, i być może tak jest: którym oferuję moje wcześniejsze spostrzeżenia na temat bardzo fundamentalnych kwestii, które znalazłem.
Być może jest polityka w grze powyżej mojego poziomu.