Disclaimer
Este texto foi inicialmente concebido pela IA Generativa em função da transcrição de dois episódios do nosso canal, Dev Eficiente. Se preferir acompanhar por vídeo, é só dar o play.
Introdução
Entregar software de qualidade requer mais do que ser excelente apenas em código. Uma das etapas mais críticas é entender corretamente o que precisa ser construído antes mesmo de começar a escrever código. Neste post, vamos abordar um método prático e eficiente para a engenharia de requisitos, focado especificamente na perspectiva de pessoas desenvolvedoras, com o objetivo de maximizar a entrega de valor e minimizar retrabalho.
O Problema com Requisitos Mal Definidos
Quando um requisito chega até você de forma incompleta ou ambígua, diversos problemas podem surgir:
- Retrabalho constante após feedbacks
- Entregas parciais que não cobrem todos os aspectos necessários
- Em casos extremos, implementação de recursos que nem foram solicitados
Esses problemas não apenas geram frustração, mas também aumentam significativamente o custo operacional do desenvolvimento. Quanto mais tarde um problema for identificado no ciclo de desenvolvimento, mais caro será resolvê-lo.
Um Método Influenciado por Múltiplas Abordagens
O método apresentado aqui busca unir o melhor de diferentes abordagens:
- Métodos formais tradicionais de engenharia de requisitos
- Abordagens ágeis de coleta de requisitos
- A metodologia Shape Up, desenvolvida pelo Basecamp
O Shape Up, em particular, traz uma etapa chamada de "Shaping" que encontra um equilíbrio entre as preocupações formais de requisitos e o ritmo de entrega necessário no mundo atual.
Passo a Passo para Refinar Requisitos como Desenvolvedor
1. Entrevista com o Solicitante
Quando um requisito chega até você, o primeiro passo é conversar com a pessoa responsável pelo pedido. Utilize a técnica dos "cinco porquês" para entender a real motivação por trás da solicitação:
- Por que você quer este recurso?
- Por que isso é importante?
- Por que isso traz valor para o negócio?
Se a pessoa conseguir responder pelo menos até o terceiro "porquê", provavelmente ela tem uma compreensão clara da necessidade.
Aqui fica a sugestão de tentar buscar quem realmente idealizou a funcionalidade. Óbvio que nem sempre é possível chegar em tal pessoa, mas sabemos que quanto mais longe da fonte, maiores são as chances de ter interpretações equivocadas sobre o real desejo.
2. Descrição Detalhada do Seu Entendimento
Após a entrevista, documente seu entendimento de forma detalhada. Expanda a descrição inicial com todos os pormenores que conseguir extrair:
- Quais tipos específicos de informações serão necessárias
- Como o sistema deve se comportar
- Quais integrações serão necessárias
- Requisitos técnicos específicos
Este documento deve ser muito mais detalhado que a descrição inicial.
Após este detalhamento, valide mais uma vez seu entendimento :).
3. Criação de Rascunhos Visuais
Nesta etapa, você deve criar rascunhos que materializam seu entendimento do que precisa ser implementado. Estes rascunhos podem ser feitos em qualquer ferramenta que você preferir (Figma, draw.io, etc). De verdade, a ferramenta pouco importa aqui.
O importante é que o nível de detalhamento seja suficiente para que outras pessoas consigam visualizar a implementação. A granularidade deve ser de média para fina, evitando rascunhos muito abstratos que dificultam feedback preciso.
4. Elaboração de Cenários de Teste
Descreva os cenários de teste fim a fim para a funcionalidade. Você pode utilizar a sintaxe do Cucumber (Gherkin) ou qualquer outra abordagem que preferir.
O objetivo não é necessariamente implementar estes testes agora, mas sim utilizar este exercício como uma forma adicional de refinamento e validação do seu entendimento.
5. Quebra em Tarefas de Implementação
Uma vez que você tenha validado seu entendimento com quem solicitou o recurso, é hora de quebrar a implementação em tarefas específicas. Pelo amor de deus, não deixe ninguém quebrar as tarefas por você.
Defina:
- Quais tarefas precisam ser realizadas
- Em qual sequência elas devem ser executadas
- Como elas se conectam à funcionalidade completa
Aqui você tem mais uma chance de falar com quem pediu e tentar descobrir mais algum entendimento possivelmente errado.
6. Planejamento de Implementação por Tarefa
Antes de começar a codificar cada tarefa, descreva o passo a passo de como pretende implementá-la:
- Quais componentes serão necessários
- Como eles se interconectam
- Quais parâmetros precisam ser passados
- Quais estruturas de dados serão utilizadas
- Qual vai ser o fluxo da implementação
Este exercício final de reflexão aumenta significativamente suas chances de implementar corretamente na primeira tentativa. O nível de detalhamento da sua imaginação, fala diretamente com sua capacidade de execução.
Os Benefícios deste Método
Este processo pode parecer burocrático à primeira vista, mas na realidade é apenas cuidadoso. Ele proporciona:
- Múltiplos momentos de reflexão tanto para quem solicitou quanto para quem vai implementar
- Amadurecimento progressivo do conhecimento sobre o que será construído
- Identificação precoce de problemas, quando ainda é barato resolvê-los
- Maior probabilidade de entregar código que de fato gera valor
O investimento de tempo neste processo é compensado pela redução significativa de retrabalho e correções posteriores.
Conclusão
A qualidade do código final é influenciada por múltiplos fatores, e um dos mais importantes é a qualidade do requisito que originou esse código. Um bom código, que gera valor, geralmente começa com um requisito bem refinado.
Este método proposto não é excessivamente formal nem negligente – ele encontra um equilíbrio que possibilita o entendimento profundo do que precisa ser feito, aumentando as chances de sucesso na implementação e na geração de valor para o produto.
Curso de Engenharia de Requisitos para Devs
Se você gostou deste conteúdo e deseja aprofundar seus conhecimentos em engenharia de requisitos na perspectiva de desenvolvimento, confira nosso curso especializado em https://deveficiente.com/curso-engenharia-requisitos-para-devs. No curso, abordamos com muito mais detalhes cada uma dessas etapas e fornecemos exemplos práticos para diferentes contextos de desenvolvimento.
Top comments (0)