Technology
Arhitectură înainte de stack.
Construim sisteme în care tehnologia poate evolua fără să rupă produsul.
Alegem componentele tehnice în funcție de context, dar păstrăm aceleași principii: boundaries clare, date controlate, integrare explicită, observability și production readiness.
01 Stack vs. arhitectură
Un stack modern poate produce un sistem fragil.
Framework-urile și serviciile cloud nu rezolvă singure coupling-ul, datele incoerente, lipsa de observability sau dependențele neclare.
- AAlegerea tehnologiei
Spune ce componente sunt disponibile. Nu spune cum se leagă între ele și nici cine răspunde de ce.
- BArhitectura
Decide unde trec granițele, ce module pot depinde unele de altele și ce se întâmplă când una dintre ele cade.
- CInterfețele
Un contract explicit permite înlocuirea unei componente fără rescrierea celor care o folosesc.
- DOwnership-ul
Fiecare tip de dată și fiecare capabilitate au un loc unde sunt definite. Fără asta, aceeași informație există în trei variante ușor diferite.
- EComportamentul în runtime
Sistemul nu este ce arată diagrama, ci ce face sub trafic real, cu date reale și cu dependențe lente.
- FCapacitatea de schimbare
Testul final: cât costă o modificare cerută peste doi ani, în partea pe care nimeni nu o mai ține minte.
02 Principii
Principii care rămân valabile chiar când tehnologia se schimbă.
Nu sunt reguli abstracte. Sunt deciziile pe care le luăm în primele săptămâni ale unui proiect și pe care sistemul le plătește, în bine sau în rău, ani la rând.
- P—01Boundaries clareFiecare parte a sistemului are un perimetru cunoscut. Ce este înăuntru poate fi schimbat; ce este la graniță se negociază explicit.
- P—02Contracte expliciteInteracțiunea dintre componente trece prin ceva scris — schemă, API, eveniment — nu prin cunoștințe informale despre cum funcționează celălalt modul.
- P—03Separarea responsabilitățilorBusiness logic-ul, accesul la date, transportul și prezentarea sunt straturi distincte. Amestecarea lor este cea mai frecventă cauză de rigiditate.
- P—04Comportament observabilUn sistem care nu poate spune ce a făcut nu poate fi operat. Observability se proiectează odată cu funcționalitatea, nu după primul incident.
- P—05State controlatStarea are un loc definit, un ciclu de viață și un singur mod de a fi modificată. Starea duplicată devine, în timp, stare contradictorie.
- P—06Componente înlocuibileOrice serviciu extern, bibliotecă sau furnizor va fi, la un moment dat, schimbat. Costul acelei schimbări se decide la momentul integrării.
- P—07Acces sigurIdentitatea, permisiunile și limitele de acces fac parte din arhitectură, nu dintr-un strat adăugat înainte de lansare.
- P—08Failure gestionatDependențele cad, rețeaua întârzie, fișierele lipsesc. Sistemul trebuie să aibă un comportament definit pentru fiecare dintre aceste cazuri.
- P—09Evoluție incrementalăSchimbarea se face în pași care pot fi verificați și, la nevoie, întorși. Migrațiile mari, „dintr-o dată", sunt cele care blochează echipe luni întregi.
03 Application architecture
Structura aplicației trebuie să reflecte responsabilitățile sistemului.
Organizarea codului nu este o preferință de echipă. Este harta după care se face fiecare schimbare ulterioară — și motivul pentru care unele schimbări durează o zi, iar altele o lună.
- 01Module și domenii
Sistemul se împarte după domeniile reale ale organizației — ofertare, contracte, producție, facturare — nu după tipuri tehnice de fișiere.
- 02Business logic
Regulile care contează pentru organizație stau într-un loc identificabil, testabil, independent de framework și de baza de date.
- 03Servicii
Capabilitățile partajate — notificări, documente, audit, permisiuni — sunt expuse prin interfețe, nu copiate în fiecare modul.
- 04Dependențe
Direcția dependențelor este o decizie de arhitectură. Un domeniu nu ajunge să depindă de alt domeniu doar pentru că a fost mai rapid așa.
Modular nu înseamnă automat microservices.
Modularitatea este o proprietate a codului și a granițelor. Distribuirea este o decizie de operare, cu propriul cost: rețea, consistență, deployment, debugging. Le tratăm separat.
- AModular monolithGranițe interne clare, un singur deployment. Potrivit când echipa este compactă și complexitatea este de domeniu, nu de scală.
- BDistributed servicesServicii separate când părți ale sistemului au cicluri de schimbare, profiluri de trafic sau cerințe de disponibilitate diferite.
- CHibridCel mai frecvent în practică: un nucleu coerent plus câteva componente separate acolo unde separarea rezolvă o problemă reală.
04 API & contracts
Interfețele stabile fac sistemele evolvabile.
Un contract bine definit este ceea ce permite ca două părți ale sistemului să se schimbe în ritmuri diferite, fără să se aștepte una pe alta.
- 01ProducerExpune o capabilitate. Poate schimba implementarea oricând, cât timp respectă forma promisă.
- 02ContractSchemă, tipuri, erori, autentificare, versiune. Partea care nu se schimbă fără o decizie explicită.
- 03ConsumerFolosește capabilitatea fără să știe nimic despre interiorul ei — și fără să se rupă la fiecare release.
- 01Scheme și validare
Ce intră și ce iese este descris explicit și verificat la graniță, nu presupus în interiorul logicii.
- 02Versionare
Schimbările incompatibile primesc o versiune nouă. Consumatorii existenți continuă să funcționeze până când migrează controlat.
- 03Authentication & authorization
Cine face cererea și ce are voie să facă sunt decise de contract, nu de interfața care îl apelează.
- 04Semantica erorilor
Un consumator trebuie să poată distinge între „date invalide", „nu ai acces", „nu există" și „încearcă mai târziu".
- 05Backward compatibility
Câmpuri noi adăugate, nu câmpuri existente redefinite. Compatibilitatea se pierde o singură dată și se recuperează greu.
05 Data architecture
Datele au nevoie de ownership, nu doar de storage.
Întrebarea „unde ținem datele" este mai puțin importantă decât „cine le definește, cine le poate schimba și care variantă este cea corectă atunci când două sisteme nu sunt de acord".
- 01EntityCe reprezintă datul în realitate: un client, o comandă, un document, un eveniment.
- 02OwnershipCare sistem este sursa de adevăr și cine are dreptul să o modifice.
- 03StorageModelul potrivit formei datelor — relațional, document, fișier, serie de evenimente.
- 04AccessCine citește, cine scrie, în ce condiții și cu ce urmă lăsată în audit.
- 05UseProdus, raportare, integrare, AI — toate pe aceeași definiție, nu pe copii divergente.
- 01Source of truth
Pentru fiecare entitate importantă există un singur loc unde valoarea este considerată corectă. Restul sunt copii, marcate ca atare.
- 02Modele relaționale și document
Datele cu relații stricte și integritate tranzacțională cer altceva decât documentele cu structură variabilă. Alegerea se face pe formă, nu pe modă.
- 03Event data
Ce s-a întâmplat și când — baza pentru audit, reconstrucție și analiză. Se proiectează separat de starea curentă.
- 04Metadata și istoric
Cine a creat, cine a modificat, ce versiune a fost activă. Fără istoric, orice discuție despre o decizie trecută rămâne o presupunere.
- 05Search
Căutarea este un mod de acces cu cerințe proprii — relevanță, permisiuni, prospețime — nu o interogare obișnuită pusă peste baza operațională.
- 06Lifecycle și retenție
Datele au un început și, conceptual, un sfârșit: arhivare, anonimizare, ștergere. Regulile se stabilesc împreună cu organizația.
06 Events & async
Nu toate lucrurile trebuie să se întâmple în aceeași cerere.
Utilizatorul are nevoie de un răspuns rapid. Sistemul are nevoie să facă, în urma acelei acțiuni, alte cinci lucruri. Cele două cerințe nu trebuie să concureze.
- 01Queues și events
Acțiunea produce un eveniment. Ce urmează după el se execută separat, fără să țină utilizatorul în așteptare.
- 02Background jobs
Procesare de documente, sincronizări, notificări, rapoarte — lucruri care pot dura, fără să blocheze interfața.
- 03Retries
Un pas care eșuează din cauza unei dependențe temporar indisponibile se reia, cu limite și cu vizibilitate.
- 04Idempotency
Același eveniment procesat de două ori nu trebuie să producă două comenzi, două facturi sau două plăți.
- 05Eventual consistency
Unele părți ale sistemului află mai târziu. Asta este acceptabil doar dacă este o decizie luată, nu un efect secundar descoperit în producție.
- 06Failure recovery
Un job care nu reușește nici după reîncercări ajunge într-un loc unde poate fi văzut, înțeles și reluat de un om.
07 Frontend engineering
Interfața este un sistem de stări, nu o colecție de ecrane.
Ecranele sunt ușor de desenat. Ce le face utilizabile în ziua a treizecea sunt stările intermediare: gol, în încărcare, parțial, eronat, fără permisiune, prea multe date.
- 01Arhitectură de componenteComponentele au responsabilități clare și limite de reutilizare. Ceea ce se repetă în trei locuri devine o singură definiție.
- 02Design systemsTipografie, spațiere, culoare, stări și componente definite o singură dată, folosite consecvent în tot produsul.
- 03AccessibilityStructură semantică, navigare de la tastatură, focus vizibil, contrast. Nivelul de conformitate se stabilește per proiect.
- 04Responsive behaviorAceleași informații, reorganizate pentru contextul de utilizare — nu un desktop micșorat până devine inutilizabil.
- 05State managementCe este stare de server, ce este stare de interfață și ce este stare de sesiune — separate conceptual, tratate diferit.
- 06PerformanțăCe se încarcă întâi, ce se amână, ce se cachează. Percepția de viteză se construiește din ordinea în care apar lucrurile.
- 07Progressive loadingInterfața arată structura înainte să aibă toate datele, în loc să țină ecranul gol până la ultimul răspuns.
- 08Error statesFiecare eroare spune ce s-a întâmplat și ce poate face utilizatorul mai departe. Un mesaj generic mută problema la suport.
- 09Consecvență de interacțiuneAceeași acțiune se comportă la fel peste tot. Predictibilitatea reduce mai mult efortul decât orice ecran de ajutor.
08 Backend engineering
Business logic-ul trebuie să rămână explicit, testabil și separabil de infrastructură.
Regulile organizației sunt partea cu cea mai lungă viață dintr-un sistem. Ele supraviețuiesc framework-urilor, bazelor de date și furnizorilor — dacă nu au fost amestecate cu ele.
- 01Domain logic
Regulile de business sunt scrise o singură dată, într-un loc care poate fi citit de cineva care nu cunoaște infrastructura.
- 02Servicii și workflows
Operațiunile compuse — care ating mai multe entități și mai mulți pași — au un loc propriu, cu tranzacții și limite explicite.
- 03Validare
Datele sunt verificate la intrarea în sistem, nu în momentul în care produc o eroare undeva adânc în procesare.
- 04Permisiuni
Verificarea dreptului de acces se face în stratul care execută acțiunea, nu în cel care afișează butonul.
- 05Persistență
Accesul la date trece printr-un strat propriu. Baza de date poate fi optimizată, migrată sau schimbată fără a rescrie regulile.
- 06Integrări externe
Fiecare sistem extern este izolat în spatele unei interfețe proprii, cu timeout, retry și comportament definit la indisponibilitate.
09 Workflow & orchestration
Procesele de business au nevoie de state și control.
Un proces care traversează patru echipe și trei sisteme nu este o succesiune de apeluri. Este o entitate cu stare proprie, care trebuie să poată fi oprită, reluată și explicată.
- 01Workflow state
În ce etapă se află fiecare instanță, de când, ce a produs până acum și ce așteaptă ca să avanseze.
- 02Reguli și ramificații
Condițiile care decid traseul sunt definite explicit, într-un loc unde pot fi citite și modificate fără arheologie în cod.
- 03Pași umani
Aprobările, verificările și deciziile rămân în proces, cu termen, responsabil și urmă în audit — nu pe email, lângă proces.
- 04Acțiuni de sistem
Generare de documente, actualizări în alte sisteme, notificări — executate ca pași ai fluxului, nu ca efecte secundare.
- 05Excepții
Cazurile care ies din traseul normal sunt parte din proiect, nu surprize. Un flux fără excepții descrise nu este încă terminat.
- 06Retries
Pașii automați care depind de sisteme externe se reiau controlat, fără să dubleze efecte deja produse.
- 07Audit
Cine a făcut ce și când, la nivel de instanță de proces. Fără asta, orice reconstituire ulterioară devine o discuție de memorie.
10 AI system architecture
Modelul este doar o componentă din sistemul AI.
Ce face diferența nu este modelul ales, ci contextul pe care îl primește, instrumentele pe care le poate folosi, validarea rezultatului și locul în care acel rezultat intră în sistem.
- 01User / EventPunctul de pornire: o întrebare, un document nou, o schimbare de stare într-un flux.
- 02ContextCe știe sistemul despre situație: utilizator, permisiuni, entitatea în lucru, istoricul relevant.
- 03RetrievalInformația adusă din surse reale, filtrată după ce are voie să vadă cel care întreabă.
- 04ModelComponenta care interpretează și formulează — nu sursa adevărului și nici arbitrul final.
- 05ToolsAcțiunile pe care le poate declanșa: căutare, calcul, citire sau scriere într-un sistem, cu limite.
- 06ValidationVerificarea rezultatului înainte să producă efecte: format, reguli de business, praguri de încredere.
- 07Action / OutputRezultatul intră înapoi în produs, în flux sau în date — cu sursele și cu urma pașilor.
Preocupări care traversează tot sistemul AI.
- APermisiuni
Sistemul AI nu poate vedea sau face mai mult decât utilizatorul în numele căruia lucrează.
- BEvaluare
Calitatea răspunsurilor se măsoară pe cazuri reprezentative, nu se estimează după primele demonstrații.
- CObservability
Se înregistrează pașii operaționali: ce surse au fost consultate, ce instrumente au fost apelate, ce a fost validat și ce a fost respins.
- DVerificare umană
Pentru acțiunile cu impact, decizia finală rămâne la un om, cu contextul necesar în față.
11 RAG & knowledge
Knowledge systems conectează informația organizației cu AI-ul și produsele.
Documentele, procedurile și istoricul operațional există deja. Problema este că nu sunt accesibile în momentul în care cineva are nevoie de ele, în forma în care are nevoie.
- 01Documents / DataSursele reale: contracte, proceduri, specificații, tichete, date operaționale.
- 02IndexConținutul devine căutabil, cu metadata care spune de unde vine și pentru cine este vizibil.
- 03RetrievalSe aduc fragmentele relevante pentru întrebarea concretă, nu tot ce conține cuvântul căutat.
- 04ContextMaterialul selectat se compune într-un context coerent, cu sursele atașate.
- 05Product / AIRezultatul apare acolo unde se lucrează: în produs, în flux, în ecranul operatorului.
- 01Ingestion
Preluarea conținutului din sursele existente, cu urmărirea modificărilor. Un knowledge system care se actualizează manual încetează repede să fie folosit.
- 02Segmentare
Documentele lungi se împart în unități care păstrează sensul. Granița dintre fragmente influențează direct calitatea răspunsurilor.
- 03Metadata
Tip de document, versiune, dată, departament, entitate asociată. Fără ea, căutarea semantică nu poate fi filtrată util.
- 04Embeddings și vector search
Regăsire după sens, nu doar după potrivire de cuvinte — combinată, de obicei, cu filtrare structurată.
- 05Retrieval cu permisiuni
Un utilizator primește doar fragmente din documentele pe care are dreptul să le vadă. Filtrarea se face la regăsire, nu la afișare.
- 06Atribuirea sursei
Fiecare afirmație poate fi urmărită până la documentul și secțiunea din care provine. Asta transformă un răspuns într-un răspuns verificabil.
- 07Prospețime
Când sursa se schimbă, indexul se actualizează. Un răspuns corect acum șase luni poate fi astăzi o eroare.
12 Tool use & agents
AI devine operațional când poate folosi instrumente în limite controlate.
Diferența dintre un asistent care sugerează și un sistem care ajută este accesul la acțiuni reale. Aceleași acțiuni sunt și motivul pentru care limitele trebuie definite înainte.
- 01ToolsFiecare instrument are un scop îngust, o intrare definită și un rezultat previzibil. Un instrument vag produce comportament vag.
- 02API-uriInstrumentele folosesc aceleași contracte ca restul sistemului, cu aceleași verificări — nu o cale ocolitoare creată pentru AI.
- 03AcțiuniCe poate schimba efectiv în sistem este o listă explicită, nu o consecință a ceea ce se întâmplă să fie accesibil.
- 04Permisiuni delimitateFiecare execuție rulează cu drepturile utilizatorului sau ale unei identități de serviciu cu scop restrâns.
- 05ValidareRezultatul este verificat înainte de a produce efecte: formă, reguli de business, coerență cu starea curentă.
- 06RetriesUn pas eșuat se reia în limite definite, fără să repete acțiuni care au produs deja efecte.
- 07Human checkpointsAcțiunile ireversibile sau cu impact extern trec printr-o confirmare umană, cu tot contextul necesar afișat.
- 08Execution traceSe poate reconstitui ce pași au fost executați, în ce ordine, cu ce intrări și cu ce rezultat operațional.
Nu construim autonomie nelimitată. Construim sisteme în care fiecare acțiune automată are un perimetru, o verificare și un loc unde poate fi oprită.
13 Infrastructure
Infrastructure este mediul în care produsul trebuie să rămână predictibil.
Alegerile de infrastructură se fac în funcție de cerințele produsului și de contextul organizației — inclusiv de cine urmează să opereze sistemul după livrare.
- 01ComputeContainer, serverless sau instanțe dedicate — în funcție de profilul de trafic, de latență și de modul de operare acceptabil.
- 02StorageDate operaționale, fișiere, object storage, arhivă. Fiecare cu propriile cerințe de durabilitate și acces.
- 03NetworkingCe este expus public, ce rămâne intern, cum comunică serviciile între ele și pe unde intră traficul.
- 04EnvironmentsMedii separate, cu resurse și date proprii, astfel încât o verificare să nu poată afecta producția.
- 05ConfigurațieCe diferă între medii este declarat explicit, versionat și separat de cod.
- 06SecretsCredențialele nu stau în cod și nu circulă prin canale de comunicare. Accesul la ele este limitat și înregistrat.
- 07ScalingCe component scalează, la ce semnal și până unde. Scalarea automată fără limite este o problemă de cost, nu o soluție.
- 08Backups & recoveryUn backup are valoare doar dacă restaurarea a fost testată. Obiectivele de recuperare se stabilesc împreună cu organizația.
- 09Managed servicesAcolo unde un serviciu gestionat reduce efortul de operare fără să blocheze arhitectura, este alegerea rezonabilă.
Alegerea furnizorului de infrastructură se face per proiect, în funcție de cerințele de găzduire, integrare și conformitate ale organizației.
14 Environments
Development, test, staging și production trebuie să fie separate prin intenție.
Separarea mediilor nu este o formalitate de proces. Este ceea ce face posibilă verificarea unei schimbări fără să pui în joc datele și disponibilitatea din producție.
- 01DevelopmentUnde se construiește. Rapid, izolat, cu date de lucru — niciodată cu date reale de producție.
- 02TestUnde se verifică automat comportamentul: reguli, integrări, regresii, cazuri de eroare.
- 03StagingCât mai aproape de producție ca formă și configurație. Ultimul loc unde o problemă costă puțin.
- 04ProductionUnde sistemul are utilizatori reali, date reale și consecințe reale.
- 01Granițe de configurație
Fiecare mediu are propriile setări, chei și limite. Nimic nu trece dintr-un mediu în altul implicit.
- 02Separarea datelor
Datele reale rămân în producție. Mediile inferioare lucrează cu date generate sau anonimizate.
- 03Încredere în deployment
O schimbare ajunge în producție după ce a trecut prin aceleași verificări, în aceeași ordine, de fiecare dată.
- 04Rollback
Există o cale definită de întoarcere la versiunea anterioară, cunoscută înainte de livrare, nu improvizată în timpul unui incident.
15 CI/CD
Delivery-ul repetabil reduce riscul schimbării.
Când livrarea este un proces manual, fiecare release devine un eveniment. Când este automatizată și verificată, devine o operațiune obișnuită — și, în consecință, mai deasă și mai mică.
- 01CommitSchimbarea intră versionată, cu autor și context.
- 02BuildAceleași surse produc același artefact, reproductibil.
- 03TestVerificări automate: unitare, de integrare, de regresie.
- 04ValidateVerificări de calitate, securitate și dependențe.
- 05DeployLivrare în etape, cu posibilitate de oprire și de întoarcere.
- 06ObserveSe urmărește comportamentul real după livrare, nu doar succesul pipeline-ului.
- 01Verificări automate
Ce trebuie să fie adevărat despre sistem este exprimat în teste care rulează la fiecare schimbare, nu într-o listă de verificat manual.
- 02Build reproductibil
Dependențele sunt fixate. Ce a funcționat în test este exact ce ajunge în producție.
- 03Livrare în etape
Schimbările ajung progresiv la utilizatori, astfel încât o problemă să fie observată înainte să afecteze pe toată lumea.
- 04Vizibilitatea release-ului
Se știe ce versiune rulează, ce conține și când a fost livrată — informația de care are nevoie orice investigație ulterioară.
16 Observability
Sistemul trebuie să poată explica ce se întâmplă în production.
Întrebarea nu este dacă apar probleme, ci cât durează până când cineva poate spune exact unde s-a oprit lucrul și de ce.
- 01Logs
Evenimente cu context suficient pentru a reconstitui ce s-a întâmplat, structurate ca să poată fi căutate.
- 02Metrics
Indicatori numerici urmăriți în timp: volum, latență, erori, saturație. Baza pentru alerte și pentru comparație.
- 03Traces
Traseul unei cereri prin toate componentele pe care le atinge, cu timpul petrecut în fiecare.
- 04Erori
Grupate, cu frecvență și context, nu ca linii izolate pierdute într-un flux de log.
- 05Sănătatea dependențelor
Starea sistemelor externe de care depinde produsul, vizibilă separat de starea produsului însuși.
- 06Execuția job-urilor
Ce a rulat, când, cât a durat, ce a eșuat și ce așteaptă în coadă.
- 07Trace-uri AI la nivel operațional
Ce surse au fost consultate, ce instrumente au fost apelate, ce validări au trecut sau au fost respinse. Nu se înregistrează raționamentul intern al modelului.
- 08Starea workflow-urilor
Câte instanțe sunt în fiecare etapă, care sunt blocate și de cât timp.
17 Reliability
Failure-ul trebuie proiectat, nu descoperit accidental.
Orice dependență externă va fi, la un moment dat, lentă sau indisponibilă. Diferența o face ce se întâmplă în sistem în acel moment.
- 01Timeouts
Fiecare apel extern are o limită de așteptare. Fără ea, o dependență lentă devine o indisponibilitate generală.
- 02Retries
Reîncercare acolo unde eroarea este probabil temporară, cu interval crescător și cu limită.
- 03Circuit breaking
Când o dependență eșuează constant, sistemul încetează să o apeleze o vreme, în loc să acumuleze cereri blocate.
- 04Fallbacks
Un comportament alternativ definit: date din cache, funcționalitate redusă, un mesaj clar — nu un ecran gol.
- 05Idempotency
Operațiunile cu efecte se pot repeta în siguranță, ceea ce face reîncercările posibile fără dublări.
- 06Degradare controlată
Partea afectată se oprește; restul produsului continuă. O componentă căzută nu trebuie să oprească tot sistemul.
- 07Recovery și backups
Proceduri de revenire pregătite și verificate înainte, nu redactate în timpul incidentului.
Nu promitem absența întreruperilor. Proiectăm sisteme în care o întrerupere este limitată, vizibilă și recuperabilă.
18 Security by architecture
Securitatea trebuie să existe în boundaries, identitate și acces.
Securitatea nu este un strat adăugat înainte de lansare. Este o proprietate a modului în care sistemul decide cine are voie să facă ce, în fiecare punct în care ceva se întâmplă.
- 01Authentication
Cine este cel care face cererea, verificat într-un singur loc, consecvent pentru toate căile de acces.
- 02Authorization
Ce are voie să facă, verificat de sistemul care execută acțiunea — nu presupus de interfața care o inițiază.
- 03Acces pe roluri
Drepturile se atribuie prin roluri definite împreună cu organizația, nu individual, caz cu caz.
- 04Least privilege
Fiecare utilizator, serviciu și integrare primește minimul necesar pentru sarcina lor — inclusiv componentele automate.
- 05Secrets
Gestionate separat de cod și de configurație, cu acces limitat și posibilitate de rotație.
- 06Criptare
Datele sunt protejate în tranzit și, acolo unde este cazul, în repaus. Cerințele concrete se stabilesc per proiect.
- 07Audit trail
Acțiunile importante lasă o urmă care nu poate fi modificată din interfața obișnuită a aplicației.
- 08Separarea mediilor
Credențialele și datele de producție rămân în producție. Un acces obținut în dezvoltare nu deschide nimic altundeva.
- 09Igiena dependențelor
Bibliotecile folosite sunt urmărite și actualizate. Cea mai mare parte a suprafeței de atac vine din cod pe care nu l-am scris noi.
19 Identity & permissions
Accesul trebuie decis de sistem, nu presupus de interfață.
Un buton ascuns nu este o permisiune. Dacă acțiunea poate fi executată printr-un apel direct, atunci restricția nu există.
- 01UserO identitate verificată — persoană sau serviciu — cu apartenență cunoscută în organizație.
- 02RoleSetul de responsabilități care descrie ce face acel utilizator în sistem.
- 03PermissionsDrepturile concrete rezultate din rol, plus limitele impuse de context.
- 04Data / Action / SystemCe poate citi, ce poate modifica și ce poate declanșa, verificat la fiecare cerere.
- 01Roluri
Definite după cum lucrează efectiv organizația, nu după ecranele existente în aplicație.
- 02Scopes
Integrările și componentele automate primesc drepturi limitate la ce au nevoie, nu drepturi de administrator „ca să meargă".
- 03Granițe de tenant
Acolo unde sistemul deservește mai multe entități, separarea între ele este o proprietate a modelului de date, nu un filtru adăugat în interogări.
- 04Acces la nivel de obiect
Pentru unele produse, dreptul se decide pe înregistrarea concretă — un dosar, un proiect, un client — nu pe tipul de entitate.
- 05Identități de serviciu
Componentele automate au identitate proprie, cu drepturi proprii și cu urmă proprie în audit.
20 Performance
Performanța este proprietatea întregului traseu.
Utilizatorul nu percepe componente. Percepe timpul dintre acțiunea lui și momentul în care poate continua — iar acel timp se compune din toate straturile prin care trece cererea.
- 01Frontend
Ce se încarcă, în ce ordine și cât din interfață este utilizabil înainte să sosească toate datele.
- 02API
Câte cereri sunt necesare pentru un ecran și cât lucru face fiecare dintre ele.
- 03Database
Interogări, indexuri, volum returnat. Aici apar cele mai multe încetiniri care cresc odată cu datele.
- 04Cache
Ce se poate reutiliza, pentru cât timp și cum se invalidează. Un cache fără invalidare corectă devine o sursă de erori.
- 05Network
Distanța, numărul de treceri și dimensiunea răspunsurilor contează mai mult decât pare din mediul de dezvoltare.
- 06Background work
Ce poate ieși din calea cererii ca utilizatorul să primească răspuns mai devreme.
- 07Search
Are propriile costuri și propriile optimizări, separate de cele ale bazei operaționale.
- 08Dependențe externe
Partea din latență pe care nu o controlăm — motiv pentru care este izolată și, unde se poate, scoasă din traseul sincron.
21 Scale
Scalarea înseamnă mai mult decât mai multe servere.
Fiecare tip de creștere lovește altă parte a sistemului. Adăugarea de resurse rezolvă doar una dintre ele — de obicei, nu pe cea care doare.
- 01TraficMai multe cereri simultane. Se rezolvă prin capacitate, cache și reducerea lucrului per cerere.
- 02Volum de dateAceleași interogări devin mai lente pe zece milioane de rânduri. Se rezolvă prin model, indexare, partiționare și arhivare.
- 03Lucru concurentMai mulți utilizatori pe aceleași înregistrări. Se rezolvă prin blocare, versionare și fluxuri care evită coliziunile.
- 04Procesare de fundalCozile cresc mai repede decât capacitatea de consum. Se rezolvă prin paralelizare, prioritizare și limitare.
- 05Complexitate organizaționalăMai multe echipe pe același sistem. Se rezolvă prin granițe și contracte, nu prin infrastructură.
- 06Sarcină de integrareMai multe sisteme conectate, fiecare cu ritmul și disponibilitatea lui. Se rezolvă prin asincron, izolare și contracte stabile.
- 07Vizibilitate operaționalăLa scară, ce nu este măsurat nu este cunoscut. Observability devine ea însăși o cerință de scalare.
Prima întrebare nu este „cum scalăm", ci „ce anume crește". Răspunsurile arată complet diferit.
22 Technology selection
Alegem tehnologia în funcție de sistem, nu sistemul în funcție de tehnologie.
Nu există un răspuns universal. Există un set de dimensiuni pe care le evaluăm de fiecare dată, iar răspunsul se schimbă de la un proiect la altul.
- D—01Tipul produsuluiUn produs SaaS, o platformă internă, un portal public și un sistem de procesare au profiluri complet diferite de utilizare și de risc.
- D—02Contextul echipeiCine va menține sistemul după livrare. O tehnologie pe care nimeni din organizație nu o poate opera devine o dependență, nu un avantaj.
- D—03Peisajul de integrareCe sisteme există deja, ce interfețe expun și cât de rigid este ce nu poate fi schimbat.
- D—04Caracteristicile datelorStructură, volum, rată de schimbare, relații, cerințe de istoric și de căutare.
- D—05LatențăCe trebuie să fie instantaneu pentru utilizator și ce poate aștepta câteva secunde sau câteva minute.
- D—06ScalăCe anume crește, cât de repede și în ce direcție — trafic, date, utilizatori, integrări sau echipe.
- D—07Constrângeri de conformitateCerințe legale sau interne privind locul datelor, accesul, păstrarea și auditul.
- D—08Modelul de deploymentCloud, infrastructură proprie sau mixt — decis de context organizațional, nu de preferință tehnică.
- D—09Maturitatea operaționalăCe poate fi operat realist: monitorizare, intervenție, actualizări, răspuns la incidente.
- D—10Mentenabilitate pe termen lungCât de ușor va fi de înțeles și de modificat sistemul de către cineva care ajunge la el peste trei ani.
Discutăm categorii tehnice și opțiuni reprezentative în funcție de context. Folosirea unei tehnologii sau a unui furnizor nu implică un parteneriat formal cu producătorul acesteia.
23 Modernization
Tehnologia nouă are valoare doar dacă reduce o limitare reală.
Modernizarea începe de la ce anume blochează organizația astăzi, nu de la vechimea framework-ului din care este construit sistemul.
- 01ReplaceComponenta este înlocuită complet. Justificat când costul de menținere depășește costul de reconstrucție și granițele sunt clare.
- 02RefactorStructura internă se schimbă, comportamentul rămâne. Cea mai ieftină cale când problema este organizarea codului, nu tehnologia.
- 03ReplatformAceeași aplicație, alt mediu de rulare. Rezolvă probleme de operare, cost sau scalare, fără a atinge logica.
- 04IsolatePartea problematică este delimitată clar, ca să nu se răspândească mai departe și să poată fi tratată separat.
- 05WrapSistemul vechi primește o interfață modernă în față. Restul arhitecturii poate avansa fără să îl aștepte.
- 06MigrateTrecerea se face incremental, cu ambele variante funcționale o perioadă și cu o cale de întoarcere.
Nu rescriem un sistem doar pentru că un framework este vechi. Rescriem atunci când vechimea lui produce o limitare pe care organizația o simte: un cost, un risc sau o schimbare imposibilă.
24 Build · Buy · Integrate
Nu totul trebuie construit de la zero.
Cea mai frecventă eroare nu este alegerea greșită, ci aplicarea aceleiași alegeri la toate părțile sistemului.
- ABuild Când capabilitatea ține de logica proprie a produsului sau de ceea ce diferențiază organizația. Aici, o soluție generică ar impune procesul altcuiva.
- BBuy Când există o capabilitate matură, standardizată, pe care nimeni nu câștigă nimic reconstruind-o. Costul real nu este licența, ci integrarea și dependența.
- CIntegrate Când valoarea vine din legarea sistemelor existente. Ce lipsește nu este o funcționalitate nouă, ci un traseu coerent între cele care există deja.
Alegerea se face pe componentă, nu pe sistem.
Un produs bine construit conține, de obicei, toate cele trei decizii: partea proprie este construită, capabilitățile comune sunt cumpărate, iar sistemele existente sunt integrate. Ce contează este ca fiecare graniță dintre ele să fie explicită și înlocuibilă.
25 Capability composition
Aceleași primitives tehnice se combină diferit în funcție de produs.
Nu avem o soluție pe care o adaptăm la fiecare client. Avem un substrat tehnic comun din care se compune, de fiecare dată, altă arhitectură.
26 Technology in work
Arhitectura devine vizibilă în produsele construite.
Patru sisteme din domenii diferite, construite pe același mod de a gândi — dar cu compoziții tehnice care nu seamănă între ele.
- 01BidFlow
Platformă pentru procesul de lucru din jurul licitațiilor. Greutatea arhitecturală stă în produs, în fluxul de lucru și în asistența AI aplicată pe contextul organizației.
- 02CYNEX
Platformă digitală pentru instituții publice: procese standardizate, fluxuri de aprobare, planificare, trasabilitate și arhivă. Aici domină workflow-ul, permisiunile și auditul.
- 03certifAI
Platformă de certificare și conformitate pentru operatori economici din construcții. Centrul de greutate este structura datelor, dovezile verificabile și validarea.
- 04Platformă pentru administrație locală
Servicii, procese și date locale într-o arhitectură comună. Aici cântăresc cel mai mult integrarea cu sistemele existente și coordonarea între departamente.
27 Technology & process
Arhitectura este verificată prin proces, nu doar definită la început.
O decizie de arhitectură luată în prima lună este o ipoteză. Procesul este locul unde acea ipoteză este testată împotriva realității, în fiecare etapă.
- 01Understand
Constrângerile reale ale organizației — operaționale, legale, de echipă — apar aici. Ele elimină, de obicei, jumătate din opțiunile tehnice.
- 02Map
Procesele, datele și sistemele existente arată unde trebuie să treacă granițele arhitecturii.
- 03Architect
Se stabilesc straturile, contractele, modelul de date și deciziile tehnologice — cu motivele scrise, nu doar cu rezultatul.
- 04Build
Prima parte construită confirmă sau infirmă arhitectura. Aici se corectează ce nu s-a văzut pe diagramă.
- 05Validate
Comportamentul este verificat pe cazuri reale, inclusiv pe cele de eroare, nu doar pe traseul fericit.
- 06Operate
Producția arată ce a fost subestimat: latență, volum, dependențe, moduri de utilizare neprevăzute.
- 07Evolve
Cerințele noi testează dacă granițele alese chiar permit schimbarea. Acesta este examenul final al oricărei arhitecturi.
28 Anti-complexity
Complexitatea trebuie justificată.
Nu adăugăm servicii, queues, AI, distributed systems sau infrastructură complexă doar pentru că sunt disponibile. Le introducem atunci când rezolvă o constrângere reală a produsului sau a operării.
Fiecare componentă în plus este cod de scris, de operat și de explicat
29 Evolvability
Sistemul bun nu este cel care nu se schimbă. Este cel care poate fi schimbat controlat.
Fiecare sistem util primește cerințe noi. Diferența dintre un sistem sănătos și unul blocat este cât costă prima schimbare care nu a fost anticipată.
- 01Current systemCe funcționează astăzi, cu granițele și contractele deja stabilite.
- 02New requirementO cerință care nu a fost prevăzută — pentru că nicio arhitectură nu prevede tot.
- 03Change boundarySe identifică exact ce parte se modifică și ce rămâne neatins. Aici se plătește calitatea granițelor.
- 04TestTestele existente confirmă că restul sistemului nu a fost afectat.
- 05DeployLivrare în etape, cu cale de întoarcere pregătită.
- 06ObserveSe urmărește comportamentul real, nu doar absența erorilor.
- 07Stable systemSistemul revine într-o stare stabilă, cu o capabilitate în plus și fără datorie ascunsă.
Ce face bucla posibilă.
- AModularitate
Schimbarea are unde să se oprească.
- BInterfețe
Restul sistemului nu trebuie să afle ce s-a modificat înăuntru.
- CTeste
Confirmarea că nimic altceva nu s-a rupt vine în minute, nu în săptămâni.
- DObservability
Efectul real al schimbării este vizibil imediat după livrare.
- EMigrație și rollback
Datele și versiunile pot trece înainte și, la nevoie, înapoi.
30 End-to-end architecture
Un singur sistem, de la interfață până la infrastructură.
Straturile de mai jos nu descriu un produs anume. Descriu locurile în care se iau decizii și modul în care aceste decizii se leagă între ele.
31 Trade-offs
Engineering-ul bun înseamnă trade-offs făcute explicit.
Fiecare pereche de mai jos are două răspunsuri corecte, în contexte diferite. Problema nu este alegerea, ci alegerea făcută fără să fie numită.
- T—01Viteză vs. flexibilitateO structură mai simplă livrează mai repede; una mai generală acceptă mai ușor schimbări. Alegerea depinde de cât de sigur este contextul.
- T—02Simplitate vs. distribuireServiciile separate rezolvă independența, dar adaugă rețea, consistență și operare. Costul se plătește zilnic.
- T—03Consistență vs. disponibilitateUnele operațiuni trebuie să fie corecte imediat; altele pot fi corecte în câteva secunde. Cele două cerințe nu se pot maximiza simultan.
- T—04Build vs. buyControl complet și cost de menținere, sau viteză și dependență. Decizia se ia pe componentă, nu pe sistem.
- T—05Sincron vs. asincronRăspunsul imediat este simplu de înțeles; procesarea separată este mai rezistentă, dar cere gestionarea stării intermediare.
- T—06Automatizare vs. control umanAutomatizarea scade efortul și crește viteza; verificarea umană scade riscul. Pragul se stabilește pe impactul acțiunii.
- T—07Capabilitate AI vs. determinismUn model acoperă mai multe cazuri, dar cu rezultate variabile. O regulă acoperă mai puțin, identic de fiecare dată.
- T—08Abstractizare vs. transparențăAbstracția reduce repetiția, dar ascunde ce se întâmplă. Prea multă abstracție face debugging-ul mai scump decât codul economisit.
Nu rezolvăm aceste tensiuni o dată pentru totdeauna. Le rezolvăm de fiecare dată, explicit, și scriem motivul — pentru că peste doi ani contextul poate cere alt răspuns.
32 Outcomes
Tehnologia este bună atunci când dispare din calea produsului.
Semnul unei arhitecturi sănătoase nu este că este impresionantă, ci că discuțiile din organizație redevin despre produs și despre oameni, nu despre sistem.
- 01Schimbare mai rapidă și controlatăO cerință nouă are un loc evident unde se implementează și un mod evident de a fi verificată.
- 02Ownership mai clarSe știe cine răspunde de fiecare parte a sistemului și de fiecare tip de dată.
- 03Integrare mai ușoarăUn sistem nou care trebuie conectat găsește contracte existente, nu are nevoie de o excepție.
- 04Operare observabilăCând ceva nu merge, întrebarea „unde" primește răspuns în minute, nu în zile.
- 05Evoluție mai sigurăSchimbările pot fi livrate mai des, tocmai pentru că fiecare este mai mică și reversibilă.
- 06Date reutilizabileAceeași informație susține produsul, raportarea, integrarea și AI-ul, fără copii care se contrazic.
- 07Experiență mai bunăInterfața poate fi îmbunătățită fără să atingă logica, iar performanța nu se degradează pe măsură ce cresc datele.
- 08AI-readinessContextul, permisiunile și fluxurile există deja — AI-ul se adaugă unde are sens, nu se construiește pe lângă sistem.
33 Convergență
Opt decizii tehnice care produc un singur rezultat.
Contact
Ai un produs care are nevoie de o fundație tehnică mai clară?
Putem proiecta arhitectura, datele, integrarea și infrastructura astfel încât produsul să poată crește, integra AI și evolua fără să devină mai fragil.