9 min leitura • Guide 57 of 877
Criando User Stories Acionáveis
Uma user story bem escrita é a diferença entre um desenvolvedor fazendo perguntas esclarecedoras por dias e iniciar trabalho produtivo imediatamente. Este guia cobre o framework completo para criar user stories verdadeiramente acionáveis—claras o suficiente para codificar, pequenas o suficiente para completar em um sprint, e valiosas o suficiente para importar aos usuários.
A Anatomia de Stories Acionáveis
O que torna uma story acionável:
| Elemento | Propósito | Exemplo |
|---|---|---|
| Papel usuário | Quem se beneficia | "Como gerente de projeto..." |
| Ação | O que querem fazer | "...quero exportar relatórios..." |
| Benefício | Por que importa | "...para compartilhar progresso com stakeholders" |
| Critérios aceitação | Definição de pronto | Declarações Given/When/Then |
| Tamanho | Completável no sprint | 1-8 story points tipicamente |
O Formato de User Story
Template Padrão
ESTRUTURA USER STORY:
┌─────────────────────────────────────────────────────────────┐
│ TÍTULO: [Verbo] + [Objeto] + [Contexto] │
│ Exemplo: "Exportar Relatório Sprint para PDF" │
├─────────────────────────────────────────────────────────────┤
│ │
│ USER STORY: │
│ Como [tipo de usuário], │
│ Quero [realizar ação], │
│ Para [alcançar benefício]. │
│ │
│ EXEMPLO: │
│ Como gerente de projeto, │
│ Quero exportar meu relatório de sprint como PDF, │
│ Para poder compartilhar progresso com stakeholders │
│ que não têm acesso ao GitScrum. │
│ │
├─────────────────────────────────────────────────────────────┤
│ CRITÉRIOS DE ACEITAÇÃO: │
│ │
│ ✓ Dado que estou na página Relatório Sprint │
│ Quando clico em "Exportar para PDF" │
│ Então um PDF baixa com todos os dados visíveis │
│ │
│ ✓ Dado que o relatório tem gráficos │
│ Quando exporto para PDF │
│ Então os gráficos renderizam corretamente │
│ │
│ ✓ Dado que o sprint tem 100+ tarefas │
│ Quando exporto para PDF │
│ Então a exportação completa em 30 segundos │
│ │
├─────────────────────────────────────────────────────────────┤
│ NOTAS TÉCNICAS (opcional): │
│ - Usar endpoint de dados do relatório existente │
│ - Biblioteca PDF: jsPDF ou similar │
│ - Incluir logo empresa das configurações │
│ │
├─────────────────────────────────────────────────────────────┤
│ ESTIMATIVA: 5 story points │
│ PRIORIDADE: Média │
│ LABELS: Feature, Relatórios, Sprint-24 │
│ │
└─────────────────────────────────────────────────────────────┘
Os Critérios INVEST
Avaliando Qualidade da Story
CHECKLIST INVEST:
┌─────────────────────────────────────────────────────────────┐
│ I - INDEPENDENTE │
├─────────────────────────────────────────────────────────────┤
│ Pode ser desenvolvida sem depender de outras stories │
│ │
│ ❌ RUIM: "Como usuário, quero que o botão login funcione" │
│ (depende de sistema auth, gestão sessões, etc.) │
│ │
│ ✅ BOM: "Como usuário, quero fazer login com email/senha" │
│ (feature completa, autocontida) │
│ │
├─────────────────────────────────────────────────────────────┤
│ N - NEGOCIÁVEL │
├─────────────────────────────────────────────────────────────┤
│ Detalhes podem ser discutidos e refinados com o time │
│ │
│ ❌ RUIM: "Implementar login exatamente como wireframe v2.3" │
│ (muito prescritivo, sem espaço para melhorar) │
│ │
│ ✅ BOM: "Usuários precisam acesso seguro e rápido" │
│ (focado em resultado, implementação negociável) │
│ │
├─────────────────────────────────────────────────────────────┤
│ V - VALIOSA │
├─────────────────────────────────────────────────────────────┤
│ Entrega valor ao usuário ou negócio (não só técnico) │
│ │
│ ❌ RUIM: "Refatorar pool conexões banco de dados" │
│ (tarefa técnica, sem valor usuário declarado) │
│ │
│ ✅ BOM: "Melhorar tempo carregamento de 3s para menos de 1s"│
│ (usuário experimenta carregamento mais rápido) │
│ │
├─────────────────────────────────────────────────────────────┤
│ E - ESTIMÁVEL │
├─────────────────────────────────────────────────────────────┤
│ Time pode estimar esforço com confiança razoável │
│ │
│ ❌ RUIM: "Integrar com analytics terceiros" │
│ (muito vago - qual provedor? quais dados?) │
│ │
│ ✅ BOM: "Enviar eventos page view para Google Analytics 4" │
│ (específico, escopo conhecido) │
│ │
├─────────────────────────────────────────────────────────────┤
│ S - PEQUENA (Small) │
├─────────────────────────────────────────────────────────────┤
│ Completável em um único sprint (idealmente 1-3 dias trabalho)│
│ │
│ ❌ RUIM: "Como usuário, quero um dashboard completo" │
│ (muito grande - semanas de trabalho) │
│ │
│ ✅ BOM: "Como usuário, quero ver meu widget contador tarefas"│
│ (um componente, poucos dias) │
│ │
├─────────────────────────────────────────────────────────────┤
│ T - TESTÁVEL │
├─────────────────────────────────────────────────────────────┤
│ Critérios claros para determinar quando story está pronta │
│ │
│ ❌ RUIM: "Fazer a UI mais intuitiva" │
│ (subjetivo, sem pass/fail claro) │
│ │
│ ✅ BOM: "Usuário pode completar checkout em 3 cliques ou menos"│
│ (mensurável, verificável) │
│ │
└─────────────────────────────────────────────────────────────┘
Escrevendo Critérios de Aceitação
Formato Given-When-Then
TEMPLATE CRITÉRIOS ACEITAÇÃO:
┌─────────────────────────────────────────────────────────────┐
│ ESTRUTURA: │
│ │
│ Dado [precondição/contexto] │
│ Quando [ação é realizada] │
│ Então [resultado esperado] │
│ │
├─────────────────────────────────────────────────────────────┤
│ EXEMPLO STORY: Reset Senha │
├─────────────────────────────────────────────────────────────┤
│ │
│ CAMINHO FELIZ: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Dado que estou na página login ││
│ │ Quando clico "Esqueci senha" ││
│ │ Então vejo formulário para inserir meu email ││
│ │ ││
│ │ Dado que inseri meu email registrado ││
│ │ Quando clico "Enviar link reset" ││
│ │ Então vejo mensagem confirmação ││
│ │ E recebo email com link reset em 2 minutos ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ CASOS ERRO: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Dado que insiro email não registrado ││
│ │ Quando clico "Enviar link reset" ││
│ │ Então vejo mesma confirmação (segurança) ││
│ │ ││
│ │ Dado que tenho link reset com mais de 24 horas ││
│ │ Quando clico no link ││
│ │ Então vejo mensagem "Link expirado" ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Técnicas Divisão Stories
Fatiamento Vertical
DIVIDINDO STORIES GRANDES:
┌─────────────────────────────────────────────────────────────┐
│ ANTES: Story tamanho épico (muito grande) │
├─────────────────────────────────────────────────────────────┤
│ │
│ "Como usuário, quero gerenciar configurações meu perfil" │
│ Estimativa: 40 pontos (grande demais!) │
│ │
├─────────────────────────────────────────────────────────────┤
│ DEPOIS: Fatias verticais (tamanho correto) │
├─────────────────────────────────────────────────────────────┤
│ │
│ Story 1: Ver Perfil (3 pts) │
│ "Como usuário, quero ver minha info perfil atual" │
│ │
│ Story 2: Editar Nome (2 pts) │
│ "Como usuário, quero mudar meu nome de exibição" │
│ │
│ Story 3: Upload Avatar (5 pts) │
│ "Como usuário, quero fazer upload de foto de perfil" │
│ │
│ Story 4: Mudar Email (5 pts) │
│ "Como usuário, quero mudar email com verificação" │
│ │
│ Story 5: Mudar Senha (3 pts) │
│ "Como usuário, quero mudar minha senha" │
│ │
│ TOTAL: 26 pontos em 7 stories │
│ Cada story: Deployável, testável, valiosa │
│ │
└─────────────────────────────────────────────────────────────┘
Padrões de Divisão
PADRÕES DIVISÃO STORIES:
┌─────────────────────────────────────────────────────────────┐
│ 1. POR PASSOS WORKFLOW │
├─────────────────────────────────────────────────────────────┤
│ Original: "Processo checkout usuário" │
│ Divisão: │
│ ├── Adicionar itens ao carrinho │
│ ├── Inserir endereço entrega │
│ ├── Selecionar método entrega │
│ ├── Inserir info pagamento │
│ └── Revisar e confirmar │
│ │
├─────────────────────────────────────────────────────────────┤
│ 2. POR OPERAÇÕES (CRUD) │
├─────────────────────────────────────────────────────────────┤
│ Original: "Gerenciar projetos" │
│ Divisão: │
│ ├── Ver lista de projetos │
│ ├── Criar novo projeto │
│ ├── Editar detalhes projeto │
│ ├── Arquivar projeto │
│ └── Deletar projeto │
│ │
├─────────────────────────────────────────────────────────────┤
│ 3. POR TIPOS DE DADOS │
├─────────────────────────────────────────────────────────────┤
│ Original: "Importar dados de arquivo" │
│ Divisão: │
│ ├── Importar formato CSV │
│ ├── Importar formato Excel │
│ ├── Importar formato JSON │
│ └── Importar do Google Sheets │
│ │
└─────────────────────────────────────────────────────────────┘
Anti-Padrões Comuns
Stories para Evitar
ANTI-PADRÕES USER STORIES:
┌─────────────────────────────────────────────────────────────┐
│ ❌ TAREFA TÉCNICA DISFARÇADA DE STORY │
├─────────────────────────────────────────────────────────────┤
│ │
│ RUIM: "Como desenvolvedor, quero refatorar módulo auth" │
│ │
│ PROBLEMA: Desenvolvedor não é usuário final, sem valor │
│ │
│ MELHOR: Dividir em stories valiosas OU fazer tarefa: │
│ - Story: "Como usuário, quero login mais rápido (<2s)" │
│ - Tarefa: "Refatorar módulo auth (habilita story)" │
│ │
├─────────────────────────────────────────────────────────────┤
│ ❌ FOCADA EM SOLUÇÃO (Não no problema) │
├─────────────────────────────────────────────────────────────┤
│ │
│ RUIM: "Como usuário, quero menu dropdown para categorias" │
│ │
│ PROBLEMA: Prescreve implementação específica │
│ │
│ MELHOR: "Como usuário, quero filtrar rápido por categoria │
│ para encontrar itens relevantes mais rápido" │
│ │
├─────────────────────────────────────────────────────────────┤
│ ❌ FALTA "PARA QUE" (Sem declaração valor) │
├─────────────────────────────────────────────────────────────┤
│ │
│ RUIM: "Como usuário, quero exportar dados" │
│ │
│ PROBLEMA: Por quê? Qual problema isso resolve? │
│ │
│ MELHOR: "Como gerente projeto, quero exportar dados │
│ para poder criar relatórios personalizados no Excel" │
│ │
└─────────────────────────────────────────────────────────────┘
Processo Refinamento Story
Checklist Pré-Planejamento
DEFINIÇÃO DE PRONTO:
┌─────────────────────────────────────────────────────────────┐
│ ANTES DA STORY ENTRAR NO SPRINT PLANNING: │
├─────────────────────────────────────────────────────────────┤
│ │
│ ☐ USER STORY COMPLETA │
│ - Papel usuário claro identificado │
│ - Ação descrita (o que usuário quer fazer) │
│ - Valor declarado (por que importa) │
│ │
│ ☐ CRITÉRIOS ACEITAÇÃO DEFINIDOS │
│ - Caminho feliz coberto │
│ - Casos erro identificados │
│ - Casos borda considerados │
│ │
│ ☐ TAMANHO APROPRIADO │
│ - Time estimou (story points) │
│ - Cabe em único sprint │
│ - Sem dependências desconhecidas │
│ │
│ ☐ DEPENDÊNCIAS RESOLVIDAS │
│ - Sem trabalho bloqueante de outros times │
│ - APIs/serviços necessários disponíveis │
│ - Assets design/UX prontos │
│ │
│ ☐ PERGUNTAS RESPONDIDAS │
│ - Product owner esclareceu requisitos │
│ - Spikes técnicos completados se necessário │
│ - Sem perguntas abertas bloqueando início │
│ │
└─────────────────────────────────────────────────────────────┘