• O WordPressie
    • WordPress.org
    • Dokumentacja
    • Naucz się WordPressa
    • Pomoc techniczna
    • Uwagi
  • Zaloguj się
Marek Zając Marek Zając
  • contact@zajacmarek.com Zapraszam do kontaktu
  • Strona główna
  • O mnie
  • Kursy
  • Konsultacje
  • Kanał Youtube
  • 21 marca 2025
  • Marek Zając
  • 0 Comments

Dobry kod to taki, który łatwo usunąć – o potędze usuwalności i AI w nowoczesnej architekturze

Usuwalność kodu jako fundament dobrej architektury

Najbardziej wartościową umiejętnością architekta nie jest pisanie kodu, lecz umiejętność projektowania systemów, w których kod można łatwo usuwać i podmieniać. Słuchając dzisiaj podcastu Patoarchitekci, gdzie Łukasz i Szymon komentowali artykuł na temat dzielenia monolitów na mikroserwisy, usłyszałem zdanie, które idealnie podsumowuje moje doświadczenia: dobry kod to taki, który łatwo usunąć.

Im więcej kodu napisałem i im więcej systemów projektowałem, tym bardziej doceniam tę prostą zasadę. Chodzi o coś więcej niż tylko o czytelność czy elegancję – chodzi o praktyczny wymiar pracy z kodem w dłuższej perspektywie czasowej.

Monolity vs. mikroserwisy – fałszywa dychotomia

W debacie o architekturze oprogramowania często stawiamy monolity i mikroserwisy na przeciwległych biegunach. Prawda jest jednak bardziej złożona.

Widziałem rozproszone systemy, teoretycznie składające się z niezależnych mikroserwisów, w których źle wydzielone wspólne moduły sprawiały, że wszyscy programiści i tak czekali w kolejce, aby zmodyfikować jeden współdzielony fragment. Fizyczny podział kodu nie gwarantował niezależności pracy.

Z drugiej strony, pracowałem z monolitami tak dobrze podzielonymi na moduły, że nie musiałem nawet wiedzieć nad czym pracują inni członkowie zespołu – moje pull requesty praktycznie nie wpływały na ich pracę.

W firmie, dla której pracuję, mój kolega Kamil Bączek jest jednym z ewangelistów modularnych monolitów. Obaj zgadzamy się, że dobra separacja funkcjonalności i jasny podział na małe, spójne komponenty pozwalają wielu programistom, a nawet wielu zespołom, swobodnie pracować nad jedną aplikacją.

Usuwalność kodu jako klucz do szybkiego eksperymentowania

Gdy mówimy o zaletach modularności, często wymieniamy łatwość utrzymania, testowania czy skalowalności. Jest jednak jeszcze jedna, kluczowa korzyść, która drastycznie zmienia sposób pracy zespołów deweloperskich – możliwość bezpiecznego usuwania i podmieniania całych fragmentów kodu.

Mając jasne granice, gdzie kończy się funkcjonalność, mogę:

  • Całkowicie usunąć kod i napisać go od nowa bez wpływu na resztę systemu
  • Stworzyć alternatywną implementację i przełączać się między nimi za pomocą feature flag
  • Przeprowadzać radykalne eksperymenty bez obawy o konsekwencje dla stabilności całości

To właśnie ta usuwalność pozwala nam eksperymentować na niewyobrażalną wcześniej skalę. Mogę użyć jednej feature flagi do przełączenia na nowy kod i błyskawicznie przetestować, czy inne podejście nie sprawdzi się lepiej – bez koszmarów o tym, że zepsuję połowę systemu.

Ta sama zasada rewolucjonizuje dodawanie nowych funkcjonalności. Gdy ktoś proponuje nowy raport lub nowy typ zniżek, dzięki jasnym granicom dokładnie wiem, gdzie mogę się wpiąć i z czego skorzystać. Nowy fragment kodu działa praktycznie jak niezależna aplikacja, która można łatwo usunąć, jeśli eksperyment się nie powiedzie.

Rewolucja AI w kontekście usuwalnego kodu

Usuwalność kodu w połączeniu z AI tworzy potężny tandem, który radykalnie zmienia podejście do tworzenia oprogramowania. Dobrze zaprojektowane granice między modułami sprawiają, że sztuczna inteligencja staje się niezwykle efektywnym współpracownikiem.

Jak AI wykorzystuje potencjał usuwalnego kodu:

  1. Generowanie alternatywnych implementacji – AI może stworzyć kilka różnych podejść do rozwiązania tego samego problemu, które łatwo testujemy dzięki modularności
  2. Błyskawiczne prototypy – AI generuje w kilka minut kompletne rozwiązania, które można bezpiecznie przetestować i równie bezpiecznie usunąć
  3. Eksperymenty z nowymi technologiami – możemy poprosić AI o przepisanie modułu w innym stylu lub z wykorzystaniem innych bibliotek, bez ryzyka dla całego systemu
  4. Refaktoryzacja w skali modułów – AI może wziąć na warsztat cały moduł, jeśli jest on dobrze odgraniczony od reszty systemu

Jasne API do wpięcia się w istniejący kod i brak konieczności grzebania w całym systemie umożliwiają stworzenie proof of concept z pomocą AI w kilka chwil. Z czystymi granicami między modułami możemy błyskawicznie wdrożyć wygenerowany przez AI kod, sprawdzić na realnych danych, czy wynik nas satysfakcjonuje, a następnie bezboleśnie go usunąć lub wyłączyć – nie zakłócając pracy pozostałym członkom zespołu.

Usuwalność kodu nie wymaga mikroserwisów

Kluczowa obserwacja: łatwo usuwalny kod i wszystkie płynące z tego korzyści nie wymagają od razu podziału na mikroserwisy, wprowadzania skomplikowanych systemów kolejkowych albo architektury opartej o zdarzenia.

Co więcej, słabo przemyślany projekt rozproszony, mimo fizycznego podziału, nie da nam prawdziwej usuwalności komponentów i będzie koszmarem do utrzymania. Czasami wystarczy, że:

  • Poszczególne funkcjonalności będą miały własne tabele w bazie danych
  • Moduły będą komunikować się przez jasno zdefiniowane interfejsy
  • Komponenty będą korzystać tylko z zasobów dostępnych w najbliższym module

Nawet monolityczna aplikacja z takimi cechami może oferować doskonałą usuwalność poszczególnych części i wszystkie korzyści, które z tego płyną – łącznie z pełnym wykorzystaniem potencjału AI.

Projektuj pod kątem usuwalności zanim zaczniesz kodować

Kluczem do sukcesu jest projektowanie jeszcze przed napisaniem pierwszej linii kodu, ze szczególnym naciskiem na możliwość łatwego usuwania i podmieniania komponentów. Wyznaczenie granic między modułami, określenie interfejsów i interakcji, a także przewidzenie potencjalnych obszarów zmian to fundament dobrej architektury.

Pytanie, które warto zadawać na etapie projektowania: „Jak łatwo będzie usunąć lub zastąpić ten moduł za rok, gdy pojawią się nowe wymagania lub lepsze narzędzia, w tym bardziej zaawansowane modele AI?”

Pamiętajmy, że usuwalność kodu to nie binarny wybór między monolitem a mikroserwisami – to fundamentalna cecha dobrej architektury, którą możemy osiągnąć na wiele sposobów, dostosowanych do specyfiki naszego projektu i zespołu.


Potrzebujesz konsultacji w zakresie architektury systemów, projektowania pod kątem usuwalności kodu lub integracji AI w procesie rozwoju oprogramowania? Skontaktuj się ze mną: contact@zajacmarek.com

Related Posts
  • Powrót do Prostoty: Lekcje z Boiling Frogs 2025 18 marca 2025
  • Vibe Coding: 5 Złotych Zasad dla Nieoprogramistów Tworzących Aplikacje z AI 18 marca 2025
  • Niecały projekt musi być elastyczny przy dużym ruchu 25 marca 2024

Leave a Comment Cancel Comment

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

Copyright 2020 Bizix, All rights reserved.
  • POLITYKA PRYWATNOŚCI I PLIKÓW COOKIES