Um colega me pediu para explicar claramente a diferença entre desenvolvimento comum e pesquisa e desenvolvimento (P&D) e não consegui fazê-lo. Depois de ler a Wikipedia, ainda não tenho a resposta precisa.
Segundo a Wikipedia (ligeiramente modificado):
Existem dois modelos principais:
Em um modelo, a função principal é desenvolver novos produtos ;
no outro modelo, a função principal é descobrir e criar novos conhecimentos sobre tópicos científicos e tecnológicos com o objetivo de descobrir e permitir o desenvolvimento de novos produtos, processos e serviços valiosos.
O primeiro modelo é confuso. Isso significa que o desenvolvimento (não P&D) consiste exclusivamente em adicionar novos recursos a um produto, solucionar bugs e fazer manutenção? E se algo que foi desenvolvido anteriormente como um novo recurso se tornar um produto separado?
O segundo modelo é menos confuso, mas ainda assim, como qualificar se algo é conhecimento novo ou conhecimento existente que é apenas redescoberto?
Mais tarde, a Wikipedia acrescenta que o desenvolvimento comum é diferente de P&D, devido a:
lucro quase imediato ou melhoria imediata.
Ainda não está claro o suficiente. Como qualificar "lucro quase imediato"? E se uma tarefa tiver lucro imediato, mas exigir pesquisas pesadas? Ou se é básico, mas tem lucro incerto, como a imposição de um estilo comum sobre a base de código?
Por exemplo, ele pertence ao desenvolvimento ou P&D para:
Desenvolver um mecanismo que abstraia o acesso ao banco de dados, simplificando e encurtando enormemente o código de outros aplicativos (existentes ou que serão escritos no futuro) que devem acessar o banco de dados?
Estabeleça uma nova arquitetura orientada a serviços para toda a organização dos recursos da empresa, a fim de passar de um monte de aplicativos separados e autônomos para um conjunto de serviços Web interconectados e bem organizados, como o que é usado pela Amazon?
Projetar um novo protocolo de comunicação para permitir a replicação mais rápida de dados entre dois data centers da empresa?
Conceba um novo tipo de teste de software enquanto trabalha em um produto específico, sabendo que esse tipo de teste melhorará / simplificará o processo de teste?
Prove que a programação funcional é mais apropriada que o OOP para um aplicativo específico, com base em evidências, lógica e experiência anterior?
Aprimore o aplicativo existente adicionando gestos em telas táteis, depois de fazer estudos e testes que mostram que esses gestos melhoram a produtividade dos usuários em uma proporção de pelo menos 1,4 para um conjunto preciso de tarefas?
Encontrou uma maneira de aprimorar fortemente a eficácia do uso de energia (PUE) de um data center?
Criar uma linguagem específica de domínio (DSL)?
Em resumo, como posso determinar se estou fazendo P&D enquanto estou trabalhando em alguma coisa?