Após aplicação para alguma vaga, e passar pela etapa de screening — processo de triar os currículos dos candidatos, buscando e selecionando aqueles que têm maior aderência à vaga — temos o momento do desafio técnico, onde normalmente é enviado um pequeno projeto para ser desenvolvido.
O objetivo desta etapa, como o próprio nome diz, é fazer uma avaliação técnica do conhecimento prático que o candidato tem, e para isso alguns pontos importantes são analisados, o qual abordarei para que você possa ser o mais assertivo possível nesta fase e consiga avançar para a próxima.
Entenda por completo o desafio proposto
- Ao receber o descritivo do projeto, separe um bom tempo para ler, entender e anotar as dúvidas.
- Faça um checklist de cada item, isso facilitará quando você estiver no momento de desenvolvimento.
- Caso tenha dúvidas, não deixe de perguntar ao recrutador, isso não é visto como algo negativo, pelo contrário, só demonstra que você leu minuciosamente o desafio.
Foque primeiramente em desenvolver tudo o que foi pedido, depois, pense em refatoração ou adição de algo que você julgue importante.
O arquivo README
Dê máxima importância ao arquivo README, ele é o white paper da sua aplicação e provavelmente “falará” por você quando o code review for realizado.
Um bom arquivo README deve responder as perguntas abaixo:
- Qual o objetivo da aplicação? O que ela propõe a resolver?
- Qual tecnologia foi utilizada?
- Qual arquitetura escolhida? E porque?
- Foi utilizado alguma biblioteca ou framework externo? Justifique o motivo do uso.
- Quais as dependências existentes?
- Como executar a aplicação?
- Como realizar os testes automatizados?
- Existe alguma documentação técnica detalhando o que foi desenvolvido?
Uma dica, é realizar o deploy do projeto em um cloud provider (existem alguns gratuitos como: Heroku, AWS free tier, GCP free trial) e informar a url no arquivo README, isso ajuda, se por algum motivo, ocorrer problemas ao executar a aplicação localmente.
Foque na qualidade, e não em quantidade
Ao iniciar a etapa de desenvolvimento, tenha em mente que o objetivo do desafio é estar o mais próximo possível de uma aplicação real que passará por code review, ferramenta de code quality e execução dos testes automatizados.
Na escolha da tecnologia e arquitetura, dê preferência a que você tem maior domínio. Neste momento não é hora para colocar em prática coisas que você está estudando e ainda não tem conhecimento completo. Prefira desenvolver uma aplicação sólida, bem estruturada e organizada usando MVC, do que tentar implementar uma arquitetura hexagonal ou qualquer outra, e violar a maioria dos princípios.
Escreva um código limpo, com nomenclatura clara das funções e variáveis, mantenha as classes pequenas e com poucas responsabilidades, funções só devem ter uma responsabilidade, caso tenha mais do que isso, isole em outras funções, observe o Coding Guidelines da tecnologia escolhida, lembre-se dos 5 princípios SOLID e também DRY, KISS, YAGNI.
A qualidade sobressai sobre a quantidade, por isso engana-se quem pensa que entregar várias features extras garantirá uma avaliação melhor. Por isso, foque na qualidade!
Testes são essenciais, ou melhor, obrigatórios!
Nunca envie um desafio técnico sem os testes automatizados!
Por mais que não esteja explícito no descritivo do projeto, assuma que os testes são obrigatórios.
Os testes garantem que as features criadas vão funcionar exatamente como é esperado, e que modificações ou implementações futuras não quebrarão de forma oculta alguma parte da aplicação. E caso quebre, você terá conhecimento e poderá realizar a correção antes de enviar para produção.
Sugiro dedicar um tempo para estudar TDD, isso te ajudará a criar os testes antes mesmo de ter todas implementações de uma aplicação finalizadas.
E lembrando: Nunca envie um desafio técnico sem os testes automatizados!
Por último, não menos importante
Como mencionei anteriormente, a idéia é entregar uma aplicação preparada para um ambiente produtivo, dito isso, temos que levar em consideração os seguintes pontos:
- Monitoramento: Sua aplicação conta com um serviço de log que permite fazer o monitoramento da mesma? É possível identificar erros facilmente
- Escalabilidade: O código desenvolvido escalará quando uma nova feature precisar ser adicionada?
- Performance: A aplicação desenvolvida está performática? O que isso quer dizer? É capaz de receber alto um volume de requisições sem gerar algum tipo de gargalo? Pequenas mudanças fazem total diferença neste item.
- Segurança: Os dados de entrada estão seguramente tratados? As saídas não estão expondo dados sensíveis?
Uma dica de leitura é o 12factor (Twelve-Factor App), que conta com 12 diretrizes sobre o desenvolvimento de software como serviço.
—
Não é receita de bolo, mas usando essas dicas você tem tudo para mandar bem nos próximos desafios.
Sigam aí, e depois me contem como foi ?