Am discutat despre Software Craftsmanship în industria de IT românească. Invitații noștri au fost:
Denis Salanța - Head of development @ CodeCrafters by BT ,
Denis Rendler - Information Security Officer @ Accesa,
Ioan Șut - Engineering Manager @ CodeCrafters by BT,
Doru Ciceu - Director of Enterprise Architecture & IT Governance @ Banca Transilvania
Ovidiu Mățan: Ce înseamnă pentru voi Software Craftsmanship?
Denis Salanța: Da, e o întrebare foarte bună. Pentru mine, a fost, tot timpul, acel over-engineering, care mi-a plăcut să fie funcționalitatea perfectă.
Oferiți mai multe funcționalități decât cere clientul?
Doru Ciceu: Adesea, da, dar în ideea în care gândesc cum o să se dezvolte produsul în următoarele 6-12 luni. De exemplu, dacă am o funcționalitate de log-in, mă gândesc că peste șase luni, clientul va vrea o logare cu Facebook.
Cred că loginul, deși pare cel mai simplu, e printre cele mai complexe, deoarece acolo îți definești toate chestiile și tot ce ține de securitate. Care este părerea ta despre acest subiect, Software Craftsmanship, Denis?
Denis Salanța: Este clar că în industria noastră de software developers, companiile care investesc în software nu o fac de dragul de a arunca bani, ci fie ca să facă bani mai mulți, fie ca să scadă, poate, costuri sau să își protejeze niște investiții. Cât privește curentul de Software Craftsmanship, nu-l văd ca pe un rol de over-engineering, ci îl văd, mai degrabă, ca pe o mentalitate, pe care o are fiecare developer, care consideră că aderă la manifestul ăsta. Ca software craftsmans, ne dorim să ridicăm ștacheta, să îmbunătățim modul cum livrăm softul și ce tooluri și tehnici eficiente aplicăm, nu neapărat câte funcționalități în plus facem.
Credeți că un programator bun face soft rapid sau îl face încet și bine?
Denis Salanța: Depinde în ce context are de făcut acel soft.
S-ar putea ca un programator bun să nu îți dea codul până nu are toate elementele: unit tests, integrări, validări. În schimb, un programator junior s-ar putea să ți-l dea rapid, pentru că a văzut că merge și nu ezită și ți-l dă.
Denis Salanța: Exact! Poate acel developer junior, care zice că a terminat rapid, vrea și el să își testeze munca și încearcă o mulțime de metode prin care să se asigure că nu e vorba de scopul de a fi terminat numărul de linii de cod pe unitatea de timp, ci că este funcțional și că aduce beneficii.
Ioan Șut: Pentru mine Software Craftsmanshipul este ca o artă. Sunt diferiți actori în toată zona asta de a dezvolta software, în care fiecare trebuie să își facă partea lui, pentru ca la final să ai un produs utilizabil, care să ajute oamenii și care să fie performant. Oricum, să aducă beneficii utilizatorului.
Doru Ciceu: Pentru mine, Software Craftsmanship e conștiința colectivă a dezvoltatorilor, care ajută să se transmită informații din generație în generație. În software e important să se creeze un practice prin care oamenii pot să facă schimb atât de idei bune, cât și de idei proaste.
În ziua de astăzi, poți să ai pe cineva care să aibă o certificare, dar asta nu îl face pe el să fie un software craftsmanship. De aceea, cel mai bine e să urmezi un model vechi și să evaluezi o persoană dându-i o probă practică în timpul interviului.
Ați spus vreodată NU unui task?
Denis Rendler: Da, chiar pe tema de security, când mi s-a cerut să adaug niște mesaje de eroare specifice, la o aplicație pentru a putea fi folosită la testare. Am spus nu pentru că aplicația respectivă avea în spate o bază de date, care conținea informații foarte personale și, prin urmare, am propus alte soluții.
În momentul când ai de lucru cu oamenii, ai două variante: fie le dai mână liberă și ai încredere în ei, fie practici un micromanagement și atunci știi exact ce fac. Pe care o preferați?
Denis Salanța: Consider că depinde de nivelul de senioritate. Ca software craftsmans, vrem să vedem dorința de a deveni mai buni și asta se poate face într-un cadru ghidat. Developerii nu ar trebui să fie văzuți ca parteneri într-o fabrică, ci ca pe niște partenerii care lucrează împreună, vin cu sugestii și pun întrebări. Punând întrebările, ei cresc și devin mai buni.
Există momente în care trebuie să se facă micromanagement?
Denis Salanța: Da, în situații de criză, în situații de război, depinde de situația în care ne aflăm.
Care sunt diferențele între un programator software craftsmanship senior și unul non-software craftsmanship?
Ioan Șut: În principiu, mie mi-ar plăcea foarte mult ca seniorii- mie mi-ar fi plăcut, când am trecut pe acolo- să îmi fi păstrat entuziasmul acela de început, de a crea, de a veni cu idei și a învăța ceva nou. Din punctul meu de vedere, asta trebuie să caracterizeze un programator software craftsmanship adevărat. Adică să își mențină entuziasmul și curiozitatea cu privire la ceea ce este nou în industria noastră. Nu numai că vor să știe, dar vor să și practice ceea ce se întâmplă. Dar asta o vezi mult mai des la juniori. Cu cât cresc în ani de experiență, oamenii sunt mai puțin interesați să fie up to date, deși toată experiența acumulată te ajută să fii un adevărat software craftsman.
Start-upuri versus enterprises, ce-ați alege și de ce?
Doru Ciceu: Enterprise, bineînțeles! Principalul motiv este că într-un context enterprise, cum este banca, îți dorești ca dezvoltarea produselor să fie focusată pe dezvoltare, nu pe firefighting, unde mereu trebuie să te uiți la ce ai pe inventar, la dacă nu e o problemă cu asseturile respective. Dacă ai un supply chain de software, pe care-l controlezi, capeți mai multă libertate să folosești și software care nu e în zona aceasta. Majoritatea proiectelor mari open source au și o companie mare care oferă suport și mentenanță. Așa începi cu arhitectura care se bazează pe produse open source, și, la un moment dat, când crești, tu trebuie să oferi un anumit grad de reziliență pentru produsul tău. Asta înseamnă că nu te poate opri un log4J, pentru care aștepți o zi, o oră, o săptămână, două săptămâni.
Să fim sinceri, oricine își poate face intern unlog4J-ul și nu mai folosești altceva.
Doru Ciceu: Toată problema e că încercăm să ținem lucrurile cât mai simple, cât mai streamline, proces care e foarte important în zona de enterprise software, de sourcing, de software supply chain, verificare, vulnerability management.
Ne puteți povesti despre un produs de care sunteți mândri?
Denis Salanța: Ultimul proiect în care am fost și eu implicat mai activ, ca development, a reușit să fie utilizat în producție. Practic, am pregătit un set de metrici, pe care le-am putut urmări imediat după lansare și am văzut că produsul este utilizat cu succes.
Ioan Șut: Pot să îți dau și eu un exemplu chiar recent, lansat luna aceasta. Este vorba de asigurări de tip travel, în BT pay. Toată partea de sub frontendul din BT pay a fost dezvoltată de către noi. Partea bună e că nu am avut buguri în producție și pe lângă asta, putem să ne facem o asigurare din câteva tapuri din aplicația pe care o folosim zilnic. Ăsta e un produs, pe care l-am dezvoltat cu o echipă din Code Crafters și suntem mândri de el.
Denis Rendler: Aș putea să dau și eu un exemplu, care nu e neapărat un produs, dar e ceva de care sunt mândru. Când m-am alăturat echipei Accesa, în 2020, deși era awareness în ce privește security-ul, nu exista neapărat un punct central unde să discutăm idei, să anunțăm vulnerabilități într-un timp util. După unele discuții, am deschis un canal pe Teams, pentru întreaga companie, în care se anunță frecvent, vulnerabilități, se postează articole, se face schimb de informații.
Vă propun un sondaj: care credeți că este raportul ideal, pe care un adevărat software crafter ar trebui să îl aibă între alocarea între timpul de învățare și timpul de producție.
Doru Ciceu: Eu cred că mentalitatea software craftsmanship se definește prin ideea de de îmbunătățire continuă și consider că e inutil să încerci să separi cele două activități. Însă realizez că structurile organizatorice în care lucrez s-ar putea să nu încurajeze, întotdeauna, stilul acesta de muncă.
Care e intervalul de timp în care membrii echipei voastre învață ceva nou, un API, un limbaj?
Denis Salanța: Dacă e o tehnologie nouă și vrem să vedem fezabilitatea de a o adopta după o validare de enterprise architecture, ne alocăm o zi, două zile, în care să venim cu diferite POC-uri sau chiar prototype-uri aplicate în contextul în care urmează să fie utilizată respectiva tehnologie.
Cât de mult folosiți prototyping și studii de UX?
Denis Salanța: Colega noastră, Ana Maria, a dezvoltat o procedură, un design process de prototyping prin care se utilizează feedbackul obținut de la utilizatori reali și interactive prototype, prin care sunt înregistrați acești beneficiari finali ai softului, care ar urma să fie implementat, utilizând acele ecrane.
Ioan Șut: Referitor la proiecte și cum le dezvoltăm. În principiu, vin cerințele de la business, noi le preluăm, le analizăm. Dacă este cazul, facem și analiză funcțională și analiză tehnică și apoi venim cu estimări. Există proiecte care au un deadline fix. Acestea trebuie finalizate până la o anumită dată pentru că există o lege, care spune că va trebui să implementăm funcționalitățile x și y în proiectul respectiv. În cazul în care avem această restricție, analizăm ce echipă este mai potrivită ca să dezvolte acele funcționalități. Vedem dacă ar mai trebui adăugați oameni în echipă care să crească viteza de development. Și, da, sunt situații în care trebuie să alegem scurtături privind calitatea codului, însă revenim ulterior asupra lor.
Ce credeți că nu se predă în universități și ar trebui să se predea?
Ioan Șut: Teamwork. Cel puțin, când am trecut eu prin facultate, nu se prea punea accentul pe proiecte, la care să lucreze mai mulți studenți deodată și cumva, partea asta se simte când vii într-o companie și tu trebuie să lucrezi pe același proiect cu mai mulți oameni.
Doru Ciceu: Eu consider că ceea ce nu se învață, în general, este gândirea critică. Al doilea lucru este cum poți lua decizii. Un exemplu: poți să ajungi la niște concluzii prin reducere la absurd sau făcând un efort enorm ca să ajungi să descoperi toate informațiile. În contextul discuțiilor ChatGPT și AI, mi se pare relevant să îți dezvolți gândirea critică, altfel AI-ul o să-ți zică orice și tu vei ajunge să crezi.
Denis Rendler: Cred că ar trebui mai updatată curicula pentru că am întâlnit colegi, venind din facultate, lucrând în Pascal, ori numărul proiectelor în Pascal s-a diminuat semnificativ în ultimii ani.
Denis Salanța: Sunt de acord cu ceea ce au zis colegii mei. Mai adaug că ar fi utilă o fixare a noțiunilor de ciclul de viață al unui soft, de la partea de început de a analiza și a înțelege cerințele, până ajungi să te gândești la infrastructură și mentenanța ulterioară.
Dacă CGTP-ul începe să scrie cod mai bine decât Craftsmanshipul human? Poate fi acesta un scenariu?
Ioan Șut: Nu ar fi prima dată când se întâmplă, într-o industrie, lucrul acesta și cred că noi, oamenii suntem niște ființe adaptabile și ne-am găsi rostul în continuare.
Denis Rendler: Eu cred că vom ajunge, la un moment dat, în punctul acela în care să fie mai ușor să scrie ChatGPT-ul. De aceea am și schimbat rolul... Așa că, dacă el scrie codul, eu o să îi găsesc vulnerabilitățile.