Feature-Driven Development (FDD)
1. O que é FDD
Feature-Driven Development, ou Desenvolvimento Orientado a Funcionalidades, é um processo ágil de Engenharia de Software organizado em torno da entrega frequente de funcionalidades pequenas, completas e percebidas pelo usuário. Em vez de planejar o produto apenas por camadas técnicas, o FDD estrutura o trabalho a partir do valor que o sistema entrega ao negócio.
Uma feature é uma capacidade específica do produto, suficientemente pequena para ser projetada, implementada, testada e demonstrada em um período curto. Ela deve ser descrita de forma objetiva, normalmente no padrão:
Exemplos para a Clínica Escola FBr:
- Registrar solicitação de atendimento do paciente.
- Consultar posição do paciente na fila.
- Confirmar presença em sessão agendada.
- Classificar prioridade do inscrito.
- Associar paciente ao estagiário responsável.
Uma feature não deve ser uma tarefa técnica, como “criar tabela no banco”, nem uma iniciativa grande demais, como “implementar todo o módulo da secretaria”. A primeira é uma atividade interna de implementação; a segunda precisa ser decomposta em funcionalidades menores.
2. Objetivos do FDD
O FDD busca:
- entregar valor observável em ciclos curtos;
- tornar o progresso mensurável pelo número de features concluídas;
- reduzir o risco de desenvolver funcionalidades sem utilidade para o negócio;
- manter uma visão abrangente do domínio antes de detalhar cada parte;
- distribuir responsabilidades entre líderes de feature e especialistas técnicos;
- favorecer inspeções frequentes de design e código;
- permitir que o cliente acompanhe e valide incrementos reais do produto.
Na Clínica Escola FBr, isso é importante porque o sistema possui vários perfis, regras clínicas e restrições regulatórias. O trabalho por features permite validar gradualmente o fluxo da clínica, começando pelo MVP e evitando que a equipe espere o sistema inteiro ficar pronto para obter feedback.
3. Os cinco processos do FDD
O FDD é tradicionalmente organizado em cinco processos. Eles são apresentados em sequência, mas podem se repetir e se sobrepor conforme novas informações surgem.
3.1 Desenvolver um Modelo Abrangente
Nesta etapa, a equipe constrói uma visão compartilhada do domínio do problema. O objetivo não é definir todos os detalhes da implementação, mas compreender os conceitos, atores, regras, eventos e relações importantes para o negócio.
Na Clínica Escola FBr, o modelo deve considerar, por exemplo:
- paciente ou responsável;
- inscrição e solicitação de atendimento;
- triagem e prioridade clínica;
- fila de espera;
- vaga e ciclo semestral;
- sessão e agendamento;
- confirmação, cancelamento e falta;
- estagiário, supervisor e coordenação;
- perfis de acesso e auditoria.
Práticas úteis:
- entrevistar os especialistas da FBr;
- observar e descrever o processo atual;
- identificar substantivos relevantes do domínio;
- identificar verbos e eventos do processo;
- discutir diferentes interpretações com o cliente;
- registrar conceitos aprovados em um modelo de domínio;
- separar regras confirmadas de hipóteses ainda pendentes.
O modelo abrangente não precisa ser perfeito na primeira versão. Ele deve ser suficientemente consistente para orientar a decomposição das áreas e features.
3.2 Construir uma Lista de Features
A equipe transforma o modelo de domínio em uma lista hierárquica de funcionalidades. Essa lista normalmente é organizada em três níveis:
- Área de negócio: grande parte do domínio, como Gestão de Inscrições;
- Conjunto de features: agrupamento coerente, como Triagem e Fila;
- Feature: capacidade pequena e entregável, como Classificar prioridade do inscrito.
Exemplo:
Área: Gestão de Inscrições
Conjunto: Solicitação de atendimento
Feature: Registrar solicitação de atendimento do paciente
Feature: Emitir número de inscrição do paciente
Feature: Consultar situação da solicitação
Área: Gestão da Fila
Conjunto: Triagem e priorização
Feature: Pré-classificar prioridade do inscrito
Feature: Revisar classificação do inscrito
Feature: Consultar posição do paciente na fila
A lista deve ser escrita em linguagem de negócio, evitando nomes de componentes, telas ou tecnologias. Cada feature deverá ser relacionada aos requisitos funcionais, objetivos do produto e critérios de aceitação correspondentes.
3.3 Planejar por Feature
Depois de criada a lista, a equipe define a ordem e a responsabilidade de desenvolvimento. O planejamento deve considerar:
- valor para o cliente;
- dependências entre features;
- riscos técnicos e regulatórios;
- esforço estimado;
- disponibilidade dos integrantes;
- prioridade do MVP;
- necessidade de validação com a FBr.
Cada feature recebe um responsável principal, normalmente um Líder de Feature, e revisores. O plano deve registrar o estado da feature, por exemplo:
Identificada -> Planejada -> Em design -> Design inspecionado
-> Em construção -> Código concluído -> Testada
-> Inspecionada -> Promovida -> Demonstrada -> Aceita
A equipe não deve interpretar o planejamento como uma autorização para ignorar mudanças. Se a FBr esclarecer uma regra ou se uma dependência for descoberta, a lista e o plano devem ser atualizados com rastreabilidade.
3.4 Projetar por Feature
Nesta etapa, a equipe detalha uma feature ou um pequeno conjunto de features que será construído. O design precisa explicar como a funcionalidade se comportará, quais componentes participarão e quais regras deverão ser respeitadas.
Artefatos possíveis:
- descrição da feature e critérios de aceitação;
- fluxo principal e fluxos alternativos;
- protótipo da tela, quando houver interação;
- diagrama de sequência;
- modelo de dados afetado;
- contratos de API;
- regras de autorização;
- cenários de teste;
- riscos e decisões técnicas.
O design deve ser inspecionado pela equipe antes da codificação. Para a Clínica Escola FBr, a inspeção deve verificar especialmente o acesso por perfil, o sigilo dos dados sensíveis, a ausência de atendimento psicológico on-line e a necessidade de revisão humana na triagem.
3.5 Construir por Feature
A equipe implementa, testa, revisa e integra a feature. Uma feature só deve ser considerada concluída quando atender aos critérios definidos e passar pelos controles técnicos e de qualidade do projeto.
Um fluxo recomendado é:
- preparar ou ajustar o ambiente necessário;
- implementar a persistência dos dados;
- implementar a regra de negócio;
- implementar a API ou o serviço de aplicação;
- implementar a interface, quando aplicável;
- criar testes unitários;
- criar testes de integração ou de aceitação;
- executar inspeção de código;
- corrigir problemas encontrados;
- integrar a feature à versão do produto;
- demonstrar a funcionalidade à equipe e à FBr;
- registrar o aceite ou as pendências.
4. Como aplicar FDD à Clínica Escola FBr
4.1 Da necessidade à feature
A equipe pode utilizar a seguinte cadeia de rastreabilidade:
Problema do negócio
-> Objetivo do produto
-> Característica de produto
-> Requisito funcional
-> Feature
-> Critério de aceitação
-> Código e testes
Exemplo:
| Elemento | Exemplo |
|---|---|
| Problema | Faltas sem aviso deixam horários ociosos. |
| Objetivo | Reduzir faltas e cancelamentos não informados. |
| Característica | Agendamento, confirmação e remarcação. |
| Requisito | O sistema deve permitir confirmar presença em uma sessão. |
| Feature | Confirmar presença em sessão agendada. |
| Critério de aceitação | Ao confirmar, o sistema registra data, usuário e situação da sessão. |
| Teste | Verificar que a sessão muda para “confirmada” e que a ação fica auditada. |
4.2 Exemplo de decomposição do MVP
Uma possível organização inicial é:
Área: Acesso e segurança
Conjunto: Autenticação
Feature: Autenticar usuário por perfil
Feature: Encerrar sessão do usuário
Feature: Registrar acesso do usuário
Área: Inscrição e triagem
Conjunto: Solicitação de atendimento
Feature: Registrar solicitação de atendimento do paciente
Feature: Emitir número de inscrição do paciente
Conjunto: Triagem
Feature: Pré-classificar prioridade do inscrito
Feature: Revisar classificação do inscrito
Área: Fila de espera
Conjunto: Acompanhamento da fila
Feature: Ordenar inscritos por prioridade
Feature: Consultar posição do paciente na fila
Área: Agendamento
Conjunto: Sessões
Feature: Agendar sessão do paciente
Feature: Enviar lembrete de sessão
Feature: Confirmar presença em sessão agendada
Feature: Registrar cancelamento de sessão
Área: Operação acadêmica
Conjunto: Distribuição de casos
Feature: Associar paciente ao estagiário responsável
Feature: Associar estagiário ao supervisor
Conjunto: Assiduidade
Feature: Registrar falta do paciente
Feature: Alertar limite de faltas do paciente
5. Como implementar FDD no código
FDD é um processo de organização e desenvolvimento, não uma biblioteca e não exige uma arquitetura específica. Ele pode ser aplicado com diferentes linguagens, frameworks e estilos arquiteturais. O essencial é manter o código organizado para que cada feature possa ser localizada, testada e entregue com autonomia razoável.
5.1 Organizar o código por feature
Quando fizer sentido para a stack escolhida, a equipe pode preferir uma organização vertical por funcionalidade:
src/
features/
inscricoes/
domain/
application/
infrastructure/
presentation/
tests/
triagem/
domain/
application/
infrastructure/
presentation/
tests/
agendamento/
domain/
application/
infrastructure/
presentation/
tests/
Essa estrutura evita que a implementação de uma feature fique espalhada sem necessidade por pastas genéricas. A divisão interna pode variar conforme a arquitetura adotada, mas deve preservar separação entre regras de negócio, acesso a dados e interface.
5.2 Separar regra de negócio de infraestrutura
Uma regra como “duas faltas atingem o limite de desligamento” deve existir em uma camada de domínio ou aplicação testável, e não apenas dentro de uma tela ou consulta ao banco. Assim, a mesma regra pode ser utilizada pela interface, por uma API e por processos automáticos sem duplicação.
Exemplo conceitual:
Caso de uso: Registrar falta do paciente
1. localizar a sessão e o paciente;
2. validar se o usuário tem permissão;
3. registrar a falta;
4. recalcular a quantidade de faltas;
5. gerar alerta se o limite for atingido;
6. registrar a operação na auditoria.
O código concreto dependerá da linguagem e do framework definidos pela equipe. Antes de implementar, deve-se documentar o contrato da operação, os erros esperados e os critérios de aceitação.
5.3 Branches, commits e pull requests
O fluxo de versionamento pode refletir o trabalho por feature:
Cada branch deve tratar uma feature ou uma mudança pequena e coerente. Commits devem descrever mudanças verificáveis, por exemplo:
feat: registra confirmação de presença da sessão
test: cobre confirmação de presença já registrada
fix: impede confirmação fora do prazo permitido
O pull request deve informar a feature relacionada, os requisitos atendidos, os testes executados, eventuais decisões de segurança e o estado da validação com a FBr.
5.4 Definition of Ready e Definition of Done
Antes de iniciar uma feature, a equipe deve verificar a Definition of Ready (DoR). No mínimo, a feature deve ter objetivo, descrição, prioridade, dependências conhecidas, critérios de aceitação e responsável definido.
Para concluí-la, a Definition of Done (DoD) pode exigir:
- código implementado e revisado;
- testes unitários e de integração adequados;
- critérios de aceitação atendidos;
- controle de acesso verificado;
- documentação atualizada;
- ausência de erros conhecidos que impeçam a entrega;
- integração realizada sem quebrar funcionalidades existentes;
- demonstração feita quando aplicável;
- aceite ou pendência registrada.
6. Papéis no FDD
Os papéis podem ser adaptados ao tamanho da equipe. Na Clínica Escola FBr, a divisão proposta é:
| Papel | Responsabilidade |
|---|---|
| Líder de projeto | Acompanhar cronograma, riscos, comunicação e decisões. |
| Arquiteto-chefe | Orientar arquitetura, padrões técnicos e integração. |
| Líder de requisitos | Manter requisitos, critérios de aceitação e rastreabilidade. |
| Líder de feature | Conduzir design, implementação, revisão e demonstração da feature. |
| Especialista de domínio | Esclarecer regras e validar o comportamento esperado. |
| Inspetor | Revisar design, código e evidências de teste. |
Uma pessoa pode exercer mais de um papel, mas a revisão deve ser feita por outra pessoa sempre que possível. O cliente não precisa assumir papel técnico: os representantes da FBr atuam principalmente como especialistas de domínio e responsáveis pelo aceite.
7. Métricas e acompanhamento
O acompanhamento deve medir entrega real, e não apenas quantidade de reuniões ou linhas de código. Indicadores úteis incluem:
- features identificadas, planejadas, em construção, concluídas e aceitas;
- tempo entre início e conclusão de uma feature;
- quantidade de defeitos encontrados antes e depois da demonstração;
- percentual de features do MVP com critérios de aceitação validados;
- quantidade de pendências abertas por feature;
- cobertura de testes das regras críticas;
- tempo de resposta para dúvidas de negócio;
- riscos regulatórios e de segurança ainda não resolvidos.
Essas métricas devem apoiar decisões. Elas não devem ser usadas para comparar integrantes individualmente nem para incentivar a entrega de funcionalidades incompletas.
8. Vantagens e limites do FDD
Vantagens
- aproxima o desenvolvimento do valor de negócio;
- facilita a divisão do trabalho em uma equipe pequena;
- torna o progresso mais visível;
- favorece entregas incrementais e demonstrações frequentes;
- cria rastreabilidade entre domínio, requisitos, código e testes;
- permite priorizar o MVP sem perder a visão geral do sistema.
Limites e cuidados
- exige entendimento inicial razoável do domínio;
- pode virar apenas uma lista de tarefas se as features forem mal definidas;
- precisa de disciplina para realizar inspeções e atualizar a documentação;
- não fornece, sozinho, práticas detalhadas de testes, programação ou comunicação;
- pode concentrar conhecimento nos Líderes de Feature se não houver revisão cruzada;
- não substitui a validação ética, legal e de segurança necessária para dados de saúde.
9. Resumo prático
Para aplicar FDD no projeto:
- compreender e registrar o domínio;
- decompor o domínio em áreas, conjuntos e features pequenas;
- escrever cada feature com ação, resultado e objeto;
- priorizar o MVP;
- planejar responsáveis, dependências e critérios de aceitação;
- projetar uma feature por vez e inspecionar o design;
- construir código, testes e documentação juntos;
- revisar o código e promover somente o que estiver pronto;
- demonstrar as features ao cliente;
- registrar aceite, feedback e próximos ajustes.