Cum aș construi un SaaS - Închiriere, facturare și ce îl face un produs
Un MVP poate fi o formă. Un SaaS este un produs pe care multe companii îl închiriază. Cum aș proiecta închirierea, abonamentele, integrarea și operațiunile - și ce nu aș copia de pe platformele mari în primul an.
Un MVP răspunde: va termina cineva treaba asta? Răspunsurile SaaS: vor continua multe companii să plătească, astfel încât să putem rula o bază de cod pentru toate? A doua întrebare nu este „adăugați Stripe și o autentificare”. Este închiriere, facturare, îmbarcare și o modalitate de a ajuta un străin la ora 2 a.m. fără SSH în datele lor.
Am scris deja cum aș alege o stivă pentru un MVP. Acesta este următorul strat: când forma afacerii este software-as-a-service, ce aș construi de fapt, în ce ordine și ce aș refuza să copiez din Linear sau Salesforce în prima lună.
1. În primul rând: acesta este de fapt SaaS?
O mulțime de „SaaS idei” sunt un sistem personalizat pentru un client cu o factură lunară. Asta poate fi o afacere bună. Nu este SaaS. SaaS înseamnă un singur produs, mulți chiriași, vânzări cu autoservire sau cu atingere ușoară, iar costul pentru adăugarea următoarei companii este aproape de zero - nu un alt proiect.
- SaaS: multe organizații, aceleași caracteristici, facturare în produs, dețineți timpul de funcționare.
- Software personalizat: un singur cumpărător, fluxuri de lucru unice, facturați pentru cererile de modificare. Nu vă prefaceți că al doilea client se va „conecta”.
- Dacă primii trei clienți au nevoie fiecare de o furculiță, nu o mai spuneți SaaS. Vinde proiecte până când suprapunerea este evidentă - apoi extrage produsul.
2. Unitatea produsului este spațiul de lucru, nu utilizatorul
Aș modela domeniul în jurul unei organizații (spațiu de lucru, chiriaș, cont - alegeți un cuvânt și păstrați-l). Utilizatorii aparțin unor organizații. Datele aparțin organizațiilor. Facturile aparțin organizațiilor. Dacă începeți cu „Utilizatorul are proiecte”, veți petrece șase luni exploatând echipe, invitări și „cine plătește”.
- Organizația are un plan, un e-mail de facturare și o stare: trial, activ, last_due, anuled.
- Calitatea de membru este un rând: utilizator + organizație + rol (proprietar, admin, membru este suficient la început).
- Fiecare tabel de afaceri are org_id. Interogările fără org_id sunt erori, nu comenzi rapide.
- Invitații înainte de „creați un utilizator pentru ei”. Trimiteți e-mailuri, acceptați, aterizați în spațiul de lucru potrivit.
3. Închiriere: bază de date partajată, izolare strictă
Pentru un prim SaaS nu aș deschide un Postgres per client. Aș folosi o bază de date, org_id pe fiecare rând și apărare în profunzime, astfel încât un WHERE ratat să nu devină o scurgere de date. Baza de date per chiriaș este pentru izolarea reglementată sau vecinii zgomotoși pe care i-ați măsurat deja - nu pentru chiriașul numărul patru.
- Securitate la nivel de rând sau un ajutor de interogare echivalent care injectează întotdeauna org_id din sesiune - nu din corpul clientului.
- ID-uri care nu sunt ghicibile (UUID-uri). Secvențial /org/12/invoices/4 este o invitație.
- Stocare de fișiere prefixată de org_id, adrese URL semnate, niciodată un grup public de „toate încărcările”.
- Schema-per-chiriaș sau DB-per-chiriaș numai atunci când un contract, o listă de verificare a conformității sau un vecin cu adevărat zgomotos forțează acest lucru. Migrațiile pe 200 de scheme sunt un produs pe care nu l-ați dorit.
4. Facturarea este o caracteristică, nu un plugin pe care îl adăugați mai târziu
Dacă nimeni nu poate plăti, nu ai SaaS. Aș pune Checkout pe calea critică în săptămâna a doua, chiar dacă rest a aplicației este subțire. O fază „vom factura manual” este permisă pentru primii cinci parteneri de proiectare - apoi cardul trebuie să funcționeze.
- Stripe Facturare (sau procesorul pe care îl folosește de fapt prima piață): produse, prețuri, portal pentru clienți, webhook-uri. Nu stocați numere de card. Nu scrieți un motor de anunțare.
- Unul sau două planuri, nu șapte. Un proces cu un final clar. După încercare: numai citire sau blocare greu - alegeți unul și spuneți-l în interfața de utilizare.
- Prețul unui lucru pe care clienții îl înțeleg: locuri, proiecte sau volum lunar. Facturarea de utilizare este puternică și ușor de greșit; începeți cu un loc sau un plan plat până când știți ce înseamnă „utilizare”.
- Webhook-urile sunt sursa adevărului pentru „sunt plătiți?” Baza de date oglindește Stripe (sau Paddle). Cron care ghicește este modul în care blocați un client plătitor.
5. Stack-ul pe care l-aș folosi (și cum diferă de un site MVP)
Valoarea implicită web încă păstrează: Next.js, TypeScript, Tailwind, Postgres. SaaS adaugă câteva piese de care un site de marketing nu are nevoie - și tot nu are nevoie de o plasă de servicii.
- Autentificare care înțelege organizațiile: Clerk, WorkOS, Auth.js plus tabelul dvs. de membri - nici măcar un semnal global „conectat”.
- Lucrări de fundal în prima zi, dacă ceva este lent sau reîncercat: e-mailuri, Stripe webhooks, exporturi, LLM apeluri. O coadă simplă (Inngest, Trigger.dev sau un lucrător pe VPS) bate un setTimeout într-o funcție fără server.
- E-mail tranzacțional din minutul unu: invitație, chitanță, „perioada de încercare se încheie vineri”. Dacă e-mailul nu ajunge, produsul se simte mort.
- Caracteristici steaguri pentru planuri (can_export, seat_limit), nu dacă (org.plan === „pro”) împrăștiate în cincizeci de fișiere.
- Găzduire: Vercel plus Postgres găzduit este în regulă până când un lucrător sau rezident spune contrariul. O singură regiune este suficientă. Multi-regiune este o problemă ulterioară.
6. Onboardingul este produsul pentru prima oră
Tablourile de bord goale SaaS nu se convertesc. Aș proiecta prima sesiune ca un job, nu un tur: creați spațiul de lucru, importați sau introduceți prima înregistrare reală, invitați un coechipier, vedeți un rezultat. Sfaturile instrumente peste un tabel gol nu sunt incluse.
- Un spațiu de lucru eșantion este permis dacă este în mod clar fals și la un clic distanță de „începe cu datele mele”.
- Valoarea de activare: au finalizat sarcina de bază o dată, nu „s-au înscris”. Urmăriți asta. Pitch asta.
- Setările pot fi urâte. Starea goală a ecranului principal nu poate.
7. Ops: cum vei sprijini oamenii pe care nu i-ai întâlnit niciodată
În ziua în care o organizație plătitoare scrie „Nu îmi pot vedea facturile”, aveți nevoie de o cale care nu este SSH de producție. Aș adăuga un administrator intern subțire înainte de al zecelea client, nu după primul incident.
- Administrator: găsiți organizația, vedeți planul și ultimul webhook, uzurpare identitatea doar pentru citire, retrimiteți invitația. Audit acea uzurpare a identității.
- Înregistrează cu org_id și id-ul cererii. „A eșuat” fără chiriaș nu este o linie de lemn, este o ridicare din umeri.
- Backup-uri pe care le-ați restaurat o dată. Noaptea este suficient la început; copiile de rezervă netestate sunt o poveste pe care ți-o spui singur.
- Pagina de stare poate aștepta. Un e-mail „suntem, iată ce știm” nu poate.
8. Ce nu aș construi în primul an
Big SaaS este un muzeu de caracteristici care s-au plătit singure ulterior. Copierea muzeului este modul în care îți lipsește singura slujbă.
- SSO, SCIM și un chestionar de securitate de 40 de pagini până când o afacere reală este blocată pentru ele. Apoi devin sprintul, nu o căutare secundară.
- Un API public și o piață a integrărilor. Un export Zapier sau CSV deblochează adesea același cumpărător.
- Domenii personalizate pentru fiecare chiriaș, etichetă albă și un studio tematic. O încărcare de logo este suficientă pentru majoritatea B2B timpurii.
- AI peste tot. Un loc în care limba este locul de muncă (căutare, schițe, extragere) cu o schemă și un contor facturabil. Nu există un balon de chat pe fiecare ecran.
9. O secvență pe care de fapt aș urma-o
Aceeași onestitate în calendar ca un MVP, cu repere în formă de SaaS. Dacă o săptămână nu are chiriaș, nu are salariu sau nu are loc de muncă, nu este o săptămână SaaS.
- Săptămâna 0: denumește jobul, cumpărătorul, planul, numărul de ucidere (de exemplu, cinci organizații plătite în 90 de zile sau ne oprim). Non-goaluri pe o pagină.
- Săptămânile 1-2: organizație + abonament + o cale fericită în producție + modul de testare Stripe. Teste de izolare: utilizatorul A nu trebuie să vadă utilizatorul B.
- Săptămânile 3-4: facturare live, invitații, e-mailuri, înscriere în stare goală, administrator subțire. Pune-l în fața unor companii numite, nu „internet”.
- Zilele 30-90: activarea ceasului și motivele renunțării. Adăugați singura integrare sau raportul pentru care plătesc. Nu adăugați un al doilea produs.
Concluzie: închiriez un loc de muncă, nu o platformă
Aș construi SaaS în același mod lipsit de farmec ca un MVP, plus părțile care fac multe companii să împartă un sistem: un spațiu de lucru, o factură, un zid între chiriași, o primă oră care nu este goală și un admin, astfel încât suportul nu este un shell rădăcină. Stiva poate rămâne plictisitoare. Produsul nu poate rămâne vag.
Dacă aveți un flux de lucru, mai multe companii vă plătesc deja să îl repetați și îl doriți ca produs în loc de o grămadă de implementări personalizate - scrieți prin secțiunea de contacte. Putem numi modelul de chiriaș, primul plan și o felie care ia un card fără a pretinde că este Salesforce.
Aveți nevoie de acest lucru construit, nu doar explicat?
Dezvoltare aplicație web: Next.js, React, PostgreSQL. Antreprenor direct.
Sunteți gata să discutați despre proiectul dvs.?
Sunt un inginer web senior specializat în React și Next.js - disponibil pentru proiecte independente din întreaga lume.
Locaţie
Kiev, Ucraina
Upwork
Vizualizați profilulTelegram
Contactați-măViber
Contactați-mă