Da Node.js al pagamento delle tasse da freelance: intervista a uno sviluppatore di successo

Pubblicato: 2022-03-11

In Toptal, siamo sempre alla ricerca dei migliori freelance in circolazione. Ma cosa rende davvero eccezionale un freelance? Luis Martinho, uno dei nostri migliori sviluppatori, è amato dai suoi clienti, quindi ci siamo seduti con lui per parlare di freelance, tecnologie come il freelance Node.js e HTML5 e di pagare le tasse.

Quindi, per cominciare, come sei arrivato a fare la freelance? Hai mai svolto un lavoro a tempo pieno?

“Avevo svolto un paio di lavori a tempo pieno: alcuni erano relativamente aziendali, ma il più recente era in un ambiente di avvio, in particolare nello spazio SaaS aziendale, costruendo software di gestione sexy nel cloud. Avevamo una squadra di grande talento e una visione molto ambiziosa. Dopo quattro anni di crescita, avevamo un prodotto eccitante in uno spazio eccitante, il che era fantastico, ma non ero molto felice. Avevo bisogno di un cambiamento nello stile di vita. Quando abbiamo iniziato, personalmente non capivo quanto fosse difficile "avviare". Non sono solo le ore, perché lavori per molte ore in tutti i tipi di ambienti e progetti; è lo stress, la responsabilità e i dolori associati alla creazione di qualcosa di nuovo. Non sono solo fiori e arcobaleni. Alla fine, ho deciso che non ero il materiale co-fondatore (almeno, non all'epoca). Ma l'esperienza mi ha dato una comprensione molto più profonda del tipo di pressione affrontata dai fondatori di startup e so di essere diventato uno sviluppatore di software freelance migliore grazie a questo.

Il lavoro da freelance assomigliava sempre di più alla vita che desideravo: offriva l'opportunità di trovare clienti e progetti interessanti mentre veniva premiato per un lavoro di qualità.

Ho iniziato a cercare un lavoro regolare: prima nella mia città natale, poi nel resto del paese, poi nel resto d'Europa. Sono riuscito a trovare dei progetti interessanti, dei pacchetti di compensi interessanti e delle location interessanti; ma credevo di poter avere tutto. Così ho iniziato a studiare come freelance. E mentre continuavo a cercare, il freelance assomigliava sempre di più alla vita che volevo: offriva l'opportunità di trovare clienti e progetti interessanti mentre veniva ricompensato per un lavoro di qualità".

Qual è stata la sfida più difficile che si è verificata durante il passaggio al lavoro di sviluppo freelance?

“Inizialmente, immaginavo che un enorme cambiamento sarebbe stato la stabilità del reddito che ti aspetti da un lavoro a tempo pieno, in cui hai una certa somma di denaro che ottieni sempre entro la fine del mese e la ottieni, qualunque cosa accada. Mi aspettavo che fosse una delle maggiori preoccupazioni poiché sapevo che essere un libero professionista significava che non avrei sempre avuto clienti. Ma non è proprio quello che è successo—sorprendentemente, in Toptal sono riuscito ad avere sempre un flusso costante di clienti senza doverli cercare. Quindi, ad essere onesti, la sfida principale è stata davvero organizzare il mio programma. Non ho davvero nessun orario fisso per lavorare. Fondamentalmente creo il mio programma, quindi devo essere più disciplinato di prima. Cerco di lavorare a orari più o meno standard: mi sveglio la mattina, inizio a lavorare, pranzo all'ora in cui tutti gli altri pranzano, lavoro il pomeriggio e poi ceno. Cerco di lavorare secondo un programma normale, senza tirare tutta la notte, bruciando l'olio di mezzanotte tutti i giorni. Questa disciplina è stata una grande sfida all'inizio".

Ma la maggior parte delle persone vede le ore libere come un vantaggio dell'ingegneria del software freelance. Qual è la tua opinione su questo?

Ho scoperto che conviene essere disciplinati perché finisco per essere molto più produttivo se ho una serie di routine.

“Certo, è un vantaggio. È bello nel senso che se incontri qualche problema, se devi aiutare qualcuno nella tua famiglia o hai questa grande opportunità per qualche tipo di attività di svago, puoi seguirla e puoi goderti quell'opportunità. Ma d'altra parte, ho scoperto che vale la pena essere disciplinati perché finisco per essere molto più produttivo se ho una serie di routine, perché queste routine sostanzialmente mi guidano: posso andare al sodo e fare di più durante quel periodo. È bello avere quella libertà, ma penso che debba essere usata in modo responsabile”.

Gli sviluppatori di software freelance godono del vantaggio di orari flessibili e di una diversa struttura retributiva.

I tuoi clienti ti amano. Qual è il tuo segreto?

“Come sviluppatore di software freelance, è probabilmente una buona caratteristica essere un po' pigri in termini di ricerca del modo più semplice ed economico per portare a termine qualcosa; essere estremamente infastidito dal lavoro ripetitivo e quindi migliorare continuamente la catena degli strumenti. Ad esempio, trascorri molto tempo in un terminale: dovresti prendere seriamente in considerazione la creazione di scorciatoie, alias, qualsiasi cosa ti faccia risparmiare tempo e ti risparmi la digitazione. Alla fine, molti dei compiti che svolgi non sono davvero scienza missilistica; stanno solo attraversando un paio di cicli per fare qualcosa. Se ottimizzi quella roba e togli il lavoro ripetitivo, hai più tempo a disposizione per fare la vera scienza missilistica.

Se togli di mezzo il lavoro ripetitivo, hai più tempo a disposizione per fare la vera scienza missilistica.

Devi anche avere qualcun altro che gestisca la paga oraria e la fatturazione, ricevendo denaro dai clienti e persino ottenendo nuovi clienti in modo che tu possa concentrarti sul fare un ottimo lavoro. E questo è assolutamente importante. Quando sei uno sviluppatore di software freelance, lavori alla consegna, ma anche al marketing e alle vendite. E quello che vuoi fare, e quello che i tuoi clienti vogliono che tu faccia, è dedicare tanto tempo alla consegna e meno tempo al marketing, alle vendite e persino alla finanza. Dovrai sempre passare del tempo alla ricerca di nuovi clienti di sviluppo freelance quando lavori per quelli vecchi, e non è qualcosa che i vecchi vogliono, e non è qualcosa che vuoi. Vuoi solo concentrarti sul fare bene il tuo lavoro. Quindi avere qualcun altro che gestisca la fatturazione e trovi nuovi clienti è qualcosa di cui dovresti essere molto felice e sei molto fortunato se lo trovi.

Inoltre, non dimenticare: paga le tasse da freelance.

Come ti mantieni motivato ogni giorno?

Sentono che sei connesso a loro in un modo che non stai solo inviando oltre ore fatturabili.

“Ciò che gioca un ruolo fondamentale nella mia motivazione è la qualità dei clienti. Se possibile, cerco di essere un po' esigente. Cioè, cerco di accettare concerti che mi motivano in termini di sfida tecnologica, sia che si tratti di risolvere un problema difficile o di lavorare in uno spazio interessante. E in un certo senso ne consegue. Lavoro sempre con un cliente pensando di lavorare per un obiettivo comune: cerco di vedere il quadro più ampio e di vedermi parte del team. Non fai mai veramente parte del team di sviluppo software interno o in loco in modo completamente emotivo, specialmente quando sei fuori ufficio, ma puoi comunque sentirti parte del team in termini di progetto generale e qualità di il lavoro. E penso che le persone dall'altra parte (il cliente e il team del cliente) lo sentano: sentono che sei connesso a loro in un modo che non stai solo inviando ore di sviluppo fatturabili, sei davvero preoccupato se avranno successo o se la qualità del lavoro è abbastanza buona”.

Cosa cerchi in un potenziale software freelance o client di sviluppo web?

Questo sviluppatore web freelance sta valutando le sue numerose opzioni per i clienti.

"In generale, preferisco le tecnologie più recenti rispetto a quelle più vecchie e anche le cose emergenti, non direi necessariamente emergenti perché alcune di queste cose sono attuali, ma preferirei lavorare con qualcuno che crea applicazioni a pagina singola e utilizza Backbone.js e Node.js con Express o qualche framework MVC rispetto a qualcuno che utilizzerebbe lo stile Java Enterprise Edition.

Sono un freelance, preferirei di gran lunga un cliente che abbia una soluzione di comunicazione asincrona in atto. Se fai il telelavoro, è molto più facile entrare in un team che utilizza qualcosa di semplice come una mailing list o ha chat room in Campfire o utilizza GitHub come strumento di collaborazione (quest'ultimo funziona molto bene). Complessivamente, se il cliente non cattura in qualche modo il discorso del refrigeratore d'acqua, rischi di perdere molte informazioni e chiacchiere che possono influire sul tuo lavoro".

Questo è un punto interessante. Altri consigli per il telelavoro?

È più difficile ricordare il tizio che non è mai stato nell'edificio.

“Devi trovare un modo per compensare l'assenza dall'ufficio. La soluzione che ho trovato è essere proattivi. Ad esempio: analizzare i log di commit. Quando fai il telelavoro, dovresti dedicare del tempo solo per dare un'occhiata e avere un'idea su cosa stanno lavorando le altre persone. Se sei a conoscenza di ciò che sta accadendo negli standup quotidiani, notificato tramite qualche soluzione di gestione dei progetti, è una buona pratica cercare di trovare suggerimenti su ciò su cui sta lavorando il team. Quindi, sei più facilmente integrato. Questo è ovviamente uno sforzo aggiuntivo da parte tua: potresti essere in grado di uscirne se hanno un buon processo di comunicazione in atto, ma può essere un buon consiglio e può salvare alcuni problemi. È più difficile ricordare il ragazzo dello sviluppo freelance che non è mai nell'edificio".

Diventare uno sviluppatore di software freelance inizia con la comunicazione.

Qual è la qualità più importante di un libero professionista?

“Devi essere qualcuno in grado di mantenere un equilibrio fluido tra la tua vita personale e il tuo lavoro. Come libero professionista, è importante essere reattivi. Ma essere reattivi finisce per avere un grande impatto sulla tua vita personale. Non devi controllare la tua e-mail tutto il tempo: puoi semplicemente ricevere una notifica, filtrare se è importante o meno, e poi puoi semplicemente tornare a goderti il ​​tempo con la tua famiglia o altro. Devi essere un buon selettore di contesto. Il cambio di contesto è solitamente costoso, ma è necessario renderlo economico e veloce, in modo da poter disporre di uno standard di servizio molto elevato essendo molto reattivo alle emergenze ma, allo stesso tempo, godendo della compagnia di amici e familiari.

Devi essere un buon selettore di contesto. Il cambio di contesto è solitamente costoso, ma è necessario renderlo economico e veloce.

Per il solito accordo di sviluppo freelance, devi sapere come gestire le tue finanze in modo conservativo. Questo non è realmente accaduto con Toptal, sorprendentemente, ma di solito è molto facile passare dalla festa alla carestia quando si tratta di software o di paga degli sviluppatori web, anche oraria. Un mese guadagni un sacco di soldi e all'improvviso non hai clienti e non hai più lavoro. Quindi devi essere disciplinato: hai bisogno di un'idea del salario medio, e devi spendere quella cifra; tutto l'eccesso deve essere una sorta di cuscino per aiutarti a superare le incertezze di fare questo tipo di lavoro. Questo non è vero per Toptal perché il flusso di clienti è stato davvero costante, ma è comunque una buona pratica".

Come libero professionista, durante la tua carriera affronti una serie di diversi progetti di sviluppo software. Quindi, cosa fai la prima volta che ti viene concesso l'accesso a una nuova base di codice? Diciamo che è un miliardo di righe di codice.

“Cercherei di essere disciplinato nell'adozione di un approccio dall'alto verso il basso. Ciò significa avere un'idea della struttura generale della base di codice. Sembra ovvio, ma quando inizi a cercare di capire il codice, verrai guidato a ciò su cui stai lavorando in quel momento specifico e al compito specifico che hai a portata di mano. Ciò sposterà la tua attenzione dall'approccio dall'alto verso il basso e ti metterà in fondo cercando di salire, assemblando i pezzi dalle parti specifiche del codice che stai guardando. Potrebbe essere meglio a breve termine per te correggere quel bug specifico o aggiungere quella funzionalità specifica, ma a medio termine vorresti aver mantenuto l'approccio dall'alto verso il basso. Quindi, avrai una visione molto migliore del sistema e di come interagiscono i pezzi".

Essere uno sviluppatore freelance significa adottare un approccio top-down alle nuove basi di codice per iniziare in modo efficace.

Hai fatto un sacco di lavoro front-end e back-end. Pensi che sia importante per gli sviluppatori freelance oggi avere entrambi questi set di competenze?

"No. Sarò molto onesto: penso che tu possa guadagnare molto dalla specializzazione, come se fossi ridicolmente bravo con un insieme ridicolmente piccolo di tecnologie; ma è solo una scelta personale. Sono curioso, quindi lavoro con molte tecnologie diverse. Ed è per questo che finisco per lavorare come freelance sia front-end che back-end.

Le tecnologie cambieranno: ciò che è caldo oggi sarà noioso probabilmente domani o almeno tra 6-12 mesi.

Detto questo, penso che sia fondamentale per uno sviluppatore, nel corso della sua vita professionale, provare ad apprendere quante più tecnologie e paradigmi possibili. Le tecnologie cambieranno - ciò che è caldo oggi sarà noioso probabilmente domani o almeno tra 6-12 mesi - e una delle competenze chiave per uno sviluppatore di software freelance è raccogliere rapidamente una nuova tecnologia o un nuovo progetto. Per questo, è davvero d'aiuto se hai un approccio sistematico all'apprendimento di nuove cose e lo pratichi imparando almeno una nuova lingua, struttura o paradigma ogni anno".

Hai svolto un sacco di lavoro freelance con Rails, Django e, più recentemente, Node.js. In che modo le tue esperienze sono diverse tra i tre?

“Uh oh, qui entreremo in una guerra di religione. Direi che Node è abbastanza diverso dagli altri due. Quando vieni esposto per la prima volta agli esempi di Node.js, potresti avere problemi a entrare nel paradigma basato sugli eventi. È qualcosa che potrebbe non essere naturale al 100% per qualcuno che ha sempre lavorato con Rails. D'altra parte, se stai lavorando con JavaScript, probabilmente stai sviluppando per il browser e quindi hai già familiarità con il paradigma basato sugli eventi. Personalmente, nella mia esperienza da freelance con Node, ho utilizzato un framework MVC, quindi non ho sviluppato la tecnologia di base per Node; Sono appena stato un utente standard di un framework proprietario specifico del cliente (paragonabile a Express)."

Quali sono i tuoi strumenti preferiti che usano troppo pochi sviluppatori?

I freelance di Node.js devono pensare in modo diverso rispetto ai freelance di Rails.

“In cima alla mia testa, WebStorm di JetBrains. È un IDE JavaScript che vale davvero la pena cercare. Il nuovo studio Android rilasciato su Google I/O è alimentato dal software JetBrains, non da Eclipse o altro. Mi piace Eclipse, ma mi sto divertendo davvero con WebStorm. Sto ancora imparando molte scorciatoie, e questa è una pratica che dovrebbe avere anche un buon sviluppatore di software freelance: imparare di più sui loro strumenti. Sto ancora imparando di più sul mio IDE. WebStorm ha molte scorciatoie intelligenti, un buon layout standard e ha anche alcune belle proprietà ZenCoding che ti consentono di scrivere HTML più velocemente che mai. Tutto sommato, è un buon strumento”.

Se un cliente freelance volesse che tu facessi un progetto con Rust o Go, o qualche nuova lingua con cui non hai mai lavorato, cosa diresti?

Non importa quanto sei bravo, ci sarà sempre tempo di configurazione e questo può essere costoso per il cliente.

“Di solito cerco di ottenere il mio primo contatto con le lingue al di fuori del lavoro del cliente, non nell'orario del cliente: non importa quanto sei bravo, ci sarà sempre il tempo di configurazione e questo può essere costoso per il cliente. Detto questo, se il cliente mi dicesse: "Ok, siamo a nostro agio anche se non ne sai nulla", la vedrei come una grande opportunità per imparare qualcosa di nuovo. D'altra parte, se il cliente avesse un programma impegnativo, consiglierei loro di assumere qualcun altro o di usare un linguaggio con cui mi trovavo a mio agio, così sapevo che avrei potuto essere produttivo fin dall'inizio".

Qual è la più grande sfida tecnica che hai dovuto risolvere mentre lavoravi come freelance?

“Mi viene in mente un progetto HTML5 freelance. Scavare nell'API HTML5 Canvas per eseguire alcune funzionalità avanzate dell'editor grafico, come la selezione del lazo e la selezione a mano libera, in cui ritagli una parte dell'immagine ma tralascia il resto, calcoli con set di pixel, cose del genere. Era un po' come MS Paint che utilizzava HTML5 Canvas e implementava cose come un pennello: penseresti che un pennello sarebbe qualcosa di semplice, lo è se disegni solo una linea, ma in questo caso vuoi imitare un tratto di pennello, quindi Ho dovuto usare una formula matematica per simulare il modo in cui un pennello sarebbe entrato in contatto con la tela e avrebbe lasciato una sfocatura con l'inchiostro".

I freelance di HTML5 potrebbero scoprire che questa nuova tecnologia richiede un po' di tempo per abituarsi.

La tua nuova tecnologia preferita con cui hai lavorato di recente?

“Quello che ho sentito su Meteor è interessante in termini di come offrono un framework completo per lo sviluppo di un'applicazione a pagina singola. Gestisce il back-end così come il front-end. Non ci ho lavorato, ma sono curioso e desideroso di provarlo.