Como ler e escrever User Stories
Audiobook disponível
Ouça este módulo no estilo podcast
Nível: Iniciante | Duração estimada de leitura: 15 minutos | Categoria: Trilha Iniciante — Módulo 2
Introdução
Era uma terça de tarde, refinamento com o time. A PO abriu o card no Jira e leu em voz alta:
"Eu, como usuário, quero ver meus pedidos, para que eu possa acompanhá-los."
Silêncio.
Então o dev sênior falou: "Tá, mas o que exatamente ele precisa ver? Todos os pedidos? Só os ativos? Tem filtro? Tem paginação? O que acontece se não tiver pedido nenhum?"
A PO olhou para o card. Não tinha resposta para nenhuma dessas perguntas.
Essa cena acontece em todo time que confunde a User Story com o requisito completo. A fórmula existe. O conteúdo falta.
Neste módulo, você vai aprender a escrever histórias que chegam ao refinamento com contexto, saem com clareza e vão ao desenvolvimento sem retrabalho.
O que é (e o que não é) uma User Story
Antes de escrever, você precisa entender o que está criando.
User Story não é um documento de requisitos. Não é uma especificação técnica. Não é uma lista de funcionalidades. Não é uma tarefa para o desenvolvedor.
User Story é uma promessa de conversa.
O conceito foi criado por Ron Jeffries, um dos signatários do Manifesto Ágil, que descreveu a User Story como tendo três componentes — o que ele chamou de 3 Cs:
Card — O cartão com a descrição resumida. É o lembrete, não o requisito completo.
Conversation — A conversa que acontece entre PO, time e stakeholders para refinar o entendimento. O cartão é o ponto de partida dessa conversa, não o fim.
Confirmation — Os critérios de aceitação que confirmam quando a história está pronta e funcionando como esperado.
A maioria dos POs escreve o Card, esquece a Conversation e deixa a Confirmation vaga. Aí o retrabalho começa.
A fórmula clássica: Eu, Quero, Para
A estrutura mais conhecida de User Story é simples:
Eu, como [persona ou papel], Quero [ação ou funcionalidade], Para que [benefício ou resultado esperado].
Cada parte tem uma função específica.
"Eu, como [persona]" — Identifica quem é o usuário que se beneficia da história. Não é o sistema. Não é a empresa. É uma pessoa real com um contexto real. "Eu, como cliente que faz compras frequentes" é diferente de "Eu, como usuário". O contexto importa.
"Quero [ação]" — Descreve o que o usuário quer fazer, não o que o sistema precisa fazer. "Quero filtrar meus pedidos por status" está centrado no usuário. "O sistema deve exibir filtros de pedido" está centrado na implementação. A diferença parece pequena, mas muda o foco de quem escreve e de quem lê.
"Para que [benefício]" — Este é o elemento mais negligenciado e o mais importante. Ele responde ao "por quê". Quando o time entende o benefício esperado, consegue tomar decisões melhores durante o desenvolvimento. Se a história mudar de direção, o "para que" é o norte que mantém todos alinhados ao objetivo real.
Mas atenção: a fórmula é só o começo.
Por que a fórmula sozinha não basta
"Eu, como cliente, quero filtrar meus pedidos, para acompanhá-los melhor."
Ok. Mas o que acontece quando o cliente aplica um filtro e não tem resultado? O sistema mostra tela em branco? Uma mensagem? Qual mensagem?
O que acontece se o cliente tiver 500 pedidos? Tem paginação? Quantos por página?
O que "filtrar" significa aqui? Por data? Por status? Por produto? Tudo ao mesmo tempo?
A fórmula captura a intenção. Os critérios de aceitação definem o que "pronto" significa. Os cenários de homologação mostram como validar que funcionou.
Sem esses três elementos juntos, a história é uma promessa sem contrato.
Os 5 elementos de uma história completa
As histórias que chegam ao desenvolvimento sem retrabalho têm sempre os mesmos cinco componentes. Veja cada um.
1. Situação Atual — A Dor
Antes de descrever o que vai ser construído, descreva o que está errado hoje.
Por quê? Porque o time precisa entender o contexto do problema para tomar boas decisões. Se o dev sabe que o problema é que clientes ligam para o SAC porque não conseguem achar pedidos antigos, ele pensa diferente do que se souber apenas "precisa ter filtro".
Uma boa descrição da dor:
- É específica, não genérica
- Quantifica o impacto quando possível (volume de atendimentos, tempo perdido, taxa de erro)
- Conecta o problema ao usuário real e ao negócio
Ruim: "O processo atual tem problemas."
Bom: "Clientes que realizam mais de 5 compras por mês precisam rolar manualmente toda a lista de pedidos para encontrar um item específico. Isso gera frustração e aumenta o volume de contatos no SAC com perguntas sobre pedidos já entregues."
2. Objetivo da Tarefa — O Valor de Negócio
Depois de descrever o problema, descreva o que vai ser construído e por que isso resolve o problema. Aqui você conecta a solução ao resultado esperado para o negócio. Não só "vamos fazer X" — mas "vamos fazer X porque isso vai impactar Y".
Quando o time entende o valor de negócio, deixa de ser executor de tarefas e passa a ser co-responsável pelo resultado.
3. A História de Usuário — Eu / Quero / Para
Aqui entra a fórmula clássica — agora com contexto. Com a dor e o objetivo já descritos, a história resume a essência do que o usuário precisa de forma clara e centrada na pessoa.
4. Critérios de Aceitação — O que "pronto" significa
Este é o coração da história. Aqui você define, em linguagem não técnica, tudo que o sistema precisa fazer para a história ser considerada completa.
Um critério de aceitação bem escrito é:
- Testável — Alguém consegue verificar se está funcionando sem interpretação
- Específico — Sem margem para ambiguidade ("deve funcionar corretamente" não é critério)
- Focado no comportamento — Descreve o que o sistema faz em resposta a uma ação do usuário
Organize em Requisitos (REQ) e Sub-Requisitos (Sub-REQ):
- REQ define a funcionalidade de alto nível: o quê
- Sub-REQ detalha as regras de negócio: o como
Perceba que cada Sub-REQ deve ser verificável. Ou está certo ou está errado. Sem interpretação.
5. Cenários de Homologação — BDD
O BDD — Behavior-Driven Development — é uma forma de escrever cenários de teste em linguagem próxima do natural, usando a estrutura Dado / Quando / Então:
- Dado que o usuário está em uma situação específica
- Quando ele realiza uma ação
- Então o sistema deve se comportar de determinada forma
Esses cenários servem para dois públicos: o time de desenvolvimento, que sabe o que precisa construir; e o time de QA, que usa esses cenários como base para os testes de homologação.
Escreva cenários para os caminhos de sucesso e para os caminhos alternativos — erros, estados vazios, exceções. O que acontece quando o filtro não retorna nenhum resultado? Esses cenários revelam casos que muitas vezes não foram pensados até o momento do desenvolvimento.
Erros mais comuns — e como evitá-los
1. Escrever do ponto de vista do sistema, não do usuário
Errado: "O sistema deve exibir uma lista de pedidos com opção de filtro por status." Certo: "Eu, como cliente, quero filtrar meus pedidos por status, para encontrar rapidamente o que estou procurando."
2. Critérios vagos que não se pode testar
Errado: "O filtro deve funcionar corretamente e de forma intuitiva." Certo: "Ao selecionar o filtro 'Entregue', apenas pedidos com status 'Entregue' devem aparecer na lista. A atualização deve ocorrer em até 2 segundos."
Se você não consegue criar um teste para verificar o critério, ele não é um critério — é uma intenção.
3. Histórias gigantes disfarçadas de User Story
Uma história que leva mais de uma sprint para ser entregue provavelmente é um épico. Quebre em histórias menores, cada uma com valor independente. Sinal de alerta: mais de 10 Sub-REQs em uma única história.
4. Esquecer os cenários de erro
A maioria dos POs escreve o caminho feliz. Mas o que acontece quando a API cai? Quando o usuário não tem pedidos no período filtrado? Os cenários de erro são onde os bugs moram. Antecipe-os na história.
5. Não ter o "Para que"
Sem o benefício esperado, o time não tem bússola para decidir. Quando surgir uma dúvida durante o desenvolvimento — e vai surgir — a pergunta que resolve é sempre: "qual era o objetivo do usuário?"
O que separa uma história boa de uma ruim
Uma boa User Story passa no teste INVEST:
- I — Independent: Pode ser desenvolvida sem depender de outra história em progresso.
- N — Negotiable: Os detalhes de implementação ainda podem ser discutidos com o time.
- V — Valuable: Entrega valor real para o usuário ou para o negócio.
- E — Estimable: O time consegue estimar o esforço necessário.
- S — Small: É pequena o suficiente para caber em uma sprint.
- T — Testable: Os critérios de aceitação permitem verificar claramente se está pronto.
Exemplo completo: a história no padrão profissional
Agora que você conhece os componentes, veja como tudo isso se une em um exemplo fictício — usando o padrão que POs experientes aplicam no dia a dia.
A história abaixo é de uma empresa de e-commerce fictícia chamada Mercaloop. O contexto: o time de produto identificou alto volume de contatos no SAC de clientes que não conseguiam encontrar pedidos antigos no aplicativo.
[MLP-42] História: Filtro de Pedidos por Status no Aplicativo do Cliente
Situação atual (Dor)
Atualmente, a tela "Meus Pedidos" do aplicativo exibe todos os pedidos do cliente em ordem cronológica, sem nenhuma opção de filtro ou busca.
Comentário para o PO: descreva aqui a dor de forma específica. Quanto mais você quantificar o problema, mais o time entenderá a urgência e o impacto da solução.
Clientes que realizam compras recorrentes precisam rolar manualmente por dezenas de pedidos para localizar um item específico. Essa fricção gera frustração e aumenta o volume de atendimentos no SAC — aproximadamente 18% dos contatos registrados no último trimestre foram de clientes perguntando sobre o status de pedidos já entregues.
A ausência de filtro impacta diretamente a experiência pós-compra e sobrecarrega a operação de atendimento com demandas que poderiam ser resolvidas pelo próprio cliente no app.
Objetivo da tarefa (Contexto e valor agregado ao negócio)
Implementar um sistema de filtro por status na tela "Meus Pedidos" do aplicativo Mercaloop.
Comentário para o PO: conecte a solução ao resultado esperado. O time precisa saber por que aquilo importa para o negócio, não só o que precisa ser feito.
O objetivo é permitir que o cliente localize qualquer pedido de forma autônoma, filtrando por status: Em andamento, Entregue ou Cancelado. Com isso, esperamos reduzir o volume de contatos no SAC relacionados a status de pedido e melhorar a avaliação de experiência pós-compra no aplicativo.
História de Usuário
Comentário para o PO: a fórmula "Eu / Quero / Para" deve ser específica. Evite personas genéricas como "usuário" — prefira descrever o contexto real de quem se beneficia.
Eu, como cliente que realiza compras frequentes no aplicativo Mercaloop,
Quero filtrar o meu histórico de pedidos por status (Em andamento, Entregue ou Cancelado),
Para que eu possa encontrar rapidamente um pedido específico sem precisar navegar por toda a lista manualmente.
Links Importantes (Documentações, Figma, Fluxogramas...)
Comentário para o PO: centralize aqui todos os artefatos relacionados à história. O time de desenvolvimento não deve precisar caçar informação em outros lugares.
- Protótipo de Alta Fidelidade (Figma): [Link do protótipo — Fluxo de Filtro de Pedidos]
- Documentação da Regra de Negócio (Confluence): [Link do DOC — Política de Exibição de Pedidos por Status]
- Dependência (API): [Link da Task — API de Consulta de Pedidos por Cliente]
- Épico Relacionado: [Link do Épico — Experiência do Cliente Pós-Compra]
Critérios de Aceitação
Requisitos de história
Comentário para o PO: os REQs definem as funcionalidades — o "O quê". Os Sub-REQs definem as regras de negócio — o "Como". Cada Sub-REQ deve ser verificável: ou está certo ou está errado, sem interpretação possível.
REQ 1 — Exibição e Seleção dos Filtros (Os REQs definem as Funcionalidades — "O quê")
- Sub-REQ 1.1: (Os Sub-REQs definem as Regras de Negócio — "O como") Na tela "Meus Pedidos", o cliente deve ver opções de filtro no topo da lista, com as seguintes opções: "Todos", "Em andamento", "Entregue" e "Cancelado".
- Sub-REQ 1.2: O filtro padrão ao abrir a tela deve ser "Todos", exibindo todos os pedidos sem restrição.
- Sub-REQ 1.3: Apenas um filtro pode estar ativo ao mesmo tempo. Ao selecionar um novo filtro, o anterior é automaticamente desativado.
- Sub-REQ 1.4: O filtro ativo deve ter destaque visual diferenciado (ex: fundo colorido ou borda em destaque) em relação aos filtros inativos.
REQ 2 — Resultado da Filtragem
- Sub-REQ 2.1: Ao selecionar um filtro, a lista deve ser atualizada imediatamente — sem necessidade de clique em botão "Aplicar" —, exibindo apenas os pedidos com o status correspondente.
- Sub-REQ 2.2: Se o filtro selecionado não retornar nenhum pedido, o sistema deve exibir a mensagem: "Você não tem pedidos com este status no momento.", acompanhada de um ícone ilustrativo.
- Sub-REQ 2.3: A atualização da lista deve ocorrer em no máximo 2 segundos após a seleção do filtro.
REQ 3 — Persistência do Filtro na Sessão
- Sub-REQ 3.1: O filtro selecionado deve ser mantido durante a sessão ativa. Se o cliente navegar para o detalhe de um pedido e retornar à tela "Meus Pedidos", o filtro ativo deve ser o mesmo de quando saiu.
- Sub-REQ 3.2: Ao fechar e reabrir o aplicativo, o filtro deve voltar para o estado padrão "Todos".
Sugestões Técnicas (Apoio ao Desenvolvimento)
Comentário para o PO: esta seção é opcional, mas muito valorizada pelo time. Aqui você oferece um ponto de partida técnico — não uma especificação fechada. Valide sempre com o Tech Lead antes de assumir que as sugestões são corretas.
Importante: As informações abaixo são sugestões de ponto de partida para a equipe de desenvolvimento e devem ser validadas e/ou refinadas em conjunto com os Tech Leads e o time.
Mapeamento de Dados (Sugestão de Origem)
- Pedidos (REQ 1): Os pedidos para exibição podem ser consultados na tabela
TBL_PEDIDO_HEADER, filtrando porID_CLIENTEeSTATUS_PEDIDO. - Status disponíveis (REQ 1.1): Os status utilizados no filtro devem corresponder aos valores existentes no campo
STATUS_PEDIDO:'EM_ANDAMENTO','ENTREGUE','CANCELADO'.
Cenários de Homologação (BDD)
Comentário para o PO: escreva cenários para o caminho feliz E para os caminhos alternativos. Estados vazios, erros e exceções são onde os bugs aparecem — antecipe-os aqui.
Cenário 1.1 (Sucesso — Filtro com Resultado)
- Dado que eu sou um cliente logado e acessei "Meus Pedidos".
- E eu tenho pedidos com diferentes status (Em andamento, Entregue e Cancelado).
- Quando eu clico no filtro "Entregue".
- Então o sistema deve exibir apenas os pedidos com status "Entregue".
- E o filtro "Entregue" deve estar com destaque visual ativo.
- E os filtros "Em andamento" e "Cancelado" devem estar visualmente inativos.
Cenário 1.2 (Estado vazio — Filtro sem Resultado)
- Dado que eu sou um cliente logado e acessei "Meus Pedidos".
- E eu não tenho nenhum pedido com status "Cancelado".
- Quando eu clico no filtro "Cancelado".
- Então o sistema deve exibir a mensagem: "Você não tem pedidos com este status no momento."
- E um ícone ilustrativo deve ser exibido junto à mensagem.
- E a mensagem de erro genérico de sistema não deve ser exibida.
Cenário 2.1 (Persistência durante a sessão)
- Dado que eu sou um cliente logado e selecionei o filtro "Em andamento" na tela "Meus Pedidos".
- E a lista exibe apenas pedidos com status "Em andamento".
- Quando eu navego para o detalhe de um pedido e depois pressiono "Voltar".
- Então o filtro "Em andamento" deve continuar ativo.
- E apenas pedidos com status "Em andamento" devem ser exibidos, sem recarregar o filtro padrão "Todos".
Fim do exemplo
Conclusão
User Stories são simples de entender e difíceis de escrever bem. A fórmula cabe em uma linha. O trabalho real está nos critérios, nos cenários, no contexto que você coloca antes e depois da fórmula.
A diferença entre uma história que paralisa o time em dúvidas e uma que vai do refinamento ao deploy sem retrabalho está no quanto o PO trabalhou antes do refinamento. Quanto mais claro você for no papel, mais rápido e melhor o time entrega.
Lembra do refinamento do começo deste módulo? A PO que não tinha resposta para nenhuma pergunta do dev? Com o padrão que você acabou de ver, esse cenário muda completamente. O dev abre o card, lê a dor, entende o objetivo, vê os critérios e já sabe o que construir — inclusive o que acontece quando dá errado.
Isso é uma User Story que funciona.
No próximo módulo, vamos falar sobre backlog: como organizar, priorizar e manter uma lista de histórias que reflete a estratégia do produto — e não só a demanda do stakeholder que gritou mais alto.
Até lá.