Por que módulo Magento pede especificação própria
Uma funcionalidade que parece simples no Magento encosta em várias partes da plataforma ao mesmo tempo: configuração com escopo, permissão de usuário do admin, API, e-mail transacional, várias store views, importação por planilha. Quando a especificação não fala de uma delas, o dev decide sozinho. Em geral decide pelo caminho mais curto, e cada decisão dessas volta depois como pedido de alteração.
A especificação não substitui a conversa com o dev. Ela registra o que foi combinado, para que o orçamento e o aceite da entrega sejam feitos contra o mesmo documento.
Modelo de especificação para desenvolvimento Magento
Copie as seções abaixo. Quando uma delas não se aplica, escreva “não se aplica”: isso também é informação, e evita que alguém inclua a parte por conta própria.
- Objetivo. Uma frase com o problema do negócio, não com a solução técnica.
- Regras de negócio. Numeradas, cada uma com um exemplo de valores.
- Escopo de configuração. Para cada opção nova: o nome, onde aparece em Stores > Settings > Configuration e se o valor muda por website ou por store view. Os limites de cada nível estão explicados no artigo sobre escopo global, website e store view.
- Permissões no admin. Quais papéis de usuário vão operar a funcionalidade. O módulo precisa criar recurso de ACL próprio, que aparece em System > Permissions > User Roles, na aba Role Resources.
- Telas. No admin (grid, formulário, campos obrigatórios) e na loja (produto, carrinho, checkout), com um rascunho ou print marcado.
- API e GraphQL. Se algum sistema externo, aplicativo ou vitrine separada precisa ler ou gravar esses dados.
- E-mails transacionais. Qual evento dispara, quem recebe e se o texto precisa ser editável em Marketing > Communications > Email Templates.
- Várias lojas e idiomas. O que muda em cada store view, incluindo textos que precisam de tradução.
- Importação e exportação. Se os dados entram por planilha, em System > Data Transfer > Import, ou por integração.
- Critérios de aceite. Cenários no formato Dado/Quando/Então.
- Fora do escopo. Lista explícita do que não será feito.
- Ambiente e entrega. Versão do Magento e do PHP (os mesmos dados da loja que o dev pede para orçar), onde a entrega será homologada e em que repositório o código fica.
Exemplo preenchido: brinde por faixa de valor do carrinho
Exemplo fictício, montado para este modelo; não é projeto de cliente.
Antes de especificar, confira se o nativo resolve. Pela documentação da Adobe, a ação Buy X get Y free da regra de carrinho só dá desconto quando a quantidade X+Y do mesmo produto já está no carrinho: ela não coloca um brinde lá. A ação Free Gift, que adiciona o produto, é exclusiva do Adobe Commerce, e a mesma página diz que ela não tem suporte em vitrine Luma. Numa loja Open Source com Luma, portanto, o brinde automático é desenvolvimento.
| Seção | Conteúdo |
|---|---|
| Objetivo | Aumentar o valor dos pedidos dando um brinde quando o carrinho passa de uma faixa de valor. |
| Regras | R1: subtotal igual ou acima da faixa adiciona o SKU brinde, quantidade 1, preço zero. R2: se o subtotal cair abaixo, o brinde sai. R3: vale uma faixa por carrinho, a maior atingida. R4: subtotal considerado depois dos descontos de cupom. R5: brinde sem estoque não entra e não bloqueia a compra. |
| Escopo de configuração | Ativar ou desativar: website. Faixas e SKU do brinde: website. Texto do aviso no carrinho: store view. |
| Permissões | Recurso de ACL “Brindes por faixa”, liberado para o papel Marketing. |
| Telas | Admin: grid de faixas com valor mínimo, SKU e website. Loja: aviso no carrinho com quanto falta para a faixa. |
| API e GraphQL | Nenhuma rota nova; o brinde aparece como item de preço zero onde a API já lista itens do carrinho e do pedido. |
| E-mails | Nenhum e-mail novo; o brinde aparece no e-mail de pedido como item. |
| Importação | Não se aplica. |
| Fora do escopo | Cliente escolher o brinde; brinde por categoria ou por grupo de cliente; relatório de brindes; checkout de terceiros; tema Hyvä. |
Os critérios de aceite do mesmo exemplo, no formato que dá para testar no staging sem ler código:
Cenário: carrinho atinge a faixa
Dado que a faixa do website Varejo é 300,00 e o brinde é o SKU BRINDE-01
Quando o subtotal do carrinho chega a 300,00
Então o SKU BRINDE-01 entra no carrinho com quantidade 1 e preço zero
Cenário: carrinho cai abaixo da faixa
Dado um carrinho com o brinde e subtotal de 300,00
Quando o cliente remove um item e o subtotal fica em 250,00
Então o brinde sai do carrinho e o aviso da faixa volta a aparecer
Cenário: brinde sem estoque
Dado que o SKU BRINDE-01 está sem estoque
Quando o subtotal chega a 300,00
Então nenhum brinde é adicionado
E o pedido pode ser finalizado normalmente
O que deixar escrito como fora do escopo e quanto detalhe basta
A lista de fora do escopo protege os dois lados. O dev sabe o que não precisa fazer, e você sabe, antes de começar, o que vai ser um pedido novo. No exemplo, “brinde por grupo de cliente” fora da lista é exatamente o tipo de coisa que alguém do marketing pede na semana da entrega.
Para medir o detalhe, uso uma regra: toda regra de negócio precisa virar pelo menos um cenário Dado/Quando/Então. Se você não consegue escrever o cenário, a regra ainda não está clara para você, e o dev vai completar a lacuna com uma suposição. Por outro lado, a especificação não deve dizer como programar: nome de classe, tabela ou plugin é decisão do dev, e ele responde pelo resultado nos critérios de aceite.
Mudou de ideia no meio? Registre a mudança como item novo, com a regra alterada, o cenário novo e uma nova estimativa. Mudança combinada só por mensagem some na hora da homologação. Quer uma revisão da especificação antes de mandar para orçamento? Fale comigo.
Perguntas frequentes
Preciso saber programar para escrever a especificação de um módulo Magento?
Não. A especificação descreve regras, telas, permissões e cenários de teste, que são decisões do negócio. O que ajuda é conhecer os limites de escopo do admin e conferir antes se o recurso nativo já resolve. A parte técnica fica com o dev, que pode sugerir ajustes antes do orçamento.
Quanto detalhe é detalhe demais numa especificação?
Detalhe demais é quando o documento começa a dizer como programar: nomes de classe, tabelas, plugins. Detalhe de menos é quando uma regra não vira cenário de teste. O ponto certo é cada regra com exemplo de valores e pelo menos um critério de aceite.
E se eu mudar de ideia no meio do desenvolvimento?
Registre a mudança por escrito como item novo, com a regra alterada, o cenário de aceite correspondente e uma nova estimativa do dev. Mudança combinada só em conversa costuma desaparecer na homologação, e aí ninguém sabe se a entrega está certa ou errada.
Fontes oficiais
- Create a cart price rule (Buy X get Y free e Free Gift) (Adobe Experience League)
- User roles (Role Resources) (Adobe Experience League)
- Create access control list rule (Adobe Commerce Developer)
- Site, store, and view scope (Adobe Experience League)
- Define web API services (webapi.xml) (Adobe Commerce Developer)
- Data import (Adobe Experience League)