Comment empêcher un collègue d'introduire une complexité et une abstraction extrêmes?

14

Je passe une période très difficile parce que mon collègue semble montrer

  1. Efforts d'optimisation prématurés / inutiles
  2. Déduplication prématurée avec des abstractions douteuses
    Par exemple, nous utilisons une architecture VIPER modifiée. Il a introduit une classe de base pour le composant Router (en utilisant des génériques) dans le cadre de l'implémentation de la première pile viper sans réellement savoir ce qui sera dupliqué dans les autres routeurs. Maintenant, nous sommes obligés de fournir un type UseCasequi contient des cas d'utilisation, mais la plupart des routeurs n'ont pas plusieurs cas d'utilisation, un seul.
  3. Inventer des solutions à usage général pour de futures fonctionnalités potentielles spéculatives
    Par exemple, il a écrit un gestionnaire pour remplir des vues de tables de cellules statiques lorsque nous n'avions que deux écrans comme celui-ci dans l'application et il n'était pas conscient que la conception s'éloignerait des formes verticales ennuyeuses pour devenir plus personnalisées. UIs donc le manager est inutile.
  4. Opter pour la complexité accessoire

Comment puis-je lutter contre cela quand il présente également une barrière linguistique avec un anglais moche?

Earl Grey
la source
Avez-vous essayé des revues de code obligatoires pour donner l'occasion de discuter de ce qui se passe? Avez-vous essayé le tableau blanc avec lui pour trouver une bonne solution avant de s'asseoir pour commencer à coder?
Becuzz
1
Pouvez-vous donner un exemple où des situations comme en 2 ou 3 pourraient se produire?
morbidCode
1
Je ressens ta douleur, @EarlGrey. Je n'ai probablement jamais vu de cas où le codage "générique" super à l'avance fonctionne réellement comme prévu à l'avenir.
Graham
2
Je connais des gens qui appellent à l'aide d'un tri rapide au lieu d'un tri à bulles une optimisation prématurée. Quel est ton seuil?
Pieter B
3
Votre collègue semble oublier / ignorer le principe de YAGNI .
Bart van Ingen Schenau

Réponses:

14

Votre description ressemble au codage que j'ai fait dans les années 1990. Jouer correctement pour le monde moderne n'est pas facile. Je recommande de se concentrer sur les facteurs suivants:

  • Jumelage. Deux paires d'yeux peuvent aider à se prémunir contre une seule personne.
  • Révision du code. Les magasins modernes examinent 100% de tous les changements de code par plusieurs personnes
  • Couverture de test. Assurez-vous qu'il existe des tests simples. Des tests trop compliqués peuvent refléter du code trop compliqué
  • Beaucoup de discussions sur le produit minimum viable. Décomposez les fonctionnalités en composants les plus petits possibles. Il est correct d'avoir un ticket pour changer la base de données, un autre pour remplir les tables de référence, puis un troisième pour mettre à jour l'interface utilisateur (la partie qui sera réellement visible pour les utilisateurs finaux), mais cela semblera contre-intuitif dès que la résistance est probable.
  • Discussions fréquentes sur la façon d'avoir des tickets et des changements plus petits.
  • Vote par points de toute l'équipe pour ouvrir des discussions sur la complexité et l'approche.
  • Éducation. Assurez-vous d'avoir un déjeuner et apprend, des sessions de formation, etc. afin que les gens puissent se familiariser avec les bonnes pratiques et pourquoi elles sont bonnes.

De tout ce qui précède, mes deux principaux points d'intérêt seraient les revues de code et les petites histoires.

À la fin de la journée, je pense que la meilleure solution pour changer le comportement existant est d'avoir une personne dédiée qui dirige le changement. Dans les organisations Agiles (probablement la majorité aujourd'hui), il faut une personne dévouée comme le Scrum-Master pour poser constamment les bonnes questions et guider l'approche de développement. Dans ma dernière organisation, nous en avions une douzaine, un dans chaque équipe pour aider les gens à faire face à ce genre de problèmes. Cela élimine la nécessité pour un développeur membre de l'équipe d'essayer de convaincre les autres que «leur chemin est le bon», ce qui peut souvent conduire à des échanges acrimonieux et à du mauvais sang.

Michael Durrant
la source