De Node.js au paiement de vos impôts indépendants : entretien avec un développeur à succès
Publié: 2022-03-11Chez Toptal, nous sommes toujours à la recherche des meilleurs freelances. Mais qu'est-ce qui rend un freelance vraiment génial ? Luis Martinho, l'un de nos meilleurs développeurs, est aimé de ses clients. Nous nous sommes donc assis avec lui pour parler de travail en freelance, de technologies telles que Node.js et HTML5 en freelance, et du paiement de vos impôts.
Alors, pour commencer, comment êtes-vous devenu indépendant ? Avez-vous déjà travaillé à temps plein ?
"J'avais occupé quelques emplois à temps plein : certains d'entre eux étaient relativement corporatifs, mais le plus récent était dans un environnement de démarrage, en particulier dans l'espace SaaS d'entreprise, en créant des logiciels de gestion sexy dans le cloud. Nous avions une équipe très talentueuse et une vision très ambitieuse. Après quatre ans de croissance, nous avions un produit passionnant dans un espace passionnant, ce qui était génial, mais je n'étais pas très content. J'avais besoin d'un changement de mode de vie. Quand nous avons commencé, personnellement, je ne comprenais pas à quel point c'était difficile de « démarrer ». Ce ne sont pas seulement les heures, car vous travaillez de longues heures dans toutes sortes d'environnements et de projets ; c'est le stress, la responsabilité et les douleurs associées à la création de quelque chose de nouveau. Ce ne sont pas que des fleurs et des arcs-en-ciel. Au final, j'ai décidé que je n'étais pas co-fondateur de matériel (du moins, pas à l'époque). Mais l'expérience m'a permis de mieux comprendre le type de pression auquel sont confrontés les fondateurs de startups, et je sais que je suis devenu un meilleur développeur de logiciels indépendant grâce à cela.
Le travail à la pige ressemblait de plus en plus à la vie que je désirais : c'était l'occasion de trouver des clients et des projets intéressants tout en étant récompensé pour un travail de qualité.
J'ai commencé à chercher des emplois réguliers : d'abord dans ma ville natale, puis dans le reste du pays, puis dans le reste de l'Europe. J'ai réussi à trouver des projets intéressants, des packages de rémunération intéressants et des lieux intéressants ; mais je croyais que je pouvais tout avoir. J'ai donc commencé à me tourner vers le freelance. Et au fur et à mesure que je cherchais, le travail en freelance ressemblait de plus en plus à la vie que je souhaitais : c'était une opportunité de trouver des clients et des projets intéressants tout en étant récompensé pour un travail de qualité.
Quel a été le défi le plus difficile qui s'est présenté lors de votre transition vers le travail de développement indépendant ?
"Au départ, j'imaginais qu'un énorme changement serait la stabilité des revenus que vous attendez d'un emploi à temps plein, où vous avez une certaine somme d'argent que vous recevez toujours à la fin du mois - et vous l'obtenez, quoi qu'il arrive. Je m'attendais à ce que ce soit une préoccupation majeure car je savais qu'être indépendant signifiait que je n'aurais pas toujours de clients. Mais ce n'est pas vraiment ce qui s'est passé. De manière assez surprenante, chez Toptal, j'ai réussi à toujours avoir un flux constant de clients sans avoir à les chercher. Donc, pour être honnête, le principal défi a vraiment été d'organiser mon emploi du temps. Je n'ai vraiment pas d'heures fixes pour travailler. Je fais essentiellement mon propre emploi du temps, et je dois donc être plus discipliné qu'auparavant. J'essaie de travailler des heures plus ou moins standard : je me lève le matin, je commence à travailler, je déjeune à l'heure où tout le monde déjeune, je travaille l'après-midi, puis je dîne. J'essaie de travailler selon un horaire normal, sans passer la nuit blanche, en brûlant l'huile de minuit tous les jours. Cette discipline était un gros défi au départ.
Mais la plupart des gens voient les heures libres comme un avantage du génie logiciel indépendant. Quelle est votre opinion là-dessus?
J'ai trouvé qu'il est payant d'être discipliné parce que je finis par être beaucoup plus productif si j'ai un ensemble de routines.
« Certes, c'est un avantage. C'est cool dans le sens où si vous rencontrez des problèmes, si vous devez aider quelqu'un dans votre famille, ou si vous avez cette grande opportunité pour une activité de loisir, vous pouvez vous lancer et profiter de cette opportunité. Mais d'un autre côté, j'ai trouvé qu'il est payant d'être discipliné parce que je finis par être beaucoup plus productif si j'ai un ensemble de routines, parce que ces routines me guident essentiellement : je peux aller droit au but et en faire plus pendant ce temps. C'est bien d'avoir cette liberté, mais je pense qu'elle doit être utilisée de manière responsable.
Vos clients vous aiment. Quel est ton secret?
« En tant que développeur de logiciels indépendant, il est probablement bon d'être un peu paresseux lorsqu'il s'agit de rechercher le moyen le plus simple et le moins cher de faire quelque chose ; d'être extrêmement agacé par le travail répétitif, et donc d'améliorer continuellement votre chaîne d'outils. Par exemple, vous passez beaucoup de temps dans un terminal : vous devriez sérieusement envisager de créer des raccourcis, des alias, tout ce qui vous fait gagner du temps et vous évite de taper. En fin de compte, beaucoup de tâches que vous effectuez ne sont pas vraiment sorcieres ; ils passent juste par quelques boucles pour faire quelque chose. Si vous optimisez ces éléments et éliminez le travail répétitif, vous disposez de plus de temps pour faire de la science de fusée.
Si vous vous débarrassez du travail répétitif, vous avez plus de temps disponible pour faire la véritable science de la fusée.
Vous devez également demander à quelqu'un d'autre de gérer le salaire horaire et la facturation, d'obtenir de l'argent des clients et même d'obtenir de nouveaux clients afin que vous puissiez vous concentrer sur l'excellent travail. Et c'est absolument important. Lorsque vous êtes un développeur de logiciels indépendant, vous travaillez sur la livraison, mais aussi sur le marketing et les ventes. Et ce que vous voulez faire, et ce que vos clients veulent que vous fassiez, c'est de consacrer autant de temps à la livraison et le moins de temps au marketing, aux ventes et même aux finances. Vous devrez toujours passer du temps à chercher de nouveaux clients de développement indépendants lorsque vous travaillez pour les anciens, et ce n'est pas quelque chose que les anciens veulent - et ce n'est pas quelque chose que vous voulez. Vous voulez juste vous concentrer sur le fait de bien faire votre travail. Donc, avoir quelqu'un d'autre qui s'occupe de la facturation et de la recherche de nouveaux clients est quelque chose dont vous devriez être très heureux, et vous avez beaucoup de chance si vous le trouvez.
N'oubliez pas non plus : payez vos impôts de freelance.
Comment faites-vous pour rester motivé au quotidien ?
Ils ont le sentiment que vous êtes connecté à eux d'une manière qui ne se contente pas d'envoyer des heures facturables.
« Ce qui joue un grand rôle dans ma motivation, c'est la qualité des clients. Si possible, j'essaie d'être un peu pointilleux. Autrement dit, j'essaie d'accepter des concerts qui me motivent en termes de défi technologique, qu'il s'agisse de résoudre un problème difficile ou de travailler dans un espace intéressant. Et cela en découle en quelque sorte. Je travaille toujours avec un client en pensant que je travaille vers un objectif commun : j'essaie d'avoir une vue d'ensemble et de me voir comme faisant partie de l'équipe. Vous ne faites jamais vraiment partie de l'équipe de développement de logiciels interne ou sur site de manière émotionnelle, en particulier lorsque vous n'êtes pas au bureau, mais vous pouvez toujours vous sentir comme faisant partie de l'équipe en termes de projet global et de qualité de l'oeuvre. Et je pense que les gens de l'autre côté (le client et l'équipe client) ont l'impression qu'ils ont l'impression que vous êtes connecté à eux d'une manière que vous n'envoyez pas seulement des heures de développement facturables, vous êtes vraiment inquiet de savoir si ils réussiront ou si la qualité du travail est assez bonne.
Que recherchez-vous chez un logiciel indépendant potentiel ou un client de développement Web ?
"Généralement, je préfère les technologies plus récentes que les plus anciennes, et aussi les choses émergentes - je ne dirais pas nécessairement émergentes parce que certaines de ces choses sont actuelles, mais je préfère travailler avec quelqu'un qui crée des applications d'une seule page et utilise Backbone.js et Node.js avec Express ou un framework MVC que quelqu'un qui utiliserait le style Java Enterprise Edition.
Je suis indépendant, je préférerais de loin avoir un client qui dispose d'une solution de communication asynchrone en place. Si vous faites du télétravail, il est beaucoup plus facile d'entrer dans une équipe qui utilise quelque chose d'aussi simple qu'une liste de diffusion ou qui a des salles de chat dans Campfire ou utilise GitHub comme outil de collaboration (ce dernier fonctionne remarquablement bien). Dans l'ensemble, si le client ne capte pas d'une manière ou d'une autre le discours de la fontaine à eau, vous risquez de perdre beaucoup d'informations et de bavardages qui peuvent avoir un impact sur votre travail. »
C'est un point intéressant. D'autres conseils pour le télétravail ?
C'est plus difficile de se souvenir du gars qui n'est jamais dans le bâtiment.

« Vous devez trouver un moyen de compenser l'absence du bureau. La solution que j'ai trouvée est d'être proactif. Par exemple : analyser les journaux de validation. Lorsque vous faites du télétravail, vous devez réserver du temps pour jeter un coup d'œil et avoir une idée de ce sur quoi les autres travaillent. Si vous êtes au courant de ce qui se passe dans les standups quotidiens, notifiés via une solution de gestion de projet, c'est une bonne pratique d'essayer de trouver des indices sur ce sur quoi l'équipe travaille. Ensuite, vous êtes plus facilement intégré. C'est évidemment un effort supplémentaire de votre part - vous pourrez peut-être vous en sortir s'ils ont mis en place un très bon processus de communication, mais cela peut être un bon conseil et cela peut éviter certains problèmes. Il est plus difficile de se souvenir du gars du développement indépendant qui n'est jamais dans le bâtiment.
Quelle est la qualité la plus importante d'un freelance ?
« Vous devez être quelqu'un qui peut maintenir un équilibre fluide entre votre vie personnelle et votre travail. En tant que freelance, il est important d'être réactif. Mais être réactif finit par avoir un impact important sur votre vie personnelle. Vous n'avez pas besoin de vérifier vos e-mails tout le temps - vous pouvez simplement être averti, filtrer si c'est important ou non, puis vous pouvez simplement retourner profiter du temps avec votre famille ou autre. Vous devez être un bon sélecteur de contexte. Le changement de contexte est généralement coûteux, mais vous devez le rendre bon marché et rapide, afin que vous puissiez avoir un très haut niveau de service en étant très réactif aux urgences tout en appréciant la compagnie de vos amis et de votre famille.
Vous devez être un bon sélecteur de contexte. Le changement de contexte est généralement coûteux, mais vous devez le rendre bon marché et rapide.
Pour l'arrangement de développement indépendant habituel, vous devez savoir comment gérer vos finances de manière conservatrice. Cela ne s'est pas vraiment produit avec Toptal, étonnamment, mais il est généralement très facile de passer du festin à la famine en ce qui concerne la rémunération des développeurs de logiciels ou de sites Web, même à l'heure. Un mois, tu gagnes une tonne d'argent et du coup tu n'as plus de clients et tu n'as plus de travail. Il faut donc être discipliné : il faut avoir une idée du salaire moyen, et il faut dépenser ce montant ; tout excès doit être une sorte de coussin pour vous aider à naviguer à travers les incertitudes de faire ce genre de travail. Ce n'est vraiment pas vrai pour Toptal parce que le flux de clients a été très régulier, mais c'est toujours une bonne pratique.
En tant que pigiste, vous entreprenez un tas de projets de développement de logiciels différents tout au long de votre carrière. Alors, que faites-vous la première fois que vous avez accès à une nouvelle base de code ? Disons que c'est un milliard de lignes de code.
"J'essaierais d'être discipliné en adoptant une approche descendante. Cela signifie avoir une idée de la structure globale de la base de code. Cela semble assez évident, mais au fur et à mesure que vous essayez de comprendre le code, vous serez amené à ce sur quoi vous travaillez à ce moment précis et à la tâche spécifique que vous avez à accomplir. Cela déplacera votre attention de l'approche descendante et vous placera en bas en essayant de monter, en assemblant les pièces des parties spécifiques du code que vous regardez. Cela pourrait être préférable à court terme pour vous de corriger ce bogue spécifique ou d'ajouter cette fonctionnalité spécifique, mais à moyen terme, vous souhaiterez avoir conservé l'approche descendante. Ensuite, vous aurez une bien meilleure vue du système et de la façon dont les éléments interagissent.
Vous avez fait beaucoup de travail en amont et en aval. Pensez-vous qu'il est important pour les développeurs indépendants aujourd'hui d'avoir ces deux compétences ?
"Nan. Je vais être très honnête : je pense que vous pouvez gagner beaucoup de la spécialisation, comme si vous êtes ridiculement bon avec un ensemble ridiculement petit de technologies ; mais c'est juste un choix personnel. Je suis curieux, donc je travaille avec beaucoup de technologies différentes. Et c'est pourquoi je finis par faire du travail en freelance à la fois en front-end et en back-end.
Les technologies vont changer - ce qui est chaud aujourd'hui sera probablement ennuyeux demain ou au moins dans 6 à 12 mois.
Cela dit, je pense qu'il est crucial pour un développeur, tout au long de sa vie professionnelle, d'essayer et d'apprendre autant de technologies et de paradigmes que possible. Les technologies vont changer - ce qui est chaud aujourd'hui sera probablement ennuyeux demain ou au moins dans 6 à 12 mois - et l'une des compétences clés d'un développeur de logiciels indépendant est de saisir rapidement une nouvelle technologie ou un nouveau projet. Pour cela, cela aide vraiment si vous avez une approche systématique pour apprendre de nouvelles choses et que vous la pratiquez en apprenant au moins un nouveau langage ou cadre ou paradigme chaque année.
Vous avez fait une tonne de travail indépendant avec Rails, Django et, plus récemment, Node.js. En quoi vos expériences diffèrent-elles entre les trois ?
« Oh oh, nous allons entrer dans une guerre de religion ici. Je dirais que Node est assez différent des deux autres. Lorsque vous êtes exposé pour la première fois aux exemples Node.js, vous pourriez avoir du mal à entrer dans le paradigme piloté par les événements. C'est quelque chose qui n'est peut-être pas naturel à 100% pour quelqu'un qui travaille sur Rails tout le temps. D'autre part, si vous travaillez avec JavaScript, vous développez probablement pour le navigateur et vous êtes donc déjà familiarisé avec le paradigme événementiel. Personnellement, dans mon expérience indépendante avec Node, j'ai utilisé un framework MVC, donc je n'ai pas développé de technologie de base pour Node ; Je viens d'être un utilisateur standard d'un framework propriétaire spécifique au client (comparable à Express).
Quels sont vos outils préférés que trop peu de développeurs utilisent ?
"De tête, WebStorm de JetBrains. C'est un IDE JavaScript qui vaut vraiment la peine d'être recherché. Le nouveau studio Android sorti sur Google I/O est alimenté par le logiciel JetBrains, pas Eclipse ou autre. J'aime Eclipse, mais je m'amuse vraiment avec WebStorm. J'apprends encore beaucoup de raccourcis - et c'est une pratique qu'un bon développeur de logiciels indépendant devrait également avoir : en savoir plus sur ses outils. J'apprends encore plus sur mon IDE. WebStorm a beaucoup de raccourcis intelligents, une bonne mise en page standard, et il a également de belles propriétés ZenCoding qui vous permettent d'écrire du HTML aussi rapidement que jamais. Dans l'ensemble, c'est un bon outil.
Si un client indépendant voulait que vous fassiez un projet avec Rust ou Go, ou un nouveau langage avec lequel vous n'avez jamais travaillé, que diriez-vous ?
Peu importe à quel point vous êtes bon, il y aura toujours du temps de configuration, et cela peut être coûteux pour le client.
« J'essaie généralement d'avoir mon premier contact avec les langues en dehors du travail du client, pas sur le temps du client. Peu importe à quel point vous êtes bon, il y aura toujours du temps de configuration, et cela peut être coûteux pour le client. Cela étant dit, si le client me disait : « Ok, on est à l'aise même si tu n'y connais rien », je verrais ça comme une belle opportunité d'apprendre quelque chose de nouveau. D'un autre côté, si le client avait un emploi du temps chargé, je lui conseillerais d'embaucher quelqu'un d'autre ou d'utiliser une langue avec laquelle je serais à l'aise afin que je sache que je pourrais être productif dès le départ.
Quel est le plus grand défi technique que vous avez dû résoudre en tant que freelance ?
« Un projet HTML5 indépendant me vient à l'esprit. Creuser dans l'API HTML5 Canvas pour effectuer certaines fonctionnalités avancées de l'éditeur graphique, comme la sélection au lasso et la sélection de forme libre, où vous recadrez une partie de l'image mais omettez le reste, des calculs avec des ensembles de pixels, des choses comme ça. C'était un peu comme MS Paint utilisant HTML5 Canvas et implémentant des choses comme un pinceau : vous penseriez qu'un pinceau serait quelque chose de simple - c'est si vous dessinez simplement une ligne, mais dans ce cas, vous voulez imiter un coup de pinceau, donc J'ai dû utiliser une formule mathématique pour simuler comment un pinceau entrerait en contact avec la toile et laisserait un flou avec de l'encre.
Votre nouvelle technologie préférée avec laquelle vous avez travaillé récemment ?
"Ce que j'ai entendu à propos de Meteor est intéressant en ce sens qu'il offre un cadre complet pour le développement d'une application d'une seule page. Il gère aussi bien le back-end que le front-end. Je n'ai pas travaillé avec mais je suis curieux et impatient de l'essayer.