Net-Base Magazyn

16.08.2026

Zastępowanie systemów legacy krok po kroku: Strangler Pattern, równoległy tryb pracy i spójność danych podczas wdrożenia

Jak zaplanować zastąpienie systemu legacy bez podejścia Big-Bang: prawidłowo dopasować wzorzec Strangler, opanować pracę równoległą, zapewnić spójność danych i zmniejszyć ryzyko wdrożenia w środowisku produkcyjnym.

16.08.2026

Od tematu magazynowego do praktyki projektowej

Pasujące strony usługowe i techniczne do artykułu

Zamiana systemu legacy rzadko zawodzi przy „zbudowaniu” nowego rozwiązania, lecz przy przejściu: dane muszą pozostać poprawne, interfejsy nie mogą zostać przerwane, a eksploatacja musi działać podczas wdrożenia. W wielu firmach Big-Bang-Cutover nie jest więc opcją – zależności są zbyt duże, koszty przestojów zbyt wysokie, przywrócenie stanu sprzed zmiany zbyt trudne.

W praktyce sprawdza się podejście stopniowe z wzorcem Strangler (części funkcjonalne są stopniowo „przenoszone”), równoległym trybem działania (stary i nowy system działają okresowo obok siebie) oraz jasnymi zasadami dotyczącymi spójności danych. Ten artykuł pokazuje, jak łączyć te elementy tak, by były użyteczne w codziennej pracy kierownictwa IT, administracji i kierowników projektów – włącznie z typowymi błędami, konsekwencjami operacyjnymi i punktami decyzyjnymi podczas rolloutu.

Dlaczego podejście krok po kroku często jest realistyczną metodą wymiany systemu legacy

Systemy legacy rzadko są „tylko jedną aplikacją”. Zwykle są z nimi powiązane: zadania wsadowe, interfejsy plikowe (foldery SFTP, dyski sieciowe), procesy drukowania i skanowania, narzędzia lokalne, ekstrakty BI, relaye e-mail, specjalistyczny sprzęt, wyprowadzenia Shadow-IT oraz ręczne obejścia. Przy podejściu Big Bang wszystkie te ścieżki muszą działać w tym samym weekendzie – i to łącznie z uprawnieniami, danymi podstawowymi, historią i przypadkami wyjątkowymi.

Podejście krok po kroku redukuje ryzyko, lecz nie przesuwa go automatycznie „w dół”. Ujawnia i czyni ryzyka możliwymi do opanowania, wymaga jednak klarownych decyzji architektonicznych i operacyjnych: gdzie będzie odbywać się routing? Kto jest autorytatywnym źródłem danych? Jaka spójność jest merytorycznie wymagana, a gdzie wystarczy opóźnienie czasowe? I jak zapobiec temu, żeby równoległy tryb działania nie stał się trwałą budową?

Wzorzec Strangler w realiach przedsiębiorstwa: nie „Microservices”, lecz wyraźne krawędzie integracji

Grafika przedstawiająca stopniowe przekierowywanie funkcji z systemu legacy na nowe komponenty za pośrednictwem bramki
Wzorzec Strangler jako wzorzec migracji: routing przez bramkę, podczas gdy funkcje są stopniowo przenoszone.

Wzorzec Strangler oznacza: budujecie nowe funkcje obok systemu dziedziczonego i stopniowo przekierowujecie ruch, aż stara część stanie się zbędna. Ważne: to nie jest religijny spór architektoniczny („Monolith vs. Microservices”), lecz wzorzec migracyjny. Działa również wtedy, gdy docelowa architektura pozostaje monolitem – tylko że nowocześniejszym, łatwiejszym w utrzymaniu i lepiej integrującym się.

Najważniejsza decyzja: dzielić według procesów, nie według tabel

W wielu wymianach systemów dzieli się je w oparciu o dane („Najpierw weźmiemy tabele klientów i zamówień”). To często prowadzi do bolesnego równoległego działania, ponieważ procesy przebiegają poprzecznie względem tych danych. Lepszy jest podział zorientowany na procesy, np. „tworzenie ofert”, „przyjęcie towaru”, „obsługa reklamacji” lub „zgłoszenie serwisowe do wystawienia faktury”.

Zasada praktyczna: etap Strangler powinien obejmować merytorycznie zamknięty proces, który w nowym systemie może być obsługiwany i monitorowany end-to-end. Należą do tego wejścia (UI, API, import), przetwarzanie (reguły biznesowe) i wyjścia (druk, eksport, księgowanie, powiadomienia).

Strangler potrzebuje „przekierowacza”: bramy, proxy lub warstwy routingu

Aby użytkownicy i podłączone systemy nie musiały za każdym razem poznawać nowych punktów końcowych, często stosuje się warstwę routingu. W zależności od sytuacji może to być: reverse proxy przed aplikacjami webowymi, API-Gateway dla punktów końcowych usług lub warstwa integracyjna, która agreguje interfejsy plikowe i zdarzenia. Kluczowa jest zdolność do eksploatacji: centralna konfiguracja, czytelne logi, monitoring oraz kontrolowany rollback.

Dla administratorów ważne jest, aby ta warstwa nie stała się czarną skrzynką. Potrzebują oni przejrzystych tras (które żądanie trafiło gdzie), korelacji w logach (np. Request-ID) oraz zdefiniowanych limitów czasu i reguł ponawiania, aby błędy nie „skleiły się”.

Równoległy tryb pracy to stan operacyjny – nie „sztuczka projektowa”

Równoległy tryb pracy oznacza: stare i nowe komponenty przez pewien czas działają jednocześnie na produkcji. To normalne, ale kosztowne — szczególnie w eksploatacji. Mają Państwo więcej elementów ruchomych (moving parts), więcej monitoringu, większy potencjał incydentów i bardziej złożone odpowiedzialności. Dlatego równoległy tryb należy zaplanować jako czasowo ograniczony tryb operacyjny, łącznie z kryteriami zakończenia.

Typowe modele równoległego trybu pracy (i kiedy pasują)

  • Przełączanie według grup użytkowników (grupa pilotażowa → fale): odpowiednie, gdy role użytkowników są wyraźnie rozdzielne i procesy nie przebiegają przez grupy krzyżowo.
  • Przełączanie według najemców/oddziałów: dobre przy strukturach sieci sklepów/zakładów, gdy przepływy danych między lokalizacjami są ograniczone.
  • Przełączanie według kroków procesu: np. „wprowadzanie danych nowe, rozliczenia nadal w starym systemie” — ryzykowne, gdy istnieje wiele sprzężeń zwrotnych, ale czasem nieuniknione.
  • Przełączanie według typów obiektów: np. nowe środki trwałe w nowym systemie, zasoby historyczne w starym — może działać, jeśli istnieją jasne reguły dotyczące historii i raportowania.

Z punktu widzenia eksploatacji powinni Państwo zaprojektować tryb równoległy tak, aby domeny błędów pozostały małe: awaria w nowym komponencie nie może pociągnąć za sobą systemu legacy (np. przez blokujące interfejsy lub blokady bazy danych), i odwrotnie — system legacy nie może sabotować wszystkich nowych procesów przez niestabilne eksporty.

Feature Flags i reguły routingu: kontrola zamiast „wdrażamy i mamy nadzieję”

Feature Flags to przełączniki, dzięki którym mogą Państwo selektywnie włączać/wyłączać funkcje — bez nowego deploymentu. Dla kierownictwa IT i osób odpowiedzialnych za projekt nie decyduje szczegół techniczny, lecz governance: kto może przełączać? Jak dokumentuje się powód zmiany? Jak szybko można wrócić? Jakie zależności powstają (np. gdy dane zostały już wygenerowane w nowym formacie)?

Rozsądną praktyką jest prowadzenie krótkiego protokołu zmian (Decision Log) dla każdej akcji przełączenia: czas, właściciel, dotknięta grupa użytkowników, oczekiwany efekt, wskaźniki monitoringu, warunek rollbacku. To zapobiega klasycznemu „nikt już nie pamięta, dlaczego ruch jest prowadzony w ten sposób”.

Spójność danych podczas wdrożenia: sedno, od którego zależy wiele migracji

Grafika synchronizacji danych między dwiema bazami danych z kolejką i kwarantanną dla błędnych delt
Synchronizacja w trybie równoległym: zmiany trafiają do kolejki, błędne delty są izolowane zamiast być bezgłośnie odrzucanymi.

Spójność danych oznacza, że dane są merytorycznie poprawne, kompletne i dostępne we oczekiwanej kolejności. W pracy równoległej jest to trudne, ponieważ dwa systemy zapisują jednocześnie lub przynajmniej oba roszczą sobie prawo do „prawdy”. Tutaj rozstrzyga się, czy zastąpienie systemu legacy będzie stabilne, czy przez miesiące będziecie wykonywać porównania delt.

Najpierw ustalić: kto jest „System of Record” dla każdego obszaru danych?

Potrzebujecie dla każdego obszaru danych (np. debitorzy, artykuły, ceny, zamówienia, ruchy magazynowe, dokumenty) ustalenia, który system jest wiodący. To nie jest wyłącznie kwestia architektury, lecz operacyjna:

  • Gdzie wykonywane są korekty w przypadku zgłoszenia do wsparcia?
  • Gdzie przebiega proces zatwierdzania (kontrola dwuosobowa — Vier-Augen, SoD/segregacja funkcji)?
  • Jakie ślady audytu są wymagane (kto, kiedy i co zmienił)?
  • Jak uniknąć poprawek podczas zamknięcia miesiąca?

W wczesnych etapach podejścia Strangler często sensowne jest pozostawienie systemu legacy jako prowadzącego, a nowej komponenty „tylko” konsumencką. Później odwracacie prowadzenie. Ta zmiana prowadzenia to osobny kamień milowy i wymaga wyraźnego okna cutover oraz planu komunikacji i odbioru.

Wzorce synchronizacji: Dual Write, CDC i zdarzenia — z realistycznymi oczekiwaniami

Istnieje kilka podejść do synchronizacji danych między starym a nowym systemem. Żadne nie jest „bezpłatne”.

  • Dual Write: jedna operacja zapisuje dane w obu systemach (np. utworzenie zamówienia → legacy i nowy system). Zaleta: szybka dostępność. Wada: obsługa błędów jest złożona (co jeśli System A zapisze, a System B nie?), ponadto powstają zależności i często ryzyka wydajnościowe.
  • Change Data Capture (CDC): zmiany są wyciągane z logu bazy danych lub przez triggery/replikację jako delta. Zaleta: odseparowuje aplikację od mechanizmu synchronizacji. Wada: replikujecie też zmiany „techniczne” i musicie rekonstruować zdarzenia biznesowe; dodatkowo zmiany schematu w systemie legacy nagle stają się ryzykiem integracyjnym.
  • Integracja oparta na zdarzeniach: system publikuje zdarzenia biznesowe (np. „Auftrag freigegeben”/„zamówienie zatwierdzone”), które konsumują inne systemy. Zaleta: jasna semantyka biznesowa. Wada: wymaga precyzyjnych definicji zdarzeń, idempotencji (wielokrotne przetworzenie bez szkody) oraz solidnego, operacyjnego modelu obsługi komunikatów (messaging).

Dla decydentów kluczowe: spójność danych nie jest binarna. Niektóre procesy wymagają silnej spójności (natychmiast poprawne, np. zatwierdzenia płatności), inne tolerują konsystencję ostateczną (krótkie opóźnienie, np. indeks wyszukiwania, raportowanie, powiadomienia). Tę klasyfikację należy wcześnie uzgodnić z obszarem biznesowym oraz działem rewizji/audytu.

Konflikty i duplikaty: zaplanujcie wyraźnie „brzydką ścieżkę”

W pracy równoległej konflikty zwykle powstają w taki sposób: dwa systemy modyfikują ten sam obiekt, ale według różnych reguł. Albo import uruchamia się dwukrotnie, ponieważ retry „przyszedł za wcześnie”. Albo użytkownik koryguje dane w systemie legacy, podczas gdy nowy interfejs został już przełączony.

Do tego potrzebne są wiążące reguły:

  • Rozwiązywanie konfliktów: „Last write wins” rzadko jest poprawne merytorycznie. Lepiej sprawdzają się priorytety (wygrywa system wiodący) lub merytoryczne reguły scalania (np. dane podstawowe kontaktu vs. warunki).
  • Idempotencja: Każda integracja powinna tolerować wielokrotne przetworzenie bez duplikatów (np. taki sam numer dokumentu, ten sam zewnętrzny identyfikator).
  • Dead-Letter/Quarantäne: Nieprzetwarzalne delty muszą być wykrywalne, z jasnym przypisaniem odpowiedzialności i możliwością ponownego uruchomienia.

Bez tych zasad spójność danych schodzi do „porównań w Excelu” i ręcznej korekty – co skutkuje frustracją i trudno mierzalnymi kosztami następstw.

Projekt wdrożenia: fale, odbiory i cofnięcie, bez przeciążania eksploatacji

Dobry rollout to więcej niż „wdrożenie + szkolenie”. W pracy równoległej trzeba powiązać rollout z eksploatacją: kto obsługuje first-level przy błędach? Które logi są od razu dostępne? Jak przebiega eskalacja? Które procesy nie mogą być zmienione w danej fali (np. zamknięcie miesiąca, inwentaryzacja, zmiana cen)?

Planowanie fal z twardymi kryteriami

Sprawdza się planowanie fal z jasnymi kryteriami wejścia, nie tylko z terminami. Przykłady twardych kryteriów:

  • Dashboardy monitoringu i alerty dla nowego komponentu są uruchomione i przetestowane (w tym zredukowany „szum alarmowy”).
  • Runbooki dla typowych incydentów istnieją (timeouts, zator w kolejce, błędne importy, błędy uprawnień).
  • Porównanie delty jest zautomatyzowane i dostarcza zrozumiałe raporty (różnice według typu obiektu, okna czasowego, klasy przyczyny).
  • Mechanizm rollbacku jest przećwiczony (co najmniej realistycznie odtworzony w Staging/Pre-Prod).

Właśnie ten ostatni punkt jest często niedoceniany: rollback to nie „po prostu wracamy do poprzedniego stanu”. Jeśli nowy system wygenerował już dane, musicie wiedzieć, jak te dane będą widoczne w systemie legacy lub jak poprawnie je zmigrować/zneutralizować.

Cutover — mini-cutovers zamiast Big Bang

Nawet przy Strangler Pattern występują cutovery — tylko że mniejsze. Typowe są mini-cutovery przy zmianie kroku procesu lub przy przełączaniu odpowiedzialności za dane. Każdy mini-cutover wymaga:

  • Zamrożenie danych (krótkie, ale wiążące): kto podczas niego może co zmieniać?
  • Porównanie: Co zostało zmienione od ostatniej synchronizacji?
  • Przełączenie: Routing/Feature Flags, zadania, harmonogramy, uprawnienia.
  • Weryfikacja: Merytoryczne testy smoke (np. utworzenie zlecenia → dokument dostawy → faktura), plus kontrole techniczne (kolejki, współczynniki błędów, obciążenie bazy danych).

Dla kierownictwa IT ważne jest, by te kroki były udokumentowane jako proces powtarzalny i zabezpieczone personalnie. W przeciwnym razie powodzenie projektu zależy od pojedynczych osób, które „wiedzą, jak to zrobić”.

Najpierw ustabilizować interfejsy: niedoceniany fundament zastępowania systemu legacy

Wiele systemów legacy komunikuje się przez ukształtowane przez lata interfejsy: eksporty CSV do folderów, nocne zadania, bezpośrednie dostępy do bazy danych przez narzędzia firm trzecich, workflowy oparte na e-mailach. Stopniowe zastępowanie będzie wyraźnie łatwiejsze, jeśli najpierw zinwentaryzują Państwo krajobraz interfejsów i skonsolidują go w kilku miejscach.

W praktyce oznacza to: zidentyfikujcie krytyczne dla systemu punkty integracji (np. księgowość finansowa, wysyłka, raporty produkcyjne, tożsamości/uprawnienia) i ustanówcie tam jasne kontrakty. „Kontrakt” nie ma tu znaczenia prawnego, lecz technicznej stabilności: wersjonowanie, jednoznaczne pola, stabilne identyfikatory, udokumentowana obsługa błędów, zdefiniowane SLA dla dostarczania danych.

Jeśli wprowadzicie wewnętrzny model governance dla API/integracji (właściciel, zasady deprecjacji, ścieżki testowe/stagingowe), zmniejszycie ryzyko, że zmiana w systemie legacy nagle unieruchomi wasz nowy komponent. Dobrym punktem powiązania wewnętrznego byłby np. wpis dotyczący API-governance i strategii deprecjacji.

Bezpieczeństwo, uprawnienia i audyt: praca równoległa zaostrza zagadnienie

W pracy równoległej często istnieją zdublowane modele użytkowników i ról. To prowadzi do tzw. praw-cieni: użytkownik w nowym systemie jest poprawnie ograniczony, ale w systemie legacy nadal ma szerokie uprawnienia — i ostatecznie korzysta z „łatwiejszej drogi”. Dodatkowo pojawiają się konta techniczne (Service Accounts) do synchronizacji, importów, kolejek i zadań wsadowych.

Konkretne punkty, które należy wyjaśnić na wczesnym etapie:

  • Źródło tożsamości: Skąd pochodzą użytkownicy i grupy? AD/Entra ID? Własne IAM? Ważne, aby provisioning był możliwy do śledzenia.
  • Mapowanie ról: Jeśli role nie pasują 1:1, potrzebne są role przejściowe, ograniczone czasowo i okresowo poddawane recertyfikacji.
  • Service Accounts: minimalne uprawnienia, rotacja sekretów, rzetelne logowanie. Zwłaszcza konta synchronizacyjne stanowią potencjalne wejście ataku i są trudne do audytowania.
  • Audit-Trails: Gdy zmienia się odpowiedzialność za dane, musi być jasne, gdzie znajduje się dowód zmian i jak można go odnaleźć w obu systemach.

Ważne dla decydentów: bezpieczeństwo nie jest tu „dodatkowym zakresem”, lecz wpływa na wykonalność wdrożenia. Późniejsze dopasowywanie uprawnień w pracy równoległej jest zwykle droższe niż wczesne, pragmatyczne rozgraniczenie ról i kont serwisowych.

Monitoring, Logging und Betriebsübergabe: Ohne Observability wird Parallelbetrieb blind

Operations-Arbeitsplatz mit Monitoring-Ansichten und Alarmkontext für den Parallelbetrieb während einer Systemablösung
W pracy równoległej liczy się szybka diagnostyka: monitoring, logi i alarmowanie muszą uwidocznić zatory, klasy błędów i opóźnienia.

W pracy równoległej obrazy błędów są często pośrednie: delta stoi, retry działa w nieskończoność, kolejka się zatoruje albo zadanie krytyczne czasowo koliduje z blokadą bazy danych. Jeśli widzą Państwo to dopiero przez zgłoszenia użytkowników, jest za późno. Dlatego od początku potrzebne jest minimum obserwowalności: monitoring (stan), logowanie (zdarzenia) i — tam, gdzie sensowne — tracing (łańcuch między systemami).

Praktyczne, łatwe w eksploatacji wskaźniki to na przykład:

  • Backlog synchronizacji (ile zmian oczekuje), oraz wiek najstarszego wpisu.
  • Wskaźniki błędów per interfejs i klasa błędu (walidacja, przekroczenie czasu, uwierzytelnianie, konflikt danych).
  • Opóźnienie na krok procesu (np. od zatwierdzenia zamówienia do utworzenia zlecenia wysyłkowego).
  • Wskaźniki jakości danych (wskaźnik duplikatów, brakujące pola obowiązkowe, nieoczekiwane wartości null).

Do przekazania eksploatacji mniej się liczy, jakie narzędzie jest używane, a bardziej to, czy odpowiedzialności i runbooki są jasno określone. Jeśli macie dyżury on-call lub gotowość, eksploatacja przy typowych zakłóceniach musi być zdolna do działania bez detektywistycznej pracy deweloperów.

Kiedy wzorzec Strangler nie pasuje (lub tylko z wyraźnymi ograniczeniami)

Są sytuacje, w których stopniowe zastępowanie działa tylko w ograniczonym zakresie:

  • Bardzo ścisłe powiązanie transakcyjne: Jeśli niemal każda operacja przebiega przez wszystkie moduły i wymaga twardej spójności, równoległa eksploatacja szybko staje się niekontrolowalna.
  • Bezpośrednie dostępy do bazy danych przez systemy trzecie: Jeśli kilka narzędzi bezpośrednio zapisuje/odczytuje tabele legacy, najpierw trzeba powstrzymać lub skontrolować ten rozrost.
  • Niejasne posiadanie danych: Jeśli nie da się ustalić, kto jest źródłem prawdy dla danych, konflikty są gwarantowane – a zastąpienie stanie się kwestią polityczną zamiast techniczną.
  • Brak dyscypliny operacyjnej: Bez czystych środowisk, odtwarzalnych wdrożeń i monitoringu każdy etap pośredni staje się ryzykiem.

To nie znaczy, że jesteście zmuszeni do podejścia Big Bang. Ale musicie wtedy zmienić kolejność: najpierw ustabilizować punkty integracyjne, scentralizować dostęp do danych, wyjaśnić role i własność danych – i dopiero potem zastosować wzorzec Strangler.

Praktyczny plan etapowy zastępowania systemu legacy

Jako wskazówka dla osób odpowiedzialnych za projekty sprawdza się proces w wyraźnych etapach. Dokładne przełożenie zależy od systemu i branży, ale logika jest solidna:

  1. Inwentaryzacja i zależności: interfejsy, zadania (Jobs), przepływy danych, grupy użytkowników, krytyczne okna czasowe (zamknięcie, inwentaryzacja).
  2. Określenie krawędzi integracyjnych: moduły procesowe, posiadanie danych dla każdego obszaru, kontrakty integracyjne.
  3. Budowa routingu i przełączników: bramka/proxy, Feature Flags, centralne logowanie.
  4. Ustalenie ścieżki danych: CDC/Event/Dual Write, reguły konfliktów, kwarantanna, raporty uzgadniania.
  5. Pilot z rzeczywistym obciążeniem: nie tylko demonstracja, lecz prawdziwe przypadki, wraz z wyjątkami.
  6. Wdrożenie falowe: kryteria wejścia, listy kontrolne przełączenia, ćwiczenia przywracania (Rollback).
  7. Wyłączenie i porządkowanie: dezaktywacja starych ścieżek, usunięcie zadań, odebranie uprawnień, aktualizacja dokumentacji.

Ostatni punkt jest kluczowy: wiele organizacji pozostawia komponenty legacy „dla bezpieczeństwa”. Efekt: podwójne koszty, niejasne ryzyko, nikt nie odważa się ich wyłączyć. Zaplanuj dezaktywację jako podprojekt z terminem, osobą odpowiedzialną i dowodami (np. „brak dostępu od X tygodni”, „wszystkie eksporty przeniesione”, „wymagania audytu spełnione”).

Wniosek: Stopniowe zastępowanie oznacza traktowanie spójności i operacji jak produktu

Zastąpienie systemu legacy krok po kroku nie jest automatycznie prostsze – ale w wielu firmach jest jedyną realistyczną opcją. Wzorzec Strangler działa, jeśli na każdym etapie zdefiniujecie wyraźne krawędzie procesów, zaplanujecie równoległą eksploatację jako rzeczywisty stan operacyjny i nie powierzycie spójności danych przypadkowi. Kluczowe są wczesne ustalenia dotyczące posiadania danych, solidne wzorce synchronizacji z regułami rozwiązywania konfliktów oraz projekt rolloutu z falami, odbiorami i przetestowanym scenariuszem przywracania.

Jeżeli planują Państwo przeprowadzenie wymiany i chcieliby Państwo omówić w uporządkowany sposób punkty styku, pracę równoległą lub koncepcję spójności danych, prosimy o kontakt pod adresem .

Omówić projekt lub przedsięwzięcie modernizacyjne z Net-Base.

Następny krok

Jeżeli temat stanie się rzeczywistym projektem, architektura, stan istniejący i eksploatacja powinny być rozpatrywane razem na wczesnym etapie.

Wspieramy nie tylko w pojedynczych zagadnieniach, lecz także wtedy, gdy z fragmentów kodu źródłowego, kwestii związanych z systemami legacy lub koncepcji portalu ma powstać solidny projekt dla przedsiębiorstwa.

  • Stan istniejący, obraz docelowy i ryzyka techniczne są oceniane łącznie.
  • REST, dostęp do danych, portale i Rollout nie będą przesuwane na później.
  • Wcześnie widzą Państwo, która droga jest ekonomicznie i operacyjnie wykonalna.

Udostępnij wpis

Udostępnij ten wpis bezpośrednio

LinkedIn, X, XING, Facebook, WhatsApp i e-mail są natychmiast dostępne. Dla Instagrama przygotowujemy bezpośrednio link i krótki tekst.

E-mail

Instagram otwiera się w nowej karcie. Link i krótki tekst są wcześniej kopiowane do schowka.