Jest taki moment w firmie, który trudno uchwycić w liczbach.
Niby wszystko działa.
Zamówienia wpadają. System funkcjonuje. Ludzie robią swoją robotę. Klienci kupują.
A jednak coś zaczyna zgrzytać.
Najpierw drobiazgi. Ktoś z zespołu mówi, że dodanie nowego produktu zajmuje dziwnie długo. Ktoś inny omija system i robi coś ręcznie, bo „będzie szybciej”. Pojawia się pierwsze „lepiej tego nie ruszać, bo się posypie”.
I to jest właśnie ten moment.
Jeszcze nie problem. Ale już nie komfort.
Z zewnątrz tego nie widać.
Dług technologiczny – kiedy system zaczyna ograniczać firmę
Na poziomie zarządu wszystko się spina. Wyniki są. System działa. Nie ma powodu, żeby podejmować dużą decyzję.
Tyle że pod spodem firma zaczyna pracować inaczej niż powinna.
Proste rzeczy przestają być proste.
Zmiana w ofercie, która kiedyś zajmowała chwilę, zaczyna się rozciągać na kilka dni. Wdrożenie nowej funkcji wlecze się tygodniami, bo trzeba „sprawdzić, czy coś się nie wysypie”. Integracja z partnerem staje się projektem samym w sobie.
Zespół się dostosowuje. Zawsze się dostosuje.
Tworzy swoje skróty, obejścia, niepisane zasady. Wie, gdzie nie klikać. Wie, co zrobić ręcznie. Wie, kiedy lepiej odpuścić.
System dalej działa.
Ale firma zaczyna zwalniać.
Najciekawsze jest to, że rzadko kto nazywa to problemem systemu.
To wygląda jak problem ludzi, procesów, czasem marketingu.
„Czemu to tyle trwa?” „Czemu nie możemy tego wdrożyć szybciej?” „Czemu konkurencja robi to w tydzień?”
Odpowiedź bardzo często siedzi gdzie indziej.
W systemie, który przez lata był rozwijany „na już”.
Jedna funkcja. Druga. Szybka poprawka. Integracja. Kolejna zmiana. Ktoś coś dopisał, ktoś coś ominął, ktoś zostawił „na później”.
To „później” zwykle nie nadchodzi.
Zostaje kod, którego nikt nie chce ruszać. Zależności, których nikt nie planował. Logika, którą trzeba odtwarzać jak historię.
I w pewnym momencie każda zmiana zaczyna kosztować za dużo.
Nie dlatego, że jest trudna.
Dlatego, że system przestał być przewidywalny.
Przez lata rozwijania aplikacji powstaje coś, co w branży nazywamy długiem technologicznym. To nie jest pojedynczy błąd ani źle napisany fragment kodu. To suma setek drobnych decyzji podejmowanych pod presją czasu, budżetu i kolejnych priorytetów biznesowych.
Jak dług technologiczny wpływa na codzienną pracę
Na początku go nie widać. Z czasem zaczynają kosztować coraz więcej.
Najdroższe zdanie, jakie wtedy pada, brzmi znajomo?: „Przecież to działa.”
Działa. Tylko że coraz wolniej.
Tego nie zobaczysz w jednym raporcie.
To się rozlewa po całej firmie.
W czasie pracy ludzi. W decyzjach, których się nie podejmuje. W pomysłach, które lądują w szufladzie, bo „to za duże ryzyko”. W klientach, którzy dostają gorsze doświadczenie, niż mogliby.
To nie jest koszt systemu.
To jest koszt utraconego tempa.
Moment przełomowy zwykle przychodzi nagle.
Odchodzi osoba, która „znała system”. Pojawia się potrzeba większej zmiany. Wchodzi nowy partner, który oczekuje integracji.
I nagle okazuje się, że coś, co miało być standardowym wdrożeniem, wymaga przebudowy połowy aplikacji.
Padają te same zdania:
„Tego się nie da zrobić.”
„Musimy to napisać od nowa.”
Problem w tym, że to nie wydarzyło się teraz.
To jest efekt kilku lat odkładania porządków, gdy przez lata nikt nie znajduje czasu na uporządkowanie tego, co powstało wcześniej.
Programiści wykonują zadania, za które płaci klient. Dodają nowe funkcje, poprawiają istniejące elementy i rozwiązują bieżące problemy. Trudniejsze fragmenty kodu często są omijane, jeśli tylko nie blokują realizacji zadania. Powstają obejścia, tymczasowe rozwiązania i szybkie poprawki, które miały działać „na chwilę”.
Każdy następny programista dopisuje własną historię do już istniejącego kodu.
System nadal działa.
Ale każda kolejna zmiana kosztuje coraz więcej czasu.
Aktualizacja frameworka? Przecież wszystko działa..
Jest jeszcze kwestia aktualizacji kodu. Aplikacja została napisana kilka lat temu w PHP 5 lub PHP 7, wykorzystuje starą wersję Symfony, Laravela czy innego frameworka. Producent od dawna nie rozwija już tej wersji, nie publikuje poprawek bezpieczeństwa i nie wspiera nowych bibliotek.
Mimo to aktualizacja jest odkładana.
Dlaczego?
Bo z punktu widzenia biznesu system działa.
Klient płaci za nowe funkcjonalności, a nie za zmianę numeru wersji frameworka. Trudno uzasadnić budżet na coś, czego użytkownik końcowy nawet nie zauważy.
Po kilku latach okazuje się, że nie da się już zaktualizować jednej biblioteki bez przebudowy połowy systemu. Coraz trudniej znaleźć programistów, którzy chcą pracować z przestarzałymi technologiami, a każda nowa funkcjonalność wymaga coraz większej liczby obejść.
Refaktoryzacja czy budowa od zera?
I teraz ważna rzecz: w wielu przypadkach nie trzeba wszystkiego burzyć.
Trzeba odzyskać kontrolę nad tym, co już jest.
Usunąć to, co tylko przeszkadza. Uprościć to, co zostało przekombinowane. Zaktualizować to, co od dawna nie powinno działać w tej wersji.
To nie jest spektakularne. To proces, w którym usuwane są lata prowizorycznych rozwiązań, niepotrzebnych zależności i kodu, który od dawna nie jest wykorzystywany.
Ale nagle okazuje się, że zmiany znowu da się wdrażać. Że system przestaje być polem minowym. Że zespół zaczyna pracować normalnie, a nie „ostrożnie”.
Case study – od „nie da się” do rozwoju
Mieliśmy taki projekt.
System, który przez długi czas był „nie do ruszenia” – oparty na PHP 7.1 oraz Symfony 3. Każda zmiana była ryzykiem, więc… przestano je robić. Rozwój stanął.
Cztery miesiące pracy. Dużo porządków, mniej dopisywania linijek kodu. W tym czasie przenieśliśmy aplikację na PHP 8.4 oraz Symfony 7. Usunęliśmy jedenaście niepotrzebnych zależności z Composera, wyeliminowaliśmy ponad 50 tysięcy linii niewykorzystywanego kodu oraz ponad 450 zbędnych plików.
Na koniec system wyglądał podobnie z zewnątrz.
Ale w środku był zupełnie innym narzędziem.
I nagle wróciło coś, czego wcześniej brakowało — możliwość działania bez ciągłego strachu, że coś się rozsypie. Aplikacja ponownie zaczęła być rozwijana. Nowe funkcjonalności wróciły do harmonogramu prac, a czas ich wdrażania znacząco się skrócił.
Nasze podejście – mniej kodu, więcej kontroli
W Lemon Concept właśnie od tego zaczynamy.
Nie od kodu.
Od momentów, w których firma traci tempo.
Patrzymy, gdzie ludzie obchodzą system. Gdzie coś trwa za długo. Gdzie decyzje są odkładane, bo wdrożenie będzie problemem.
Dopiero potem ruszamy dalej.
Aktualizujemy środowisko do wspieranych wersji technologii. Przenosimy aplikacje z PHP 5 lub PHP 7 na PHP 8, aktualizujemy Symfony do najnowszych wersji, migrujemy systemy między platformami, gdy ma to uzasadnienie biznesowe.
Najważniejszym elementem jest jednak porządkowanie kodu. Spaghetti code zamieniamy na czytelną architekturę.
Czasem to są zmiany, które da się zrobić stopniowo. Czasem potrzebna jest większa decyzja.
Ale punkt wyjścia jest zawsze ten sam: system ma wspierać firmę. Nie odwrotnie.
Jeżeli masz poczucie, że u Ciebie „wszystko działa, ale jakoś coraz ciężej” — to zwykle nie jest przypadek.
To moment, w którym warto sprawdzić, czy system nadal nadąża za firmą.
TUTAJ możesz się do nas odezwać i przejść przez to razem z nami. Bez założeń, że wszystko trzeba przepisać. Najpierw zobaczymy, gdzie naprawdę tracisz tempo — i czy da się je odzyskać szybciej, niż myślisz.