Quand devient-il exagéré?

10

Tout d'abord, je m'excuse car je ne sais pas comment créer un fil de discussion communautaire; donc quelqu'un m'aide s'il vous plaît.

En tant que développeur, sur de nombreuses plateformes, technologies et même au niveau de l'infrastructure; Je me retrouve toujours à demander, quand est-ce que je fais trop?!?

Cela a été un processus d'apprentissage sans fin depuis que j'ai commencé. Une (1) chose que j'ai apprise, c'est que les exigences sont à peine valables pour une période de temps prolongée et, en tant que tel, un peu de prévoyance peut aller très loin.

Mais où est l'équilibre, et comment savoir quand on perd du temps sans le gagner?!

Theofanis Pantelides
la source
1
Parlons-nous de choses comme le faire évoluer pour un million d'utilisateurs dès le premier jour où vous n'avez pas de clients en ce moment? Ou des choses plus fonctionnelles, comme rendre la façon dont les calculs fiscaux sont effectués «configurables» lorsqu'il n'y a aucune suggestion qu'ils pourraient un jour changer et même s'ils ne le savaient, personne ne savait comment ils pourraient fonctionner dans ce nouveau monde hypothétique?
Jon Hopkins
1
Le wiki communautaire est à peu près obsolète. Cela n'a jamais vraiment fonctionné comme prévu. Ne t'en fais pas.
David Thornley
Lorsque vous parlez d'un million d'utilisateurs, la surpuissance ne devrait pas faire partie de votre vocabulaire.
Theofanis Pantelides

Réponses:

12

Vous en faites trop lorsque le développeur moyen ne peut pas comprendre ce que vous avez fait en lisant votre code.

  • Faites des révisions fréquentes du code avec votre équipe.
  • Discutez avec les architectures, technologies ou modèles que vous prévoyez d'utiliser. (dans les réunions de stand-up quotidiennes si vous en avez)

Je combat tous les "architectes" pilotés par CV que je rencontre. Je souhaite que le dôme existe! ;)

Je crois que le monde gaspille un énorme tas d'argent que nous pourrions utiliser pour améliorer notre vie (de programmeur) à la place.

Communauté
la source
5
"Je me bats contre tous les" architectes "pilotés par CV" Je rencontre ":)
Gratzy
2
Je ne suis pas nécessairement d'accord sur ce point (pratiquement), étant donné un niveau inégal de développeurs. De nombreuses fois, je refactorise des projets similaires pour utiliser une bibliothèque commune, et ce n'est pas toujours aussi lisible qu'auparavant.
Theofanis Pantelides
1
Je suppose qu'il est assez essentiel que chaque membre de l'équipe comprenne assez bien le code source sur lequel ils travaillent. Pour la richesse de votre projet et aussi pour éviter que l'architecte ne soit l'esclave de ses propres réalisations. Donc, s'il y a trop de différence dans les connaissances, corrigez-le d'abord.
1
J'aime ta première phrase; la clarté du code est importante. Mais des revues de code fréquentes ? Discussions architecturales dans les réunions quotidiennes ... Vraiment? Et que signifie exactement "architectes axés sur les CV"?
Robert Harvey
1
Les révisions fréquentes du code signifient qu'elles doivent être automatiques. Vous écrivez une fonctionnalité, l'un de vos collègues l'examine et vous devez la comprendre pour la valider. S'il vous interroge, vous travaillez ensemble pour améliorer le code. Vous mentionnez vos problèmes architecturaux lors du stand-up, mais la discussion a lieu après. Lisez Qui a besoin d'un architecte ( martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf ). Piloté par CV signifie que vous
11

Lorsque les processus dépassent les résultats.

Trop souvent, nous avons vu que si les développeurs se concentrent davantage sur le processus plutôt que sur les résultats (comme la qualité, le respect des délais, etc.), de mauvaises choses commencent.

C'est pourquoi il ne faut jamais oublier que le but des revues de code, des modèles de conception, etc. est d'améliorer le code, mais ils ne sont pas eux-mêmes la cible.

terminus
la source
4

Pour moi, j'aime l'approche que Kent Beck propose dans XP (je ne sais pas si c'est "son" idée ou celle de quelqu'un d'autre, mais c'est là que je l'ai entendue pour la première fois):

Il est déjà assez difficile de résoudre les problèmes d'aujourd'hui sans essayer de déterminer quels sont les problèmes de demain et de les résoudre également.

Les développeurs peuvent consacrer beaucoup de temps à trouver des solutions à des exigences qui n'existent pas, des cas marginaux qui ne se produiront jamais ou même de véritables problèmes où l'impact du problème est nettement inférieur au coût de sa prévention.

C'est le temps qui pourrait être consacré aux choses que les utilisateurs voudront et utiliseront vraiment, des choses qui leur donneront des avantages qui dépasseront massivement même les inconvénients qui seront causés dans le cas peu probable où l'une de ces choses se produirait réellement.

Au-delà même de ce résultat non optimal pour l'utilisateur, l'impact sur le développeur de la suringénierie de cette manière a tendance à être sur un code complexe qui est plus difficile à prendre en charge et plus difficile à améliorer.

Donc pour moi, si vous savez, ou pouvez être assez certain, que quelque chose est une exigence ou va causer un problème, résolvez-le, sinon, ne le faites pas.

Vous devrez peut-être revenir et la retravailler s'il s'avère qu'il y avait une exigence plus large que celle que vous aviez initialement mise en œuvre, mais généralement l'effort total que vous déployez dans le projet sera toujours plus faible car dans la plupart des cas, cela ne se produira pas.

Jon Hopkins
la source
Que diriez-vous de tout modulariser, puis de remplacer les modules à mesure que vous évoluez? ou est-ce aussi exagéré!?
Theofanis Pantelides
1
@Theofanis Patelides - Un code bien structuré est évidemment toujours une bonne idée mais comme pour la plupart des choses, vous pouvez certainement aller trop loin. Je pense qu'avec beaucoup de ces choses, cela devient instinct avec le temps - vous savez ce que vous avez fait auparavant et qui a été une perte de temps.
Jon Hopkins
1

Votre question est assez ouverte, je vais donc l'interpréter comme "en faire trop sur une partie du projet":

Pour moi, c'est facile de passer trop de temps sur quelque chose qui n'apporte pas vraiment beaucoup de gain au client. Souvent, ce sont les petites choses telles que "Eh bien, cela fonctionne, mais pas tout à fait comme je le veux aussi" où le client ne se souciera probablement pas si cela fonctionne de cette façon ou d'une autre.

Lorsque cela se produit, je dois l'arrêter et passer du temps sur des choses plus importantes. Il vaut mieux que le produit fonctionne dans son ensemble que non, mais vous avez ces petites pièces qui fonctionnent parfaitement.

L'écriture de code traceur (à partir de Code Complete ) est probablement une bonne idée d'éviter cela: vous démarrez votre projet en écrivant du code qui connecte tout le code - de l'interface graphique (ou à proximité) jusqu'au back-end, puis à l'arrière. De cette façon, vous avez toujours quelque chose qui fonctionne et vous ne passez pas de temps à perfectionner les petites choses jusqu'à ce que tout fonctionne.

Mais tout de même, c'est une question de discipline et de priorisation.

gablin
la source
Je suis d'accord, mais je me suis également retrouvé plusieurs fois à passer des heures de fonctionnalité, puis à le transmettre à un utilisateur final non technique et à le refuser, à cause des petites choses!
Theofanis Pantelides
1

Quand je réponds non à "vais-je être fou, je ne l'ai pas fait plus tard et ça me mord ..

Les contraintes de ressources et de temps IRL m'obtiennent généralement avant que je doive beaucoup poser cette question. À ce stade, vous vous concentrez uniquement sur les bits les plus importants / réalisables et espérez le meilleur.

Facture
la source
1
Pour moi, il n'y a rien de plus irritant que de s'écarter du Plan A
Theofanis Pantelides
1

un processus d'apprentissage sans fin en effet! ... et je pense que ça reste comme ça! L'équilibre est lorsque les choses sont suffisamment efficaces et que vous avez également le temps de faire autre chose que la programmation. Je suis d'accord avec Gablin "une question de discipline et de priorisation" et Jim Hopkins sur le fait que cela devient instinct après un certain temps. Je sais que perfectionner les petites pièces est ce qui nous rend heureux, mais au final, tout dépend de ce qui rend l'utilisateur final heureux. donc je dirais que l'équilibre (ou peut-être le compromis) est de rendre l'utilisateur final / client / client heureux en premier (ce qui devrait être le plan A) et ensuite s'il reste du temps à perfectionner - rendre plus efficaces vos "petites pièces" et / ou tout ce que vous voulez. À un moment donné, vous devez dire «assez» cependant :) sinon oui, cela deviendra une exagération!

le pire des cas est bien sûr lorsque l'utilisateur final / client / client est vous! :)


la source