- Enfatiza a ineficiência dos take-home assignments pedidos em entrevistas para desenvolvedores de software e o problema do desperdício de tempo dos candidatos
- No processo seletivo da Kagi Search, relata ter enfrentado exigências de tarefa excessivamente amplas e vagas
- Ao compartilhar um plano de execução concreto, diz ter recebido falta de feedback claro do gerente e uma comunicação ineficiente
- Após enviar um projeto desenvolvido com grande dedicação, sentiu injustiça ao ser rejeitado sem motivo claro e diante de mudanças nos critérios
- Compartilha alternativas para um processo de contratação melhor (como revisão de código em tempo real) e critica exigências excessivas em entrevistas com tarefa prática
Introdução
- Take-home assignment é um formato de avaliação em entrevistas para desenvolvedores de software no qual o candidato recebe um problema, implementa a solução em código e a entrega
- Este post busca apontar a irracionalidade desse método e o desperdício de tempo dos candidatos com base na tarefa e na experiência real vivida ao se candidatar à Kagi Search, uma empresa que o autor considerava bem conceituada
Candidatura à Kagi Search
- Enviou o currículo para uma vaga de desenvolvedor backend na Kagi Search
- Os requisitos da função eram os seguintes
- Experiência na construção de sistemas backend
- Domínio da linguagem Go
- Experiência em escalar e manter sistemas backend de grande porte
- Capacidade de colaboração com integrantes da equipe, como SREs
- Entendimento de tecnologias de contêiner, como Docker
Orientação da tarefa de entrevista e requisitos
- Após passar pela triagem inicial, recebeu um e-mail com as instruções do take-home assignment
- Tema da tarefa: "implementar um cliente de e-mail minimalista inspirado em terminal"
- Podia escolher entre formato de terminal ou web app
- Funções básicas de visualizar/enviar e-mails
- Backend de e-mail falso ou real (IMAP/POP etc.) à escolha
- Era obrigatório apenas tratar mensagens em plaintext; rich text não era necessário
- Entrega do projeto: repositório no GitHub, versão implantada e documentação de instalação
- Havia falta de orientação clara e a escala do projeto era considerável
- Ainda assim, decidiu fazer a tarefa por causa da reputação da empresa
Comunicação com o gerente
- Ao perguntar sobre o escopo claro da tarefa e recursos adicionais, recebeu apenas a resposta vaga de que "ficava a critério do candidato decidir o que acrescentar"
- Antes de investir tempo e esforço na tarefa, compartilhou um plano de execução concreto (proposal) e pediu retorno sobre ele, mas o processo seguiu sem feedback relevante
Proposta e plano da tarefa
- Plano de execução:
- Web app baseado em Go
- Deploy com AWS ECS Fargate e aplicação de SSL
- Integração com serviço de envio de e-mails (Postmark)
- Inclusão de login/autenticação
- Envio e recebimento de e-mails com exibição na UI
- Motivos da escolha tecnológica:
- Uso de várias tecnologias relacionadas ao papel de backend
- Construção de um sistema real com uso de ferramentas de Infra-as-Code
- Implementação de funções mais próximas de um serviço real, indo além de uma simples integração de API
- Principais elementos implementados:
- Pocketbase (backend/DB), TEMPL (template), Pulumi (IaC), Postmark (serviço de e-mail)
- Implementação de paginação, login etc.
- Stretch Goal: estabilidade, como backup e recuperação de dados
- Conclusão: havia apresentado previamente explicações e justificativas suficientes, e esperava uma análise clara e uma resposta objetiva sobre isso
Resposta do gerente e problemas de comunicação
- Recebeu apenas uma resposta curta dizendo que era uma "proposta interessante", sem análise concreta
- Não houve qualquer feedback sobre a adequação da proposta ou pedidos de melhoria
- Do ponto de vista do candidato, isso pareceu falta de respeito com o tempo investido e o esforço dedicado
Execução do projeto da tarefa
- Implementou tudo o que havia sido pedido e proposto e dedicou uma semana inteira em tempo integral
- Também enviou vídeo de demonstração do projeto, repositório no GitHub e documentação detalhada
Notificação de rejeição e feedback recebido
- Depois de receber um e-mail automático de rejeição, pediu feedback e recebeu a seguinte resposta:
- "Houve entregas de candidatos mais fortes" e "a concorrência na contratação é acirrada"
- Problemas apontados
- Se havia preferência por uma solução mais simples, isso poderia ter sido informado desde o início
- Se a proposta era insuficiente, seria possível dar feedback naquele momento
- Mesmo após a rejeição, a vaga continuava publicada, o que levou à conclusão de que não era apenas competição, mas uma exigência de consumo excessivo de tempo
- Após a entrega do projeto, os requisitos ficaram ainda mais rígidos, de modo que a solução enviada acabou elevando o próprio padrão de avaliação
Conclusão e problematização
- Esse tipo de processo é injusto para muitos candidatos e pode até trazer impacto real ao sustento de quem busca emprego
- Reforça a necessidade de recusar ou questionar exigências excessivas de tarefas não remuneradas
- Defende que há processos de contratação melhores, como revisão de código em tempo real, para substituir tarefas em formato de projeto
- A capacidade real de resolver problemas de desenvolvimento pode ser observada por meio de revisões de código síncronas ou assíncronas
- Aponta a distância entre problemas no estilo Leetcode e as exigências do trabalho real
- Faz um apelo por mudanças na cultura de esgotamento de candidatos e avaliações injustas
Sugestões para um processo seletivo melhor
- Apresenta alternativas, como revisão de código em tempo real, para avaliar a capacidade do desenvolvedor de forma mais significativa
- Defende a necessidade de mudar de processos centrados em resolver quebra-cabeças algorítmicos com timer para avaliações focadas em competência real e capacidade de resolver problemas
1 comentários
Opinião do Hacker News
Reconheço a capacidade e a paixão do candidato pelo trabalho. Só quis oferecer uma visão um pouco diferente.
"Desenvolver um cliente de e-mail inspirado em terminal para fazer alpha test com clientes" é um pedido razoável para um engenheiro de startup em estágio inicial. Mesmo que haja mais especificações, muita coisa depende do julgamento do engenheiro. O candidato parece querer certeza demais.
Ficar curioso com antecedência sobre que tipo de feedback a Kagi daria após a conclusão da tarefa não é um bom sinal. Não era uma situação em que eles poderiam dar uma resposta definitiva. Provavelmente estavam avaliando centenas ou milhares de candidaturas.
Se não era necessário esclarecer requisitos, então seria como mandar alguém "adivinhar um número de 1 a 10" para eliminar quem escolheu errado.
Não concordo com eliminar alguém por ter se esforçado na tarefa e dado um bom acabamento.
Essas tarefas ambíguas, na prática, são só mais uma forma de filtrar por "fit cultural".
A cultura de "código primeiro, feedback depois" foi a experiência mais nociva da minha carreira. Este candidato seguiu práticas modernas de software. (Sou responsável por contratação em uma empresa com mais de 1.000 engenheiros.)
Na minha última busca de emprego, também fui reprovado numa tarefa take-home muito ampla sem saber que parte era o critério de avaliação. Depois dessa experiência, passei a ter forte aversão a esse tipo de tarefa.
A empresa não deveria deixar a pessoa perder tempo; seria melhor encerrar a tarefa naquele ponto.
Nem as funcionalidades mais básicas de e-mail (como abrir mensagens) existem, e apesar de a vaga ser para engenheiro de backend, na prática foram usados produtos externos como postmark e turso, além de faltar funcionalidades básicas (formatação em texto simples, visualização, pastas etc.).
Havia recursos acessórios como painel administrativo e login, mas faltavam até estruturas mínimas de dados, como um mapa de cabeçalhos de e-mail.
Pode até ser um bom engenheiro, mas julgo que não é adequado para essa posição.
A proposta take-home também me pareceu estranhamente fora do comum.
Relendo o anúncio original, estava explícito "cliente de e-mail mínimo inspirado em terminal" e referências como aerc, mutt, himalaya. Isso é claramente uma falha de interpretação dos requisitos.
Foi pedido um cliente de e-mail em terminal ou web app com funcionalidades básicas, e eu acho que isso foi atendido.
A parte de se inspirar em ferramentas baseadas em terminal é subjetiva. Se for uma posição de backend, também acho que gastar energia demais com UI pode ser ineficiente.
Se ao menos fosse possível receber feedback, isso ajudaria no crescimento, mas muitas vezes nem isso é realisticamente viável.
Por isso fico cético com tarefas take-home. Tanto candidatos quanto contratantes precisam respeitar o tempo uns dos outros.
Com 2 a 3 horas já dá para avaliar bem um candidato. Se houvesse limite de tempo, o candidato também poderia apresentar uma solução apropriada dentro dele, e o que a empresa queria teria ficado mais claro.
Além disso, a empresa precisa informar claramente se "qualquer resposta está OK" ou se "espera a melhor resposta possível".
A intenção do take-home pode variar: passar no teste, taxa de cumprimento da missão, qualidade do código etc., e isso pode confundir o candidato.
Na verdade, há o risco de filtrar justamente pessoas ocupadas e sem tempo.
Na nossa empresa, damos apenas um problema simples de ETL e colocamos limite de 4 horas.
Também deixamos claro que tudo bem não terminar, e no follow-up fazemos code review e reservamos tempo para perguntas.
A capacidade real dá para entender nessa reunião posterior.
Diferentemente de uma tarefa presencial, em que há uma unidade de tempo justa para todos, no take-home as diferenças no tempo dedicado podem acabar prejudicando alguém.
Nesse caso, é melhor uma sessão presencial de código de 1 hora. Quando candidato e entrevistador investem o mesmo tempo, ambos respeitam melhor o valor do tempo do outro.
No vídeo de demonstração só aparece um web app comum. Foi explicitamente pedido que a solução se inspirasse em clientes de e-mail de terminal já existentes, como aerc, mutt e himalaya.
Fico curioso se deixei escapar alguma coisa.
Como a UX específica de clientes de terminal ainda é uma área sem uma "resposta certa", é bem possível que justamente isso tenha sido usado como critério de avaliação.
Acredito que, se a empresa pediu uma tarefa, deveria obrigatoriamente haver uma reunião de follow-up.
Eu já era assinante pago da Kagi, mas por causa disso estou pensando em encerrar minha conta.
Se não há nem tempo para conversar com o candidato, então a empresa nem deveria pedir a tarefa.
Depois de revisar tudo, acho que a pessoa tem direito a receber feedback.
Mas, na prática, quando se escolhe apenas uma pessoa entre dezenas de candidatos excelentes, ser reprovado não significa necessariamente "falta de capacidade".
Também existe a realidade jurídica de que uma resposta oficial para "por que vocês contrataram A e recusaram B?" muitas vezes acaba virando apenas procura por defeitos.
Muitas empresas lidam bem com isso.
Quando o mal-entendido dos requisitos é grande, a discussão em si pode acabar sendo pulada.
A empresa queria alguém autônomo e capaz de definir objetivos por conta própria.
A ambiguidade existia para ver a capacidade do candidato de explorar a resposta por vários ângulos e resolver o problema.
Como nem todo mundo se encaixa no perfil de uma empresa voltada a protótipos, algum candidato talvez tenha pensado 10 minutos e produzido o máximo possível em 60 minutos.
Mas essa capacidade de perguntar é uma qualidade muito importante em desenvolvedores. Por isso não dá para evitar ter mais expectativas e mais decepção com esse tipo de contratação.
Na verdade, o problema é a explicação ambígua.
Um grande professor faz o maior número possível de pessoas entender. Se há muitos alunos confusos, o problema é de quem elaborou a questão.
Universitários não deveriam ter de resolver koans como monges Zen.
Antes, o próprio Vlad avaliava os candidatos, e as tarefas eram desse tipo.
Com o crescimento da empresa, parece que agora outras pessoas fazem essa avaliação.
Vlad tem uma inclinação ao estilo HN e quer trabalhar com candidatos que ele considere "legais".
Por exemplo, se alguém escreve um documento de design longo dizendo "vou usar Galactor e o projeto está flop-ready", isso causa exatamente o efeito contrário.
Na exigência de ser "inspirado em terminal", existe a tendência de esperar detalhes reais de apps de terminal, como todos os atalhos de teclado e afins.
Dá para discutir se esse critério é um bom filtro, mas, se alguém entende esse contexto e tem capacidade de passar por ele, a tarefa vai parecer fácil.
Gostaria que a Kagi comunicasse melhor esse contexto. É uma pena o tempo perdido, mas espero que você encontre uma empresa mais alinhada ao seu perfil.
Uma equipe sem diversidade pode acabar batendo toda hora na mesma parede e estagnando.
Acho que isso é especialmente comum em startups e se relaciona também com o motivo de 9 em cada 10 fracassarem.
Acho injusto aplicar uma tarefa avaliada sem critérios claros.
No fim, não deixa de ser uma tarefa implícita de adivinhar "a resposta que eu tenho na cabeça".
Isso passa a impressão de pouca consideração pelas pessoas.
Numa cultura assim, não sei se todo mundo teria de investigar como agente infiltrado para descobrir.
Seria melhor se candidatos "não legais" como eu também recebessem um sinal claro e pudessem rapidamente procurar outras empresas.
Por falhas desse tipo, eu pararia a revisão.
Desde uma proposta simples de design até a tarefa de implementação, tudo foi conduzido com limite de tempo claro.
No fim, eu não fui aprovado e não me disseram o motivo exato.
Parece que havia candidatos demais, mas essa experiência me marcou emocionalmente por muito tempo. Entendo como o OP se sente.
Ainda assim, se eu fosse o responsável pela contratação, acho que também reprovaria o autor.
Startups querem pessoas que trabalhem rápido e de forma pragmática.
Já tive colegas que passavam dias mergulhados sozinhos depois de coletar opiniões ao redor, mas nesse meio-tempo os requisitos já tinham mudado, e isso não fez bem para ninguém.