HashCoreAI
← Blog
App development

Firebase în producție: ce folosim, ce evităm și lecțiile care dor

Firebase in Production: What We Use, What We Avoid, and the Lessons That Hurt

Publicat 6 iulie 2026 · 7 min citire

Aproape tot ce livrăm — site-uri, jocuri, aplicații cu conturi și plăți — rulează pe Firebase: hosting multi-site, Authentication, Realtime Database, Firestore, Cloud Functions, Remote Config. Nu pentru că Firebase ar fi perfect, ci pentru că pentru un studio mic raportul dintre ce primești și ce administrezi rămâne imbatabil. Articolul acesta e lista de lecții pe care le-am plătit cu incidente reale — inclusiv una în care un deploy aparent nevinovat a șters o funcție din producție.

Lecția 1: deploy-urile de funcții se fac țintit, întotdeauna

Incidentul care ne-a schimbat procedurile: două site-uri diferite împart același proiect Firebase, iar funcțiile lor trăiesc în codebase-uri separate. Un coleg a rulat un banal firebase deploy --only functions dintr-unul din repo-uri. Firebase a interpretat comanda ca „starea completă dorită a funcțiilor" și a șters funcția de submitere a formularului de contact care aparținea celuilalt site. Fără eroare, fără avertisment vizibil — formularul de contact a murit în tăcere.

Regula de atunci, scrisă în documentația internă cu majuscule: niciodată --only functions, întotdeauna --only functions:numeFunctie. Și, complementar: emulatorul rulează suita completă de teste înainte de orice deploy de funcții. Costul respectării regulii: câteva secunde per deploy. Costul încălcării ei: un formular mort până observă cineva.

Lecția 2: serverul e singura sursă de adevăr pentru bani

În jocurile noastre există o economie de jetoane: jucătorii cumpără pachete, deblochează personaje, primesc recompense. Prima versiune ținea prețurile în clientul jocului. A doua versiune — cea corectă — le ține exclusiv în configurația funcțiilor de pe server: clientul trimite doar id-uri („vreau să deblochez suit:aegis"), serverul decide prețul, verifică soldul și scrie tranzacția idempotent.

Motivul e simplu: tot ce e în client e editabil de utilizator. Orice preț, orice validare, orice „are deja acest item" verificat doar în client e o invitație. Aceeași regulă se aplică la webhook-uri de plăți: idempotente (același eveniment primit de două ori nu creditează de două ori) și fail-closed (orice dubiu înseamnă refuz, nu acceptare).

Lecția 3: Remote Config e mai valoros decât pare

Două utilizări care ne-au scutit de release-uri de urgență:

Lecția 4: regulile de securitate sunt produsul, nu o anexă

Realtime Database și Firestore îți expun datele direct către clienți — singura barieră sunt regulile. Practicile care ne-au rămas după un audit intern:

Lecția 5: hosting-ul are detalii care se văd în SEO și în viteză

Ce evităm conștient

Concluzie

Firebase rămâne alegerea noastră implicită pentru produse noi: viteza de la idee la producție e reală. Dar „backend-as-a-service" nu înseamnă „backend fără disciplină" — înseamnă că disciplina se mută în reguli de securitate testate, deploy-uri țintite, configurare la distanță și o graniță fermă între ce decide clientul și ce decide serverul. Toate lecțiile de mai sus au costat ceva când le-am învățat; sperăm că citite gratis dor mai puțin.

Construiești pe Firebase și vrei o a doua opinie pe arhitectură? Scrie-ne la contact@hashcoreai.com.

Citește mai departe