Supposons que vous venez de commencer à travailler dans une très petite équipe sur un projet {actuellement relativement petit, mais espérons-le plus gros ultérieurement}. Notez qu'il s'agit d'un projet réel destiné à être utilisé par d'autres développeurs du monde réel, et non d'un projet académique destiné à être abandonné à la fin du semestre.
Toutefois, le code n’ayant pas encore été communiqué aux autres, aucune décision n’est encore gravée dans le marbre.
Les méthodologies
L'un de vous aime commencer à coder et faire en sorte que les pièces s'emboîtent l'une après l'autre avant d'avoir nécessairement une idée claire de la manière dont tous les composants vont interagir (conception ascendante). Un autre d'entre vous aime d'abord faire le design dans son intégralité et préciser les détails de tous les composants et de la communication avant de coder une solution.
Supposons que vous travaillez sur un nouveau système plutôt que d’imiter les systèmes existants. Il n’est donc pas toujours évident de définir le bon design final. Ainsi, dans votre équipe, différents membres de l'équipe ont parfois des idées différentes sur les exigences même nécessaires pour le produit final, sans parler de la façon de le concevoir.
Lorsque le développeur de bas en haut écrit du code, le développeur de haut en bas le rejette en raison de problèmes futurs envisagés dans la conception, même si le code peut résoudre le problème en question, estimant qu'il est plus important que la conception soit correcte. avant de tenter de coder la solution au problème.
Lorsque le développeur descendant essaie de résoudre l'intégralité de la conception et des problèmes envisagés avant de commencer à écrire le code, le développeur ascendant le rejette car il ne pense pas que certains problèmes se poseront réellement dans la pratique. et pense que la conception devra peut-être être modifiée à l’avenir lorsque les exigences et les contraintes deviendront plus claires.
Le problème
Le problème qui en a résulté est que le développeur bottom-up finit par perdre du temps, car le développeur top-down décide souvent que la solution écrite par le développeur bottom-up doit être abandonnée à cause d'un défaut de conception, d'où la nécessité de -écrire le code.
Le développeur descendant finit par perdre son temps, car au lieu de paralléliser le travail, il s’efforce fréquemment de trouver la bonne conception avec le développeur bottom-up, en sérialisant les deux au point d’être encore plus rapide. pour 1 personne pour faire le travail que 2.
Les deux développeurs souhaitent continuer à travailler ensemble, mais il ne semble pas que la combinaison les aide réellement dans la pratique.
Les objectifs
Les objectifs communs sont évidemment de maximiser l’efficacité du codage (c’est-à-dire de minimiser les pertes de temps) et d’écrire des logiciels utiles.
La question
En termes simples, comment résoudre ce problème et faire face à cette situation?
La seule solution efficace à laquelle je puisse penser sans perdre de temps est de laisser chaque développeur suivre son propre style pour la conception. Mais c'est plus difficile qu'il n'y paraît lorsque vous révisez le code et que vous devez réellement approuver les modifications apportées par les autres et lorsque vous essayez de concevoir un cadre cohérent que les autres utilisateurs pourront utiliser.
Y a-t-il un meilleur moyen?