TW Entrevista 08: Fabio Costa

Olá, Web Developers!

Hoje trazemos para vocês uma entrevista com o Fabio Costa, desenvolvedor que já trabalhou na Globo.com, no Facebook e agora está na GoDaddy.

Se você ainda não viu, a Talita Pagani foi a última entrevistada por nós.

Fale um pouco sobre você (de onde é, onde mora, o que faz, onde trabalha atualmente, etc)

Meu nome é Fabio Miranda Costa, sou natural de Natal/RN e moro atualmente em Newark na California.

Continuo trabalhando como Engenheiro de Front End, atualmente na GoDaddy no escritório de Sunnyvale, liderando tecnicamente um dos times que mantém a ferramenta de Construção de Websites.

Desenvolvedor Front-end Pleno
Formação: Desenvolvedor Front-end Pleno
HTML, CSS e JavaScript são a base de toda a web. Tudo o que você está vendo aqui agora depende deste tripé. Nesta formação vamos conhecer assuntos mais avançados do HTML5, CSS3 e JavaScript, conhecer o NPM, trabalhar com o RxjS (base do framework Angular), testes com Jasmine e uma pequena introdução ao TypeScript.
CONHEÇA A FORMAÇÃO

Quando e como você começou a se interessar pela área?

Eu desde pequeno sempre fui fascinado por jogos de computador, tenho fotos jogando video game aos 2 anos.

Depois meu pai comprou um computador com monitor monocromado, com fundo preto e cor verde, onde lembro que jogava “Prince of Persia”.

Continuei jogando no computador por bastante tempo, sempre acompanhando as novidades na área. Com essa paixão, pra mim foi fácil decidir que queria trabalhar com alguma coisa relacionada a computadores, então acabei fazendo o curso de Engenharia da Computação na UFRN (2004-2008), e ao fazer meu primeiro “hello world” durante o curso me apaixonei de cara por programação.

Durante o curso ainda fiquei bastante em dúvida se queria trabalhar mais com programação de hardware ou de software, mas ao ter mais contato com programação web e com Front End, que era uma área que estava nascendo com muita força, acabei partindo para o Front End web.

Programar para o Front End é bem mais visual e requer gosto por design também.
Acho que foram esses pontos e meu gosto por geometria que me levaram a querer cada vez mais me aprofundar na área.

Como foi seu primeiro trabalho na área?

Por volta de 2005, eu ainda estava na Universidade, meu pai e 2 tios tinham um restaurante e eles precisavam de um website.

Após ter mais contato com programação e entender melhor como funciona Java e C, achei que criar o site do restaurante seria uma boa forma de aprender linguagens de programação mais modernas.

Com esse objetivo, ao ficar de férias, lembro que ficava bom tempo no meu quarto fazendo o site, era tudo muito novo pra mim.

Meu primo Renato fez o design do site e eu fiz a programação.

Na época a linguagem PHP era a escolha óbvia para a Web, então tive que aprender a linguagem enquanto fazia setup do servidor. Nem Banco de Dados usei porque era muito complicado 😂.

Ter tido a oportunidade de trabalhar nesse projeto foi incrível para mim, talvez ele que me puxou para trabalhar na área que trabalho hoje, e definitivamente aprendi muito enquanto trabalhei nele.

Você também fez muitas contribuições ao Mootools. Como ajudar projetos open source influenciaram em sua carreira?

Contribuir para projetos open source fizeram toda a diferença na minha carreira. Eu recebi convite para entrevista no Facebook porque trabalhei no MooTools.

O MooTools hoje não tem muita relevância, mas na época que participei ele era o “número 2”, atrás do jQuery, e certamente sua implementação era bem mais elegante e inovadora, tanto que a primeira versão da biblioteca de animação do jQuery foi baseada no moo.fx, que era a biblioteca de animação do MooTools. (https://github.com/jquery/jquery/blob/1.0a/fx/fx.js#L166-L168)

Outro projeto que ajudou em minha carreira foi o jquery-meiomask https://github.com/fabiomcosta/jquery-meiomask.

A Globo.com usou ele no CMS interno deles, e fui convidado para fazer entrevista lá por causa desse projeto. Acabei trabalhando durante 1 ano e meio na Globo.com.

Devem te perguntar muito isso, mas vamos lá: Como foi trabalhar no Facebook? Quando se está dentro de uma empresa desse porte, sente-se muita pressão e medo de fazer algo errado ou acaba sendo um trabalho como os demais?

Trabalhar no Facebook foi uma experiência incrível e certamente vai ficar marcado para sempre na minha vida.

Acho que o causa mais pressão e “medo” de fazer coisa errada normalmente é trabalhar num sistema monolítico que não tem barreiras claras entre os diferentes sistemas, que é o caso do Facebook Web, mas que não é verdade em todas outras empresas grandes.

Um exemplo de empresa que não tem esse problema é o Netflix. Fazer modificação em componentes de infra no projeto web do Facebook (o maior de todos os projetos deles) é um trabalho que exige muito teste e que tem alta chance de quebrar alguma outra parte do site.

Ao estudar entrar numa empresa, prefira empresas que tentam criar e manter pequenos sistemas. Dessa forma o “overhead” no programador é menor e fazer modificações é mais fácil/rápido por exigir menos burocracia.

Acredito que os lugares mais conhecidos por onde você passou foram Globo.com, Facebook e agora a GoDaddy. Pode comentar como era o fluxo de desenvolvimento e entregas neles?

Globo.com

Trabalhávamos em sprints de 1 semana (se não me engano) e subíamos uma nova versão sempre que necessário.

Geralmente as modificações e novas funcionalidades vinham “de cima”, iam para o nosso PM e depois para o designer que trabalhava junto ao time de engenharia, e assim nós íamos iterando nessa nova funcionalidade, dando feedback e, quando necessário, cortando escopo.

O processo de deploy de novas versões era “manual” e tinha um time que ajudava com o deploy e ajudava a monitorar problemas em produção. Lembrando que isso foi há +-6 anos, e considero esse processo relativamente simples e avançado para a época.

Facebook

Existem muitos times diferentes por lá, e trabalhei em dois que tinham perfis bem diferentes.

O primeiro era um time que era considerado uma “Agência Digital” que tinha como único cliente o próprio Facebook.

Nesse time trabalhei em alguns projetos bem tensos, com deadlines pouco flexíveis, onde tínhamos que tomar decisões muito rápido para poder entregar os projetos.

Em geral as ideias dos projetos tambem vinham “de cima”, e nós trabalhamos com os designers cortando escopo e se encaixando no deadline que havia sido definido.

O projeto que trabalhei, que mais me marcou e que teve um impacto muito grande nos usuários foi o projeto do vídeo de 10 anos do Facebook, onde criamos 1 customizado por usuário, que dava um highlight de como foi a “vida” dele no Facebook até então, mostrando suas fotos e vídeos mais relevantes.

Também trabalhei no time de infraestrutura de JavaScript, onde pude trabalhar com vários experimentos de otimização do Facebook Web e com melhorias da nossa infra de JS, sempre visando melhoria de performance no client.

Esse time nao tinha design e a forma como trabalhávamos era bem menos dinâmica e mais burocrática, pois as mudancas estavam sendo feitas em sistemas “core” do Facebook Web.

Na parte de deploy, o Facebook Web é igual para todos os times. O deploy acontece todas as terças num horário especifico com opção de fazer “merge” de código diariamente. O processo todo é um pouco complicado e não vou entrar em detalhes para não me extender demais.

Hoje em dia sei que o Facebook faz continuous deploy, ou seja, uma nova versão do Facebook Web sobe para produção a cada modificação feita por um desenvolvedor.

GoDaddy

Acabei de fazer 1 ano na GoDaddy, e desde que entrei estou trabalhando no Construtor de Websites, que é um produto voltado para usuários que têm pouca ou nenhuma experiência em programação, ou simplesmente querem fazer um site simples de forma rápida.

Na GoDaddy lidero tecnicamente o time responsável pela experiência de edição do Construtor de Websites (Editor).

Temos sprints de 2 semanas e em geral novas funcionalidades também vêm “de cima”. Nosso time, juntamente com o PM e Gerente, é responsável por priorizar essas funcionalidades.

Em geral, no nosso sprint temos um mix de tarefas “tech debt”, que visa melhorar a qualidade da nossa base de código, e tarefas para as novas funcionalidades. Gosto da forma como trabalhamos porque a comunicação funciona muito bem e cada um de nós tem uma visão muito clara do que devemos fazer.

Na parte de deploy, temos um sistema muito avançado de CICD (Continuous Integration Continuous Delivery) que gera uma nova versão do Criador de Websites para cada modificação dos desenvolvedores.

Desenvolvedor Front-end Sênior
Formação: Desenvolvedor Front-end Sênior
HTML, CSS e JavaScript são a base de toda a web. Tudo o que você está vendo aqui agora depende deste tripé. Nesta formação aprenderemos Sass, Google Analytics, empacotar nossas aplicações com Webpack, criação de aplicações Desktop com Electron, UX/UI e uma introdução aos frameworks mais utilizados no mercado: Angular, React, Vue e Ember.
CONHEÇA A FORMAÇÃO

Pergunta da comunidade: Vi que o Facebook usa, além do PHP/Hack, C, C++, Java, Python, etc. Outras também são usadas internamente, como OCaml, Haskell e Ruby. Por quê o Facebook usa tantas linguagens diferentes?

Empresas grandes tentam se policiar para não introduzir novas linguagens sem motivo, pois existe todo um trabalho extra de contratação e treinamento quando elas são introduzidas.

Mas veja que eu falei “sem motivo”. No caso específico do Facebook, tudo tem que tem um motivo plausível para acontecer.

Se um grupo de pessoas querem iniciar um projeto usando uma nova linguagem, esse grupo de pessoas deve justificar o porque e deve convencer um numero significativo de pessoas para seguir em frente.

Esse processo não é formal, acontece de forma dinâmica e faz parte da cultura da empresa.

Como é o processo de contratação para quem sonha em trabalhar em uma empresa como Facebook?

A primeira etapa envolve entrar em contato com um recrutador da empresa.

Para isso você pode se inscrever em alguma vaga através do próprio site deles, ou através de LinkedIn ou StackOverflow, dentre outros.

Outra forma, que é bem mais trabalhosa porém, que vai te deixar na frente dos outros candidatos, é chamar a atenção da empresa de alguma forma, contribuindo para projetos open-source relevantes para a empresa e se mantenha em contato com desenvolvedores dessa empresa, mostrando o que você tem feito de relevante e pedindo feedback.

Após ter o contato do recrutador e ter uma conversa informal via mensagens, ela(e) vai querer ter uma conversa informal por voz. Normalmente são perguntas simples sobre programação, somente para sentir como é seu nível de programação e como está sua comunicação em inglês.

Passando disso voce vai participar de 2 entrevistas remotas com 2 engenheiros diferentes em dias diferentes.

Nessas entrevistas o engenheiro vai compartilhar um editor de texto e vai te passar um problema de programação para que você resolva com código usando o editor compartilhado.

No caso de Front-End, normalmente são problemas relevantes a essa área, que vão refletir conhecimento em CSS, DOM, performance em JavaScript e outros.

Passando das 2 entrevistas remotas, você será entrevistado por mais 4 engenheiros, dessa vez “ao vivo”, em um dos escritórios do Facebook.

As 4 entrevistas vão acontecer no mesmo dia e todo o processo é sem custos para o candidato. Além de serem “ao vivo”, essas entrevistas também vão exigir que o candidato escreva código no quadro branco.

Minha dica para entrevistas em quadro branco é exercitar escrever código em papel e cronometrando.

A experience é muito similar. Você comeca a perceber que o grande segredo é pensar muito bem no problema antes de comecar a escrever o código, pois apagar e re-escrever código nesses meios é muito custoso com relação a tempo.

Por quê você saiu do Facebook?

Sair do Facebook foi uma das decisões mais difíceis da minha vida, mas foi necessária.

O Facebook é realmente uma empresa sensacional de trabalhar e continuo recomendando ela para amigos.

O que acontece no Facebook em especial é que para crescer internamente como engenheiro requer que você tenha um “case” ou projeto de sucesso, ou você pode crescer fazendo trabalhos mais “gerenciais”, desenvolvendo trabalhos com outros times de outras organizações dentro da empresa.

Eu não tinha um case/projeto de engenharia forte, então meu gerente começou a me colocar em projetos de escopo grande na empresa, onde eu precisava conversar com engenheiros e gerentes dos outros times envolvidos, organizando todo o esforço até chegar no resultado.

Até então eu somente tinha trabalhado junto com meu time, e quase que exclusivamente codando.

Essa mudança pra mim gerou muito stress e minha produtividade caiu muito, me sentia um pouco sozinho muitas vezes, com pouco suporte do meu gerente.

Após um certo tempo, senti que não estava sendo saudável nem produtivo para nenhuma das partes. Foi quando decidi sair da empresa.

O que você enxerga como mais desafiador no seu trabalho?

O mais desafiador no nosso trabalho é que nós somos cobrados por muitas responsabilidades, sendo nosso esforço técnico e de código apenas uma delas.

Quando chegamos em um certo nível, temos que ser referências técnicas, e temos que ser, principalmente, líderes.

Ser líder é algo que estou aprendendo diariamente em como melhorar, e que acho que não existe uma fórmula mágica.

É um trabalho contínuo de ajudar o time, removendo impedimentos, participar ativa e inteligentemente de reuniões e propor melhorias relevantes para o time.

Na GoDaddy me sinto muito bem trabalhando com meu time e com meu gerente (e superiores). Acho o ambiente de trabalho lá sensacional.

Fique Ligado!

Para seguir o Fabio Costa:

Deixe seu comentário

Graduado em Análise e Desenvolvimento de Sistemas e Pós-graduado em Projetos e Desenvolvimento de Aplicações Web. Especializado em Front End e curte desenvolvimento de jogos. Estudante de Machine Learning.