Wiem, że to stare pytanie i będę miał szczęście, jeśli 3 osoby przeczytają tę odpowiedź, ale opowiedzieć zabawną historię, więc do diabła.
Przyszedłem do projektu (systemy osadzone, oprogramowanie krytyczne dla bezpieczeństwa, bardzo duże ryzyko) i byłem przerażony tym, co znalazłem. Ludzie używający C (szczególnie wskaźników) niepoprawnie, bez analizy statycznej, bez recenzji kodu, bez testów innych niż „zintegruj to razem, uruchom, pobij, zobacz, co się psuje”.
Mój pierwszy tydzień napisałem tam bardzo długi e-mail (jako konsultant). Było to trudne, ponieważ zasadniczo mówiłem, że było źle zarządzane, programiści byli nad ich głowami, nie śledzono żadnych procesów itp. Powinien był udać się do wiceprezesa korporacyjnego, ale zamiast tego wysłałem go do kierownika ds. Rozwoju, który zatrudnił mnie. Nie był do tego całkowicie defensywny, w rzeczywistości przyznał się do wielu niedociągnięć i powiedział mi, że nie jako pierwszy ich zwróciłem (bez żartów, prawda?)
Aby odpowiedzieć na sedno pierwotnego pytania: zaproponowałem, że spędzę NAJBARDZIEJ 1 osobo-tydzień na skonfigurowaniu i uruchomieniu narzędzia analizy statycznej Gimpel Lint (PC-Lint / Flexelint) na ich platformie oraz na przeprowadzeniu pełnego raportu o wszystkim, co zostało znalezione . Powiedziałem im, że jestem absolutnie pewien, że w rezultacie znajdziemy kilka czających się „bomb czasowych”.
Obliczyli moją stawkę godzinową, pomnożili ją przez 40 i stwierdzili, że „było to zbyt drogie”. Krótko mówiąc, wyjechałem tam w ciągu 60 dni. Około 3 lata później dowiedziałem się o wycofaniu produktu, koszt zbliżył się do 9 cyfr (100 mln USD), nie wspominając już o szkodzie dla reputacji firmy.
Nie będę wspominał o firmie, produkcie ani branży, ale nadal utrzymuję kontakt z jednym z inżynierów, a kiedy wyjaśnił mi, co spowodowało wycofanie, wywróciłem oczami - to był problem, który miałby został złapany nawet przez podstawowe narzędzie do analizy statycznej (dostęp do tablicy poza granicami). Szczerze mówiąc, nie mogę z całą pewnością stwierdzić, że problem tkwił w kodzie, kiedy tam byłem, ale jestem pewien, że gdyby wydali pieniądze na jakieś narzędzie do analizy statycznej, ten błąd nie uciekłby.
Zaoszczędzili więc 295 USD, nie kupując PC-Lint (OK, zaoszczędzili też co najwyżej tydzień płacenia mi) - ale nigdzie nie jestem wystarczająco dobry, by pobierać 100 mln USD za tydzień.
To właśnie nazywam cholernie dużą stratą pieniędzy.
Przypomina mi żart, o którym wielu z was mogło już słyszeć:
Czy słyszałeś kiedyś historię o ogromnym silniku statku, który zawiódł? Właściciele statku próbowali jednego eksperta po drugim, ale żaden z nich nie był w stanie przewidzieć, jak naprawić silnik. Potem przyprowadzili starca, który naprawiał statki, odkąd był młodszy. Nosił ze sobą dużą torbę narzędzi, a kiedy przybył, natychmiast zabrał się do pracy. Bardzo dokładnie sprawdził silnik, od góry do dołu.
Byli tam dwaj właściciele statku, obserwując tego człowieka, mając nadzieję, że będzie wiedział, co robić. Po obejrzeniu rzeczy starzec sięgnął do torby i wyciągnął mały młotek. Delikatnie postukał w coś. Silnik natychmiast ożył. Ostrożnie odłożył młot. Silnik został naprawiony! Tydzień później właściciele otrzymali rachunek od starca za 10.000 $.
"Co?!" zawołali właściciele. „Prawie nic nie zrobił!”
Napisali więc starcowi notatkę: „Proszę, wyślij nam wyszczególniony rachunek”.
Mężczyzna wysłał rachunek z napisem:
Tapping with a hammer ........ $ 2.00
Knowing where to tap ......... $ 9998.00
Wysiłek jest ważny, ale wiedza o tym, co robisz, robi różnicę.