Un collègue m'a demandé d'expliquer clairement la différence entre développement ordinaire et recherche et développement (R & D) et était incapable de le faire. Après avoir lu Wikipedia, je n'ai toujours pas de réponse précise.
Selon Wikipedia (légèrement modifié):
Il existe deux modèles principaux:
Dans un modèle, la fonction principale est de développer de nouveaux produits ;
dans l'autre modèle, la fonction principale est de découvrir et de créer de nouvelles connaissances sur des sujets scientifiques et technologiques dans le but de découvrir et de permettre le développement de nouveaux produits, processus et services utiles.
Le premier modèle est déroutant. Cela signifie-t-il que le développement (et non la R & D) consiste exclusivement à ajouter de nouvelles fonctionnalités à un produit, à résoudre des bugs et à effectuer la maintenance? Et si quelque chose qui était auparavant développé comme nouvelle fonctionnalité devenait un produit séparé?
Le second modèle est moins déroutant, mais quand même, comment qualifier si quelque chose est une nouvelle connaissance ou une connaissance existante qui vient d'être redécouverte?
Plus tard, Wikipedia ajoute que le développement ordinaire est différent de la R & D en raison de:
profit presque immédiat ou amélioration immédiate.
Ce n'est toujours pas assez clair. Comment qualifier un "profit quasi immédiat"? Que se passe-t-il si une tâche génère un profit immédiat mais nécessite des recherches approfondies? Ou si elle est basique mais a un profit incertain, comme l’application d’un style commun sur la base de code?
Par exemple, appartient-il au développement ou à la R & D pour:
Développer un moteur qui abstrait l'accès à la base de données, simplifiant et simplifiant énormément le code d'autres applications (existantes ou à écrire) qui devraient accéder à la base de données?
Établissez une nouvelle architecture orientée services pour l'ensemble de l'organisation des ressources de l'entreprise, afin de passer d'un ensemble d'applications distinctes et autonomes à un ensemble de services Web interconnectés et bien organisés, comme ce qui est utilisé par Amazon?
Concevoir un nouveau protocole de communication pour permettre une réplication plus rapide des données entre deux centres de données de la société?
Concevoir un nouveau type de test logiciel tout en travaillant sur un produit spécifique, sachant que ce type de test va améliorer / simplifier le processus de test?
Prouver que la programmation fonctionnelle est plus appropriée que la POO pour une application spécifique, basée sur des preuves, la logique et l'expérience antérieure?
Améliorer l'application existante en ajoutant des gestes sur des écrans tactiles, après des études et des tests montrant que ces gestes améliorent la productivité des utilisateurs d'au moins 1,4 pour un ensemble de tâches précis?
Trouver un moyen d'améliorer fortement l'efficacité énergétique d'un centre de données?
Créer un langage spécifique au domaine (DSL)?
En bref, comment puis-je déterminer si je fais de la RD tout en travaillant sur quelque chose?