vineri, 10 octombrie 2014

DevOps - sau "sunt programator si am "root" pe servere"

DevOps - unul din multele cuvinte "magice" care au intrat in vocabularul nostru in ultimii ani, odata cu "continous integration" (putin mai vechi, dar inteles abia acum), "cloud", "test driven development" si asa mai departe.

Totusi, nimeni nu are o explicatie standard pentru termen si interpreteaza acest rol contextual.
Ceea ce e bine si corect - DevOps este termenul, rolul insa se defineste in functie de nevoile companiei, a workflowului, modalitatilor de lucru, arhitecturii, tehnologiilor, etc.
Ce am intalnit insa, irefutabil si periodic ca si neclar referitor la acest concept este legat de accesul privilegiat pe servere - eternul "root debate", care e vechi de cand exista "root" si de cand exista "dev".

Din experienta, exista o curba Gaussiana in istoria unei companii / unei echipe IT / de tehnologie - care deseneaza relatia intre acesul programatorilor "pe servere, ca root" si timp.

Adica, cand compania este tanara, "toata lumea" are acces privilegiat la infrastructura existenta. Mai apoi, odata cu cresterea generata de succesul produsului creat si cu cresterea echipei (in stransa relatie), apare separarea (clasica) a rolurilor in echipele tehnice. Adica, apar roluri ca : sysadmin, QA, integrator, release master, etc.

Surpriza insa vine dupa ce compania trece la maturitate - intervine o "democratizare" a structurilor echipei, cu scopul principal de a imparti cat mai mult din ownership. Da, ownershipul este principala problema cu care se bat echipele pe schema clasica de functionare si discutii de genul "QA nu a gasit problema asta cat a fost la ei?", "DBA nu mi-a spus ca selectul meu este gresit si puteam folosi index acolo" si asa mai departe. In afara de neproductivitatea acestor discutii, problema majora este spargerea echipelor in boxuri de responsabilitate, care genereaza de fapt o scadere drastica a ownershipului si implicarii. Ceea ce este riscant sa se intample si dramatic daca chiar se ajunge aici.


Si aici intervin o serie de concepte noi, printre care si DevOPS. Care, de fapt, inseamna extinderea ownershipului pe arii cat mai mare din procesul de dezvoltare. Adica, DEV este responsabil cu etapa de codare, de testare unitara, de testare functionala si chiar de release/maintenance. Full stack!

Si asta, dragii mosului, inseamna DevOps : devii care au acces ca "root" pe masini pentru ca nu exista rolul de sysadmin, dar si programatorii/sysadminii (seniori/experti) care au destule cunostinte tehnice pentru a putea fi responsabili pe o zona extinsa (poate chiar toata!) a procesului de dezvoltare.

Nota :
Ce nu inseamna DevOps?
- "sysadmini care stiu php"
- "testeri care stiu coding"
- "programatori care pot da restart la apache"