É uma abordagem de desenvolvimento de software na qual o sistema é construído e entregue em partes menores e funcionais, chamadas de incrementos.
Cada incremento adiciona novas funcionalidades ao sistema, que já podem ser utilizadas pelo cliente ou usuário final, mesmo que o produto completo ainda não esteja pronto.
Ao final de cada ciclo de desenvolvimento, uma nova parte do sistema é entregue, testada e integrada ao que já foi desenvolvido anteriormente, formando progressivamente o produto final.
FDD: O desenvolvimento é dividido em pequenas iterações (ciclos curtos), com entregas rápidas e contínuas de funcionalidades (features).
Tradicional: Segue uma sequência fixa de etapas (análise → design → implementação → testes → entrega). Só há entrega no final.
FDD: O objetivo é entregar pequenas partes do sistema (features) que já geram valor para o cliente em poucos dias.
Tradicional: O foco é concluir todo o sistema para só depois entregar algo utilizável.
FDD: Mudanças podem ser feitas a qualquer momento, pois as funcionalidades são entregues de forma incremental.
Tradicional: Qualquer mudança no escopo após a fase de planejamento pode gerar atrasos e retrabalho, dificultando adaptações.
FDD: O cliente acompanha de perto, dando feedback frequente sobre cada funcionalidade entregue.
Tradicional: O cliente participa mais no início (levantamento de requisitos) e só volta no final para validar o sistema completo.
FDD: O avanço é visível a partir das features finalizadas. Isso permite saber com precisão o que já está pronto.
Tradicional: O progresso é medido por etapas do projeto, mas pode ser difícil saber o quanto do sistema está realmente utilizável até o final.
FDD: Código e funcionalidades são revisados constantemente (code review, testes frequentes), reduzindo erros e melhorando a qualidade.
Tradicional: Os testes são realizados mais no fim, o que pode acumular problemas difíceis de corrigir.
FDD: Cada desenvolvedor assume uma feature (função), do início ao fim, com foco na entrega de valor.
Tradicional: O trabalho é separado por etapas e funções (analistas, programadores, testadores), com menos visão do todo.