Do Node.js ao pagamento de impostos freelance: entrevista com um desenvolvedor de sucesso

Publicados: 2022-03-11

Na Toptal, estamos sempre à procura dos melhores freelancers. Mas o que torna um freelancer realmente ótimo? Luis Martinho, um de nossos principais desenvolvedores, é amado por seus clientes — então nos sentamos com ele para conversar sobre freelance, tecnologias como freelance Node.js e HTML5, e como pagar seus impostos.

Então, para começar, como você se tornou freelancer? Você já trabalhou em um emprego em tempo integral?

“Eu trabalhei em alguns empregos em tempo integral: alguns deles eram relativamente corporativos, mas o mais recente foi em um ambiente de startup, especificamente no espaço SaaS corporativo, construindo software de gerenciamento sexy na nuvem. Tínhamos uma equipe muito talentosa e uma visão muito ambiciosa. Após quatro anos de crescimento, tínhamos um produto empolgante em um espaço empolgante, o que era ótimo, mas não fiquei muito feliz. Eu precisava de uma mudança de estilo de vida. Quando começamos, eu pessoalmente não entendia o quão difícil era “começar”. Não são apenas as horas, porque você trabalha longas horas em todos os tipos de ambientes e projetos; é o estresse, a responsabilidade e as dores associadas à criação de algo novo. Nem tudo são flores e arco-íris. No final, decidi que não era material co-fundador (pelo menos, não na época). Mas a experiência me deu uma compreensão muito mais profunda do tipo de pressão enfrentada pelos fundadores de startups, e sei que me tornei um desenvolvedor de software freelance melhor por causa disso.

O freelancing parecia cada vez mais com a vida que eu queria: apresentava uma oportunidade de encontrar clientes e projetos interessantes enquanto era recompensado por um trabalho de qualidade.

Comecei a procurar empregos regulares: primeiro na minha cidade natal, depois no resto do país, depois no resto da Europa. Consegui encontrar alguns projetos interessantes, alguns pacotes de remuneração interessantes e alguns locais interessantes; mas acreditei que poderia ter tudo. Então eu comecei a olhar para freelancer. E à medida que continuei procurando, o freelancer parecia cada vez mais com a vida que eu queria: apresentava uma oportunidade de encontrar clientes e projetos interessantes enquanto era recompensado por um trabalho de qualidade.”

Qual foi o desafio mais difícil que surgiu durante sua transição para o trabalho de desenvolvimento freelance?

“Originalmente, imaginei que uma grande mudança seria a estabilidade de renda que você espera de um emprego em tempo integral, onde você tem uma certa quantia de dinheiro que sempre recebe no final do mês – e você consegue, aconteça o que acontecer. Eu esperava que isso fosse uma grande preocupação, pois sabia que ser freelancer significava que nem sempre teria clientes. Mas não foi bem isso que aconteceu – surpreendentemente, na Toptal eu sempre consegui ter um fluxo constante de clientes sem ter que procurá-los. Então, para ser honesto, o principal desafio foi realmente organizar minha agenda. Eu realmente não tenho nenhum horário definido para trabalhar. Eu basicamente faço minha própria agenda, então tenho que ser mais disciplinado do que era antes. Procuro trabalhar mais ou menos no horário normal: acordo de manhã, começo a trabalhar, almoço no horário que todo mundo almoça, trabalho à tarde e depois janto. Eu tento trabalhar em um horário normal, sem passar a noite toda, queimando o óleo da meia-noite todos os dias. Esta disciplina foi um grande desafio no início.”

Mas a maioria das pessoas vê as horas livres como um benefício da engenharia de software freelance. Qual é a sua opinião sobre isso?

Descobri que vale a pena ser disciplinado porque acabo sendo muito mais produtivo se tiver um conjunto de rotinas.

“Certamente, é um benefício. É legal no sentido de que se você tiver algum problema, se tiver que atender alguém da sua família, ou tiver essa grande oportunidade de algum tipo de lazer, você pode ir atrás e aproveitar essa oportunidade. Mas, por outro lado, descobri que vale a pena ser disciplinado porque acabo sendo muito mais produtivo se tiver um conjunto de rotinas, porque essas rotinas basicamente me guiam: posso ir direto ao ponto e fazer mais durante esse tempo. É bom ter essa liberdade, mas acho que tem que ser usada com responsabilidade.”

Desenvolvedores de software freelance desfrutam do benefício de horários flexíveis e uma estrutura de pagamento diferente.

Seus clientes te amam. Qual é o seu segredo?

“Como desenvolvedor de software freelancer, provavelmente é uma boa característica ser um pouco preguiçoso em termos de procurar a maneira mais fácil e barata de fazer algo; ficar extremamente irritado fazendo trabalho repetitivo e, assim, melhorar continuamente sua cadeia de ferramentas. Por exemplo, você passa muito tempo em um terminal: você deve considerar seriamente a criação de atalhos, aliases, qualquer coisa que economize tempo e economize digitação. No final, muitas das tarefas que você faz não são realmente ciência do foguete; eles estão apenas passando por alguns loops para fazer algo. Se você otimizar essas coisas e tirar o trabalho repetitivo do caminho, terá mais tempo disponível para fazer a ciência do foguete real.

Se você tirar o trabalho repetitivo do caminho, terá mais tempo disponível para fazer a verdadeira ciência do foguete.

Você também precisa ter outra pessoa para lidar com o pagamento e o faturamento por hora, receber dinheiro dos clientes e até conseguir novos clientes para que você possa se concentrar em fazer um ótimo trabalho. E isso é absolutamente importante. Quando você é um desenvolvedor de software freelance, está trabalhando na entrega, mas também no marketing e nas vendas. E o que você quer fazer – e o que seus clientes querem que você faça – é gastar tanto tempo na entrega e tão pouco tempo em marketing, vendas e até mesmo finanças. Você sempre terá que gastar tempo procurando novos clientes de desenvolvimento freelance quando estiver trabalhando para os antigos, e isso não é algo que os antigos querem – e não é algo que você quer. Você só quer se concentrar em fazer seu trabalho bem. Portanto, ter outra pessoa para lidar com o faturamento e encontrar novos clientes é algo com o qual você deve ficar muito feliz, e você terá muita sorte se o encontrar.

Além disso, não se esqueça: pague seus impostos freelance.”

Como você se mantém motivado no dia a dia?

Eles sentem que você está conectado a eles de uma forma que você não está apenas enviando por horas faturáveis.

“O que desempenha um papel importante na minha motivação é a qualidade dos clientes. Se possível, tento ser um pouco exigente. Ou seja, procuro aceitar gigs que me motivem em relação ao desafio tecnológico envolvido, seja resolver um problema difícil ou trabalhar em um espaço interessante. E meio que decorre disso. Eu sempre trabalho com um cliente pensando que estou trabalhando para um objetivo comum: tento ver o quadro geral e me ver como parte da equipe. Você nunca faz parte da equipe de desenvolvimento de software interna ou no local de maneira totalmente emocional, especialmente quando está fora do escritório, mas ainda pode se sentir parte da equipe em termos do projeto geral e da qualidade do o trabalho. E acho que as pessoas do outro lado (o cliente e a equipe do cliente) sentem isso - eles sentem que você está conectado a eles de uma forma que você não está apenas enviando horas de desenvolvimento faturáveis, você está realmente preocupado se eles terão sucesso ou se a qualidade do trabalho for boa o suficiente.”

O que você procura em um potencial software freelancer ou cliente de desenvolvimento web?

Este desenvolvedor web freelance está considerando suas muitas opções de clientes.

“Geralmente, prefiro tecnologias mais recentes do que as mais antigas, e também coisas emergentes – não diria necessariamente emergentes porque algumas dessas coisas são atuais, mas prefiro trabalhar com alguém fazendo aplicativos de página única e usando Backbone.js e Node.js com Express ou algum framework MVC do que alguém que estaria usando o estilo Java Enterprise Edition.

Sou freelancer, prefiro ter um cliente que tenha alguma solução de comunicação assíncrona no local. Se você estiver em teletrabalho, é muito mais fácil entrar em uma equipe que está usando algo tão simples como uma lista de e-mails ou tem salas de bate-papo no Campfire ou usa o GitHub como uma ferramenta de colaboração (esta última funciona muito bem). Ao todo, se o cliente não estiver capturando a conversa do bebedouro de alguma forma, você corre o risco de perder muitas informações e conversas que podem impactar seu trabalho.”

Esse é um ponto interessante. Alguma outra dica para teletrabalho?

É mais difícil lembrar do cara que nunca está no prédio.

“Você tem que encontrar uma maneira de compensar por estar fora do escritório. A solução que encontrei é ser proativo. Por exemplo: analise os logs de confirmação. Quando você está em teletrabalho, você deve reservar algum tempo apenas para dar uma olhada e ter uma ideia sobre o que outras pessoas estão trabalhando. Se você está ciente do que está acontecendo nas reuniões diárias, notificado por meio de alguma solução de gerenciamento de projetos, é uma boa prática tentar encontrar dicas sobre o que a equipe está trabalhando. Então, você está mais facilmente integrado. Isso é obviamente um esforço adicional do seu lado - você pode conseguir evitar isso se eles tiverem um processo de comunicação realmente bom, mas pode ser uma boa dica e pode evitar alguns problemas. É mais difícil lembrar do cara de desenvolvimento freelance que nunca está no prédio.”

Tornar-se um desenvolvedor de software freelance começa com a comunicação.

Qual é a qualidade mais importante de um freelancer?

“Você tem que ser alguém que possa manter um equilíbrio fluido entre sua vida pessoal e seu trabalho. Como freelancer, é importante ser responsivo. Mas ser responsivo acaba tendo um grande impacto em sua vida pessoal. Você não precisa ficar checando seu e-mail o tempo todo – você pode simplesmente ser notificado, filtrar se é importante ou não, e então você pode simplesmente voltar a aproveitar o tempo com sua família ou outros enfeites. Você tem que ser um bom alternador de contexto. A troca de contexto geralmente é cara, mas você precisa torná-la barata e rápida, para que possa ter um padrão de serviço muito alto, sendo muito receptivo a emergências, mas, ao mesmo tempo, desfrutando da companhia de amigos e familiares.

Você tem que ser um bom alternador de contexto. A troca de contexto geralmente é cara, mas você precisa torná-la barata e rápida.

Para o arranjo usual de desenvolvimento freelance, você precisa saber gerenciar suas finanças de forma conservadora. Isso realmente não aconteceu com a Toptal, surpreendentemente, mas geralmente é muito fácil ir do banquete à fome quando se trata de pagamento de software ou desenvolvedor web, mesmo por hora. Um mês, você ganha muito dinheiro e de repente você não tem clientes e não tem mais trabalho. Então você tem que ter disciplina: você precisa ter uma ideia do salário médio, e você precisa gastar esse valor; todo o excesso precisa ser uma espécie de almofada para ajudá-lo a navegar pelas incertezas de fazer esse tipo de trabalho. Isso realmente não é verdade para a Toptal porque o fluxo de clientes tem sido muito constante, mas ainda é uma boa prática.”

Como freelancer, você assume vários projetos de desenvolvimento de software diferentes ao longo de sua carreira. Então, o que você faz na primeira vez que recebe acesso a uma nova base de código? Vamos dizer que é um bilhão de linhas de código.

“Eu tentaria ser disciplinado ao adotar uma abordagem de cima para baixo. Isso significa ter uma ideia da estrutura geral da base de código. Isso parece meio óbvio, mas à medida que você começa a tentar entender o código, você será direcionado para o que está trabalhando naquele momento específico e para a tarefa específica que tem em mãos. Isso mudará seu foco da abordagem de cima para baixo e o colocará no fundo tentando subir, montando as peças das partes específicas do código que você está olhando. Isso pode ser melhor no curto prazo para você corrigir esse bug específico ou adicionar essa funcionalidade específica, mas no médio prazo, você desejará ter mantido a abordagem de cima para baixo. Assim, você terá uma visão muito melhor do sistema e de como as peças interagem.”

Ser um desenvolvedor freelancer significa adotar uma abordagem de cima para baixo para novas bases de código para começar de forma eficaz.

Você fez muito trabalho de front-end e back-end. Você acha importante que os desenvolvedores freelance hoje tenham essas duas habilidades?

"Não. Serei muito honesto: acho que você pode ganhar muito com a especialização, como se você fosse ridiculamente bom com um conjunto ridiculamente pequeno de tecnologias; mas é apenas uma escolha pessoal. Sou curioso, então trabalho com muitas tecnologias diferentes. E é por isso que acabo fazendo trabalhos freelance tanto de front-end quanto de back-end.

As tecnologias vão mudar - o que está quente hoje será chato provavelmente amanhã ou pelo menos em 6-12 meses.

Dito isso, acho crucial que um desenvolvedor, ao longo de sua vida profissional, tente aprender o máximo de tecnologias e paradigmas possíveis. As tecnologias vão mudar - o que está em alta hoje será chato provavelmente amanhã ou pelo menos em 6-12 meses - e uma das principais habilidades para um desenvolvedor de software freelancer é adquirir rapidamente uma nova tecnologia ou um novo projeto. Para isso, realmente ajuda se você tiver uma abordagem sistemática para aprender coisas novas e praticá-las aprendendo pelo menos uma nova linguagem, estrutura ou paradigma a cada ano.”

Você fez muito trabalho freelance com Rails, Django e, mais recentemente, Node.js. Como suas experiências diferem entre os três?

“Uh oh, nós vamos entrar em uma guerra religiosa aqui. Eu diria que o Node é bem diferente dos outros dois. Quando você é exposto pela primeira vez aos exemplos do Node.js, pode ter problemas para entrar no paradigma orientado a eventos. É algo que pode não ser 100% natural para alguém que trabalha com Rails o tempo todo. Por outro lado, se você está trabalhando com JavaScript, provavelmente está desenvolvendo para o navegador e, portanto, já está familiarizado com o paradigma orientado a eventos. Pessoalmente, em minha experiência freelancer com o Node, tenho usado um framework MVC, então não desenvolvi a tecnologia principal para o Node; Acabei de ser um usuário padrão de uma estrutura proprietária específica do cliente (comparável ao Express).”

Quais são suas ferramentas favoritas que poucos desenvolvedores estão usando?

Os freelancers do Node.js precisam pensar diferente dos freelancers do Rails.

“De cabeça, WebStorm da JetBrains. É um IDE JavaScript que realmente vale a pena procurar. O novo estúdio Android lançado no Google I/O é alimentado pelo software JetBrains, não Eclipse ou outros enfeites. Eu gosto do Eclipse, mas estou me divertindo muito com o WebStorm. Ainda estou aprendendo muitos atalhos – e essa é uma prática que um bom desenvolvedor de software freelance também deve ter: aprender mais sobre suas ferramentas. Ainda estou aprendendo mais sobre meu IDE. O WebStorm tem muitos atalhos inteligentes, um bom layout padrão e também algumas boas propriedades ZenCoding que permitem escrever HTML mais rápido do que nunca. Em suma, é uma boa ferramenta.”

Se um cliente freelancer quisesse que você fizesse um projeto com Rust ou Go, ou alguma nova linguagem com a qual você nunca trabalhou, o que você diria?

Não importa quão bom você seja, sempre haverá tempo de configuração, e isso pode ser caro para o cliente.

“Geralmente tento obter meu primeiro contato com idiomas fora do trabalho do cliente, não no horário do cliente – não importa quão bom você seja, sempre haverá tempo de configuração, e isso pode ser caro para o cliente. Dito isso, se o cliente me dissesse: “Ok, estamos à vontade mesmo que você não saiba nada sobre isso”, eu veria isso como uma ótima oportunidade para aprender algo novo. Por outro lado, se o cliente tivesse uma agenda exigente, eu o aconselharia a contratar outra pessoa ou usar uma linguagem com a qual eu me sentisse confortável para saber que poderia ser produtivo desde o início.”

Qual é o maior desafio técnico que você teve que resolver enquanto trabalhava como freelancer?

“Um projeto HTML5 freelance vem à mente. Explorando a API HTML5 Canvas para fazer algumas funcionalidades avançadas de editor gráfico, como seleção de laço e seleção de forma livre, onde você corta uma parte da imagem, mas deixa de fora o resto, cálculos com conjuntos de pixels, coisas assim. Era como o MS Paint usando HTML5 Canvas e implementando coisas como um pincel: você pensaria que um pincel seria algo simples - é se você apenas desenhasse uma linha, mas neste caso você deseja imitar uma pincelada, então Eu tive que usar uma fórmula matemática para simular como um pincel entraria em contato com a tela e deixaria um borrão com tinta.”

Freelancers de HTML5 podem achar que essa nova tecnologia leva algum tempo para se acostumar.

Sua nova tecnologia favorita com a qual você trabalhou ultimamente?

“O que tenho ouvido sobre o Meteor é interessante em termos de como eles oferecem uma estrutura completa de cabeça e ombros para o desenvolvimento de um aplicativo de página única. Ele lida com o back-end, bem como o front-end. Eu não trabalhei com isso, mas estou curioso e ansioso para experimentá-lo.”