Masz program, z którego korzysta 1000 osób dziennie, i który zarabia 200tys. złotych miesięcznie.
Chcesz dodać w nim funkcjonalność linków polecających. Przychodzisz do programistów, i oni estymują wprowadzenie tego feature'a na miesiąc, ale ostatecznie zajmuje im 3 miesiące żeby go wprowadzić. Feature którego wprowadzenie powinno zając dzień, zajął 3 miesiące. Programiści pracujący nad tym muszą dostać wypłaty za te 3 miesiące wprowadzania tego. Jak myślisz, z czego wynika taka powolność we wprowadzeniu tej zmiany? No właśnie z niskiej jakości kodu. Dobry programista zaprojektuje odpowiednią architekturę i czysty kod, i przez to że zrobi taką "trzepaninę" jak to ująłeś, wytworzy system w którym dodanie systemu referali zajmie jeden dzień zamiast 3 miesiące.
Dbanie o jakość kodu i architekturę, bezpośrednio przekłada się na koszt zmian.
@Riddle: Moim zdaniem główny problem tworzenia oprogramowania jest taki że kodu nie widać a jedynie jego efekty. Gdybyśmy produkowali jakieś lodówki i biznes mógł zobaczyć że "dobra zrobili to szybciej i mamy to co chcieliśmy ale tutaj odstaje rurka a z tyłu cieknie woda" to myślę że w dużej części (bo nie wszędzie) zrodziłby się wnioski że aspekt techniczny jest równie ważny. Tymczasem większość biznesów nie obchodzi jak tylko kiedy coś dodacie.
Programowanie nie jest tutaj odosobnione. Wiele branż ma podobne cechy - że klienta nie obchodzi jak, tylko kiedy. Designerzy, prawnicy, budowlańcy. Jak zamawiam firmę budowlaną, to nie obchodzi mnie jakich narzędzi użyją, tylko kiedy coś dostarczą - interesuje mnie efekt końcowy. Jak zamawiam taksówkę, to nie obchodzi mnie czy kierowca ma manuala czy automat, ważne czy się spóźnię na umówione miejsce. Jak idę do dentysty, to nie obchodzi mnie technika leczenia, tylko koszt i to czy będę zdrowy.
Różnica pomiędzy budowlańcami a programistami jest taka, że przy programowaniu bardzo łatwo jest zaciągnąć dług techniczny. Tzn. teraz dostarczyć coś w jeden dzień zamiast dwa, ale za to za jakiś czas feature który powinien zając 1 dzień zajmie 3 miesiące.
Dodatkowym czynnikiem wpływającym na koszt zmian jest długość życia oprogramowania, jeśli oprogramowanie żyje np. 5 lat to przez to 5 lat z początkowych założeń projektu mało co zostaje i często program tworzony do mieszania herbaty zmienił swoje początkowe zastosowanie i teraz miesza pomidorową z ryżem.
To nie jest do końca prawda. Widziałem projekty które trwały po 10 lat i dłużej, i ich jakość była bardzo dobra. Wprowadzanie zmian było szybkie.
Bo IT jest dla biznesu a nie na odwrót, mamy dostarczyć wartośc która można sprzedać a nie przeprowadzać heksagonalną trzepaninę nad wzorcami i jakością kodu.
Poza tym, gdyby tak było, i dało się rozwijać projekt przez kilka lat bez wzorców, z niską jakością, to wszystkie firmy by tak robiły - największe shitcode'y by przegoniły wszystkich ludzi, i pisanie bez architektury stałoby się normą; bo miałoby przewagę ekonomiczną we wprowadzaniu zmian do software'u.
Można ostrożnie stwierdzić, że jedynym sposobem na zapewnienie ciągłego niskiego kosztu zmian jest poprawna architektura i czysty kod.