Najpierw dla siebie czy od razu dla branży — jak zbudować pierwszą wersję, której użyje też konkurent?

Opublikowano: Stan na: wrzesień 2026 Tekst: Agent AI Tomka Niedźwieckiego · odpowiada: · zasady
Krótka odpowiedź

Zbuduj od razu wielofirmowo, ale uruchom jako pilot u siebie. Identyfikator firmy przy każdym rekordzie i polityki dostępu na wierszach kosztują na starcie godziny; dorobione po starcie wymagają przepisania zapytań, ekranów i migracji całej historii — w Postgresie zmiana typu kolumny przepisuje tabelę z indeksami i chwilowo potrzebuje nawet dwa razy więcej miejsca na dysku.

Nowa tabela Postgresa — polityki dostępu na wierszach 0polityk PostgreSQL 18 — 5.9. Row Security Policies: bez polityk wszystkie wiersze są jednakowo dostępne dla roli z uprawnieniem, stan: odczyt 16.09.2026
Filtr polityki bez indeksu: odrzucenie 100 000 cudzych wierszy 171 ms Supabase — Row Level Security performance, przykładowy plan zapytania, stan: odczyt 16.09.2026
Kolejny projekt bazy w planie Pro od 10 USDmiesięcznie Supabase — Pricing (plan Pro od 25 USD, pierwszy projekt w cenie), stan: odczyt 16.09.2026
Moduł rozliczeń cyklicznych Stripe, wariant „płacisz za użycie” 0,7 %obrotu subskrypcyjnego Stripe — cennik Billing dla Polski, stan: odczyt 16.09.2026

Które decyzje o „wielu firmach” zapadają pierwszego dnia?

Sześć decyzji z tabeli niżej rozstrzyga, czy Twojej aplikacji użyje kiedykolwiek druga firma — i wszystkie zapadają, zanim powstanie pierwszy ekran. Żadna nie brzmi jak decyzja strategiczna: to sposób, w jaki zapisujesz rekord, sprawdzasz dostęp i nazywasz produkt.

W ponad 300 rozmowach o pomysłach na aplikację, które prowadziliśmy między czerwcem a wrześniem 2026 (ręczna klasyfikacja opisów pomysłu, stan 16.09.2026), 6 na 10 pomysłów to narzędzie dla firm z własnej branży, a 1 na 5 — platforma łącząca dwie strony branży.

Obie liczby znaczą dla pierwszej wersji to samo: w bazie musi istnieć pojęcie firmy, nie tylko pojęcie użytkownika. Użytkownik loguje się do aplikacji. Firma jest właścicielem danych, płatnikiem i stroną umowy — i to ona zostaje, gdy pracownik odchodzi.

Pilot u siebie tego nie unieważnia. Przez pierwsze tygodnie w bazie jest jedna firma, Twoja, i to jest w porządku. Różnica polega na tym, że siedzi tam jako firma z identyfikatorem, a nie jako założenie zaszyte w kodzie i w ekranach.

DecyzjaWariant „tylko dla mnie”Wariant „dla branży”Koszt zmiany później (co trzeba przebudować)
Czyje są dane w rekordzierekord ma autora i datę; właściciel jest oczywisty, bo jest jedenkażdy rekord wskazuje firmę, do której należy; firma jest osobnym bytem w baziekolumna w każdej tabeli z danymi, uzupełnienie całej historii i nowe indeksy; dołożenie ograniczenia „wartość wymagana” skanuje tabelę, zmiana typu klucza przepisuje ją razem z indeksami
Kto widzi wierszdostęp znaczy „zalogowany do mojej aplikacji”polityka na wierszach na każdej tabeli, filtrująca po firmie zalogowanegoprzegląd każdej tabeli i każdego zapytania; do czasu poprawki dane wszystkich firm są otwarte dla każdej roli z uprawnieniem
Roleja i mój pracownikrole w firmie partnera oddzielone od roli operatora aplikacjimenu, ekrany i przyciski przestają zależeć od „zalogowany lub nie”; każdy widok dostaje warunek roli i osobny test
Ustawienia i słownikimoje stawki, statusy i szablony wpisane w kodte same wartości jako ustawienia firmy, z Twoimi jako startowymikażdy zaszyty tekst i próg to osobna zmiana ekranu plus migracja danych istniejących firm
Płatnościżadnych — aplikacja nie przyjmuje pieniędzysubskrypcja, faktura i historia płatności osobno dla każdej firmynowa warstwa: powiadomienia operatora płatności, dostęp zależny od statusu opłaty, dokumenty i ich numeracja
Marka i adresnazwa Twojej firmy w nagłówku i w domenieneutralna nazwa produktu i własna domenazmiana domeny, adresów logowania, szablonów wiadomości i konfiguracji poczty wysyłkowej; zapisane przez partnerów linki przestają działać

Dlaczego dorobienie „wielu firm” po starcie kosztuje więcej, niż wygląda?

Bo zmiana dotyka bazy, zapytań i ekranów naraz, a w bazie część zmian przepisuje całe tabele. Dokumentacja PostgreSQL 18 mówi to wprost: zmiana typu istniejącej kolumny normalnie przepisuje tabelę i jej indeksy, a przebudowa dużej tabeli chwilowo potrzebuje nawet dwa razy więcej miejsca na dysku (odczyt 16 września 2026).

Dodanie samej kolumny jest tanie i to właśnie myli. Kolumna ze stałą wartością domyślną nie wymusza przepisania tabeli. Ale dołożenie ograniczenia „wartość wymagana” każe przeskanować ją w całości, a polecenie zmieniające tabelę domyślnie bierze blokadę wyłączności — w tym czasie aplikacja tej tabeli nie czyta i nie zapisuje.

Najdroższa jest część, której w migracji nie widać: uzupełnienie historii. Do której firmy należy zlecenie sprzed dwóch lat, wystawione, gdy pojęcia firmy jeszcze nie było? To pytanie do Ciebie, nie do zespołu — i na kilku tysiącach rekordów zajmuje więcej niż sama zmiana schematu.

Druga pułapka dotyczy dostępu. Tabela wystawiona przez API bazy bez polityk na wiersze jest do odczytu i do zapisu dla każdej roli, która ma na niej uprawnienie — tak opisuje to dokumentacja Supabase (odczyt 16 września 2026). „Dostęp dorobimy na końcu” znaczy więc: do końca dane wszystkich firm stoją otworem.

Polityka nie jest też darmowa w działaniu. Działa jak warunek dokładany do każdego zapytania, więc kolumna, po której filtruje, musi mieć własny indeks i stać w nim na pierwszym miejscu. W przykładowym planie z dokumentacji odrzucenie 100 000 cudzych wierszy zajmuje 171 ms (odczyt 16 września 2026).

Trzecia droga — osobna kopia aplikacji dla każdej firmy — wygląda na ucieczkę od tych problemów i bywa najdroższa z całej trójki. Wytyczne Microsoftu o rozwiązaniach dla wielu najemców ujmują to jednym zdaniem: jeśli jeden najemca wymaga określonego kosztu infrastruktury, stu najemców wymaga zapewne stukrotności tej kwoty (odczyt 16 września 2026).

W cenniku widać to od pierwszego kroku: kolejny projekt bazy w planie Pro kosztuje od 10 USD miesięcznie (odczyt 16 września 2026). Gorsza jest reszta rachunku — każdą poprawkę wdrażasz osobno w każdej kopii, a wersje rozjeżdżają się po pierwszym pilnym wyjątku zrobionym dla jednej firmy.

Dla branży dochodzi warstwa, której pilot nie potrzebuje: rozliczenie cykliczne osobno dla każdej firmy. Moduł rozliczeń Stripe w wariancie „płacisz za to, czego używasz” kosztuje 0,7 % obrotu subskrypcyjnego, a płatność BLIK 1,6 % plus 1,00 zł (cenniki dla Polski, odczyt 16 września 2026).

Jak ta warstwa działa od środka, opisuje tekst o tym, jak działają płatności i subskrypcje w aplikacji dla firmy. Osobno policzone jest to, ile kosztuje miesięcznie utrzymanie aplikacji, z której korzysta 50 płacących firm.

Co celowo zostaje „tylko dla Ciebie” w pilocie?

Siedem rzeczy, które w pierwszej wersji świadomie zostają po Twojej stronie — nie dlatego, że są trudne, tylko dlatego, że bez drugiej firmy nikt nie wie, jak mają wyglądać. Każda z nich jest funkcją, nie fundamentem.

Lista ma wspólny mianownik. Funkcję dokładasz wtedy, gdy wiesz, jak ma wyglądać, i kosztuje tyle, ile kosztuje. Fundament — czyja jest dana i kto ją widzi — dokładasz raz, bo poprawka dotyka wszystkiego, co już powstało.

Stąd próg do decyzji o pierwszej wersji: trzy firmy z branży, które nazwiesz z nazwy i w których wskażesz osobę do rozmowy. Jedna firma to Twój zwyczaj. Dwie to zbieg okoliczności. Trzy różne firmy z tym samym krokiem procesu to już proces branży.

Dlaczego trzy, a nie dziesięć? Bo koszt zbudowania wielofirmowego fundamentu jest jednorazowy i znany z góry, a koszt dorobienia go rośnie z każdym miesiącem historii w bazie. Przy trzeciej rozmowie odróżnisz już parametr od wyjątku, a czekanie nic do tego nie dodaje.

Reguła ma niewygodną drugą stronę. Jeśli po dwóch miesiącach pytań nadal masz jedną firmę, swoją, zbuduj narzędzie dla siebie i nie płać za warstwę wielu firm. Aplikacja dla branży bez trzech firm w rozmowach jest zakładem, nie planem.

Od ilu płacących firm ten fundament zwraca się w pieniądzach, liczy osobny tekst: od ilu firm aplikacja dla branży spina się jako drugie źródło przychodu. Sam zapis procesu, z którego powstaje zakres, opisuje tekst o tym, jak spisać swój proces dla całej branży.

Trzy rzeczy wchodzą u nas do pierwszej migracji i nie czekają na drugą firmę. Polityki dostępu na wierszach są włączone od początku, a automatyczna kontrola kodu odrzuca zmianę, która je wyłącza albo wpuszcza wszystkich.

Druga: rola operatora jest przypięta do identyfikatora użytkownika, nigdy do adresu e-mail — inaczej rejestracja „na ten sam adres” potrafi przejąć uprawnienia. Trzecia: ograniczenia nałożone na kolumny bez polityk na wiersze są pozorne i nie liczą się jako oddzielenie danych.

Konkurent jako partner: co go przekonuje, że to nie jest aplikacja Twojej firmy?

Konkurent nie pyta o architekturę. Pyta o cztery rzeczy: czy widzisz jego dane, czy aplikacja zmusi go do pracy po Twojemu, czy jutro nie odetniesz mu dostępu i czy jego ludzie będą codziennie logować się do czegoś z Twoim logo.

Na każdą z tych obaw odpowiada konkret w pierwszej wersji, nie zdanie w ofercie.

Jak pokazać partnerowi, że jego dane są oddzielone, i co może sprawdzić sam — to osobny temat: jak oddzielić dane konkurenta, żeby partner z branży zaufał. Ogólne zasady zebrane są w tekście o tym, które zasady bezpieczeństwa obowiązują od pierwszego dnia.

Czego nie obiecywać: wyłączności każdemu po kolei, ceny „na zawsze” i funkcji, której nie ma w planie prac. Partner z branży zna ten repertuar z własnych rozmów handlowych i wychwytuje go szybciej niż klient spoza branży.

Co zostaje po Twojej stronie, a co robi zespół, który buduje

Podział w tym temacie jest wyjątkowo ostry. Wszystko, co wymaga znajomości branży i ludzi w niej, jest po Twojej stronie. Wszystko, co wymaga znajomości bazy danych i uprawnień, jest po stronie zespołu technicznego — i nie da się tego zamienić miejscami.

Po Twojej stronie (praktyk)Po stronie zespołu, który buduje i utrzymuje
Lista firm, z którymi rozmawiałeś, i różnice w ich procesieModel danych, w którym firma jest osobnym bytem, a każdy rekord ma właściciela
Decyzja, która różnica jest parametrem, a która wyjątkiem poza zakresemPolityki dostępu na wierszach od pierwszej migracji i indeksy pod filtry tych polityk
Nazwy ról w branży i to, co każda z nich może zobaczyćTechniczne role i uprawnienia, w tym rozdzielenie operatora aplikacji od administratora danych firmy
Lista rzeczy zostawionych „dla siebie” w pilocie i moment, w którym z niej schodząRozliczenie osobno dla każdej firmy i dostęp zależny od statusu opłaty
Pierwsi trzej partnerzy, rozmowa o ich obawach i zebranie zobowiązańEksport danych partnera, kopie zapasowe i sprawdzone odtworzenie
Akceptacja ekranów i danych startowych, komunikacja w branżyUtrzymanie, aktualizacje i poprawki wchodzące dla wszystkich firm naraz

Jedna pozycja jest wspólna. Ty decydujesz, co stoi na liście rzeczy zostawionych „tylko dla Ciebie” i kiedy z niej schodzi. Zespół pilnuje, żeby żadna z nich nie wsiąkła w fundament, bo stamtąd usuwa się je najdrożej.

Z czego taka aplikacja składa się warstwa po warstwie i co robi każda z nich, opisuje osobny tekst: z jakich warstw składa się aplikacja dla firmy.

Najczęstsze pytania

Czy pilot we własnej firmie ma sens, skoro aplikacja ma być dla branży?

Ma i jest najtańszym testem, jaki masz pod ręką. W pilocie właściciel procesu i użytkownik to ta sama osoba, więc błąd w zapisie procesu widać w tydzień, a nie po trzech miesiącach rozmów. Warunek jest jeden: pilot stoi na fundamencie dla wielu firm, a Twoja firma jest w bazie zwykłą firmą z identyfikatorem, nie wyjątkiem.

Co zrobić, gdy pierwszy partner chce, żeby aplikacja działała dokładnie tak jak u niego?

Rozdzielić dwie rzeczy. Wariant, który da się ustawić w jego firmie bez zmiany kodu, jest parametrem i wchodzi. Zmiana wymagająca innego ekranu albo innej reguły w bazie jest pracą dodatkową — wyceniasz ją osobno albo odkładasz do następnej wersji. Najgorsza odpowiedź to zgoda bez nazwania, do której z tych dwóch grup prośba należy.

Czy każda firma nie powinna mieć własnej, osobnej bazy?

Czasem powinna: gdy partner ma twarde wymagania zgodności albo płaci za wydzielenie. Wtedy liczysz to jako osobny produkt, nie jako wariant tego samego. W pozostałych przypadkach osobna baza mnoży koszt i pracę — kolejny projekt bazy w planie Pro to od 10 USD miesięcznie (cennik, odczyt 16 września 2026), a każdą zmianę wdrażasz osobno w każdej kopii.

Po czym poznać, że aplikacja została zbudowana tylko dla jednej firmy?

Po czterech znakach: nazwa firmy zaszyta na ekranach i w adresach, rekordy bez wskazania właściciela, jedno konto administratora dla wszystkich, ustawienia i słowniki wpisane w kod zamiast w dane. Każdy sprawdzisz bez programisty — poproś o ekran ustawień i zapytaj, w którym miejscu bazy stoi nazwa firmy, do której należy rekord.

Źródła

  1. PostgreSQL 18 — dokumentacja, 5.9. Row Security Policies (domyślnie brak polityk; role z atrybutem BYPASSRLS i superużytkownik omijają zabezpieczenie) — https://www.postgresql.org/docs/current/ddl-rowsecurity.html (odczyt 16.09.2026)
  2. PostgreSQL 18 — dokumentacja, ALTER TABLE, sekcja Notes (przepisanie tabeli przy zmianie typu kolumny, skan przy NOT NULL, do dwa razy więcej miejsca na dysku, blokada ACCESS EXCLUSIVE) — https://www.postgresql.org/docs/current/sql-altertable.html (odczyt 16.09.2026)
  3. Supabase — Row Level Security (tabela w wystawionym schemacie bez RLS jest do odczytu i zapisu dla każdej roli z uprawnieniem; polityka jako warunek dokładany do zapytania; indeks na kolumnie filtrowanej przez politykę) — https://supabase.com/docs/guides/database/postgres/row-level-security (odczyt 16.09.2026)
  4. Supabase — Row Level Security performance (przykładowy plan zapytania: 100 000 wierszy odrzuconych przez filtr polityki, czas wykonania 171 ms) — https://supabase.com/docs/guides/database/postgres/row-level-security-performance (odczyt 16.09.2026)
  5. Supabase — Securing your API (uprawnienia i polityki jako dwie osobne warstwy kontroli; domyślne uprawnienia nowych tabel w schemacie publicznym) — https://supabase.com/docs/guides/api/securing-your-api (odczyt 16.09.2026)
  6. Supabase — Pricing (plan Free: 50 000 aktywnych użytkowników, 500 MB bazy; plan Pro od 25 USD miesięcznie, kolejny projekt od 10 USD miesięcznie) — https://supabase.com/pricing (odczyt 16.09.2026)
  7. Stripe — cennik modułu Billing dla Polski (wariant pay as you go: 0,7 % obrotu rozliczeń cyklicznych) — https://stripe.com/pl/billing/pricing (odczyt 16.09.2026)
  8. Stripe — cennik dla Polski (BLIK 1,6 % + 1,00 zł; karty z Europejskiego Obszaru Gospodarczego 1,5 % + 1,00 zł) — https://stripe.com/pl/pricing (odczyt 16.09.2026)
  9. Microsoft Learn — Tenancy models for a multitenant solution (koszt stu najemców przy infrastrukturze dedykowanej; kiedy dzielić infrastrukturę) — https://learn.microsoft.com/en-us/azure/architecture/guide/multitenant/considerations/tenancy-models (odczyt 16.09.2026)
  10. Zasady, które wchodzą do pierwszej migracji w naszych wdrożeniach — praktyka zespołu — https://jakzrobicaplikacje.pl/o-serwisie/#skad (2026-09-16)
  11. Przegląd ponad 300 rozmów o pomysłach na aplikację, czerwiec–wrzesień 2026 (ręczna klasyfikacja opisów pomysłu) — zestawienie redakcji — https://jakzrobicaplikacje.pl/o-serwisie/#skad (2026-09-16)
Kto to napisał

Tekst przygotował Agent AI Tomka Niedźwieckiego — treść wygenerowana przez sztuczną inteligencję na podstawie własnych wdrożeń zespołu, dokumentacji dostawców i źródeł podanych wyżej, sprawdzona w osobnym przebiegu weryfikacji faktów i zredagowana. Za fakty odpowiada . Ostatnia weryfikacja: 16 września 2026.