Czy warto używać AI do rozwijania systemu legacy?

Wykorzystanie AI w programowaniu może wyraźnie skrócić czas potrzebny na tworzenie nowych funkcji, analizowanie kodu, przygotowywanie testów czy refactoring. W przypadku systemów legacy łatwo jednak wyciągnąć z tego zbyt prosty wniosek: skoro programiści mogą pracować szybciej, to dzięki AI można po prostu dalej rozwijać stary system mniejszym kosztem. Problem polega na tym, że w wielu aplikacjach ograniczeniem nie jest tempo pisania kodu, lecz architektura, brak testów, słaba dokumentacja, ukryte zależności i ryzyko związane z każdą zmianą. AI może więc zarówno znacząco zwiększyć produktywność zespołu, jak i przyspieszyć narastanie długu technologicznego. Z perspektywy właściciela firmy, CEO, COO czy CTO ważniejsze od pytania „jak wykorzystać AI do developmentu?” staje się inne: kiedy warto dalej rozwijać system z pomocą AI, a kiedy lepiej go modernizować lub przepisać?

AI przyspiesza kodowanie, ale nie usuwa ograniczeń legacy

Jedną z największych zalet narzędzi AI dla zespołów developerskich jest możliwość skrócenia czasu potrzebnego na wykonanie wielu powtarzalnych prac. Model może przygotować fragment implementacji, wygenerować testy, wyjaśnić działanie nieznanej części aplikacji, pomóc w aktualizacji biblioteki czy zaproponować refactoring. Przy odpowiednim procesie programista może wykonać w ciągu dnia pracę, która wcześniej zajmowała znacznie więcej czasu.

Nie oznacza to jednak, że równie szybko poprawia się sam system.

W przypadku legacy koszt wprowadzenia zmiany często nie wynika z liczby linii kodu, które trzeba napisać. Znacznie więcej czasu może pochłaniać ustalenie, gdzie zmianę można wprowadzić bezpiecznie i jakie skutki wywoła ona w innych częściach aplikacji.

Wyobraźmy sobie system sprzedażowy rozwijany przez kilkanaście lat. Dodanie kolejnego sposobu naliczania rabatu może wymagać stosunkowo niewielkiej ilości kodu. Problem w tym, że logika cen znajduje się jednocześnie w module zamówień, integracji z ERP, procesie fakturowania i kilku starszych procedurach w bazie danych. Dokumentacja nie opisuje wszystkich zależności, a testy automatyczne obejmują tylko część procesu. AI może wygenerować zmianę w kilka minut. Nadal jednak nie wie automatycznie, że zmodyfikowanie jednej reguły wpłynie na pięć innych obszarów systemu.

Podobnie wygląda sytuacja z testami. Model może szybko napisać kod, ale jeżeli firma przed każdym wdrożeniem musi ręcznie sprawdzać najważniejsze procesy biznesowe, generowanie większej liczby zmian nie usuwa tego ograniczenia. Może wręcz zwiększyć liczbę elementów, które trzeba później zweryfikować. Jakość kodu tworzonego z pomocą AI nie powinna sprowadzać się wyłącznie do dyskusji, czy model potrafi napisać poprawną funkcję. Równie ważne jest środowisko, w którym powstaje ta funkcja: architektura, testy, proces code review, monitoring i sposób wdrażania zmian.

AI zwiększa przede wszystkim prędkość wykonywania pracy developerskiej. Nie usuwa automatycznie problemów konstrukcyjnych aplikacji.

Jeżeli system jest dobrze zaprojektowany, dodatkowa prędkość może dać firmie realną przewagę. Jeżeli natomiast jego rozwój już wcześniej był trudny do kontrolowania, szybsze dostarczanie kodu może tylko zwiększyć tempo narastania istniejących problemów.

Sygnały, że AI będzie tylko przyspieszać problemy

Nie istnieje jeden wskaźnik mówiący, że dalszy rozwój legacy nie ma sensu. Znacznie bardziej użyteczne jest obserwowanie powtarzających się symptomów, które pokazują, że głównym ograniczeniem nie jest produktywność programistów.

Pierwszym z nich są częste regresje. Zespół wprowadza zmianę w jednym miejscu, a problem pojawia się w zupełnie innym obszarze aplikacji. Jeżeli sytuacja powtarza się regularnie, może oznaczać, że system ma wiele trudnych do kontrolowania zależności albo zbyt mało testów zabezpieczających istniejące zachowanie.

Drugi sygnał to strach przed wdrożeniami. Release, który powinien być rutynową operacją, staje się wydarzeniem wymagającym obecności kilku osób, dodatkowych testów i przygotowania planu awaryjnego. W takiej sytuacji AI może zwiększyć liczbę zmian gotowych do wdrożenia, ale nie rozwiązuje problemu samego procesu deploymentu.

Kolejnym ryzykiem jest uzależnienie systemu od wiedzy jednej osoby. W wielu firmach funkcjonuje programista, administrator albo były twórca aplikacji, który jako jedyny naprawdę rozumie jej działanie. Problem staje się widoczny dopiero wtedy, gdy każda ważniejsza zmiana musi zostać przez niego sprawdzona albo gdy firma zaczyna zastanawiać się, co stanie się po jego odejściu.

AI może pomagać w analizie i dokumentowaniu takiego systemu, ale nie należy zakładać, że sam model automatycznie odtworzy całą wiedzę zgromadzoną przez lata. Szczególnie trudne są reguły biznesowe, które nigdy nie zostały formalnie opisane i istnieją wyłącznie dlatego, że „tak ten system zawsze działał”.

Niepokojącym sygnałem jest również sytuacja, w której proste funkcje zajmują coraz więcej czasu. Dodanie nowego pola, zmiana sposobu rozliczeń czy integracja z kolejnym systemem powinna być stosunkowo przewidywalna. Jeżeli każda kolejna funkcjonalność wymaga coraz większej liczby zmian w istniejącym kodzie, problem prawdopodobnie leży w konstrukcji systemu.

Z perspektywy zarządu szczególnie istotny jest jeszcze jeden wskaźnik: coraz większa część budżetu technologicznego jest przeznaczana na utrzymanie zamiast rozwój. Zespół zajmuje się poprawianiem regresji, ręcznymi wdrożeniami, aktualizowaniem starych zależności i rozwiązywaniem problemów wynikających z wcześniejszych kompromisów technicznych.

W takim środowisku nie wystarczy zwiększyć produktywności developerów. Trzeba również zadbać o to, aby powstający kod dało się później utrzymać. Pomocna może być tutaj również ocena, jak rozpoznać, że AI napisało kod, który technicznie działa, ale zwiększa zależność firmy od coraz trudniejszego systemu.

Warto zwrócić uwagę na kilka praktycznych sygnałów ostrzegawczych:

  • niewielkie zmiany regularnie powodują nieprzewidziane błędy,
  • wdrożenia są rzadkie i stresujące,
  • firma odkłada aktualizacje technologiczne przez obawę przed konsekwencjami,
  • tylko jedna lub dwie osoby potrafią diagnozować poważniejsze problemy,
  • oszacowanie czasu wykonania funkcji jest coraz trudniejsze,
  • programiści więcej czasu analizują skutki zmiany niż ją implementują,
  • liczba ręcznych testów stale rośnie,
  • duża część pracy zespołu polega na utrzymywaniu wcześniejszych rozwiązań.

Jeżeli kilka z tych zjawisk występuje jednocześnie, wykorzystanie AI wyłącznie do szybszego generowania kolejnych funkcji może przynieść efekt odwrotny od oczekiwanego. Firma będzie dostarczać kod szybciej, ale jednocześnie coraz trudniej będzie jej kontrolować cały system.

Kiedy AI faktycznie pomaga

System legacy nie musi być złym kandydatem do wykorzystania AI. Sam fakt, że aplikacja ma kilka, kilkanaście czy nawet kilkadziesiąt lat, nie przesądza o jej jakości. Istnieją starsze systemy, które są stabilne, dobrze udokumentowane i nadal bardzo skutecznie obsługują procesy biznesowe.

W takim przypadku AI może znacząco zwiększyć tempo ich rozwoju. Najlepsze warunki powstają wtedy, gdy system posiada testy automatyczne. Developer może wygenerować zmianę przy pomocy AI, a następnie szybko sprawdzić, czy nie naruszyła ona dotychczasowego zachowania aplikacji. Model zwiększa więc tempo implementacji, a istniejący zestaw testów pełni funkcję zabezpieczenia.

Drugim ważnym elementem jest czytelna architektura. Nie musi być idealna ani zgodna z najnowszymi trendami. Ważne, aby zespół rozumiał odpowiedzialności poszczególnych części aplikacji i potrafił przewidzieć wpływ zmian.

AI działa znacznie lepiej, kiedy może otrzymać konkretny kontekst: ten moduł odpowiada za płatności, ten za zamówienia, a komunikacja pomiędzy nimi odbywa się przez jasno określony interfejs. W takich warunkach łatwiej wykorzystać model do implementacji funkcji bez przypadkowego ingerowania w inne obszary.

Duże znaczenie ma również dokumentacja. Nie chodzi wyłącznie o wielostronicowe opisy techniczne. Przydatne są dokumenty opisujące architekturę, ważniejsze decyzje projektowe, reguły biznesowe, API czy sposób działania najbardziej istotnych procesów. Im więcej takiego kontekstu można przekazać narzędziom AI, tym większa szansa, że wygenerowane rozwiązania będą zgodne z rzeczywistym działaniem aplikacji.

Kolejny element to przewidywalny deployment. Jeżeli zmiana może przejść przez testy, staging, monitoring i w razie problemów zostać szybko wycofana, firma może bezpieczniej korzystać z większej prędkości developmentu. W takich systemach AI można wykorzystywać nie tylko do tworzenia nowych funkcji. Często większą wartość daje zastosowanie go do stopniowego poprawiania samego legacy.

AI może wspierać między innymi:

  • tworzenie testów dla istniejących funkcjonalności,
  • dokumentowanie słabo opisanych fragmentów aplikacji,
  • analizowanie zależności pomiędzy komponentami,
  • refactoring wybranych obszarów kodu,
  • modernizację bibliotek i frameworków,
  • migrację fragmentów systemu do nowszych technologii,
  • przygotowywanie nowych interfejsów API,
  • wydzielanie kolejnych modułów,
  • porównywanie zachowania starej i nowej implementacji.

Szczególnie wartościowe może być wykorzystanie AI do zmniejszenia ryzyka przyszłych zmian, zamiast wyłącznie do zwiększania liczby implementowanych funkcji.

Przykładowo firma może najpierw użyć AI do przygotowania większego zestawu testów regresji, opisania istniejących procesów oraz zidentyfikowania najbardziej problematycznych zależności. Dopiero potem zaczyna przyspieszać właściwy development.  Taka kolejność może być znacznie bardziej opłacalna niż natychmiastowe wyposażenie programistów w narzędzia generujące kod i oczekiwanie, że dzięki temu problemy legacy po prostu przestaną mieć znaczenie.

Modernizować czy przepisać?

Decyzja dotycząca starego systemu rzadko sprowadza się do wyboru pomiędzy dwoma skrajnościami: pozostawić wszystko bez zmian albo stworzyć całą aplikację od początku.

W praktyce istnieje całe spektrum możliwości:

dalej rozwijać → refaktoryzować → wymieniać moduły → przepisać system

Dalszy rozwój istniejącej aplikacji jest racjonalny, jeśli system nadal dobrze realizuje potrzeby biznesowe, koszt zmian jest przewidywalny, a architektura nie blokuje roadmapy produktu. W takim przypadku AI może po prostu zwiększyć efektywność zespołu.

Refactoring warto rozważyć wtedy, gdy fundament aplikacji nadal jest użyteczny, ale wybrane części kodu utrudniają development. Nie trzeba przebudowywać wszystkiego. Często wystarczy konsekwentnie poprawiać te fragmenty, które generują największą liczbę błędów albo powodują największe opóźnienia.

Kolejną możliwością jest stopniowa wymiana modułów. Firma może pozostawić stabilne części systemu i sukcesywnie zastępować te, które najbardziej ograniczają rozwój. Takie podejście pozwala rozłożyć modernizację w czasie i ograniczyć ryzyko związane z jednorazową migracją.

Rewrite powinien pojawić się jako jedna z dostępnych opcji, a nie automatyczna odpowiedź na każdy problem z legacy. Można go poważnie rozważyć, jeśli architektura zaczyna bezpośrednio ograniczać rozwój biznesu. Przykładowo firma chce uruchomić nowy kanał sprzedaży, zmienić model rozliczeń albo udostępnić swoje usługi poprzez API, ale każda taka inicjatywa wymaga kosztownego obchodzenia ograniczeń starego systemu.

Innym argumentem jest stale rosnący koszt utrzymania. Jeżeli coraz większa część budżetu technologicznego jest przeznaczana na podtrzymywanie działania istniejącej aplikacji, warto policzyć nie tylko koszt rewrite’u, lecz również koszt nieprzepisywania systemu przez kolejne trzy, pięć czy siedem lat.

AI może istotnie zmienić tę kalkulację. Dobrze przygotowane przepisanie systemu legacy z wykorzystaniem AI może być dziś szybsze niż kilka lat temu, ponieważ modele pomagają analizować istniejący kod, odtwarzać zachowanie aplikacji, tworzyć testy, przygotowywać dokumentację i implementować kolejne elementy nowego rozwiązania.

Szczególnie interesujące jest wykorzystanie podejścia opartego na dokładnej specyfikacji. Zamiast prosić AI o „przepisanie systemu”, zespół opisuje wymagania, zachowanie aplikacji, interfejsy, ograniczenia oraz kryteria akceptacji. Model pomaga następnie w implementacji poszczególnych elementów zgodnie z przygotowaną specyfikacją.

Zmniejsza to koszt pracy developerskiej, ale nie eliminuje najtrudniejszych elementów projektu. Nadal trzeba zdecydować, jaka ma być docelowa architektura. Trzeba rozpoznać rzeczywiste reguły biznesowe, przygotować migrację danych, zapewnić zgodność starego i nowego rozwiązania, zaplanować etapowe przełączenie użytkowników i posiadać sposób na wycofanie zmian w przypadku problemów.

Dlatego AI może sprawić, że rewrite stanie się ekonomicznie uzasadniony w projektach, w których wcześniej byłby zbyt kosztowny, ale nie powinien być argumentem za przepisywaniem działających systemów bez wyraźnej potrzeby biznesowej.

Najlepsza decyzja może być zupełnie inna dla dwóch podobnych firm. Jedna organizacja może mieć dziesięcioletnią aplikację, która po dodaniu testów i częściowym refactoringu będzie bez problemu działać przez kolejne lata. Inna może utrzymywać system o podobnym wieku, którego architektura blokuje każdą większą zmianę produktu. W pierwszym przypadku AI powinno przede wszystkim usprawnić rozwój istniejącego rozwiązania. W drugim może pomóc w stopniowym zbudowaniu jego następcy.

Podsumowanie

AI daje zespołom developerskim możliwość znacznie szybszego tworzenia, analizowania i modernizowania oprogramowania, ale sama prędkość nie odpowiada na pytanie o przyszłość systemu legacy. Jeżeli aplikacja ma stabilną architekturę, testy, dokumentację i przewidywalny proces wdrożeń, wykorzystanie AI może wyraźnie zwiększyć tempo jej rozwoju. Jeżeli jednak każda zmiana powoduje regresje, wiedza o systemie jest skoncentrowana w kilku osobach, a utrzymanie pochłania coraz większą część budżetu, szybsze generowanie kodu może jedynie szybciej zwiększać istniejący dług technologiczny. Dlatego przed wdrożeniem AI warto najpierw ustalić, czy obecny system nadal warto rozwijać. Czasami największą korzyścią będzie szybsze dostarczanie nowych funkcji do istniejącej aplikacji, czasami stopniowa modernizacja jej najbardziej problematycznych części, a w niektórych przypadkach możliwość szybszego i bezpieczniejszego zbudowania systemu, który ją zastąpi.

Materiał zewnętrzny

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Poprzedni
Dyrektywa NIS 2 – jakie obowiązki w zakresie cyberbezpieczeństwa powinni uwzględnić przedsiębiorcy?

Dyrektywa NIS 2 – jakie obowiązki w zakresie cyberbezpieczeństwa powinni uwzględnić przedsiębiorcy?

Rosnąca liczba cyberataków oraz coraz większe uzależnienie organizacji od

Może Ci się spodobać