Știm din experiența industriei că tehnicile promovate de mișcarea software craftsmanship au potențialul de a crește productivitatea echipelor de dezvoltare. Test Driven Development ajută la obținerea unor soluții cu design mai bun și mai.. . stabile într-un timp mai scurt.
Pair Programming ajută la eliminarea greșelilor în timp ce codul este produs, la diseminarea rapidă a cunoștințelor într-o echipă și la găsirea unor soluții mai simple. Continuous Integration ajută la rezolvarea rapidă și fără stress a problemelor de integrare între diverse componente. Refactoring-ul continuu ajută la păstrarea flexibilității codului, astfel că atunci când clienții cer funcționalități neprevăzute, echipa să le poată introduce foarte repede.
Există însă și reversul medaliei. Test Driven Development poate duce la teste greu de întreținut și la abandonarea lor în timp. Refactoring-ul este adesea înțeles ca "iterații" sau "perioade" de refactoring, care se pot lungi săptămâni întregi, uneori fără niciun rezultat. Încercarea de a face pair programming poate fi interpretată ca neîncredere în programatori: "vine cineva să mă supravegheze când scriu cod". Continuous integration poate genera multe probleme când este aplicat pe proiecte care au zeci de componente diferite, rezultând într-un return of investment discutabil.
Ce anume face diferența între exemplele de succes și cele de eșec? Ce poate conduce către o adopție de succes?
Răspunsul constă în gestionarea schimbării. Aici intervine partea de coaching; în acest caz, din cauză ca practicile ce se doresc adoptate sunt uber-tehnice, vorbim de coaching tehnic.
Un coach tehnic se preocupă de câteva aspecte importante ale adopției unei practici:
Coach-ul tehnic poate fi intern sau extern companiei care încearcă să adopte TDD, refactoring, sau chiar Extreme Programming. Ambele abordări au avantaje și dezavantaje. Coach-ul intern are avantajul că înțelege structura companiei și proiectele, dar are de obicei dezavantajul că face parte din sistem și îi este mai greu să vadă anumite lucruri care trebuie schimbate. Un coach extern are câteva avantaje ce merită luate în seamă:
Este uneori dificil de înțeles cum un coach tehnic extern poate deveni foarte rapid productiv într-o echipă și într-o aplicație complet nouă. Pare magie, nu-i așa? Explicația este de fapt simplă: coach-ul tehnic nu trebuie să înțeleagă business-ul și toate detaliile interne ale aplicației. Produsul coach-ului este echipa; echipa se îngrijește de a înțelege aplicația și business-ul. Coach-ul tehnic se bazează pe cunoștințe solide despre practicile care se vor adoptate și pe pattern-uri de arhitectură, design, cod și interacțiune interumană pentru a duce întreaga echipă la un nivel mai înalt de productivitate. Coach-ul nu poate lucra fără echipă, la fel cum produsul software nu poate fi creat fără echipă. Doar printr-o colaborare strânsă cu echipa, prin discuții și comunicare sinceră și continuă, prin încredere și respect reciproc, poate coach-ul să ajute echipa să adopte o practică nouă.
Până acum am prevăzut unele aspecte despre adopția unei practici tehnice noi într-o companie. La nivel individual, lucrurile sunt similare dar mult mai simple.
Un programator motivat și care are condițiile necesare poate să învețe singur o practică tehnică nouă. Folosirea tehnicilor individuale de exersare precum coding kata sau proiect personal este recomandată în combinație cu urmărirea resurselor de pe web (ex. http://katacasts.org) și citirea a două-trei cărți recomandate pe subiectul respectiv. Mai departe, totul ține de tenacitate, voință și automotivare. Participarea la coding dojo, code retreat sau conferințe tehnice este utilă pentru menținerea motivării. Pair programming-ul cu persoane selectate este o altă metodă care poate fi aplicată pentru continuarea învățarii.
Nu toți dezvoltatorii au însă voința și automotivarea necesară pentru a dobandi o aptitudine. Pentru ei, un coach tehnic este unul din mijloacele de a-și atinge scopul de a învăța o practica tehnică prin:
La nivel individual, activitățile de coaching sunt foarte similare cu cele de mentoring sau relația craftsman - master. Un coach tehnic ajută în plus față de un mentor tradițional la identificarea și reducerea impedimentelor. Impedimentul tipic declarat de către programatori este lipsa de timp de învățare, care poate fi ușor rezolvat prin: sesiuni de învățare scurte (30-45" pe zi), planificare mai bună sau sesiuni mai intense și mai rare (ex. pair programming, coding dojos sau code retreats).
Merită explicat rolul pair programming-ului în procesul de învățare, pentru că este uneori confuz. Pair programming poate fi folosit în producție, pentru învățarea proiectului și pentru prevenirea greșelilor din cod. În contextul adoptării unei practici, pair programming-ul poate fi folosit ca modalitate prin care coach-ul tehnic transmite cunoștințele sale legate de o anumită practică a programatorului. Pentru a aplica pair programming în producție, este nevoie de asemenea de o perioadă de adopție, iar adoptarea pair programming se face prin sesiuni de pairing între doi programatori, sub supervizarea coach-ului tehnic. În timp ce programatorii se concentrează să rezolve problema la care lucrează, coach-ul se va concentra pe interacțiunea dintre cei doi și pe eliminarea problemelor de comunicare și a discuțiilor ineficiente. Așadar, e o diferența majoră între adoptarea pair programming, folosirea tehnicii în producție și învățarea altor tehnici prin intermediul pair programming. Coach-ul tehnic trebuie să stăpânească foarte bine tehnicile de pairing, pentru a reuși să transmită informație chiar acelor programatori care nu au făcut niciodată pairing dar vor să învețe una din tehnicile descrise mai sus.
În concluzie, un coach tehnic gestionează procesul de adopție a uneia sau mai multor practici tehnice la nivel individual, de echipă sau cu 2-4 echipe. Expertiza sa poate face diferența între succes și eșec când o companie sau un programator dorește adopția practicilor gen unit testing, TDD, refactoring incremental, îmbunătățirea design-ului software, diminuarea problemelor legate de cod existent greu de înțeles.
Coach-ul poate fi intern sau extern organizației. Avantajul unui coach intern este familiarizarea cu contextul organizației și al aplicațiilor, dar dezavantajul unei experiențe limitate și a faptului că face parte din sistem. Un coach extern are că avantaj faptul că a participat în zeci de proiecte cu constrângeri și nevoi diferite și ca poate privi organizația cu ochi proaspeți, din afara sistemului. Coach-ul extern trebuie să înțeleagă doar punctual nevoile de business și ale aplicației, și se încrede în echipa cu care lucrează în legătură cu detaliile specifice proiectului. Produsul coach-ului tehnic este echipa; o echipă care învață tehnici noi, pe care le poate aplica direct în producție cu încredere, reușind în același timp să își atingă obiectivele de business. Colaborarea strânsă între coach tehnic și echipă, bazată pe respect reciproc, comunicare și sinceritate este principalul factor de succes al adopției. După perioada inițială de coaching, echipa are instrumentele necesare pentru a continua învățarea, coach-ul având doar un rol de suport ("vocea conștiinței").
Gândiți-vă așadar ce ratați de fiecare dată când spuneți că nu aveți timp de a adopta o anumită practică. Poate pierdeți clienți, oportunități, potențial inovator, un job mai bun. Un coach tehnic vă poate ajuta să decideți care practică este utilă în contextul business-ului și al aplicațiilor curente și vă poate ajuta să adoptați practicile care duc la împlinirea potențialului.
Așteptăm întrebările voastre pe programez.ro !!!