Podstawowa wada programistów to błędne przeświadczenie, że szybko i lepiej napiszą nową wersję działającej aplikacji. Jak mylne może być takie rozumowanie przeczytamy chociażby w tłumaczeniu zagranicznego artykułu, który napisał Joel Spolsky. Dalsza część wpisu to moje własne przemyślenia na temat tworzenia oprogramowania.
Z własnego doświadczenia wiem jak silna dla programisty jest motywacja do rozpoczęcia nowego projektu. Nowe plany stworzenia czegoś oryginalnego, lepszego, innowacyjnego, wydajniejszego, ładniejszego. Jak zwodnicze potrafi być nasze myślenie kiedy po krótkim czasie płomienny zapał wygasa, a miejsce podniecenia zajmuje stopniowe rozczarowanie i przygnębienie. Programista sądzi, że napisze dany kod w określonym czasie. Szybko przekonamy się, że tak nie będzie po czasie jaki przydziela kierownik projektu. Dlatego, praktycznie zawsze przepisanie aplikacji od zera kończy się porażką. Przewidywany czas pracy programisty mnożymy dwukrotnie, a ten czas kierownik projektu ponownie podwaja. Dopiero taki okres bywa rzeczywistym czasem tworzenia danego projektu. Twierdzę tak na podstawie własnych doświadczeń, choć w różnych firmach bywają inne przeliczniki. Oczywiście nie ma tutaj żadnych wyników ankiet, ani badań, ale każdy w głębie serca, może sam zadać sobie pytanie.
Czy warto przepisać dany produkt od zera?
Pytanie to jest bardzo skomplikowane, bo istnieje wiele powodów, które skłaniają programistów do próby przepisania oprogramowania. Jednak zmieniony interfejs użytkownika, funkcjonalności aplikacji czy poprawa wydajności nie zawsze są warte przepisywania oprogramowania. Czas i zasoby poświęcone na tworzenie nowej wersji, zwykle przerastają wstępnie zaplanowane, co jeszcze bardziej pogłębia frustrację zespołu. A odpowiedź jest bardzo prosta – jaki jest sens w przepisywaniu czegoś co działa. Może nie wygląda pięknie od strony wizualnej, może wewnątrz kodu kryją się absurdalne rozwiązania programistyczne, ale przecież to działa. Wielu ludzi poświęciło swój czas, testowało, pisało poprawki, aby to oprogramowanie działało, a próba przepisania wszystkiego od nowa to najprawdopodobniej, przekreślenie ich trudu i wpędzenie siebie w wielkie bagno. Ponownie napotkamy problemy, które rozwiązywali nasi poprzednicy.
Zupełnie podobnie wygląda sytuacja, w której rozpoczynamy prace nad istniejącym projektem. Nie możemy wyzerować konta, poprzez nowe plany, rozwiązania i koncepcje. Musimy wspierać przestarzały, nieaktualny kod, dźwigać na plecach ciężar poprzednich wersji oprogramowania, kompatybilności oraz błędów swoich poprzedników. Tutaj również pojawia się przytoczone wyżej pytanie.
Czy warto przepisać dany produkt od zera?
W wielu przypadkach to indywidualna decyzja, ale przeważnie odpowiedz jest jedna – nie warto. Może efekt będzie zadowalający, oprogramowanie wydajniejsze, a kod klarowny. Jednak czas i zasoby wykorzystane przy danym projekcie, można przenieść na zupełnie nowy, niezależny produkt.