Desafio prático para contratar dev Magento: o que ele precisa medir
A entrevista técnica com grade de respostas mostra se a pessoa entende as decisões da plataforma. O teste mostra se ela transforma isso em código que compila, passa no deploy e pode ser mantido por outra pessoa. Uso os dois, nessa ordem, e só aplico o teste nos finalistas.
Para ser justo e comparável, o desafio precisa ser parecido com o trabalho real, fechado (o enunciado diz o que conta ponto), corrigível por critério objetivo e separado da loja: nada de produção, banco real ou tarefa que você pretende usar.
O enunciado: módulo Vendor_PrazoExtra
Pode enviar como está, ajustando os prazos se quiser:
Desafio: módulo Vendor_PrazoExtra para Magento Open Source 2.4.9
A loja quer mostrar na página de produto o prazo de envio em dias úteis: um prazo de manuseio configurado por website somado a um prazo extra informado em cada produto.
- Crie o módulo
Vendor_PrazoExtra, instalável emapp/code.- Em Stores > Configuration, o campo “Dias de manuseio”, editável no escopo padrão e por website, protegido por recurso de ACL próprio.
- Atributo de produto
prazo_extra(inteiro, opcional), criado por data patch.- Na página de produto, a frase “Envio em N dias úteis”, com N igual ao manuseio do website mais o prazo extra do produto. Sem prazo extra, vale só o manuseio.
- Na API REST,
GET /V1/products/:skudevolve o valor calculado no extension attributeprazo_envio_dias.- Pelo menos um teste unitário da regra de cálculo.
- README com instalação, decisões e o que ficou de fora.
Tempo: até 4 horas de trabalho, entregues em até 5 dias corridos, num repositório git privado. Pode deixar partes de fora se o README explicar: uma parte bem feita vale mais que tudo pela metade. Pode usar ferramenta de IA, dizendo no README onde usou.
Cada peça mede uma coisa. O campo por website mostra se a pessoa lê a configuração no escopo certo. O data patch mostra se ela muda o banco de um jeito que sobrevive ao deploy. A frase na página testa template com escape. A API testa extension attribute, que a documentação da Adobe manda preencher com plugin after nos métodos save, get e getList do repositório de produtos. O teste unitário mostra se a regra ficou numa classe própria ou espalhada pelo template.
Para conferir se o enunciado fecha, escrevi a parte de back-end (classe de cálculo, data patch, plugin e teste) sobre o código de uma loja 2.4.8-p4: o teste unitário passou no PHPUnit do projeto e o phpcs com o padrão Magento2 não apontou nenhum ERROR. O tempo total não medi em cronômetro; as 4 horas são estimativa minha, e por isso o enunciado permite deixar partes de fora.
Critérios de correção de teste Magento: o gabarito de 100 pontos
| Critério | Pontos | Como conferir |
|---|---|---|
Estrutura: registration.php, module.xml e composer.json coerentes | 15 | setup:upgrade e setup:di:compile terminam sem erro |
| Injeção de dependência: tudo pelo construtor, sem ObjectManager e sem lógica no construtor | 15 | Busca por ObjectManager; diretriz técnica 2.3 da Adobe |
Escopo: campo com showInWebsite e leitura no escopo de website | 15 | Valor diferente em dois websites muda só a página do website certo |
Data patch: classe que implementa DataPatchInterface, sem SQL solto | 15 | Atributo criado no setup:upgrade e patch registrado na tabela patch_list |
Template: saída passando por $escaper | 10 | phpcs com o padrão Magento2 sem ERROR (na versão 41 do padrão, saída sem escape já é ERROR) |
API: extension_attributes.xml e plugin after em get e getList | 10 | Chamada REST devolve prazo_envio_dias em extension_attributes |
| Teste unitário: roda, cobre produto com e sem prazo extra, sem ObjectManager | 10 | PHPUnit verde; diretriz 11.2.2 da Adobe proíbe ObjectManager em teste unitário |
| README e commits: instalação, decisões, limites, commits pequenos | 10 | Leitura |
A minha nota de corte é 70, com duas condições eliminatórias: compilação sem erro e nenhum problema de segurança, como saída sem escape. Para ler o código com mais profundidade, use o checklist de code review de módulo Magento; aqui o foco é comparar candidatos com a mesma régua.
O que não pedir num teste técnico e como aplicar sem dar acesso à loja
- Tarefa que vai para produção. Se o resultado entra na sua loja, é trabalho e se contrata como tal.
- Acesso à loja, ao banco ou ao servidor. Candidato ainda não tem contrato nem usuário próprio.
- Cópia do banco da loja. Dado de cliente não sai para avaliar ninguém.
- Algoritmo genérico sem relação com Magento: mede outra habilidade.
- Teste de vários dias ou “um tema inteiro” sem pagamento.
Para aplicar sem acesso à loja, o candidato monta o próprio ambiente local com Magento Open Source e dados de exemplo, no Docker ou no DDEV, que tem guia de instalação para Magento 2. A instalação pelo Composer pede as chaves de acesso do repositório da Adobe, geradas na conta do próprio candidato. Você recebe só o link do repositório.
Teste técnico pago ou gratuito?
Minha regra: desafio de 4 horas é pago para quem entrega, aprovado ou não. Profissional de Magento com agenda cheia tende a recusar teste longo de graça, e você corre o risco de escolher só entre quem tem tempo sobrando.
Exemplo de conta, com números hipotéticos: três finalistas, 4 horas cada, a um valor-hora combinado de R$ 150, dão R$ 1.800. Se a correção for terceirizada, 1 hora por entrega ao mesmo valor soma R$ 450, e o processo fica em R$ 2.250. Compare com o custo de descobrir no segundo mês de contrato que o dev escolhido não sabe usar escopo de configuração. Para calibrar o valor-hora, veja o que mexe na hora de programador Magento.
Perguntas frequentes
Devo pagar pelo teste técnico de desenvolvedor Magento?
Eu pago quando o desafio passa de uma ou duas horas, e este, de cerca de 4 horas, é pago. Pagar atrai quem está ocupado com clientes, mostra que o tempo do candidato tem valor e dá base para cobrar prazo e README. Combine o valor antes de enviar o enunciado, sem depender da aprovação.
Posso usar o código do teste técnico na minha loja?
Não sem contratar e combinar por escrito. Usar o código de um teste sem acordo vira trabalho não pago. Além disso, um desafio feito para avaliação não passou por especificação, homologação nem garantia. Se gostou da solução, contrate o desenvolvimento e acerte a propriedade do código no contrato.
E se o candidato usar IA no teste técnico?
O enunciado permite, desde que ele diga onde usou. A correção continua a mesma: compilação, escopo certo, patch, escape, teste e README. Na conversa depois da entrega, peça para ele explicar duas decisões do código. Quem entregou algo que não entende aparece nessa hora.
Quem não programa consegue corrigir o teste técnico?
Consegue uma parte: conferir se o README explica instalação e decisões, se os commits contam a história do trabalho e se a API devolve o campo pedido. Compilação, escopo, patch e escape pedem alguém que programe em Magento; nesse caso, pague uma correção externa usando este gabarito.
Fontes oficiais
- Adding extension attributes to entity (Adobe Commerce Developer)
- Develop data and schema patches (Adobe Commerce Developer)
- Dependency injection (Adobe Commerce Developer)
- Technical guidelines (Adobe Commerce Developer)
- Cross-site scripting (XSS) (Adobe Commerce Developer)
- PHP unit testing (Adobe Commerce Developer)
- CMS Quickstarts (Magento 2) (DDEV)