Przepisywanie może być bardzo udane, jeśli odpowiednio je określisz. Nie wiem, czy spełniają one próg projektów „BIG” (TM), ale pozwól, że opiszę ci kilka bardziej udanych przepisywania.
Projekt 1
Firma, w której pracowałem, miała system drukowania pasków półkowych, który służył do generowania etykiet widocznych na półkach sklepowych na podstawie czegoś zwanego planogramem . Planogram został wygenerowany w standardowym oprogramowaniu branżowym, a nasze narzędzia odczytały ten dokument, aby utworzyć listwy półkowe przy użyciu szablonu dla docelowego sklepu. Oprogramowanie do tworzenia szablonów to bałagan z zagnieżdżonymi skończonymi maszynami stanów, które obejmowały kilka klas i 3 biblioteki DLL. Kiedy nadszedł czas na wdrożenie (wtedy) patentowego podejścia do robienia tablic z kołkami, było jasne, że obecny kod nie może obsłużyć tego, co chcieliśmy zrobić.
Rozwiązanie: Przepisaliśmy zakres tylko do silnika szablonów. Zastosowaliśmy odpowiedni projekt OO, aby zadbać o bieżące wymagania, a także spełnić nowe wymagania dotyczące płytki kołkowej. Czas na przepisanie wynosił 1 miesiąc. Gdybyśmy przepisali cały łańcuch narzędzi na dużą skalę, zajęłoby to dobrze ponad rok - ale nie musieliśmy tego robić.
Projekt 2
Aplikacja internetowa, którą nasz zespół zbudował od podstaw, zaczynała przerastać swój pierwotny wygląd. Nasz klient miał także pakiet nowych wymagań, dzięki którym strona byłaby znacznie lepsza dla naszych użytkowników, bardziej zgodna z „Web 2.0”, jeśli chcesz. Podczas gdy moglibyśmy wykreślić nasz dotychczasowy projekt w ramy, które obecnie mieliśmy, konserwacja była koszmarem. Znaliśmy aplikację dokładnie i wiedzieliśmy, które części musieliśmy przedstawić, a które zniknęły w ramach nowej wersji.
Rozwiązanie: Ukończenie naszego zespołu zajęło 3 miesiące - nie było to łatwe. Produkt końcowy był szybszy, bardziej skalowalny i przyjemniejszy dla użytkowników końcowych. Przekroczyliśmy oczekiwania naszych klientów. To powiedziawszy, musieliśmy podzielić nasz zespół, aby bardziej natychmiastowe poprawki błędów i łatki wspomagające zespół zostały wykonane w istniejącym systemie, podczas gdy druga połowa działała w nowym systemie. Przeprowadziliśmy szeroko zakrojone testy i włączyliśmy je na początku procesu. Powodem, dla którego tak dobrze się to potoczyło, jest to, że dobrze znamy tę aplikację i naszego klienta.
Projekt 3
Muszę tu dołączyć awarię. Wspieraliśmy klienta, który potrzebował narzędzia do zarządzania informacjami do użytku w sytuacjach katastrof / kryzysów. Odziedziczyliśmy aplikację Java Swing, którą napisali oryginalni programiści, nie rozumiejąc Swinga. Rozumiem przez to, że nie postępowali zgodnie z zaleceniami Sun dotyczącymi radzenia sobie z Swingiem i prawidłowego zarządzania interfejsem, w wyniku czego wpadlibyście w nieskończone pętle zdarzeń i inne dziwne i trudne do śledzenia problemy. W rezultacie było mnóstwo błędów, problemów z interfejsem użytkownika itp. To była bardzo skomplikowana aplikacja. Aby zachować nasze zdrowie psychiczne, próbowaliśmy przepisać źle napisaną aplikację Swing na dobrze napisaną aplikację Swing.
Rozwiązanie: Przepisanie zakończyliśmy w około 4,5 miesiąca, kiedy szacowaliśmy 3 miesiące. Aplikacja działała lepiej, zarówno w interfejsie użytkownika, jak i pod względem ilości danych, jakie mogła obsłużyć. Potem nastąpiło tsunami w 2004 roku. Ogromna liczba osób, które musieli śledzić, pokazała, że Swing był niewłaściwą technologią do tego, czego naprawdę potrzebowali. Nie mogliśmy nadążyć za dostrajaniem wydajności i ostatecznie porzucili to narzędzie na rzecz brukowanej aplikacji internetowej stworzonej przez zespół Oracle, który mieli w domu. Jasne, że moglibyśmy uzasadnić to, co zrobiliśmy w oparciu o wiedzę, którą mieliśmy w tym czasie, ale przepisanie nie było wystarczająco agresywne i nie powiedzieliśmy naszemu klientowi, że jego wymagania dotyczące liczby osób, które mogłyby być potrzebne do śledzenia, były zbyt duże Niska.
Wniosek
Przepisywanie jest czasem konieczne i można je pomyślnie ukończyć, jeśli poprawnie je zaplanujesz. Możesz uzyskać więcej dzięki ukierunkowanym przepisywaniu części systemu niż przepisywaniu całej sprzedaży. Wreszcie, to, co powoduje niepowodzenie projektu, niekoniecznie musi samo przerabiać. Chociaż nigdy nie możemy być jasnowidzem, możemy wymyślić najgorsze scenariusze. Nauczyłem się projektować swoje systemy tak, aby obsługiwały dwa najgorsze możliwe scenariusze. W przypadku systemu zarządzania kryzysowego to nie wystarczyło - rzeczywiste liczby były 20 razy najgorsze, jakie otrzymaliśmy. Ale to nie był najgorszy możliwy scenariusz.
- Przepisywanie ze względu na przepisywanie nie jest twoim przyjacielem. Zawsze jest dużo złożoności, której nie widzisz, a okropne rzeczy, które widzisz, są narzędziami szkoleniowymi dla Twojego klienta. Zawsze pokazuj swoje bieżące postępy swojemu klientowi w regularnych odstępach czasu , aby pomóc Ci złapać najgorsze wykroczenia.
- Ukierunkowane przepisywanie przydaje się do radzenia sobie z najgorszymi wykroczeniami w bazie kodu. Nie rób całego przepisywania, jeśli możesz ograniczyć zakres i rozwiązać większość swoich problemów.