web-dev-qa-db-fra.com

La propriété individuelle est-elle importante?

Je suis au milieu d'une dispute avec des collègues sur latine si la propriété de l'équipe de l'ensemble de la base de code est meilleure que la propriété individuelle des composantes de celui-ci.

Je suis un énorme promoteur d'attribution de chaque membre de l'équipe une part à peu près égale du codeBase. Il permet aux gens de prendre la fierté de leur création, donne aux branchements de bugs un premier endroit évident pour attribuer des tickets entrants et contribue à atténuer le "syndrome de la fenêtre cassée".

Il concentre également la connaissance de fonctionnalités spécifiques avec un (ou deux) membres de l'équipe qui facilitent beaucoup les corrections de bugs.

Surtout, il met le dernier exemple sur des décisions majeures avec une personne qui a beaucoup d'informations au lieu d'un comité.

Je ne préconise pas de demander la permission si quelqu'un d'autre veut changer votre code; Peut-être que l'examen du code soit toujours au propriétaire, bien sûr. Je ne suggère pas non plus de construire des silos de connaissances: il ne devrait y avoir rien d'exclusivité à propos de cette propriété.

Mais lorsque vous suggérez cela à mes collègues, j'ai eu une tonne de retournement, certainement beaucoup plus que prévu.

Donc, je demande à la communauté: quelles sont vos opinions sur le travail avec une équipe sur une grande base de code? Y a-t-il quelque chose que je manque de maintenir vigilante la propriété collective?

48
Jim Puls

Je crois que la propriété de l'équipe est beaucoup plus bénéfique à long terme.

Vous avez juste besoin de regarder les 2 scénarios suivants pour comprendre pourquoi la concentration des connaissances en nombre minimum de personnes est inférieure à celle idéale:

  • Membre de l'équipe rencontre un accident malheureux
  • Membre de l'équipe rencontre une meilleure opportunité d'emploi

Naturellement, la personne/les personnes qui écrivent des sections particulières en ont une meilleure connaissance, mais ne cèdent pas à la tentation de leur faire la semelle Silo de la connaissance. Silos vous donnera des victoires à court terme par des douleurs à long terme.

Juste parce que vous n'avez pas de propriété individuelle des sections de code, puisque vous l'avez écrite, cela ne signifie pas que vous n'aurez pas toujours les aspects de "fierté de votre création", etc. Je ne crois pas que la propriété de l'équipe sera grandement diminuer tout sentiment personnel de propriété du code écrit.

46
Dan McGrath

En fin de compte, l'équipe possède le code. Mais pour toutes les raisons que vous avez mentionnées, nous avons désigné des auteurs individuels pour des portions spécifiques du code. Chaque auteur a la responsabilité première de leur partie du code et de la responsabilité secondaire de la base de code dans son ensemble.

Si un problème avec une partie des surfaces de base de code, j'essaie de revenir à la personne qui a initialement écrit le code d'un correctif. Il n'ya évidemment rien empêchant d'autres membres de l'équipe d'appliquer un correctif; Tous les membres de l'équipe devraient être familiarisés avec le code de tous les autres. Mais nous essayons toujours d'obtenir une solution de l'auteur d'origine d'abord. Après tout, ils ont écrit le code; Ils sont les uns les plus familiers avec ça.

J'ai travaillé dans des environnements d'équipe qui, parce que les gens ne ressentaient pas de sens de propriété dans ce qu'ils ont écrit, ils n'étaient pas obligés d'écrire un excellent code, mais simplement du code moyen.

27
Robert Harvey

Si je suis d'accord d'une position commerciale sur les raisons de diffuser les connaissances sur le produit; La réalité est qu'une personne qui concentre ses efforts sur une zone donnée de quoi que ce soit, au fil du temps, deviendra beaucoup plus à voir dans la zone donnée.

Ignorer ceci est d'ignorer la science. Le cerveau est malheureusement incapable de retenir tout ce qu'elle rencontre. Il rappelle ce qui est valide et valable à un moment donné, mais même ce stockage diminue au fil du temps.

J'aurais tendance à être d'accord avec vous que la propriété d'un module ou d'un compartiment spécifique dans la base de code plus large produira généralement de meilleurs résultats. Est-ce que quelqu'un partirait sans préavis entraver le succès? Certainement. Mais prétendant que tout le monde au sein de l'équipe aurait dû avoir la même connaissance en ce qui concerne la base de code est naïf et ne fait rien pour améliorer le code; Il tente de protéger le code. Protéger le code est le rôle de l'entreprise pour des raisons évidentes. Les longueurs d'effort Une entreprise ira à la protection du code peut souvent devenir préjudiciable.

Vous ne vous assurez pas que chaque joueur de votre équipe puisse jouer au quarterback? Je dirais que de faire en sorte que tout membre de l'équipe ait un jeu sur la base du code est le long des mêmes lignes que d'essayer de faire connaître tous les acteurs de votre équipe pour jouer au quart de quart de niveau satisfaisant ... il ne s'additionne pas. Avez-vous des sauvegardes? Bien sûr, vous faites ... mais les membres de l'équipe devraient avoir une identité au sein de l'équipe. Croire que tout le monde est la même chose est de demander la douleur d'une sorte différente ...

19
Aaron McIver

Je ne sais pas que le code individuel propriété est une bonne idée. Au moins pas dans le sens où les gens peuvent dire "c'est mon code, et je ferai ce que je veux avec elle". Peut-être préférable de dire que vous devriez avoir un code individuel -gestion: Le code devrait appartenir à l'équipe, mais il y a une personne en particulier que l'équipe déléguette la responsabilité et l'autorité sur elle.

La raison de ceci étant que si c'est la responsabilité de tout le monde, il n'y a pas de responsabilité de personne.

10
Jason Baker

J'épouse la propriété de l'équipe sur une personne pour les raisons suivantes:

  • Cohérence du code sur l'ensemble du projet
  • Favorise la discussion du code, qui conduit toujours à de meilleures solutions plus efficaces
  • Si un membre de l'équipe est malade (ou pire), une section complète du code n'est pas soumise à des retards
  • Les membres de l'équipe peuvent travailler sur toutes les parties du projet, qui sert à établir un examen de code intégré au processus de développement
8
morganpdx

La spécialisation est bonne - pour une grande base de code, cela peut à long terme, économisez un peu de temps de communication - mais la propriété n'est pas.

Ce que je veux dire, c'est que l'attitude devrait être que le équipe a un bug, et personne ne devrait dire que "Oh, seul x peut toucher ce code, donc ce n'est pas mon problème". Si vous faites partie de l'équipe, il est également de votre responsabilité de corriger des bugs dans l'ensemble de la base de code si vous le pouvez, et de le faire correctement. Personne X peut être le meilleur choix pour le faire, mais quiconque devrait être censé le faire s'ils devaient le faire. Cela nécessite naturellement que le code soit écrit d'une manière qui Permet et invite membres de l'équipe à travailler avec elle. Avoir un code de nanage interdire cela, alors efforcez-vous pour le code simple, le code simple, car cela permet à la plupart des développeurs de travailler avec elle. Vous voudrez peut-être aller avec la revue des pairs à Garder cela de cette façon.

6
user1249

Je dois être en désaccord avec vous: la propriété de l'équipe d'une base de code est une bien meilleure option que la propriété individuelle.

L'inconvénient évidente de la propriété individuelle est que si quelque chose arrive à un seul employé (sombrer, prendre sa retraite, tomber malade, etc.), à moins d'avoir écrit vraiment Clean Code, ça va prendre un certain temps à Pour que quelqu'un d'autre adopte le code de cette personne, surtout s'ils devaient également gérer leur propre code.

Ils sont également trop nombreux outils qui facilitent la propriété de l'équipe. Avis de code, Contrôle de la source - Ce sont des choses qui encouragent l'implication de l'équipe sur l'ensemble de la base de code. En outre, comment attribuez-vous une partie particulière d'une base de code à une seule personne? Dites-vous simplement que seule cette personne peut modifier ce fichier?

Enfin, je pense que si une partie d'une base de code brise, il est trop facile de blâmer la personne qui en était responsable et qui provoque juste plus de problèmes.

5
Saurabh Sharan

Je pense que vous avez besoin à la fois, parce qu'il ya une tension entre les deux approches.

Si, pour une partie de code il n'y a qu'une seule personne qui peut travailler, qui est vraiment mauvais à long terme pour l'entreprise, d'autant plus que/si elle se développe, parce que chaque développeur devient un point de défaillance. D'autre part, la propriété de code individuel (espérons-le) permet d'accélérer le délai de livraison, parce que développeur préfèrent généralement cette approche (incitation), parce que le développeur connaît le code très bien, etc ... Il y a aussi une question de temps: il devrait être possible aux développeurs réallocations des projets spécifiques en fonction des besoins de l'entreprise, mais si vous le faites sur une base quotidienne, c'est horrible (si seulement parce que les développeurs détestent, mais aussi parce que le coût de commutation est trop lourd, et vous passez la plupart de votre temps à faire rien).

OMI, un rôle d'un manager est de trouver un bon équilibre entre les deux. révision du Code, les normes de codage unifiant sur un ensemble d'outils devrait également contribuer à diminuer la poinf de problème d'échec. Après tout, le principal point de code maintenable est de résoudre ce problème.

5
David Cournapeau

Je pense que la propriété du code collectif est incomparablement meilleure que la propriété individuelle du code.

Je ne suis pas si dérangé par l'argument du camion - dans un modèle de propriété individuel, la perte d'un propriétaire est chère en termes de temps nécessaire pour que quelqu'un d'autre prend la relève, mais l'événement est assez rare que le coût amorti est faible.

Je pense plutôt que la propriété du code collectif conduit directement au code de haute qualité. Ceci est pour deux raisons très simples. Premièrement, parce que la vérité pénible est que certains de vos programmeurs ne sont pas aussi bons que les autres, et s'ils possèdent le code, ce code sera médiocre; Donner à votre meilleur accès aux programmeurs l'améliorera. Deuxièmement, l'examen du code: Si tout le monde possède le code, tout le monde peut l'examiner et l'améliorer; Même les bons programmeurs écrivent du code de sous-par le code si laissé à leurs propres appareils.

Je dis cela en fonction de l'expérience de mon projet actuel. Nous visons à pratiquer la propriété collective, mais certains bits du système sont devenus spécialisés - moi et un autre gars sont des propriétaires de facto du système de construction, par exemple, il y a un gars qui fait la plupart des travaux sur les flux de données entrants , un autre gars travaillant sur l'importation d'images, etc. Dans plusieurs de ces régions (en particulier, je dois avouer, dans ma région!), La qualité du code a été sérieusement subi - il y a des erreurs, des idées fausses, des kidges et des hacks qui ne survivraient tout simplement pas à l'attention des autres personnes de l'équipe.

Je note que vous pouvez obtenir certains des avantages de la propriété du code collectif en adoptant une propriété individuelle du code où la propriété d'un peu de code se déplace régulièrement entre différents programmeurs (disons, tous les trois mois, ou chaque libération - peut-être même chaque itération?) . Une programmation équivalente de rotation des cultures. Cela pourrait être amusant. Je ne vais pas essayer moi-même, cependant.

4
Tom Anderson

Je ne pense pas que la propriété du code d'équipe est aussi importante que d'avoir plusieurs contributeurs à comprendre l'architecture de base des sous-systèmes dominants.

Par exemple, nous avons quelques-uns de gars de notre équipe qui effectuent des pages Web administratives pour nos produits serveur. Nous avons construit un moteur de script côté serveur personnalisé afin que nous puissions appeler essentiels Call C fonctionner sur le serveur directement à partir de notre Java scripts ou html. Je pense qu'il est plus important que notre "web" Les gars comprennent comment utiliser ce moteur opposé à être copropriétaire des applications de page Web.

1
Pemdas

Jim, je suis avec vous sur celui-là à 100%. Je suis au cœur de la même bataille de mon lieu de travail - c'est pourquoi j'ai trébuché sur votre question.

La façon dont je vois, c'est: "Quand tout le monde le possède, personne ne le possède".

Pour moi, il n'y a pas de facteur plus important pour coder la qualité que la propriété et la responsabilité.

Exemple de la vie réelle illustrent ce bien. Que feriez-vous des soins: votre pelouse privée ou votre parc de la communauté? Assez évident.

Cela ne doit pas nécessairement être échangé par "flexibilité de l'équipe". Cela signifie simplement que quand une personne possède quelque chose qu'il le possède - et si seulement pour la journée.

0
acohen

Pour moi, cela dépend de la dynamique de votre équipe.

Par exemple, si vous avez une équipe qui n'est pas unifiée par des normes, une revue par les pairs, des tests méthodiques ou si vous avez une équipe où les niveaux de compétence varient sauvagement parmi les membres, il pourrait être utile de rechercher une notion plus forte de la propriété du code avec un état d'esprit modulaire plus noir.

Manquant ceci, par exemple, votre interface soigneusement conçue conforme à SOLID Principes pourrait rapidement être ruinée par une personne qui ne connaît même pas "solide" des moyens et veut ajouter de nouvelles fonctions éclectiques tout le temps à l'interface pour "commodité", ceci est de loin le pire.

Vous pouvez également traiter avec des collaborateurs bâclés dont l'idée de fixer un bogue corrige le symptôme sans comprendre le problème de la racine (ex: essayer de répondre à un rapport d'accident en mettant simplement des solutions de contournement dans le code pour masquer le bogue et transférer le virement mortel effets secondaires à quelqu'un d'autre). Dans ce cas, ce n'est pas tout aussi mauvais que le sabotage design d'interface et vous pouvez protéger vos intentions avec des tests d'unités soigneusement construits.

La solution idéale consiste à resserrer votre équipe à un point où cette notion de paternité et de propriété ne devient plus si importante. L'examen par les pairs ne concerne pas seulement l'amélioration de la qualité du code, il s'agit également d'améliorer le travail d'équipe. Les normes ne sont pas seulement de la cohérence, ils améliorent le travail d'équipe.

Pourtant, il existe des scénarios où la révision par les pairs et que tout le monde se conforme à une norme est tout simplement désespéré et apportera beaucoup de critiques sans espoir sans espoir dans le mélange. Je dirais que beaucoup de savoir si la propriété du code ou la propriété de l'équipe prend une priorité plus forte sera basée sur la capacité de votre équipe à effectuer une révision par des pairs efficace et à laisser réellement que tout le monde sortait comme ils en ont bénéficié (les deux en termes de révision elle-même. et se rapprochent de plus en plus dans la mentalité et les normes de suite). Dans de grandes équipes lâches et/ou disparates, cela pourrait sembler sans espoir. Si votre équipe peut fonctionner comme une "équipe" où vous pouvez à peine dire qui a écrit qui a écrit quoi, puis la seule propriété commencera à paraître comme une notion idiote.

Dans ces types de scénarios lointains, cette notion de propriété de code peut réellement aider. Il essaie de faire du bien un scénario pire des cas, mais cela peut aider si le travail d'équipe est généralement sans espoir de mettre une clôture autour du code d'un auteur. Dans ce cas, il s'agit de travail d'équipe décroissant, mais cela peut être meilleur si le "travail d'équipe" ne conduit que de marcher à pied.

0
user204677

Je pense que vous prenez la propriété individuelle du code au moment de l'écrire, puis de la retourner à l'équipe. De cette façon, tout le monde prend la responsabilité et contribue. Tout le monde devrait vouloir réparer une défaillance de codage qu'ils ont créée. Avec un examen de code, cela crée des normes plus élevées. Personne ne veut le travail de nettoyage après les autres.

Pensez plus à la responsabilité et à moins de posséder. Après tout, quiconque écrit les chèques est le véritable propriétaire de toute façon.

0
JeffO