Użyj tej listy kontrolnej przekazania kodu źródłowego, aby wyeksportować, udokumentować, obrócić sekrety, uruchomić migracje, zweryfikować buildy i potwierdzić własność wdrożenia z klientami.

Przekazanie kodu źródłowego to moment, w którym projekt przestaje być „coś, co agencja może uruchomić”, a staje się „coś, czym klient potrafi zarządzać”. Bez jasnego przekazania problemy pojawiają się szybko: aplikacja kompiluje się tylko na jednym laptopie, produkcja zależy od sekretu, którego nikt nie może znaleźć, albo mała poprawka zamienia się w dni zgadywania.
Celem każdej listy kontrolnej przekazania jest proste: po transferze klient potrafi zbudować, uruchomić i wdrożyć produkt bez konieczności stałej dostępności agencji. To nie znaczy „brak wsparcia nigdy”. Oznacza to, że podstawy są powtarzalne i udokumentowane, więc następna osoba może przejąć je z pewnością.
Zakres dostarczanych elementów powinien być jawny. Minimum dla kompletnego przekazania zazwyczaj obejmuje:
Zakres jest równie ważny jak zawartość. Niektóre przekazania obejmują tylko jedno środowisko (np. produkcja). Inne obejmują dev, staging i produkcję z oddzielnymi ustawieniami i procesami. Jeśli nie nazwiesz, które środowiska są uwzględnione, ludzie założą różne rzeczy i tam powstają przestoje.
Praktyczny sposób zdefiniowania sukcesu to test weryfikacyjny: osoba, która nie budowała aplikacji, potrafi wyeksportować kod (na przykład z platformy takiej jak Koder.ai), podążyć za dokumentacją, ustawić zmienne środowiskowe, uruchomić migracje, zbudować i wdrożyć do uzgodnionego środowiska.
Ta checklista koncentruje się na gotowości technicznej: zmienne środowiskowe, rotacja sekretów, migracje bazy danych, skrypty wdrożeniowe i weryfikacja buildu. Nie obejmuje warunków prawnych, umów, klauzul IP ani sporów płatniczych. To też jest ważne, ale należy to ująć w osobnym porozumieniu.
Czyste przekazanie zaczyna się przed jakimkolwiek eksportem. Jeśli uzgodnicie, kto co i kiedy przejmuje, unikniecie niespodzianek z ostatniej chwili, jak złamane wdrożenia, niezapłacone hostingi czy brakujący dostęp.
Wybierz datę przekazania i zdefiniuj okno zamrożenia (często 24–72 godziny), w którym wprowadzane są tylko pilne poprawki. Dzięki temu wyeksportowany kod i działający system pozostaną w synchronizacji. Jeśli podczas zamrożenia potrzebny jest hotfix, zapisz dokładnie, co zostało zmienione i upewnij się, że znajduje się to w finalnym eksporcie.
Ustal, kto będzie właścicielem DNS, hostingu w chmurze i usług płatnych po przekazaniu. To nie tylko papierkowa sprawa. Jeśli płatności pozostaną na karcie agencji, usługi mogą zostać przerwane bez ostrzeżenia.
Szybki sposób, by to uściślić:
Zapisz to prostym językiem, aby obie strony mogły to śledzić.
Uzgodnij, jakie środowiska istnieją (local, staging, production) i gdzie każde z nich działa. Zaznacz, czy staging to oddzielny serwer, oddzielna baza danych, czy tylko flaga funkcji. Jeśli używałeś platformy takiej jak Koder.ai, potwierdź, co jest tam hostowane, a co ma działać w infrastrukturze klienta po eksporcie.
Nie czekaj do ostatniego dnia z prośbą o dostęp. Upewnij się, że właściwe osoby mają dostęp do repo, CI, hostingu, bazy danych i dostawcy e-maili.
Uzgodnij też proces akceptacji końcowej i sposób podpisania przekazania. Na przykład: „Klient potrafi zbudować z czystej maszyny, uruchomić migracje, wdrożyć na staging i przejść test dymny. Następnie obie strony podpisują akceptację na piśmie.”
Dobra checklista przekazania zaczyna się od repo, które nowy zespół może otworzyć i zrozumieć w kilka minut. Potwierdź, co jest dołączone (kod aplikacji, szablony konfiguracji, skrypty) i co jest celowo wyłączone (prawdziwe sekrety, klucze prywatne, duże pliki generowane). Jeśli coś jest wyłączone, napisz, gdzie to jest i kto za to odpowiada.
Utrzymuj przewidywalną strukturę. Celuj w jasne foldery najwyższego poziomu, takie jak frontend/, backend/, mobile/, infra/, scripts/ i docs/. Jeśli projekt to monorepo, wytłumacz, jak elementy się ze sobą łączą i jak uruchomić każdy z nich.
README powinien być użyteczny dla osoby, która nie budowała projektu. Powinien obejmować wymagania wstępne i najszybszą ścieżkę do działającego środowiska deweloperskiego, bez domysłów.
Dołącz krótki, ludzki fragment README, który odpowiada na:
Dodaj proste notatki architektoniczne prostym językiem: co komunikuje się z czym i dlaczego. Mały diagram jest opcjonalny, ale kilka zdań zwykle wystarczy. Przykład: „Frontend w React wywołuje API w Go. API czyta i zapisuje do PostgreSQL. Zadania tła działają jako osobny worker.”
Na koniec dołącz wersjonowany changelog lub notatki wydania dla builda przekazania. Może to być CHANGELOG.md lub krótki plik „handoff release notes”, który podaje dokładny commit/tag, co zostało wysłane i znane problemy.
Jeśli kod został wyeksportowany z platformy takiej jak Koder.ai, zanotuj wygenerowany typ projektu (web, server, mobile), oczekiwany toolchain (np. React, Go, PostgreSQL, Flutter) oraz obsługiwane wersje OS/narzędzi, których klient powinien używać do reprodukcji buildu.
Zmienne środowiskowe często są powodem, dla którego „działająca aplikacja” przestaje działać zaraz po przekazaniu. Dobra checklista traktuje je jak część produktu, a nie dodatek.
Zacznij od stworzenia inwentarza, którego nowy zespół może użyć bez zgadywania. Trzymaj go prostym językiem i dołącz przykładowy format wartości (nie prawdziwe sekrety). Jeśli zmienna jest opcjonalna, napisz, co się stanie, gdy jej brak i jaka jest domyślna wartość.
Prosty sposób prezentacji inwentarza to:
Wyraźnie wskaż różnice specyficzne dla środowisk. Na przykład staging może wskazywać na bazę testową i sandbox dostawcy płatności, podczas gdy produkcja używa usług live. Zanotuj też wartości, które muszą być zgodne w różnych systemach, jak callback URL, allowed origins czy identyfikatory pakietów mobilnych.
Udokumentuj, gdzie dziś każda wartość się znajduje. Wiele zespołów rozdziela wartości: lokalne .env dla dewelopmentu, zmienne CI dla buildów i ustawienia hostingu dla runtime. Jeśli eksportowałeś z Koder.ai, dołącz .env.example i krótko opisz, które zmienne trzeba wypełnić przed pierwszym buildem.
Na koniec udowodnij, że w repo nie ma ukrytych sekretów. Nie ograniczaj się do sprawdzenia obecnych plików. Przejrzyj historię commitów pod kątem przypadkowych kluczy, starych .env lub skopiowanych poświadczeń w przykładowych konfiguracjach.
Konkretne przykłady: frontend React + API w Go może potrzebować API_BASE_URL dla aplikacji web, oraz DATABASE_URL i JWT_SIGNING_KEY dla backendu. Jeśli staging używa innej domeny, napisz obie wartości i powiedz, gdzie je zmienić, aby nowy zespół nie wdrożył ustawień staging do produkcji.
Przekazanie nie jest kompletne, dopóki klient nie kontroluje każdego poświadczenia, których aplikacja potrzebuje. To oznacza rotację sekretów, a nie tylko ich współdzielenie. Jeśli agencja (lub były wykonawca) nadal ma działające klucze, pozostaje nieaudytowalny dostęp.
Zacznij od pełnego inwentarza. Nie ograniczaj się do haseł do bazy. Uwzględnij klucze API zewnętrznych dostawców, sekrety klienta OAuth, sekrety webhooków, klucze podpisujące JWT, poświadczenia SMTP, klucze dostępu do storage i wszelkie tymczasowe tokeny w CI.
Oto prosta checklista na dzień rotacji:
Po rotacji upewnij się, że nic nie zepsuło się w praktyce. Wykonaj szybkie testy „prawdziwego użytkownika” zamiast tylko sprawdzania logów.
Skoncentruj się na przepływach zależnych od sekretów:
Przykład: jeśli wyeksportowałeś projekt z Koder.ai i aplikacja używa dostawcy płatności oraz dostawcy e-mail, obróć oba klucze, wdroż, a następnie wykonaj małą transakcję testową i wyślij testowy e-mail. Dopiero po ich powodzeniu odwołaj klucze agencji.
Na koniec udokumentuj, gdzie sekrety będą przechowywane dalej (vault, zmienne CI lub ustawienia hostingu), kto może je zmieniać i jak cofnąć zmianę, jeśli rotacja spowoduje błąd.
Przekazanie może wyglądać na „gotowe”, podczas gdy to baza danych zepsuje wszystko jako pierwsza. Traktuj migracje i dane jako produkt sam w sobie: wersjonowany, powtarzalny i przetestowany.
Zacznij od zapisania aktualnej wersji bazy danych i miejsca, gdzie migracje znajdują się w repo. Bądź konkretny: ścieżka folderu, wzorzec nazewnictwa i najnowszy identyfikator migracji (lub znacznik czasu). Jeśli używasz PostgreSQL (często z backendem w Go), zanotuj też wymagane rozszerzenia.
Dołącz krótki runbook, który odpowiada na pytania:
Rollbacky wymagają uczciwości. Niektóre zmiany da się cofnąć tylko przywracając backup. Wyraź to prostym językiem i połącz z krokiem backupu (snapshot przed wdrożeniem, weryfikacja procesu przywracania).
Przed ukończeniem przekazania uruchom migracje na kopii danych produkcyjnych, jeśli to możliwe. To wychwytuje wolne zapytania, brakujące indeksy i problemy typu „działa na pustych danych”. Realistycznym testem jest eksport kodu, ustawienie zmiennych środowiskowych, przywrócenie zanonimizowanego zrzutu, a następnie zastosowanie migracji od zera. To pojedyncze ćwiczenie weryfikuje dużą część checklisty.
Jeśli aplikacja została zbudowana na platformie takiej jak Koder.ai i potem wyeksportowana, sprawdź, czy pliki migracji i jakiekolwiek skrypty seed są dołączone do eksportu i nadal poprawnie odwoływane przez proces startu backendu.
Przekazanie jest kompletne tylko wtedy, gdy ktoś inny potrafi odbudować aplikację od zera na czystej maszynie. Twoja checklista powinna zawierać dokładne polecenia build, wymagane wersje i oczekiwane wyjście (np. „web bundle w /dist”, „binarka API”, „lokalizacja APK Flutter”).
Zapisz narzędzia i menedżery pakietów, których faktycznie używasz, a nie to, co myślisz, że używasz. Dla typowego stacku to może być Node.js (npm lub pnpm) dla Reacta, toolchain Go dla serwera, narzędzia klienta PostgreSQL dla lokalnej konfiguracji i SDK Flutter dla mobilnych.
Spraw, aby instalacje zależności były przewidywalne. Potwierdź, że lockfile są zatwierdzone (package-lock.json, pnpm-lock.yaml, go.sum, pubspec.lock) i wykonaj świeżą instalację na nowym komputerze lub czystym kontenerze, aby udowodnić, że działa.
Zarejestruj, co robi CI krok po kroku, aby można to było skopiować do innego providera CI, jeśli zajdzie potrzeba:
Oddziel konfigurację build-time od runtime. Konfiguracja w czasie buildu zmienia to, co jest kompilowane (np. API base URL wbudowany w web bundle). Konfiguracja runtime jest wstrzykiwana przy starcie aplikacji (np. adresy DB, klucze API i flagi funkcji). Mieszanie ich powoduje często sytuacje „działa w CI” ale zawodzi po wdrożeniu.
Podaj prosty przepis weryfikacji lokalnej. Nawet krótki zestaw komend wystarczy:
# Web
pnpm install
pnpm test
pnpm build
# API
go test ./...
go build ./cmd/server
# Mobile
flutter pub get
flutter test
flutter build apk
Jeśli eksportujesz z platformy takiej jak Koder.ai, dołącz wygenerowane pliki CI lub presety buildów używane podczas wdrożenia, aby klient mógł odtworzyć ten sam proces poza platformą.
Dobra checklista przekazania nie kończy się na „oto repo”. Wyjaśnia też, jak kod trafia do działającej usługi i kto naciska przycisk.
Zacznij od zapisania, jak dziś wyglądają wdrożenia: w pełni ręczne (ktoś uruchamia polecenia na serwerze), napędzane przez CI (pipeline buduje i wdraża) lub przez platformę hostowaną. Dołącz, gdzie konfiguracje żyją i jakie środowiska istnieją (dev, staging, production).
Uczyń kroki wydania powtarzalnymi. Jeśli proces zależy od pamięci jednej osoby i 12 poleceń, przerób to na skrypty i zanotuj wymagane uprawnienia.
Daj klientowi wystarczająco, aby wdrożyć w dniu pierwszym:
Uzgodnij oczekiwania dotyczące przestojów. Jeśli wymagane jest „zero downtime”, wyjaśnij, co to oznacza w praktyce (blue-green, rolling deploy, okno tylko do odczytu na migracje). Jeśli przestój jest akceptowalny, zdefiniuj jasne okno.
Statyczne zasoby i cache to częste punkty awarii. Zanotuj, jak buduje się i serwuje assety, kiedy czyścić cache i czy jest zaangażowany CDN.
Rollback powinien być krótkim, przetestowanym przepisem powiązanym z tagiem lub ID wydania. Na przykład: wdroż poprzedni tag, przywróć poprzedni snapshot bazy danych jeśli trzeba i unieważnij cache.
Jeśli aplikacja powstała na Koder.ai i potem została wyeksportowana, wspomnij o ostatniej znanej dobrej migawce i dokładnej wersji eksportu, aby klient mógł szybko dopasować kod do działającego wydania.
Weryfikacja to moment, w którym dowiadujesz się, czy przekazanie jest realne. Cel jest prosty: nowa osoba potrafi wziąć wyeksportowany kod, skonfigurować go i uruchomić tę samą aplikację bez zgadywania.
Zanim zaczniesz, zapisz, jak wygląda „poprawnie”: wersja uruchomionej aplikacji, aktualny commit/tag (jeśli jest) i jeden lub dwa kluczowe ekrany albo odpowiedzi API do porównania. Jeśli eksport pochodzi z platformy takiej jak Koder.ai, zanotuj snapshot lub znacznik czasu eksportu, aby udowodnić, że testowałeś najnowszy stan.
Dla testów dymnych trzymaj się krótkiego zestawu związanego z ryzykiem:
Jeśli coś zawodzi, zapisz dokładne polecenie, wyjście błędu i użyte zmienne środowiskowe. Te szczegóły oszczędzają godziny przy zmianie właściciela.
Najszybszy sposób, by przekazanie zamienić w pożar, to założyć, że „kod wystarczy”. Dobra checklista koncentruje się na małych, nudnych detalach, które decydują, czy klient potrafi naprawdę uruchamiać i zmieniać aplikację bez was.
Większość problemów wpisuje się w kilka powtarzających się wzorców:
Zrób z rotacji i sprzątania dostępu zadanie zaplanowane, a nie „jak znajdziemy czas”. Ustal datę, kiedy konta agencji są usuwane, klucze regenerowane, i klient potwierdza, że potrafi wdrożyć tylko na swoich poświadczeniach.
Dla zmiennych środowiskowych zrób prosty inwentarz z trzech miejsc: repo, system CI i UI hostingu. Następnie zweryfikuj to, wykonując czysty build na świeżej maszynie lub w kontenerze.
Dla migracji testuj z tą samą rolą bazy danych, której użyje produkcyjny deployment. Jeśli produkcja wymaga podwyższonych kroków (np. włączenia rozszerzenia), zapisz je i jasno określ odpowiedzialność.
Realistyczny przykład: po eksporcie projektu z Koder.ai klient pomyślnie wdraża, ale zadania tła zawodzą, bo jeden URL kolejki był ustawiony tylko w dashboardzie hostingu. Prosty audyt zmiennych środowiskowych by to wychwycił. Połącz to z oznaczonym wydaniem i udokumentowanym rollbackem (np. „wdroż tag v1.8.2 i przywróć ostatni snapshot”) i zespół uniknie przestojów.
Jeśli zachowasz tylko jedną stronę z tej checklisty, niech to będzie ta. Cel jest prosty: czysta kopia powinna uruchamiać się na nowej maszynie, z nowymi sekretami i z bazą, która może iść do przodu bezpiecznie.
Wykonaj te kontrole na laptopie, który nigdy nie widział projektu (lub w czystym kontenerze/VM). To najszybszy sposób wykrycia brakujących plików, ukrytych założeń i starych poświadczeń.
Agencja przekazuje frontend React, API w Go i bazę PostgreSQL. Zespół klienta klonuje repo, kopiuje dostarczone .env.example do realnych zmiennych, tworzy nowe poświadczenia do bazy, dostawcy e-mail i zewnętrznych API. Uruchamia go test (lub uzgodnione polecenie testowe), buduje aplikację React, aplikuje migracje do świeżej instancji Postgresa i uruchamia obie usługi. Na koniec wdraża używając opisanego skryptu i potwierdza, że ten sam commit da się odbudować później.
Utrzymaj przekazanie krótkie i z właścicielem. 30–60 minut przeglądu zwykle przebije długi dokument.