Zamówienie niestandardowego modułu do PrestaShop albo wtyczki do WordPressa rzadko kończy się źle z powodu samego kodu. Najczęściej problem leży w organizacji: brak briefu, niejasny zakres, wycena „na oko” i brak dokumentacji po wdrożeniu. Poniżej masz praktyczne zasady pracy nad niestandardowymi modułami i wtyczkami Krasnobród — od pierwszego ustalenia zakresu po przekazanie kodu i wsparcie po starcie. To część organizacyjna, uzupełnienie do tekstu, który wyjaśnia samą definicję pojęć i widełki kosztowe. Jeśli chcesz zobaczyć, jak układamy kolejność zadań przy takim projekcie, opisaliśmy to na przykładzie Zamościa.
W PrestaShop moduł niestandardowy to katalog w /modules/, np. /modules/kalkulatordostawy/, z plikiem głównym kalkulatordostawy.php. Klasa dziedziczy po Module, a metoda install() rejestruje hooki i tworzy własne tabele. Rejestracja hooka to wpis w bazie (ps_hook_module), więc odinstalowanie musi być przemyślane — inaczej zostają osierocone wpisy i kolumny. W WordPressie wtyczka to katalog w /wp-content/plugins/, a podpięcie do systemu to add_action() i add_filter(); hooki istnieją tylko w kodzie i znikają razem z dezaktywacją pliku. Jedna różnica techniczna, ale dwa cykle życia: moduł PrestaShop trzeba sprawdzać przy każdej aktualizacji sklepu (1.7.x vs 8.x), wtyczka WordPress najczęściej sypie się po zmianie wersji PHP albo WooCommerce.
Zamawiając „niestandardowy moduł”, dostajesz zwykle jeden z trzech wariantów, a każdy ma inny koszt utrzymania:
Czym to nie jest: snippet wklejony w functions.php, poprawka w pliku core, kupiony plugin z marketplace z drobną zmianą koloru. Trzy powody: pierwsza aktualizacja kasuje zmiany, nie ma wersjonowania, nikt nie wie, kto to pisał.
Przykład: sklep z produktami regionalnymi z Krasnobrodu potrzebuje kalkulatora dostawy — paczkomat InPost plus odbiór osobisty w Punkcie przy rynku. To logika zależna od wagi gabarytowej i strefy, nie od wyglądu — czyli moduł, nie override. Jak ustawić kolejność zadań przy takim projekcie, opisaliśmy w artykule o organizacji pracy nad niestandardowymi modułami i wtyczkami.
Sześć kryteriów, które przechodzisz przed każdą wyceną:
Reguła praktyczna: jeśli proces występuje u mniej niż ~100 firm w Polsce — np. specyficzny cennik usług uzdrowiskowych z zabiegami łączonymi albo wypożyczalnia sprzętu wodnego z kaucją — buduj własny. Jeśli to standard: faktury, koszyk, formularz kontaktowy, newsletter — kupuj gotowy.
Przykład kosztowy: plugin 500 zł/rok przez 5 lat to 2500 zł. Własny moduł: 40 h × 150 zł = 6000 zł jednorazowo, plus utrzymanie. Własny kod nadal się opłaca, gdy daje przewagę, której nie kupisz (własny algorytm wyceny dostawy), gdy nie ma żadnej alternatywy na rynku albo gdy dane klientów muszą zostać na Twoim serwerze.
Sygnał ostrzegawczy: plugin z 200 tys. instalacji i ostatnią aktualizacją sprzed 3 lat. Instalacje nic nie znaczą — znaczy data commita i testy z bieżącą wersją PHP.
| Scenariusz | Kiedy wybierać | Koszt utrzymania | Ryzyko aktualizacji |
|---|---|---|---|
| Buduj od zera | Unikalny proces, brak alternatywy na rynku | Twoje, wg umowy o wsparcie | Kontrolowane — zależy od Ciebie |
| Rozszerz gotowy plugin | Plugin ma hooki i aktywnego autora | Niskie do średniego | Średnie — zmiany w oryginale mogą kolidować |
| Fork pluginu | Proces standardowy, ale wymaga zmian w środku | Wysokie — ręczne scalanie | Wysokie — fork zostaje w tyle |
| Zostaw standardowe rozwiązanie | Proces powtarzalny, np. koszyk, faktury | Licencja 400–1500 zł/rok | Niskie — aktualizuje autor |
Stawka godzinowa na polskim rynku w 2025 to 120–220 zł netto — zależnie od seniority, regionu i tego, czy pracuje zespół czy jedna osoba. Sama stawka nie mówi nic o końcowym koszcie: wykonawca za 120 zł, który pierwszy raz widzi hooki PrestaShop, zrobi robotę w 60 h, a osoba za 200 zł w 25 h. Liczy się iloczyn, nie cena za godzinę.
Co siedzi w każdej godzinie: analiza i brief 15–25%, kod 40–50%, testy 15–20%, dokumentacja i przekazanie 5–10%. Wsparcie po wdrożeniu wycenia się osobno — najczęściej pakietem 5–10 h.
Przykład pełnego wyliczenia dla Krasnobrodu: kalkulator dostawy z regułami wagi gabarytowej (próg 25 kg na paczkomat), strefami odbioru i odbiorem w Punkcie przy rynku — 28 h × 150 zł = 4200 zł netto, plus 6 h wsparcia po starcie. W tej kwocie jest 6 h analizy (ustalenie, co robić, gdy produkt nie mieści się w skrytce), 14 h kodu, 5 h testów na realnych zamówieniach i 3 h dokumentacji: gdzie zmienić próg wagi i jak dodać nową strefę bez dzwonienia do dewelopera.
Dlaczego godziny są bezpieczniejsze niż sztywne „od–do”: wycena bez zakresu prawie zawsze kończy się dopłatą albo niedokończonym modułem. Wycena w godzinach z rozpisanym zakresem pozwala porównać dwie oferty punkt po punkcie — i zobaczyć, że tańsza oferta ma o 10 h mniej testów. Przy integracjach z Subiektem, baselinkerem czy ERP rozstrzał jest największy, bo zależy od jakości dokumentacji API dostawcy. Więcej o tym w materiale o integracjach z ERP, płatnościami i kurierami.
| Typ zadania | Widełki godzinowe | Typowy koszt netto (150 zł/h) |
|---|---|---|
| Prosty hook lub filtr | 6–12 h | 900–1800 zł |
| Kalkulator dostaw i płatności | 20–40 h | 3000–6000 zł |
| Panel zamówień B2B | 60–120 h | 9000–18000 zł |
| Integracja z ERP, Subiektem, baselinkerem | 60–160 h | 9000–24000 zł |
| Niestandardowy konfigurator produktu | 80–200 h | 12000–30000 zł |
Ten sam układ kroków stosujemy przy module do PrestaShop i przy wtyczce do WordPressa. Różni się tylko technologia, nie kolejność.
| Krok | Czas | Efekt |
|---|---|---|
| 1. Rozmowa i cele | 1–2 h | notatka z celem i miarą sukcesu |
| 2. Brief i kryteria akceptacji | 2–4 h | lista warunków odbioru |
| 3. Wycena i zakres | 1–2 h | kwota, termin, lista „poza zakresem” |
| 4. Prototyp logiki bez UI | 4–8 h | działające reguły na danych testowych |
| 5. Implementacja | wg wyceny | kod w repozytorium |
| 6. Testy na kopii sklepu | wg liczby przypadków | lista sprawdzonych scenariuszy |
| 7. Wdrożenie i szkolenie | 1–3 h | działający moduł i instrukcja |
Definition of Done to lista zdań, nie „moduł działa”. Przykład: moduł poprawnie liczy koszt dostawy przy 500 produktach w katalogu i 3 strefach dostawy, loguje każdy nieudany request do integracji z datą i numerem zamówienia, jest w repozytorium z historią commitów, da się wyłączyć jednym kliknięciem, a instrukcja ma maksymalnie 2 strony.
Środowisko testowe: kopia sklepu na subdomenie (np. test.twojadomena.pl), baza zanonimizowana — zamówienia i klienci na danych fikcyjnych, bo kopia produkcyjnej bazy to dane osobowe. Wdrożenie planujemy poza szczytem ruchu, zanim zacznie się poranny szczyt zamówień.
Wsparcie powdrożeniowe: pierwsze 30 dni poprawki błędów blokujących na koszt wykonawcy — o ile w umowie jest definicja takiego błędu („uniemożliwia złożenie zamówienia lub pokazuje błędną kwotę”). Potem pakiet godzinowy, np. 5 h miesięcznie. Zapisz też czas reakcji i kanał zgłoszeń oraz zdanie, że nowa funkcja nie jest poprawką błędu. To jest utrzymanie i opieka techniczna sklepu w praktyce.
Plan wycofania: flaga włącz/wyłącz w konfiguracji i zero twardych zależności w szablonie — szablon wywołuje hook, nie kod modułu. Wtedy wyłączenie modułu w panelu przywraca poprzednie zachowanie sklepu. Podobne zasady porządkowania etapów opisaliśmy w tekście o tym, jak zorganizować pracę nad niestandardowym modułem.
| Krok | Czas | Efekt |
|---|---|---|
| 1. Rozmowa i cele biznesowe | 1–2 h | notatka z celem i miarą sukcesu |
| 2. Brief i kryteria akceptacji | 2–4 h | lista warunków odbioru |
| 3. Wycena i zakres | 1–2 h | kwota, termin, lista „poza zakresem” |
| 4. Prototyp logiki bez UI | 4–8 h | działające reguły na danych testowych |
| 5. Implementacja | wg wyceny | kod w repozytorium |
| 6. Testy na kopii sklepu | wg liczby przypadków | lista sprawdzonych scenariuszy |
| 7. Wdrożenie i szkolenie | 1–3 h | działający moduł i instrukcja |
Brief to nie elaborat — jednostronicowy dokument, który czytasz na głos w 5 minut. Musi mieć osiem punktów i każdy z nich zapisany konkretnie.
| Punkt briefu | Co musi być zapisane konkretnie | Przykład |
|---|---|---|
| Cel biznesowy | liczba, nie hasło | „skrócenie pakowania zamówienia o 30%” |
| Użytkownicy | kto klika i z jakim prawem | magazynier na tablecie, tylko rola „Magazyn” |
| Przypadki użycia | krok po kroku, co robi człowiek | „skanuje etykietę, system drukuje list przewozowy” |
| Reguły biznesowe | warunki i wyjątki | „powyżej 31,5 kg wyłącz paczkomat” |
| Integracje zewnętrzne | nazwy systemów i kierunek danych | ERP do sklepu: stany magazynowe co 15 min |
| Wydajność | liczby | lista 5000 zamówień wczytuje się w 3 s |
| Dane i RODO | co zapisujemy i jak długo | logi z numerem zamówienia, bez danych klienta, 90 dni |
| Kryteria akceptacji | zdania, które da się przetestować | przy 500 produktach koszt dostawy liczy się w 1 s |
Osobno opisz przypadki brzegowe. Cztery, które w praktyce generują najwięcej godzin: produkt o wadze 31,5 kg, który nie mieści się w paczkomacie; kod rabatowy łączony z ceną B2B — czy mnożą się, czy się sumują; brak dostępności strefy InPost, gdy kurier nie odpowiada; zamówienie z odbiorem osobistym, które nie powinno doliczać żadnej wysyłki. Każde z tych niedopowiedzeń to zwykle 2–8 dodatkowych godzin na etapie testów — płacisz za nie Ty, bo wykonawca i tak musi coś wymyślić.
Zmień też procedurę zmiany zakresu na pisemną. Każda zmiana to osobny mail z zakresem, liczbą godzin i nową datą oddania, zatwierdzony przed rozpoczęciem pracy. Bez tego po dwóch tygodniach nie ustalisz, co było ustalone.
Dobre briefy mają jeszcze jedno: ustalenia o kodzie. Nazewnictwo, repozytorium, brak nadpisywania plików core — opisaliśmy to w tekście o porządku w kodzie niestandardowych modułów i wtyczek. Jeśli moduł dotyka kurierów lub płatności, zajrzyj też do materiału o integracjach z ERP, płatnościami i kurierami.
| Punkt briefu | Co musi być zapisane konkretnie | Przykład |
|---|---|---|
| Cel biznesowy | liczba, nie hasło | „skrócenie pakowania zamówienia o 30%” |
| Użytkownicy | kto klika i z jakim prawem | magazynier na tablecie, tylko rola „Magazyn” |
| Przypadki użycia | krok po kroku, co robi człowiek | „skanuje etykietę, system drukuje list przewozowy” |
| Reguły biznesowe | warunki i wyjątki | „powyżej 31,5 kg wyłącz paczkomat” |
| Integracje zewnętrzne | nazwy systemów i kierunek danych | ERP do sklepu: stany magazynowe co 15 min |
| Wydajność | liczby | lista 5000 zamówień wczytuje się w 3 s |
| Dane i RODO | co zapisujemy i jak długo | logi z numerem zamówienia, bez danych klienta, 90 dni |
| Kryteria akceptacji | zdania, które da się przetestować | przy 500 produktach koszt dostawy liczy się w 1 s |
Cztery błędy wracają w niemal każdym modułze, który trafia do nas po innym wykonawcy.
Skutki widać po fakcie: aktualizacja WooCommerce wysypuje sklep, bo moduł nadpisał szablon; nikt nie wie, która linia odpowiada za błędną kwotę dostawy; dwa moduły konkurują o ten sam hook i o kolejności wywołań decyduje przypadek. Frameworki mają na to gotowe mechanizmy — warto sprawdzić w dokumentacji dla deweloperów PrestaShop, czy wykonawca faktycznie z nich korzysta, czy tylko tak twierdzi.
| Pytanie do wykonawcy | Konkretna odpowiedź |
|---|---|
| Gdzie jest kod? | W repozytorium Git, z linkiem i dostępem dla Ciebie — nie „na serwerze wykonawcy” |
| Jak wdrożyć na czystą instalację? | Instrukcja krok po kroku; test: stawiamy moduł na pustym sklepie w 15 minut |
| Co się stanie po aktualizacji? | Lista dotykanych hooków i tabel, zero nadpisań plików core |
| Gdzie są logi? | Ścieżka pliku albo tabela w bazie, plus sposób zmiany poziomu logowania |
| Kto ma prawa do repozytorium? | Ty jako właściciel projektu; wykonawca dostaje dostęp, nie własność |
Zanim podpiszesz umowę, poproś o historię commitów z innego projektu, sprawdź, czy istnieje katalog z testami, i zobacz, czy moduł da się wyłączyć jednym kliknięciem w panelu. Trzy minuty sprawdzania.
Dług techniczny w liczbach: moduł pisany dwa dni bez testów kosztuje zwykle 1–2 dni roboczych rocznie więcej na utrzymanie niż moduł z testami. Przy stawce 150–250 zł za godzinę to 1200–4000 zł rocznie za oszczędzone wcześniej pół dnia. Więcej o tym, jak utrzymać porządek pracy przy modułach i wtyczkach, piszemy osobno.
| Pytanie do wykonawcy | Konkretna odpowiedź |
|---|---|
| Gdzie jest kod? | W repozytorium Git, z linkiem i dostępem dla Ciebie — nie „na serwerze wykonawcy” |
| Jak wdrożyć na czystą instalację? | Instrukcja krok po kroku; test: stawiamy moduł na pustym sklepie w 15 minut |
| Co się stanie po aktualizacji? | Lista dotykanych hooków i tabel, zero nadpisań plików core |
| Gdzie są logi? | Ścieżka pliku albo tabela w bazie, plus sposób zmiany poziomu logowania |
| Kto ma prawa do repozytorium? | Ty jako właściciel projektu; wykonawca dostaje dostęp, nie własność |
Wydajność modułu psuje się najczęściej w jednym miejscu: w pętli, która odpytuje bazę przy każdym obrocie. Eksport zamówień, który w foreach po 500 rekordach wykonuje 500 osobnych zapytań, robi 501 zapytań zamiast jednego. Naprawa jest zawsze taka sama: pobierz dane jednym zapytaniem z IN() albo JOIN, a obróbkę zrób w PHP. Drugi powód zwolnień to brak cache — jeśli moduł liczy to samo przy każdym wejściu na stronę, wynik trzymaj w cache z kluczem i TTL 300 s, czyszczonym przy zapisie. Trzeci: brak indeksów na kolumnach używanych w WHERE i JOIN. Dodaj je w metodzie install() i sprawdź plan zapytania przez EXPLAIN. Na VPS domyślne memory_limit 128–256 MB i max_execution_time 30 s to twarda granica — generowanie 2000 PDF-ów w jednym żądaniu ją przekroczy, więc rób to partiami po 100 rekordów z crona, z zapisem postępu. Szczegóły techniczne modułów znajdziesz w dokumentacji dla deweloperów PrestaShop.
Bezpieczeństwo: każde dane z $_GET i $_POST przechodzi walidację i rzutowanie, a wyjście jest escapowane (htmlspecialchars, escape w Smarty). Akcje AJAX muszą mieć nonce i sprawdzenie uprawnień — w WordPressie check_ajax_referer i current_user_can, w PrestaShop token i kontrola roli pracownika. Żadnych haseł, tokenów i kluczy API w plikach modułu — trzymaj je w konfiguracji platformy, nigdy w repozytorium. Przeglądaj zależności: biblioteka PDF albo SDK kuriera z 2022 roku to gotowy wektor.
RODO w praktyce: minimalizacja (jeśli eksportujesz zamówienia do CSV, nie pobieraj e-maila, gdy nie jest potrzebny), okres retencji logów modułu — 90 dni to bezpieczny punkt wyjścia, wpis w rejestrze czynności przetwarzania i umowa powierzenia z wykonawcą. KSeF: obowiązek wystawiania faktur w systemie obejmuje coraz więcej firm, a moduł sklepu musi umieć dokument wysłać i odebrać — ustal to na etapie zakresu, nie po wdrożeniu. OSS VAT: przy sprzedaży do krajów UE moduł musi stosować właściwą stawkę i przekazywać dane do rozliczenia. To typowy powód budowy własnego rozwiązania, bo gotowe wtyczki tego nie obsługują.
| Obszar | Typowa pułapka | Co sprawdzić przed odbiorem |
|---|---|---|
| Wydajność | zapytanie w pętli (N+1), brak indeksów, brak cache | liczba zapytań przy 100 zamówieniach, EXPLAIN, klucz cache i TTL |
| Bezpieczeństwo | brak nonce i uprawnień w AJAX, klucze API w kodzie | nonce, kontrola roli, klucze poza repozytorium |
| RODO | logi z danymi klienta bez terminu usunięcia | okres retencji, wpis w rejestrze, umowa powierzenia |
| KSeF i OSS VAT | brak obsługi faktur i stawek VAT UE | czy wysyłka i odbiór dokumentów są w zakresie umowy |
Koszt modułu to nie jednorazowy wydatek, tylko pozycja w budżecie na cały czas życia sklepu. Realna opieka techniczna obejmuje: aktualizacje rdzenia i modułów, kopie zapasowe z testem odtworzenia (raz na kwartał, bo kopia, której nikt nie odtworzył, nie jest kopią), monitoring dostępności co minutę z alertem SMS oraz pomiar czasu odpowiedzi, a także wsparcie w godzinach roboczych — zwykle 8:00–16:00.
SLA zapisz w umowie liczbami. Awaria blokująca sprzedaż — bramka płatności odrzuca transakcje, sklep zwraca błąd 500, nie działa dodawanie do koszyka — to czas reakcji 4 h. Zgłoszenie zwykłe, np. nie generuje się PDF dla jednego typu zamówienia: 1 dzień roboczy. Prace planowane, jak aktualizacja modułu czy zmiana API kuriera, robimy w oknie serwisowym poza szczytem, np. 2:00–5:00, z zapowiedzią 24 h wcześniej.
Koszt utrzymania to zwykle 15–25% wartości wdrożenia rocznie. Moduł za 12 000 zł to 1 800–3 000 zł/rok. Alternatywa to pakiet 5–10 h miesięcznie. Pakiet godzinowy bywa tańszy, gdy moduł jest mały, stabilny i nie dotyka płatności ani magazynu — wystarczą 1–2 h kwartalnie na przegląd i aktualizację. Abonament z SLA ma sens wtedy, gdy moduł obsługuje sprzedaż, stany magazynowe albo KSeF: wtedy płacisz za gotowość, a nie za godziny.
Moduł niestandardowy aktualizujesz razem z aktualizacją platformy, po zmianie API kuriera lub bramki płatności, po zmianie przepisów (KSeF, OSS, stawki VAT) i przed sezonem. Zakres takiej opieki opisaliśmy szerzej w artykule o utrzymaniu i opiece technicznej sklepów w Krasnobrodzie.
| Typ zgłoszenia | Czas reakcji | Przykład |
|---|---|---|
| Awaria blokująca sprzedaż | 4 h | bramka płatności nie autoryzuje, sklep zwraca 500 |
| Błąd utrudniający pracę | 1 dzień roboczy | brak PDF faktury dla jednego typu zamówienia |
| Praca planowana | wg harmonogramu, okno poza szczytem | aktualizacja modułu, zmiana API kuriera |
Krasnobród jest około 30 km od Zamościa, więc spotkanie na miejscu przy briefie i przy odbiorze prac jest w pełni wykonalne — zwykle w jednym dniu. Brief na miejscu skraca ustalenia o tygodnie, bo od razu widzimy katalog, cenniki i to, jak pracownicy obsługują zamówienia. Resztę pracy prowadzimy zdalnie na stagingu: kopia sklepu z wyłączoną indeksacją i zabezpieczeniem hasłem, do której dostajesz link i login. Testujesz na kopii, wdrożenie na produkcję robimy poza godzinami ruchu.
Kontakt wygląda tak: rozmawiasz bezpośrednio z deweloperem, który pisze kod, bez pośredników i handlowców. Kanał ustalamy w umowie — zwykle mail do zgłoszeń i telefon do awarii. Zgłoszenia w jednym miejscu, żeby nie ginęły w wątkach na kilku komunikatorach.
Branże z regionu mają konkretne wymagania, których gotowe moduły nie pokrywają. Obiekty noclegowe i uzdrowiskowe: cennik zależny od sezonu, długości pobytu, liczby osób i dnia tygodnia. Sklepy z produktami regionalnymi: wysyłka, OSS VAT i faktury. Wypożyczalnie sprzętu: kalendarz dostępności, kaucje, opłaty za przetrzymanie. Firmy B2B z Roztocza sprzedające hurtowo: ceny indywidualne per klient, limity kredytowe, wymiana stanów z ERP. Te ostatnie przypadki opisaliśmy w tekście o integracjach z ERP, płatnościami i kurierami w Krasnobrodzie.
Podział ról jest prosty i warto go ustalić przed startem: po Twojej stronie decyzje biznesowe, dane i akceptacja zakresu, po naszej analiza, kod, testy i dokumentacja.
| Etap | Po stronie klienta | Po naszej stronie |
|---|---|---|
| Brief | cele biznesowe, cenniki, przykłady zamówień | analiza, pytania, zakres i wycena |
| Praca | dane testowe, decyzje o zmianach | kod, testy na stagingu, dokumentacja |
| Odbiór | testy na kopii, akceptacja | wdrożenie na produkcję, szkolenie |
| Po starcie | zgłoszenia przez ustalony kanał | reakcja wg SLA, aktualizacje, kopie |
Brief w jednym mailu, bez zakresu i bez listy wykluczeń
Jak wykryć: W opisie zamówienia nie ma punktu „czego nie obejmuje wdrożenie”, nie ma listy funkcji ani przykładowych ekranów. Wykonawca dopyta o to dopiero po podpisaniu umowy — albo wcale.
Jak naprawić: Zrób jednostronicowy brief: cel biznesowy, 5–10 funkcji, 2–3 wykluczenia, przykłady sklepów, które robią to podobnie. Do tego zapytaj wykonawcę o dopisanie własnych założeń — to normalne, że część rzeczy trzeba doprecyzować.
Sztywna wycena „od–do” bez rozbicia na godziny i etapy
Jak wykryć: W ofercie widzisz widełki 3000–9000 zł i nic więcej. Nie wiadomo, co jest w kwocie minimalnej, a co w maksymalnej, ani ile godzin zajmie analiza, a ile testy.
Jak naprawić: Poproś o rozbicie na etapy z liczbą godzin: analiza, kod, testy, dokumentacja, wsparcie. Wtedy porównasz dwie oferty po stawkach i po zakresie, a nie po kwocie na dole dokumentu.
Praca bezpośrednio na produkcji, bez środowiska testowego
Jak wykryć: Wykonawca wgrywa pliki na działający sklep w godzinach sprzedaży i mówi, że „będzie dobrze”. Nie ma stagingu ani kopii bazy do testów.
Jak naprawić: Ustal staging (kopia sklepu) albo co najmniej okno wdrożeniowe poza godzinami sprzedaży, z kopią bazy i plików przed każdą zmianą. Testuj na stagingu na prawdziwych zamówieniach testowych.
Cała logika w functions.php albo w jednym pliku w motywie
Jak wykryć: Po wdrożeniu nie ma osobnego katalogu modułu w /modules lub wtyczki w /wp-content/plugins. Zmiany giną przy aktualizacji motywu albo po zmianie szablonu.
Jak naprawić: Kod własny trzymaj w osobnym module lub wtyczce z nazwą, wersją i autorem. Motyw zostaw od wyglądu, a logikę biznesową od niego oddziel.
Brak repozytorium i historii zmian
Jak wykryć: Wersje krążą jako pliki ZIP o nazwach typu „modul_final_v3_ok”. Nikt nie wie, która wersja jest na produkcji i co się zmieniło między nimi.
Jak naprawić: Repozytorium Git z tagami wersji i krótkim changelogiem. To też zabezpieczenie na wypadek zmiany wykonawcy — nowy zespół wchodzi w kod w godziny, a nie w dni.
Brak przekazania wiedzy i dokumentacji po odbiorze
Jak wykryć: Po zakończeniu projektu jedyną osobą, która wie, jak działa moduł i gdzie są jego ustawienia, jest wykonawca. Nie ma opisu hooków, konfiguracji ani scenariuszy awaryjnych.
Jak naprawić: Zamów krótkie README: co robi moduł, jakie hooki lub filtry wykorzystuje, gdzie się go konfiguruje, co zrobić, gdy przestanie działać. Do tego 1–2 godziny przekazania na żywo z osobą, która będzie tym zarządzać.
Dobrze zorganizowany projekt modułu lub wtyczki różni się od chaotycznego głównie trzema rzeczami: zakresem zapisanym na papierze, podziałem godzin na etapy i zapleczem technicznym — stagingiem, repozytorium i kopiami. Wycena godzinowa z jasno określonym limitem chroni Cię lepiej niż sztywne „od–do” bez zakresu, bo widzisz, za co dokładnie płacisz. Test odbioru jest zawsze ten sam: sprawdź, czy ktoś poza autorem kodu potrafi go uruchomić i zdiagnozować.
Prosty hook lub filtr to 6–12 godzin, czyli zwykle kilka dni roboczych. Kalkulator dostaw i płatności to 20–40 godzin, panel zamówień B2B 60–120 godzin, a konfigurator produktu 80–200 godzin. Terminy liczone są w tygodniach kalendarzowych, bo dochodzi czas na Twoją akceptację każdego etapu.
Fork ma sens wtedy, gdy plugin robi 90% tego, czego potrzebujesz, a brakujący element jest mały. Wtedy piszesz własny dodatek, który rozszerza plugin, a nie kopiujesz cały kod. Kopiowanie całego pluginu oznacza, że od tej chwili sam odpowiadasz za jego bezpieczeństwo i kompatybilność z każdą aktualizacją WordPressa.
Przetrwa, jeśli pisany jest na hookach i filtrach, a nie na modyfikacjach plików rdzenia. Zanim zamówisz kod, zapytaj wprost: „czy ta zmiana przetrwa aktualizację rdzenia?”. Zmiana w pliku core albo w szablonie nadrzędnym to sygnał, że za kilka miesięcy zapłacisz za to drugi raz.
Wtedy, gdy nie ma zdefiniowanego zakresu ani limitu godzin. Sama stawka 150 zł za godzinę nic nie mówi o końcowym koszcie — znaczenie ma liczba godzin i to, co dokładnie w nich się mieści. Bezpieczna forma to widełki godzinowe na etap plus zasada, że każda godzina ponad limit wymaga Twojej pisemnej akceptacji.
Sam fakt posiadania własnego modułu nie wpływa na szybkość. Wpływa na nią jakość kodu: zbędne zapytania do bazy, ładowanie skryptów na wszystkich podstronach, brak cache. Dlatego po wdrożeniu warto zmierzyć Core Web Vitals i porównać z wynikiem sprzed zmiany — kryteria opisuje web.dev.
Poproś o trzy rzeczy w pierwszych dwóch tygodniach: dostęp do repozytorium, środowisko staging oraz krótki zapis ustaleń z briefu. Jeśli ich nie ma, projekt prawdopodobnie nie ma też zakresu ani podziału na etapy. To prosty test, który oszczędza najwięcej pieniędzy.
Ty, po opłaceniu faktury — i powinno to być zapisane w umowie. W praktyce oznacza to repozytorium na Twoim koncie lub z Twoim dostępem, plik instalacyjny modułu oraz dokumentację. Bez tego kolejny wykonawca wycenia pracę od zera, bo nie ma do czego wejść.
Jeśli chcesz przeliczyć zakres na godziny przed podpisaniem umowy, napisz do nas — powiemy, co da się zrobić taniej i gdzie Twoje wymagania realnie wymagają kodu własnego. Możesz też zajrzeć do opisu utrzymania i opieki technicznej sklepów, żeby wiedzieć, co dzieje się po wdrożeniu.