„Punkt nadmiernej złożoności” jest w języku angielskim nazywany:
O MÓJ BOŻE CO TO JEST ODPADY.
Problem w tym, że może to dotyczyć czegoś, co jest naprawdę proste, ale jest realizowane w tak okropny sposób, że masz taką samą reakcję.
Zatem odróżnienie czegoś bardzo złożonego od czegoś okropnego może być trudne.
JEDNAK: To, co faktycznie dzieje się z każdym oprogramowaniem, jest trochę podobne:
Krok 1: Miej niezłą specyfikację, zrób fajny projekt, zaimplementuj fajne rzeczy. Wszyscy szczęśliwi.
Pod koniec kroku 1: programiści gratulują sobie wspaniałej elegancji swojego projektu i odchodzą szczęśliwi, myśląc „Mam tutaj wspaniałe dziedzictwo dla innych, aby dodać coś w przyszłości, będzie cudownie, a świat będzie lepsze miejsce."
Krok 2: Dokonano pewnych zmian, dodano rzeczy, dodano nowe funkcje. Architektura i struktura z kroku 1 sprawiły, że proces ten był dość bezbolesny. [Ale ups, „współczynnik cruft” nieco się zwiększył.]
Pod koniec kroku 2: programiści gratulują sobie wspaniałej elegancji swojego projektu i odchodzą szczęśliwi myśląc: „Ojej, jestem taki sprytny, że uwzględniłem wszystkie te kroki w kroku 1. Poszło tak dobrze. Mam wspaniałe dziedzictwo tutaj, aby inni mogli dodawać rzeczy w przyszłości, będzie cudownie, a świat będzie lepszym miejscem ”.
Krok 3: Więcej zmian zostaje wprowadzonych, więcej rzeczy zostaje dodanych, więcej nowych funkcji, wiele rzeczy się zmienia, opinie użytkowników są w rzeczywistości słuchane.
Pod koniec kroku 3: programiści gratulują sobie wspaniałej elegancji swojego projektu i odchodzą dość szczęśliwi, myśląc: „Ta architektura jest całkiem dobra, aby pozwolić na tak wiele zmian, aby łatwo się wprowadzić. Ale jestem trochę niezadowolony o X, Y i Z. Można by je teraz trochę posprzątać, ale !!! Achhh! Jestem taki sprytny, że wziąłem pod uwagę wszystkie te kroki w kroku 1. To poszło tak dobrze. Mam tutaj wspaniałe dziedzictwo inni będą dodawać rzeczy w przyszłości, będzie cudownie, a świat będzie lepszym miejscem ”.
Krok 4: podobnie jak krok 3. Z wyjątkiem:
Pod koniec kroku 4: programiści myślą: „To, co było tak dobre, sprawia, że UGLY jest w stanie utrzymać. Naprawdę potrzebuje poważnych zmian. Nie bardzo lubię pracować nad tym. To wymaga refaktoryzacji. Zastanawiam się, co szef powie, kiedy mu powiem, że potrzebuje 6 tygodni, a użytkownicy nie będą mieli nic do zobaczenia na końcu tego ... ale będę miał kolejne 5 lat pysznych przyszłych modyfikacji, robiąc to ... hmmm .. czas iść do pubu na piwo. "
Krok 5: Należy wprowadzić kilka zmian.
I PODCZAS kroku 5 programiści mówią sobie: „Ten kod jest do kitu. Kto to napisał? Powinni zostać zastrzeleni. To okropne. MUSIMY PONOWNIE NAPISAĆ”.
Krok 5 jest śmiertelny. W tym momencie współczynnik cruft jest tak zły, że kod nie może zawierać tylko kilku innych zmian, musi wprowadzić DUŻE zmiany.
Problemem w kroku 5 jest chęć wyrzucenia go i rozpoczęcia od nowa. Powodem, dla którego jest to śmiertelne, jest „The Netscape Factor”. Przejdź do google. Firmy giną w tym momencie, ponieważ rozpoczęcie od nowa oznacza, że zaczniesz od około 50% założeń zamiast faktów, 150% entuzjazmu zamiast wiedzy, 200% arogancji zamiast pokory („Ci goście byli tacy głupi!”). I wprowadzasz całą masę nowych błędów.
Najlepiej zrobić to refaktoryzować. Zmieniaj trochę na raz. Jeśli architektura trochę się męczy, napraw ją. Dodawaj, przedłużaj, ulepszaj. Stopniowo. Na każdym kroku po drodze testuj, testuj i testuj jeszcze więcej. Takie przyrostowe zmiany oznaczają, że 10 lat później obecny i oryginalny kod są jak topór dziadka („miał 10 nowych głów i 3 nowe uchwyty, ale nadal jest toporem dziadka”). Innymi słowy, nie ma wiele wspólnego. Ale stopniowo i ostrożnie przechodziłeś ze starego do nowego. Zmniejsza to ryzyko, a dla klientów zmniejsza czynnik wkurzony.