De când lucrez în domeniul software, s-a vorbit despre dezvoltatorul 10x. Aceștia sunt oamenii pe care îi doriți să vă rezolve problemele; ei o vor face în 1/10 din timp, cu 1/10 din numărul de linii de cod. Sună grozav.
Dar de unde a apărut acest termen? Există ele? Și chiar dacă există, ați vrea totuși să fiți unul?
Tom DeMarco și Tim Lister au condus, încă din 1977, „Coding War Games”. Acesta este un studiu public de productivitate în care echipe de implementatori de software din diferite organizații concurează pentru a finaliza o serie de repere într-un timp minim și cu defecte minime. Au participat peste 600 de programatori.
Ce au învățat?
- alegerea limbajului de programare a avut un impact redus – fie că a fost vorba de COBOL/Fortran sau de un limbaj de nivel înalt precum Pascal, răspândirea rezultatelor este aproximativ aceeași. Singura excepție a fost limbajul de asamblare.
- Nu a existat nicio corelație între experiență și performanță, cu excepția faptului că cei cu mai puțin de șase luni de experiență cu un limbaj nu s-au descurcat la fel de bine ca ceilalți.
- Dezvoltatorii soluțiilor cu zero defecte nu au plătit nicio penalizare de performanță pentru că au făcut o muncă mai precisă (de fapt, au avut nevoie de ceva mai puțin timp!).
Au constatat că existau diferențe uriașe între organizații. Cea mai bună organizație a lucrat de 11,1 ori mai repede decât cea mai slabă. În plus, cei care au lucrat cel mai repede au dezvoltat cod care a trecut testul de acceptare. Caz închis?
Bine, nu chiar. Studiul continuă apoi să coreleze mediul de lucru (care este diferit de la o organizație la alta) cu performanța. Se pare că acel grup liniștit, privat, cu spațiu de lucru dedicat a avut performanțe semnificativ mai bune.
Lecția învățată – obțineți-vă mai întâi mediul de lucru corect înainte de a începe să vă faceți griji dacă puteți găsi sau nu dezvoltatori 10x!
Programatorul cu productivitate netă negativă
Schulmeyer observă că unii programatori sunt „programatori cu productivitate netă negativă” (NNPP), adică produc atât de multe defecte încât eliminarea lor din echipă crește productivitatea. Acest lucru este aproape opusul dezvoltatorului 10x – este posibil să ai pe cineva în echipă care o înrăutățește.
Dacă există producători negativi (- Nx programatori?) atunci este clar că este posibil să existe un programator 10x (lăsând matematica la o parte).
Nu este totuși cel mai bun argument pentru programatorul 10x, nu-i așa? Dacă i-aș cere unui copil de școală să se alăture unei echipe, ar fi el un producător net-negativ? Probabil, dacă îi las să stea într-un colț și să bată niște cod (și dacă cumva reușesc să împingă la producție!). Dacă sunteți genul de companie care îi lasă pe oameni să stea într-un colț, nu le oferă feedback și îi lasă să treacă la producție, atunci cred că, probabil, meritați să aveți PNNPP în echipă!
Mai realist, sper că în orice companie normală, dacă angajezi pe cineva, îi vei oferi tot sprijinul de care are nevoie pentru a fi grozav în rolul său (peer code-review, feedback, un mentor, analiză automată a codului pentru feedback, materiale de învățare etc.)
Cred că este încă posibil să ajungi să ai un NNPP, dar bănuiesc că este foarte puțin probabil. Aceasta cu siguranță nu pare a fi cea mai bună poveste pentru existența dezvoltatorilor 10x.
Studii experimentale exploratorii care compară performanțele de programare online și offline
Sackman, Erikson, Grant au publicat o lucrare în 1968 intitulată „Exploratory experimental studies comparing online and offline programming performance”. Unul dintre citatele de la sfârșitul lucrării se referă la diferențele individuale, iar studiile „au evidențiat diferențe individuale mari între performanțele ridicate și cele scăzute, adesea cu un ordin de mărime”. Ar putea fi aceasta lucrarea magică care descrie acea diferență de 10x?
Merită să citiți întregul studiu și să puneți în context acest lucru. În primul rând, aceste teste au comparat atât performanța cu pixul și hârtia, cât și cea online, folosind un IBM AN/FSQ-32. Programatorii și-au scris codul (fie pe creion/hârtie pentru a-l da unui operator, fie direct în calculator) folosind un limbaj numit JTS (un derivat ALGOL).
Au avut de rezolvat două sarcini, prima a fost să interpreteze ecuații algebrice cu o singură variabilă dependentă. Li s-a dat lucrarea lui Samelson și Bauer pentru a-i ajuta să implementeze soluția. O imagine din lucrare este prezentată mai jos: