De la Node.js la plata taxelor libere profesioniste: interviu cu un dezvoltator de succes
Publicat: 2022-03-11La Toptal, căutăm mereu cei mai buni freelanceri din jur. Dar ce face un freelancer cu adevărat grozav? Luis Martinho, unul dintre dezvoltatorii noștri de top, este îndrăgit de clienții săi – așa că ne-am întâlnit cu el pentru a vorbi despre freelancing, tehnologii precum freelance Node.js și HTML5 și plata taxelor.
Deci, pentru a începe, cum ați ajuns în freelancing? Ați lucrat vreodată cu normă întreagă?
„Lucrasem câteva locuri de muncă cu normă întreagă: unele dintre ele erau relativ corporative, dar cel mai recent a fost într-un mediu de startup, în special în spațiul SaaS pentru întreprinderi, construind software de management sexy în cloud. Aveam o echipă foarte talentată și o viziune foarte ambițioasă. După patru ani de creștere, am avut un produs interesant într-un spațiu interesant, ceea ce a fost grozav, dar nu am fost foarte fericit. Aveam nevoie de o schimbare a stilului de viață. Când am început, eu personal nu am înțeles cât de greu a fost să „porniți”. Nu sunt doar orele, pentru că lucrezi ore lungi în tot felul de medii și proiecte; este stresul, responsabilitatea și durerile asociate cu crearea a ceva nou. Nu toate sunt flori și curcubee. Până la urmă, am decis că nu sunt material co-fondator (cel puțin, nu la momentul respectiv). Dar experiența mi-a oferit o înțelegere mult mai profundă a tipului de presiune cu care se confruntă fondatorii de startup-uri și știu că din această cauză am devenit un dezvoltator de software independent mai bun.
Freelancing-ul arăta din ce în ce mai mult cu viața pe care mi-am dorit-o: a reprezentat o oportunitate de a găsi clienți și proiecte interesante, în același timp fiind recompensat pentru munca de calitate.
Am început să caut locuri de muncă obișnuite: mai întâi în orașul meu natal, apoi în restul țării, apoi în restul Europei. Am reușit să găsesc niște proiecte interesante, niște pachete de compensații interesante și niște locații interesante; dar am crezut că le pot avea pe toate. Așa că am început să mă uit la freelancer. Și pe măsură ce continuam să caut, freelancing-ul arăta din ce în ce mai mult cu viața pe care mi-am dorit-o: a reprezentat o oportunitate de a găsi clienți și proiecte interesante, în timp ce era recompensat pentru munca de calitate.”
Care a fost cea mai grea provocare care a apărut în timpul tranziției dvs. la munca de dezvoltare independentă?
„Inițial, mi-am imaginat că o schimbare uriașă ar fi stabilitatea veniturilor la care te aștepți de la un loc de muncă cu normă întreagă, în care ai o anumită sumă de bani pe care o primești întotdeauna până la sfârșitul lunii – și o obții, orice s-ar întâmpla. Mă așteptam să fie o preocupare majoră, deoarece știam că a fi freelancer înseamnă că nu voi avea întotdeauna clienți. Dar nu asta s-a întâmplat cu adevărat — în mod surprinzător, la Toptal am reușit să am întotdeauna un flux constant de clienți, fără a fi nevoit să-i vânez. Deci, să fiu sinceră, principala provocare a fost într-adevăr să-mi organizez programul. Chiar nu am ore stabilite de lucru. Practic, îmi fac propriul program, așa că trebuie să fiu mai disciplinat decât eram înainte. Încerc să lucrez mai mult sau mai puțin standard: mă trezesc dimineața, încep să lucrez, iau prânzul la ora la care toți ceilalți iau masa, lucrez după-amiaza și apoi iau cina. Încerc să lucrez la un program normal, să nu trag toată nopțile, ard uleiul de la miezul nopții în fiecare zi. Această disciplină a fost o mare provocare la început.”
Dar majoritatea oamenilor văd orele libere ca pe un beneficiu al ingineriei software independente. Ce părere aveți despre asta?
Am descoperit că merită să fiu disciplinat pentru că ajung să fiu mult mai productiv dacă am un set de rutine.
„Cu siguranță, este un beneficiu. Este mișto în sensul că, dacă întâmpinați probleme, dacă trebuie să asisteți pe cineva din familia dvs. sau aveți această oportunitate grozavă pentru un fel de activitate de agrement, puteți merge după ea și vă puteți bucura de acea oportunitate. Dar, pe de altă parte, am constatat că merită să fiu disciplinat, deoarece ajung să fiu mult mai productiv dacă am un set de rutine, pentru că acele rutine practic mă ghidează: pot trece la urmărire și pot face mai multe. in acel timp. Este bine să ai această libertate, dar cred că trebuie folosită în mod responsabil.”
Clienții tăi te iubesc. Care este secretul tău?
„În calitate de dezvoltator de software independent, este probabil o trăsătură bună să fii ușor leneș în ceea ce privește căutarea celui mai simplu și ieftin mod de a face ceva; să fii extrem de enervat de a face lucrări repetitive și astfel să-ți îmbunătățești continuu lanțul de scule. De exemplu, petreceți mult timp într-un terminal: ar trebui să vă gândiți serios să creați comenzi rapide, aliasuri, orice vă economisește timp și vă scutește de tastarea. În cele din urmă, multe dintre sarcinile pe care le faci nu sunt cu adevărat știință rachetă; trec doar prin câteva bucle pentru a face ceva. Dacă optimizați aceste lucruri și eliminați munca repetitivă din drum, aveți mai mult timp disponibil pentru a face știința reală a rachetelor.
Dacă scapi de munca repetitivă din drum, ai mai mult timp disponibil pentru a face știința reală a rachetelor.
De asemenea, trebuie să aveți pe altcineva să se ocupe de plata orară și de facturare, de a obține bani de la clienți și chiar de a obține clienți noi, astfel încât să vă puteți concentra pe a face o muncă grozavă. Și asta este absolut important. Când ești un dezvoltator de software independent, lucrezi la livrare, dar și la marketing și vânzări. Și ceea ce doriți să faceți – și ceea ce doresc clienții dvs. să faceți – este să petreceți cât mai mult timp pentru livrare și cât mai puțin timp pentru marketing, vânzări și chiar finanțe. Va trebui să petreci mereu timp căutând noi clienți de dezvoltare independent atunci când lucrezi pentru cei vechi, iar asta nu este ceva ce își doresc cei vechi — și nu este ceva ce vrei tu. Vrei doar să te concentrezi pe a-ți face bine munca. Deci, ca altcineva să se ocupe de facturare și să găsească clienți noi este ceva de care ar trebui să fii foarte mulțumit și ești foarte norocos dacă îl găsești.
De asemenea, nu uitați: plătiți-vă taxele liber profesionist.”
Cum te menții motivat în fiecare zi?
Ei simt că sunteți conectat la ei într-un mod în care nu trimiteți doar ore facturabile.
„Ceea ce joacă un rol important în motivația mea este calitatea clienților. Dacă se poate, încerc să fiu pretențios. Adică încerc să accept concerte care mă motivează în ceea ce privește provocarea tehnologică implicată, fie că este vorba de rezolvarea unei probleme grele sau de lucru într-un spațiu interesant. Și cam decurge din asta. Lucrez mereu cu un client crezând că lucrez spre un obiectiv comun: încerc să văd o imagine de ansamblu și să mă văd ca parte a echipei. Nu faci niciodată parte din echipa de dezvoltare software internă sau la fața locului într-un mod emoțional, mai ales când nu ești de la birou, dar te poți simți totuși parte a echipei în ceea ce privește proiectul general și calitatea munca. Și cred că oamenii de pe cealaltă parte (clientul și echipa client) simt asta – ei simt că ești conectat cu ei într-un mod în care nu doar trimiți ore de dezvoltare facturabile, ești cu adevărat îngrijorat dacă vor reuși sau dacă calitatea muncii este suficient de bună.”
Ce cauți într-un potențial software independent sau client de dezvoltare web?
„În general, prefer tehnologiile mai recente decât cele mai vechi și, de asemenea, lucruri emergente — nu aș spune neapărat că sunt emergente, deoarece unele dintre aceste lucruri sunt actuale, dar aș prefera să lucrez cu cineva care creează aplicații pe o singură pagină și folosește Backbone.js. și Node.js cu Express sau un cadru MVC decât cineva care ar folosi stilul Java Enterprise Edition.
Sunt independent, aș prefera să am un client care are o soluție de comunicare asincronă. Dacă faci telecommuting, este mult mai ușor să intri într-o echipă care folosește ceva la fel de simplu ca o listă de corespondență sau are camere de chat în Campfire sau folosește GitHub ca instrument de colaborare (acest ultim funcționează remarcabil de bine). În total, dacă clientul nu captează într-un fel discuția de la răcitorul de apă, riscați să pierdeți o mulțime de informații și discuții care vă pot afecta munca.”
Acesta este un punct interesant. Alte sfaturi pentru telecommuting?
E mai greu să-ți amintești de tipul care nu e niciodată în clădire.
„Trebuie să găsești o modalitate de a compensa pentru lipsa de la birou. Soluția pe care am găsit-o este să fiu proactiv. De exemplu: analizați jurnalele de comitere. Când faceți telecommuting, ar trebui să vă rezervați ceva timp doar pentru a vă uita și a vă face o idee despre la ce lucrează alți oameni. Dacă sunteți conștient de ceea ce se întâmplă în standup-urile zilnice, notificat prin intermediul unei soluții de management de proiect, este o practică bună să încercați să găsiți indicii despre ceea ce lucrează echipa. Apoi, ești mai ușor de integrat. Acesta este, evident, un efort suplimentar din partea ta — s-ar putea să nu mai faci asta dacă au un proces de comunicare foarte bun, dar poate fi un sfat bun și poate salva unele probleme. Este mai greu să-ți amintești de tipul freelance care nu este niciodată în clădire.”

Care este cea mai importantă calitate a unui freelancer?
„Trebuie să fii cineva care poate menține un echilibru fluid între viața personală și munca ta. Ca freelancer, este important să fii receptiv. Dar a fi receptiv ajunge să aibă un impact mare asupra vieții tale personale. Nu trebuie să vă verificați e-mailul tot timpul – puteți doar să primiți notificări, să filtrați dacă este important sau nu și apoi puteți să vă întoarceți la petrecerea timpului cu familia sau altceva. Trebuie să fii un bun schimbător de context. Schimbarea contextului este de obicei costisitoare, dar trebuie să o faci ieftină și rapidă, astfel încât să poți avea un standard foarte înalt de servicii, fiind foarte receptiv la urgențe, dar, în același timp, bucurându-te de compania prietenilor și a familiei.
Trebuie să fii un bun schimbător de context. Comutarea contextului este de obicei costisitoare, dar trebuie să o faci ieftină și rapidă.
Pentru aranjamentul obișnuit de dezvoltare independentă, trebuie să știi să-ți gestionezi finanțele conservator. Acest lucru nu s-a întâmplat cu adevărat cu Toptal, în mod surprinzător, dar de obicei este foarte ușor să treci de la sărbătoare la foamete când vine vorba de plata pentru software sau pentru dezvoltatori web, chiar și pe oră. Într-o lună, faci o tonă de bani și dintr-o dată nu ai clienți și nu mai ai de lucru. Deci trebuie să fii disciplinat: ai nevoie de o idee despre salariul mediu și trebuie să cheltuiești acea sumă; tot excesul trebuie să fie un fel de pernă care să te ajute să treci prin incertitudinile de a face acest tip de muncă. Acest lucru nu este chiar atât de adevărat pentru Toptal, deoarece fluxul de clienți a fost cu adevărat constant, dar este încă o practică bună.”
În calitate de liber profesionist, ai o mulțime de proiecte diferite de dezvoltare de software de-a lungul carierei tale. Deci, ce faci prima dată când ți se oferă acces la o nouă bază de cod? Să spunem că este un miliard de linii de cod.
„Aș încerca să fiu disciplinat în privința adoptării unei abordări de sus în jos. Aceasta înseamnă să vă simțiți cu privire la structura generală a bazei de cod. Pare ceva evident, dar pe măsură ce începi să înțelegi codul, vei fi condus către ceea ce lucrezi în acel moment specific și sarcina specifică pe care o ai la îndemână. Acest lucru vă va muta atenția de la abordarea de sus în jos și vă va pune în partea de jos încercând să mergeți în sus, adunând piesele din părțile specifice ale codului la care vă uitați. Ar putea fi mai bine pe termen scurt pentru a remedia acel bug specific sau pentru a adăuga acea funcționalitate specifică, dar pe termen mediu, ți-ai dori să fi păstrat abordarea de sus în jos. Apoi, veți avea o vedere mult mai bună asupra sistemului și a modului în care piesele interacționează.”
Ați făcut multă muncă de front și back-end. Crezi că este important ca dezvoltatorii independenți de astăzi să aibă ambele seturi de abilități?
"Nu. O să fiu foarte sincer: cred că poți câștiga foarte mult din specializare, de parcă ești ridicol de bun cu un set ridicol de mic de tehnologii; dar este doar o alegere personală. Sunt curios, așa că lucrez cu o mulțime de tehnologii diferite. Și de aceea ajung să fac atât muncă independentă front-end, cât și back-end.
Tehnologiile se vor schimba — ceea ce este cald astăzi va fi plictisitor probabil mâine sau cel puțin peste 6-12 luni.
Acestea fiind spuse, cred că este crucial pentru un dezvoltator, de-a lungul vieții sale profesionale, să încerce să învețe cât mai multe tehnologii și paradigme posibil. Tehnologiile se vor schimba — ceea ce este de actualitate astăzi va fi plictisitor, probabil mâine sau cel puțin peste 6-12 luni — și una dintre seturile de abilități cheie pentru un dezvoltator de software independent este să adopte rapid o nouă tehnologie sau un nou proiect. Pentru asta, chiar ajută dacă ai o abordare sistematică a învățării lucrurilor noi și o exersezi învățând cel puțin o nouă limbă, un cadru sau o paradigmă în fiecare an.”
Ați lucrat în mod independent cu Rails, Django și, mai recent, Node.js. Cum au diferit experiențele tale între cei trei?
„Uh oh, vom intra într-un război religios aici. Aș spune că Node este destul de diferit față de celelalte două. Când sunteți expus pentru prima dată la exemplele Node.js, este posibil să aveți dificultăți de a intra în paradigma bazată pe evenimente. Este ceva care s-ar putea să nu fie 100% natural pentru cineva care a lucrat la Rails tot timpul. Pe de altă parte, dacă lucrați cu JavaScript, probabil că dezvoltați pentru browser și, prin urmare, sunteți deja familiarizat cu paradigma bazată pe evenimente. Personal, în experiența mea independentă cu Node, am folosit un cadru MVC, așa că nu am dezvoltat tehnologia de bază pentru Node; Tocmai am fost un utilizator standard al unui cadru proprietar specific clientului (comparabil cu Express).”
Care sunt instrumentele tale preferate pe care prea puțini dezvoltatori le folosesc?
„Din capul meu, WebStorm de la JetBrains. Este un IDE JavaScript care chiar merită căutat. Noul studio Android lansat la Google I/O este alimentat de software-ul JetBrains, nu de Eclipse sau altceva. Îmi place Eclipse, dar mă distrez cu WebStorm. Încă învăț o mulțime de comenzi rapide – și aceasta este o practică pe care ar trebui să o aibă și un bun dezvoltator de software independent: să învăț mai multe despre instrumentele lor. Încă învăț mai multe despre IDE-ul meu. WebStorm are o mulțime de comenzi rapide inteligente, un aspect standard bun și, de asemenea, are câteva proprietăți ZenCoding frumoase care vă permit să scrieți HTML la fel de repede ca întotdeauna. Una peste alta, este un instrument bun.”
Dacă un client independent și-ar dori să faci un proiect cu Rust sau Go, sau un limbaj nou cu care nu ai lucrat niciodată, ce ai spune?
Indiferent cât de bun ai fi, va exista întotdeauna timp de configurare, iar asta poate fi costisitor pentru client.
„De obicei, încerc să iau primul contact cu limbile în afara serviciului clientului, nu la timpul clientului – indiferent cât de bun ai fi, va exista întotdeauna timp de configurare, iar asta poate fi costisitor pentru client. Acestea fiind spuse, dacă clientul mi-ar spune: „Ok, ne simțim confortabil chiar dacă nu știi nimic despre asta”, aș vedea asta ca pe o oportunitate grozavă de a învăța ceva nou. Pe de altă parte, dacă clientul avea un program pretențios, l-aș sfătui să angajeze pe altcineva sau să folosească o limbă cu care să mă simt confortabil, astfel încât să știu că pot fi productiv de la început.”
Care este cea mai mare provocare tehnică pe care ai trebuit să o rezolvi în timp ce lucrezi independent?
„Îmi vine în minte un proiect HTML5 independent. Sapă în API-ul HTML5 Canvas pentru a face unele funcționalități avansate ale editorului grafic, cum ar fi selecția lasso și selecția în formă liberă, în care decupați o parte a imaginii, dar lăsați deoparte restul, calcule cu seturi de pixeli, lucruri de genul ăsta. A fost un fel ca MS Paint folosind HTML5 Canvas și implementând lucruri precum o pensulă: ai crede că o perie ar fi ceva simplu - este doar dacă ai trasa o linie, dar în acest caz vrei să imiteți o lovitură de pensulă, deci A trebuit să folosesc o formulă matematică pentru a simula modul în care o pensulă intra în contact cu pânza și lasă o neclaritate cu cerneala.”
Noua ta tehnologie preferată cu care ai lucrat în ultima vreme?
„Ceea ce am auzit despre Meteor este interesant în ceea ce privește modul în care oferă un cadru complet de tip cap și umeri pentru dezvoltarea unei aplicații cu o singură pagină. Se ocupă atât de back-end, cât și de front-end. Nu am lucrat cu el, dar sunt curioasă și mâncărime să-l încerc.”