WADDINGTONS Cada Questão Revela um Novo Jeito de Aprender

First Technical Challenge

First Technical Challenge

O que é o primeiro desafio técnico e por que a maioria dos candidatos trava nele

O primeiro desafio técnico não é uma questão de código perfeito. É um exercício que serve como filtro inicial na contratação para posições de engenharia de software, e ele mede uma coisa muito específica: se você consegue transformar um enunciado vago em algo que rode no seu computador sem destruir o seu próprio ambiente. Eu já vi gente brilhante passar direto em entrevistas de e depois falhar feio nesse primeiro filtro porque o recrutador escolheu um formato que testa paciência, não algoritmo. Vou explicar como isso funciona na prática, onde as armadilhas estão escondidas e como você pode entregar algo que passe pelo crivo sem precisar ser um gênio.

Superando o primeiro desafio técnico com confiança

O formato mais comum que eu vejo no mercado brasileiro e internacional gira em torno de três estruturas. A primeira é o problema algorítmico puro: DSA clássico, estilo LeetCode easy ou medium, sem contexto de negócio. A segunda é o desafio de domínio: você recebe um requisito funcional tipo "construa um CRUD com autenticação" e tem que entregar um repositório. A terceira, que é a que mais dá problema, é o projeto prático com dados reais ou integração com API de terceiro. O erro número um é tratar o desafio como se fosse uma entrevista ao vivo. Você recebe o enunciado e começa a codar imediatamente. Eu aprendi isso na marra em 2022 quando fiz um desafio para uma fintech. O problema pedia uma API que processasse pedidos de compra. Eu comecei a escrever código direto e gastei quatro horas refatorando uma solução que o recrutador nem ia ler com atenção porque eu tinha ignorado um requisito mínimo no enunciado: o endpoint precisava retornar status HTTP correto. Eu tinha devolvido tudo como 200 OK. A coisa simples que resolve isso na maior parte das vezes é dividir o tempo. Das quatro horas que normalmente vocês têm, reserve vinte minutos só para leitura e planejamento. Anote no papel ou num documento o que o avaliador claramente pede. Depois liste o que ele não pediu. Quando você fizer isso, percebe que a maioria dos candidatos gasta tempo implementando features que ninguém pediu porque o cérebro entra em modo automático de resolver tudo.

Existem armadilhas que quase ninguém menciona nos blogs de preparação. A primeira é a dependência de bibliotecas pesadas. Um candidato meu mandou um projeto React com trinta e cinco mil linhas no node_modules para um desafio que cabia num script vanilla de duzentas linhas. O recrutador desqualificou não pelo código, mas porque não rolava num ambiente limpo sem configuração. A segunda é a falta de instruções claras de como executar. Se o avaliador precisa rodar docker-compose up, instalar doze pacotes e configurar variáveis de ambiente só pra ver seu código, a chance dele desistir é altíssima. Sempre inclua um README com os comandos exatos. Aqui vai algo contra-intuitivo que pouca gente entende: um primeiro desafio técnico não valendo pela elegância da solução, mas pela capacidadede deixar claro o que você fez e como testar. Um projeto simples, bem estruturado, com testes unitários cobrindo o fluxo principal, bate um monólito de mil linhas sem documentação toda vez. Testes unitários funcionais valem mais que boilerplate bonito. Vou detalhar o método que eu recomendo e uso quando orientado candidatos. Primeiro, leia o enunciado três vezes. Na primeira, só entenda o contexto geral. Na segunda, destaque cada requisito funcional com cor diferente. Na terceira, identifique restrições implícitas como performance, segurança ou compatibilidade. Segundo, escolha a stack mais simples possível que resolva o problema. Não teste uma linguagem nova num desafio. Terceiro, construa o esqueleto antes de qualquer lógica. Defina rotas, modelos e interfaces primeiro. Quarto, implemente o fluxo happy path. Quinto, adicione tratamento de erro e casos extremos. Sexto, escreva o README. Sétimo, faça uma revisão final focada em coisas que um recrutador vê em trinta segundos: se roda, se tem testes, se a estrutura faz sentido.

FIRST Tech Challenge (FTC) — GeorgiaFIRST Robotics
FIRST Tech Challenge (FTC) — GeorgiaFIRST Robotics

Um exemplo concreto. Um desafio comum pede uma API REST de gerenciamento de tarefas. A maioria das pessoas vai pro banco relational e esquece de validar entrada. Eu recomendo começar com um SQLite para evitar configuração de infra, mapear os campos obrigatórios desde o início, implementar validação no nível do modelo e não só na rota, e usar uma Migration simples se o tempo permitir. Se sobrar tempo, adicione paginação. Se não sobrar, não adicione. A paginação é o recurso que mais aparece em desafios e que mais separa quem entrega algo aceitável de quem entrega algo profissional. Existe um ponto que muita gente erra na versão em português dos desafios, especialmente quando a empresa pede algo em Node.js mas o candidato vem do ecossistema Python ou Java. O problema não é a linguagem. É o padrão de nomenclatura e estrutura de pastas. Node tende a favorecer controllers e routes separados, enquanto Java vai esperar uma camada de service clara. Seguir a convenção que a empresa usa no README deles é mais importante do que aplicar Clean Architecture do jeito que você sempre fez. Também é honesto dizer onde esse tipo de desafio falha. O formato algorítmico puro, tipo os problemas da plataforma HackerRank, não prevê nada sobre habilidades do dia a dia. Resolver uma árvore binária não mostra se você sabe fazer deploy, lidar com erro de produção ou comunicar resultado pra stakeholder. Por isso o mercado tá mudando. Empresas sérias trocaram o puzzle algorítmico isolado pelo desafio prático com código aberto e revisão conjunta. Se a empresa que você está concorrendo ainda usa só coding game sem contexto, leve isso como sinal de que a cultura técnica deles pode estar defasada.

Se o primeiro desafio técnico do seu ciclo está no formato antigo de múltipla escolha ou algoritmo puro sem entrega prática, a alternativa que funciona é pedir um sample do formato novo antes de confirmar a participação. Não adianta reclamar depois. A maioria dos recrutores responde e muitas vezes ajusta. Quando não ajustam, você decide se vale o tempo investido. Outro ponto que ninguém fala é sobre o versionamento do código enviado. Eu já recebi projetos em zip sem repositório git. Isso é um aviso vermelho. O padrão do mercado é subir pro GitHub, GitLab ou Bitbucket com commits segmentados. Commits pequenos contam pontos porque mostram evolução do raciocínio. Um commit gigante com trezentas alterações é indistinguível de bagunça. Vou dar um número concreto que pode te ajudar a organizar o tempo. Um desafio de API com autenticação, CRUD completo e testes costuma levar entre uma hora e quarenta e cinco minutos se você já domina a stack, e entre três e quatro horas se estiver construindo algo do zero com tecnologias menos familiares. Se o tempo disponibilizado for menor que a sua estimativa real, corte escopo propositalmente e deixe claro no README o que saiu e por quê. Recrutador prefere honestidade técnica a feature incompleta disfarçada.

Quando eu reviso entregas de candidatos, meu checklist rápido é esse: o projeto roda com um comando? Tem pelo menos um teste passando? A estrutura de pastas reflete a divisão de responsabilidades? O README tem seção de instalação, execução e decisões técnicas? Se a resposta for sim pra tudo, o candidato passa. Se faltar uma dessas, eu faço perguntas durante a próxima entrevista para entender se foi lapso ou limitação real. Há ainda um detalhe prático sobre o primeiro desafio técnico que pode parecer óbvio mas todo mundo esquece: o tempo de submissão. Várias plataformasaceitam código via terminal e fazem build automático. Se o seu projeto depende de um serviço externo que cai durante o build, tudo quebra sem aviso. Use mocks ou dados fictícios para dependências de terceiros. Se a API do parceiro cair, sua entrega cai junto, e você perde por causa de algo que não estava sob seu controle. Outra dica que economiza tempo é manter um template base de projeto no seu computador. Não um template genérico da internet, mas um que você mesmo construiu, com lint configurado, CI básico, estrutura de pastas padronizada e testes de exemplo rodando. Esse template reduz o tempo de setup inicial de trinta minutos para três. Trinta minutos a mais ou a menos não parecem nada, mas em um dia com vários desafios encadeados eles fazem diferença.

FIRST Tech Challenge - Wikipedia
FIRST Tech Challenge - Wikipedia

Se você está começando do zero, não pula direto pro desafio de integração com microserviços. Comece com o escalão mais baixo que existe: um script que lê um arquivo e transforma em JSON, depois um servidor HTTP simples, depois uma API com banco local, só depois adicione autenticação. Cada step é um mini-desafio técnico independente. Dominar a sequência inteira é o que diferencia quem consegue entregar algo coerente de quem entrega montanha-russa de funcionalidades. Um último detalhe concreto sobre a área. Muitos candidatos brasileiros enfrentam o primeiro desafio técnico em inglês mesmo aplicando para vagas no Brasil. A língua não precisa ser perfeita, mas comentários no código e o README devem estar consistentes. Misturar português no README com inglês nos comentários gera ruído e pode ser interpretado como falta de atenção. Escolha um e mantenha. Resumindo de forma direta: o primeiro desafio técnico é um exercício de comunicação técnica disfarçado de prova de código. Entrega clara, código executável, testes básicos e README honesto superam solução complexa e incompreensível em quase todos os cenários que eu já vi. Foque nisso e pare de tentar impressionar com arquitetura que ninguém vai analisar.

Artigos Relacionados