{"id":2125,"date":"2026-06-12T01:00:43","date_gmt":"2026-06-12T01:00:43","guid":{"rendered":"https:\/\/news.jurskitech.pl\/blog\/uncategorized\/koszty-ukryte-w-martwym-kodzie-3-lekcje-z-audytu-backendu\/"},"modified":"2026-06-12T01:00:43","modified_gmt":"2026-06-12T01:00:43","slug":"koszty-ukryte-w-martwym-kodzie-3-lekcje-z-audytu-backendu","status":"publish","type":"post","link":"https:\/\/news.jurskitech.pl\/blog\/warto-wiedziec\/koszty-ukryte-w-martwym-kodzie-3-lekcje-z-audytu-backendu\/","title":{"rendered":"Koszty ukryte w martwym kodzie: 3 lekcje z audytu backendu"},"content":{"rendered":"<h2 id=\"wstp\">Wst\u0119p<\/h2>\n<p>Znasz to uczucie, gdy wchodzisz do piwnicy pe\u0142nej starych mebli i my\u015blisz \u201ekiedy\u015b to si\u0119 przyda\u201d? W backendzie mamy podobnie \u2013 kod, kt\u00f3ry napisali\u015bmy rok temu, endpoint, kt\u00f3rego nikt nie wywo\u0142uje, biblioteka do\u0142\u0105czona na wszelki wypadek. To wszystko ma swoj\u0105 cen\u0119. Nie chodzi tylko o d\u0142ug techniczny w sensie moralnym, ale o realne pieni\u0105dze \u2013 czas serwer\u00f3w, koszty chmury, op\u00f3\u017anienia w deploymencie, a nawet ryzyko bezpiecze\u0144stwa.<\/p>\n<p>Jako praktyk, kt\u00f3ry widzia\u0142 backendy od ma\u0142ych startup\u00f3w po \u015brednie e-commerce, powiem Ci wprost: martwy kod to cichy zab\u00f3jca bud\u017cetu IT. W tym artykule poka\u017c\u0119 trzy konkretne przypadki z mojej praktyki, kt\u00f3re kosztowa\u0142y firmy dziesi\u0105tki tysi\u0119cy z\u0142otych \u2013 i jak je wyeliminowa\u0107.<\/p>\n<h2 id=\"lekcja1nieuywaneendpointyapipaciszzacoczegonieuywasz\">Lekcja 1: Nieu\u017cywane endpointy API \u2013 p\u0142acisz za co\u015b, czego nie u\u017cywasz<\/h2>\n<h3 id=\"przypadek\">Przypadek<\/h3>\n<p>Klient \u2013 sklep e-commerce z oko\u0142o 50 000 produkt\u00f3w. Aplikacja backendowa w Node.js, kt\u00f3ra ewoluowa\u0142a przez 3 lata. Podczas audytu znale\u017ali\u015bmy 15 endpoint\u00f3w API, kt\u00f3re nie by\u0142y wywo\u0142ywane od ponad 6 miesi\u0119cy. Pozornie \u2013 nic strasznego. Ale ka\u017cdy z nich by\u0142 podpi\u0119ty do bazy danych, logowa\u0142 zdarzenia, wysy\u0142a\u0142 eventy do kolejki. Serwer i tak musia\u0142 utrzymywa\u0107 po\u0142\u0105czenia, alokowa\u0107 pami\u0119\u0107.<\/p>\n<h3 id=\"skutek\">Skutek<\/h3>\n<p>Miesi\u0119czny koszt utrzymania tych endpoint\u00f3w (obliczony na podstawie czasu CPU, pami\u0119ci i transferu) wynosi\u0142 oko\u0142o 1200 z\u0142. Rocznie \u2013 ponad 14 000 z\u0142. Do tego dochodzi\u0142 czas dewelopera przy ka\u017cdym deploymencie \u2013 musieli testowa\u0107, czy co\u015b si\u0119 nie zepsu\u0142o, cho\u0107 nikt tego nie u\u017cywa\u0142.<\/p>\n<h3 id=\"cozrobi\">Co zrobi\u0107?<\/h3>\n<ol>\n<li><strong>Monitoruj u\u017cycie endpoint\u00f3w<\/strong> \u2013 narz\u0119dzia jak New Relic czy Datadog poka\u017c\u0105, kt\u00f3re \u015bcie\u017cki s\u0105 martwe.<\/li>\n<li><strong>Wprowad\u017a polityk\u0119 wygaszania<\/strong> \u2013 po 3 miesi\u0105cach bez u\u017cycia oznacz endpoint jako deprecated, po 6 \u2013 usu\u0144.<\/li>\n<li><strong>Automatyzuj czyszczenie<\/strong> \u2013 skrypt CI\/CD, kt\u00f3ry raportuje nieu\u017cywane trasy.<\/li>\n<\/ol>\n<h2 id=\"lekcja2legacyzalenociniewidzialnapuapkanatwojepienidze\">Lekcja 2: Legacy zale\u017cno\u015bci \u2013 niewidzialna pu\u0142apka na twoje pieni\u0105dze<\/h2>\n<h3 id=\"przypadek-1\">Przypadek<\/h3>\n<p>Firma SaaS B2B z monolitem w Pythonie. W repozytorium znajdowa\u0142o si\u0119 47 bibliotek zewn\u0119trznych, z czego 12 nie by\u0142o u\u017cywanych w \u017cadnym imporcie. Brzmi niewinnie? Problem w tym, \u017ce ka\u017cda biblioteka to potencjalne luki bezpiecze\u0144stwa, konieczno\u015b\u0107 aktualizacji przy zmianie wersji j\u0119zyka, a tak\u017ce wyd\u0142u\u017cony czas budowania obrazu Docker.<\/p>\n<h3 id=\"skutek-1\">Skutek<\/h3>\n<p>Usuni\u0119cie tych 12 bibliotek skr\u00f3ci\u0142o czas builda z 12 do 8 minut. Brzmi ma\u0142o, ale przy 20 deployach dziennie daje to 80 minut oszcz\u0119dno\u015bci czasu processora CI\/CD. W przeliczeniu na koszty \u2013 oko\u0142o 300 z\u0142 miesi\u0119cznie na samych zasobach CI. Do tego ryzyko: jedna z bibliotek mia\u0142a krytyczn\u0105 luk\u0119 CVE, kt\u00f3ra zosta\u0142a za\u0142atana dopiero po naszej interwencji.<\/p>\n<h3 id=\"cozrobi-1\">Co zrobi\u0107?<\/h3>\n<ol>\n<li><strong>U\u017cywaj narz\u0119dzi do analizy zale\u017cno\u015bci<\/strong> \u2013 np. <code>pip freeze<\/code> z por\u00f3wnaniem do faktycznych import\u00f3w (Python), <code>depcheck<\/code> (Node), <code>dependency-check<\/code> (Java).<\/li>\n<li><strong>Regularnie przegl\u0105daj requirements.txt \/ package.json<\/strong> \u2013 usuwaj to, czego nie ma w kodzie.<\/li>\n<li><strong>Wprowad\u017a zasad\u0119 \u201ezero martwych zale\u017cno\u015bci\u201d<\/strong> \u2013 przy ka\u017cdym code review sprawdzaj, czy nowa biblioteka jest faktycznie u\u017cywana.<\/li>\n<\/ol>\n<h2 id=\"lekcja3martwefunkcjeiendpointywewntrznekosztutrzymaniawiedzy\">Lekcja 3: Martwe funkcje i endpointy wewn\u0119trzne \u2013 koszt utrzymania wiedzy<\/h2>\n<h3 id=\"przypadek-2\">Przypadek<\/h3>\n<p>System CRM dla \u015bredniej firmy. Odkryli\u015bmy funkcj\u0119 <code>calculateDiscountV2<\/code>, kt\u00f3ra zosta\u0142a napisana dwa lata temu, ale nigdy nie wdro\u017cona \u2013 zast\u0105piona przez <code>V3<\/code>. Kod wci\u0105\u017c by\u0142 w repozytorium, testy jednostkowe dla <code>V2<\/code> dzia\u0142a\u0142y, a w konfiguracji pozosta\u0142 legacy flag.<\/p>\n<h3 id=\"skutek-2\">Skutek<\/h3>\n<p>Ka\u017cdy nowy programista sp\u0119dza\u0142 \u015brednio 2 godziny na zrozumieniu, po co istnieje ta funkcja, dlaczego nie jest u\u017cywana i czy mo\u017cna j\u0105 usun\u0105\u0107. Przy rotacji 3 deweloper\u00f3w rocznie \u2013 6 godzin straconego czasu. Do tego testy \u2013 15 test\u00f3w dla martwego kodu wyd\u0142u\u017ca\u0142o czas suity testowej o 30 sekund. Przez rok to \u0142\u0105cznie oko\u0142o 3 godzin czasu CI. Niby drobnostki, ale w sumie \u2013 koszt utrzymania wiedzy i uwagi.<\/p>\n<h3 id=\"cozrobi-2\">Co zrobi\u0107?<\/h3>\n<ol>\n<li><strong>Usuwaj martwy kod, nie komentuj<\/strong> \u2013 komentarze to z\u0142o, usuwaj nieu\u017cywane funkcje w ca\u0142o\u015bci.<\/li>\n<li><strong>U\u017cywaj feature flags z terminem wa\u017cno\u015bci<\/strong> \u2013 je\u015bli flag nie jest u\u017cywany przez 3 miesi\u0105ce, automatycznie go usu\u0144.<\/li>\n<li><strong>Regularnie czy\u015b\u0107 repozytorium<\/strong> \u2013 co kwarta\u0142 przegl\u0105daj kod pod k\u0105tem nieu\u017cywanych import\u00f3w, funkcji, klas.<\/li>\n<\/ol>\n<h2 id=\"podsumowanie\">Podsumowanie<\/h2>\n<p>Martwy kod to nie tylko kwestia estetyki \u2013 to realne pieni\u0105dze. W trzech opisanych przypadkach firmy traci\u0142y od kilku do kilkudziesi\u0119ciu tysi\u0119cy z\u0142otych rocznie na utrzymaniu czego\u015b, czego nikt nie u\u017cywa. Do tego dochodzi ryzyko bezpiecze\u0144stwa, wolniejsze buildy, wy\u017csze koszty chmury i frustracja zespo\u0142u.<\/p>\n<p>Z mojego do\u015bwiadczenia wynika, \u017ce audyt backendu pod k\u0105tem martwego kodu to jedna z najszybciej zwracaj\u0105cych si\u0119 inwestycji. Wystarczy jeden dzie\u0144 pracy senior developera, by wyczy\u015bci\u0107 80% bezu\u017cytecznego balastu. Efekt? Ni\u017csze rachunki, szybsze deploye, mniej b\u0142\u0119d\u00f3w.<\/p>\n<p>Je\u015bli czujesz, \u017ce Tw\u00f3j backend mo\u017ce mie\u0107 podobne problemy, warto przyjrze\u0107 si\u0119 bli\u017cej. Cz\u0119sto to, czego nie wida\u0107, kosztuje najwi\u0119cej.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wst\u0119p Znasz to uczucie, gdy wchodzisz do piwnicy pe\u0142nej starych mebli i my\u015blisz \u201ekiedy\u015b to si\u0119 przyda\u201d? W backendzie mamy podobnie \u2013 kod, kt\u00f3ry napisali\u015bmy rok temu, endpoint, kt\u00f3rego nikt nie wywo\u0142uje, biblioteka do\u0142\u0105czona na wszelki wypadek. To wszystko ma swoj\u0105 cen\u0119. Nie chodzi tylko o d\u0142ug techniczny w sensie moralnym, ale o realne pieni\u0105dze<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[556,787,78,580],"class_list":["post-2125","post","type-post","status-publish","format-standard","hentry","category-warto-wiedziec","tag-architektura-backend","tag-audyt-it","tag-koszty-ukryte","tag-utrzymanie-kodu"],"_links":{"self":[{"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/posts\/2125","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/comments?post=2125"}],"version-history":[{"count":0,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/posts\/2125\/revisions"}],"wp:attachment":[{"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/media?parent=2125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/categories?post=2125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/tags?post=2125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}