ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 167
Numărul 166 Numărul 165 Numărul 164 Numărul 163 Numărul 162 Numărul 161 Numărul 160 Numărul 159 Numărul 158 Numărul 157 Numărul 156 Numărul 155 Numărul 154 Numărul 153 Numărul 152 Numărul 151 Numărul 150 Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 167
Abonamente

Release Monitor - Povestea unui tool intern adoptat de 3 echipe în sub 3 luni

Máté Gozner
Software Engineer @ Banca Transilvania



PROGRAMARE

În Git Flow concurent, una dintre problemele care se văd cel mai greu este contaminarea cross-release: un commit perfect valid ajunge în release-ul greșit. Buildul poate trece, testele pot fi verzi, iar code review-ul poate să nu indice nimic suspect. Problema apare abia când îți dai seama că acel cod aparținea unui release viitor și a intrat într-un release care se pregătește deja de deploy.

Așa a apărut Release Monitor: dintr-o nevoie operațională foarte concretă, într-un context cu mai multe release-uri active, repository-uri multiple, branchuri paralele, cherry-pickuri și verificări manuale. Întrebarea de la care am pornit a fost simplă: putem ști, înainte de deploy, dacă un release conține ceva ce nu ar trebui să conțină?

Prima versiune am construit-o pentru echipa de Popriri, folosind o strategie bazată pe labeluri din Jira. Aveam nevoie de vizibilitate rapidă asupra conținutului unui release și asupra posibilelor contaminări. Destul de repede, însă a devenit clar că problema nu era doar a unei singure echipe. Așa a evoluat Release Monitor dintr-un helper intern într-o platformă multi-tenant, adoptată de BTPopriri, BTPay și CMS în mai puțin de trei luni.

Când codul corect ajunge în locul greșit

Contaminarea cross-release nu este un bug clasic. Nu înseamnă neapărat că un commit este greșit sau că un test este roșu. Înseamnă că o schimbare destinată unui release mai nou ajunge într-un release mai vechi, de obicei printr-un merge incorect, un cherry-pick incomplet sau o promovare făcută fără toți pașii necesari.

În astfel de momente, echipa are nevoie de răspunsuri rapide: "Conține ceva din următorul release?", "Lipsește vreun commit care trebuia inclus?", "Ce diferențe reale există între branchuri?", "Ce risc avem dacă mergem mai departe?". Release Monitor ia această incertitudine și o transformă într-o imagine operațională clară.

Un release nu înseamnă același lucru pentru toate echipele

Prima versiune a pornit din contextul Popriri, unde release-urile erau urmărite prin labeluri de Jira. Când au apărut nevoi din alte echipe, a devenit evident că nu există o singură definiție universală pentru "release". Pentru unele echipe, release-ul este definit prin labeluri de Jira. Pentru altele, prin fix versions, convenții de branch, sprinturi sau promovări între medii precum DEV, STAGING, MAIN și PROD.

De aceea, Release Monitor nu încearcă să oblige toate echipele să lucreze la fel. În schimb, standardizează vizibilitatea peste procese diferite. Aplicația tratează release-ul ca pe un concept polimorfic și folosește șase strategii configurabile: Jira labels, Jira fix versions, branch naming, sprint-based releases, hybrid mode și environment promotion.

Cum funcționează Release Monitor

Release Monitor conectează trei zone care, de multe ori, sunt analizate separat: Jira, GitHub Enterprise și contextul de release al echipei. Din Jira extrage issues, labels, fix versions, boards și sprinturi. Din GitHub Enterprise citește branchuri, commituri, pull requesturi, taguri și comparații între branchuri.

Peste aceste date, aplicația aplică strategia de release a tenantului și construiește o imagine coerentă: ce release-uri sunt active, ce branchuri participă, ce commituri lipsesc, unde apar contaminări, ce pull requesturi sunt deschise și cât de pregătit este un release pentru deploy.

De la helper intern la platformă multi-tenant

Un tool intern devine platformă atunci când poate fi folosit în siguranță de mai multe echipe, cu reguli diferite. Release Monitor a evoluat în direcția aceasta printr-o arhitectură multi-tenant: fiecare tenant poate avea propriile setări Jira, repository-uri GitHub, strategii de release, patternuri de branch și roluri.

Un pas important a fost modelul de autorizare pe două niveluri: dual-layer authorization. Platforma separă rolurile globale, precum AppAdmin, de rolurile specifice tenantului, precum Viewer, Member, Admin sau Owner. Administrarea poate rămâne centrală, iar fiecare echipă își păstrează controlul asupra propriului spațiu operațional.

AI în produs: asistent contextual, nu oracol

Release Monitor nu este un produs "făcut de AI". Problema a fost observată de echipă, deciziile au fost validate uman, iar ownershipul tehnic a rămas la nivel de engineering. IA-ul a fost un accelerator, nu un înlocuitor pentru responsabilitatea tehnică.

În produs, IA-ul nu încearcă să "ghicească" starea unui release și nici nu înlocuiește verificarea tehnică. Rolul lui este să explice, să coreleze și să propună pași următori folosind datele pe care platforma le are deja: tenant, repository-uri, branchuri, issues Jira, pull requesturi, contaminări, missing merges și release-uri active.

Cu alte cuvinte, IA-ul din Release Monitor este un asistent contextual, nu un oracol. Poate ajuta la formularea riscului, la explicarea diferențelor dintre branchuri sau la generarea unui draft de release notes. Decizia rămâne însă la echipă.

Arhitectură dual-model pe Azure OpenAI

Pentru funcționalitățile IA ale Release Monitorului am ales o arhitectură dual-model pe Azure OpenAI. Ideea este simplă: nu toate sarcinile IA sunt la fel și nu toate ar trebui tratate de același profil de model.

Primul profil este orientat spre analiză, explicații și conversație: release notes, comparații între branchuri sau explicarea riscurilor unei contaminări. Al doilea profil este orientat spre generare tehnică: scripturi de cherry-pick, comenzi Git, pași de aliniere între branchuri sau recomandări operaționale mai apropiate de cod.

Separarea aceasta aduce și un avantaj arhitectural: alegerea modelului devine o decizie explicită. Serviciile IA pot alege profilul potrivit pentru sarcina respectivă, iar aplicația poate rămâne compatibilă și cu deploymenturi mai simple.

Agentic Coding și requirements2code

O altă parte importantă a poveștii este modul în care a fost construit produsul. Am folosit un proces de Agentic Coding sau requirements2code, nu ca să predau responsabilitatea către IA, ci ca să accelerez drumul de la cerință la implementare verificabilă.

În practică, IA-ul a funcționat ca un set de roluri digitale: analyst pentru cerințe și criterii de acceptanță, architect pentru alternative și riscuri, developer pentru implementări incrementale și QA pentru scenarii de testare și cazuri limită.

Fluxul nu a fost "prompt → cod → deploy". Ar fi fost rapid, dar periculos. Fluxul real a fost mai aproape de "problemă → cerințe → design → implementare mică → testare → revizuire → ajustare". IA-ul a accelerat explorarea, iar deciziile finale au rămas validate prin judecată de engineering, verificări de securitate și date reale.

Disciplina aceasta a contat mult, pentru că Release Monitor combină zone în care greșelile pot fi subtile: integrare Jira, integrare GitHub Enterprise, multi-tenancy, caching, autorizare, background jobs, interpretarea branchurilor și analiza contaminărilor. Un agent poate propune; inginerul trebuie să înțeleagă ce acceptă.

Guvernanță umană, autorizare și limite

Într-un produs care corelează date din Jira, GitHub și release management, IA-ul trebuie introdus cu limite clare. Release Monitor trimite către IA doar contexte controlate și relevante pentru acțiunea cerută. Datele sensibile, credențialele, tokenurile și detaliile care nu sunt necesare nu au ce căuta în prompturi.

IA-ul nu trebuie să devină o scurtătură peste modelul de acces al platformei. Dacă un utilizator nu are acces la un tenant, la un repository sau la o acțiune, asistentul nu ar trebui să ofere acea informație sau să execute acea acțiune indirect.

Ce a schimbat în practică

Impactul unui tool intern se vede cel mai bine atunci când nu mai este "toolul meu", ci devine "tool-ul nostru". Release Monitor a devenit relevant pentru mai multe echipe tocmai pentru că nu rezolva o curiozitate tehnică, ci o durere recurentă: lipsa de vizibilitate înainte de deploy.

În mai puțin de trei luni, platforma a fost adoptată de BTPopriri, BTPay și CMS. În datele urmărite pentru proiect, Release Monitor a ajuns să acopere peste 100 de release-uri monitorizate și a semnalat sau prevenit aproximativ 10-15 contaminări cross-release. Aceste cifre indică tipul de impact care contează într-un astfel de sistem: mai puține surprize târzii, mai multă trasabilitate și conversații de readiness bazate pe date, nu pe intuiție. În loc ca cineva să verifice manual branchuri, Jira labels, fix versions, pull requesturi și commituri, platforma pune aceste semnale într-un singur context.

Release Monitor mută conversația mai devreme, înainte ca problema să ajungă într-un punct dificil de controlat. Iar în release management, "mai devreme" este adesea diferența dintre o corecție controlată și o urgență.

Lecția umană

Pentru mine, povestea Release Monitor nu este doar despre Git Flow, Jira, GitHub Enterprise, Azure OpenAI sau arhitectură multi-tenant. Este despre ce se întâmplă când o problemă internă este tratată cu seriozitatea unui produs.

Toolurile bune nu simplifică excesiv realitatea. O modelează suficient de fidel încât echipe diferite să se regăsească în ele. IA-ul m-a ajutat să construiesc mai repede și mai structurat, dar partea esențială a rămas umană: observarea problemei, asumarea ownershipului, alegerea trade-offurilor și validarea în realitatea operațională.

Dacă ar fi să rezum lecția într-o frază, ar fi aceasta: IA-ul nu înlocuiește inginerul care înțelege problema; îl multiplică.

Bibliografie și linkuri utile

Articolul este construit în principal pe experiența practică a dezvoltării Release Monitor. Referințele de mai jos sunt incluse ca bibliografie tehnică de context pentru temele discutate: AI-assisted development, release/version management, branch comparison, analiza commiturilor și Azure OpenAI.

  1. Visual Studio Magazine. The Next Generation of Developer Productivity with GitHub Copilot and Visual Studio. 2026. Descrie evoluția dezvoltării asistate de AI de la completare de cod către workflow-uri end-to-end, incluzând planificare, generare, review, debugging și agenți cloud.

  2. Atlassian. Jira Software Release Notes and Versioning Documentation. 2026. Documentează practicile de release/version management din ecosistemul Jira, inclusiv versiuni, release notes și ciclul de viață al release-urilor.

  3. Atlassian Support. Manage versions. Jira Cloud administration. Explică modul în care versiunile Jira ajută la planificarea și organizarea release-urilor și diferențiază câmpuri precum Fix versions și Affects versions.

  4. GitHub Docs. About comparing branches in pull requests. GitHub Documentation. Relevant pentru explicarea modului în care diffs, pull requesturile și comparațiile între branchuri susțin release readiness și identificarea contaminărilor.

  5. GitHub Docs. Comparing commits. GitHub Documentation. Susține partea articolului despre compararea branchurilor, tagurilor, commiturilor și conținutului de release între repository-uri.

  6. Microsoft Learn. Azure OpenAI in Microsoft Foundry Models — working with models. Referință utilă pentru partea despre Azure OpenAI, model deployments și opțiuni de versionare/upgrade ale modelelor.

Conferință TSM

NUMĂRUL 166 - AI for Programmers

Sponsori

  • Banca Transilvania
  • Betfair
  • MHP
  • .msg systems
  • P3 group
  • Cognizant Softvision
  • BMW TechWorks Romania

INTERVIURI