Przykro nam, to potrwa długo, ale opiera się na osobistym doświadczeniu zarówno architekta, jak i programisty przy wielu projektach przepisywania.
Poniższe warunki powinny spowodować rozważenie przepisania. Porozmawiam o tym, jak zdecydować, który z nich zrobić później.
- Czas uruchamiania deweloperów jest bardzo długi. Jeśli uruchomienie nowego programisty zajmuje dłużej niż poniżej (według poziomu doświadczenia), system musi zostać przeprojektowany. Przez czas rozruchu mam na myśli ilość czasu, zanim nowy programista jest gotowy do pierwszego zatwierdzenia (w przypadku małej funkcji)
- Świeżo po studiach - 1,5 miesiąca
- Wciąż zielony, ale wcześniej pracowałem nad innymi projektami - 1 miesiąc
- Średni poziom - 2 tygodnie
- Doświadczony - 1 tydzień
- Poziom Senior - 1 dzień
- Wdrożenie nie może być zautomatyzowane ze względu na złożoność istniejącej architektury
- Nawet proste poprawki błędów trwają zbyt długo ze względu na złożoność istniejącego kodu
- Nowe funkcje trwają zbyt długo i kosztują zbyt wiele z powodu współzależności bazy kodu (nowych funkcji nie można wydzielić, a zatem wpływają na istniejące funkcje)
- Formalny cykl testowania trwa zbyt długo z powodu współzależności istniejącej bazy kodu.
- Zbyt wiele przypadków użycia jest wykonywanych na zbyt małej liczbie ekranów. Powoduje to problemy szkoleniowe dla użytkowników i programistów.
- Wymaga tego technologia obecnego systemu
- Programiści jakości z doświadczeniem w technologii są zbyt trudni do znalezienia
- Jest przestarzałe (nie można go zaktualizować do obsługi nowszych platform / funkcji)
- Dostępna jest po prostu znacznie bardziej wyrazista technologia wyższego poziomu
- Koszt utrzymania infrastruktury starszej technologii jest zbyt wysoki
Te rzeczy są dość oczywiste. Kiedy decydować o całkowitym przepisaniu w porównaniu z przyrostową przebudową, jest bardziej subiektywna, a zatem bardziej polityczna. Z przekonaniem mogę powiedzieć, że kategoryczne stwierdzenie, że nigdy nie jest dobrym pomysłem, jest błędne.
Jeśli system może być stopniowo przeprojektowywany, a ty masz pełne wsparcie sponsoringowe projektu dla takiej rzeczy, powinieneś to zrobić. Oto problem. Wiele systemów nie może być stopniowo przeprojektowywanych. Oto niektóre z powodów, które napotkałem, które temu zapobiegają (zarówno techniczne, jak i polityczne).
- Techniczny
- Sprzężenie komponentów jest tak duże, że zmian w jednym elemencie nie można odizolować od innych komponentów. Przeprojektowanie pojedynczego komponentu powoduje kaskadę zmian nie tylko w sąsiadujących komponentach, ale pośrednio do wszystkich komponentów.
- Stos technologii jest tak skomplikowany, że projekt przyszłego stanu wymaga wielu zmian infrastruktury. Byłoby to konieczne również przy całkowitym przepisaniu, ale jeśli jest to wymagane przy stopniowym przeprojektowywaniu, tracisz tę przewagę.
- Przeprojektowanie komponentu i tak powoduje jego całkowite przepisanie, ponieważ istniejący projekt jest tak fubarowany, że nie warto nic oszczędzać. Ponownie tracisz przewagę, jeśli tak jest.
- Polityczny
- Nie można zmusić sponsorów do zrozumienia, że stopniowe przeprojektowanie wymaga długoterminowego zaangażowania w projekt. Nieuchronnie większość organizacji traci apetyt na ciągłe zmniejszanie budżetu, które powoduje stopniowe przeprojektowywanie. Ta utrata apetytu jest nieunikniona również przy przepisywaniu, ale sponsorzy będą bardziej skłonni do kontynuowania, ponieważ nie chcą być podzieleni między częściowo kompletny nowy system i częściowo przestarzały stary system.
- Użytkownicy systemu są zbyt przywiązani do swoich „aktualnych ekranów”. W takim przypadku nie będziesz mieć licencji na ulepszenie istotnej części systemu (interfejsu użytkownika). Przeprojektowanie pozwala obejść ten problem, ponieważ zaczynają się od czegoś nowego. Nadal będą nalegać na uzyskanie „tych samych ekranów”, ale masz trochę więcej amunicji, aby się wycofać.
Należy pamiętać, że całkowity koszt stopniowego przeprojektowywania jest zawsze wyższy niż całkowite przepisanie, ale wpływ na organizację jest zwykle mniejszy. Moim zdaniem, jeśli możesz uzasadnić przepisanie, a masz programistów superstar, zrób to.
Rób to tylko wtedy, gdy masz pewność, że istnieje wola polityczna, aby doprowadzić ją do końca. Oznacza to zarówno wpisowe dla kierownictwa, jak i dla użytkowników końcowych. Bez tego zawiedziesz. Zakładam, że właśnie dlatego Joel twierdzi, że to zły pomysł. Dla wielu architektów wpisowe dla użytkowników wykonawczych i użytkowników końcowych wygląda jak dwugłowy jednorożec. Musisz go agresywnie sprzedać i nieustannie prowadzić kampanię, aby go kontynuować. To trudne, a ty mówisz o tym, aby postawić swoją reputację na czymś, czego niektórzy nie będą chcieli zobaczyć.
Niektóre strategie sukcesu:
- Jeśli jednak to zrobisz, nie próbuj konwertować istniejącego kodu. Zaprojektuj system od podstaw. W przeciwnym razie marnujesz swój czas. Nigdy nie widziałem ani nie słyszałem o projekcie „konwersji”, który nie zakończył się nieszczęśliwie.
- Migruj użytkowników do nowego systemu pojedynczo. Zidentyfikuj zespoły, które odczuwają najwięcej bólu w istniejącym systemie i migruj je najpierw. Niech głoszą dobrą nowinę ustnie. W ten sposób Twój nowy system będzie sprzedawany od wewnątrz.
- Zaprojektuj swoją architekturę tak, jak potrzebujesz. Nie zaczynaj od jakiegoś szkieletu, który spędziłem 6 miesięcy, który nigdy nie widział prawdziwego kodu.
- Utrzymuj swój stos technologiczny tak mały, jak to możliwe. Nie przepełniaj projektu. W razie potrzeby możesz dodawać technologie, ale ich usunięcie jest trudne. Dodatkowo, im więcej masz warstw, tym więcej pracy wykonują programiści. Nie utrudniaj od samego początku.
- Zaangażuj użytkowników bezpośrednio w proces projektowania, ale nie pozwól im dyktować, jak to zrobić. Zdobądź ich zaufanie, pokazując im, że możesz im dać to, czego chcą lepiej, jeśli postępujesz zgodnie z zasadami dobrego projektowania.