Le perfectionnisme peut être bon et mauvais lors de la programmation.
Veuillez commenter si la question n'est pas claire.
EMBRASSE et YAGNI , surtout yagni.
Seul ingénieur une solution pour les choses que vous savez que vous allez avoir besoin bientôt. N'engagez pas l'ingénieur pour les choses qui pourraient être nécessaires dans deux ans, car probablement que vous aurez probablement besoin de choses très différentes et devront la réinganiser de toute façon.
Au moment où vous commencez à parler "avec cette conception à un moment donné à un moment donné, nous pourrions faire x, ou même y", au lieu de "Cette conception nous permet de faire des exigences clientes z dans la prochaine version", c'est-à-dire quand vous obtenez dans l'astronomie de l'architecture.
En réponse aux commentaires:
J'étais très perfectionniste (passer du temps à la création de cadres, pas de solutions).
Mais la chose qui m'a vraiment aidé à accélérer ma production était d'apprendre et de suivre les principes de BDD/TDD, y compris l'extérieur en principe (que j'ai trouvé particulièrement difficile à apprendre à adopter).
Cela m'a vraiment appris à ne pas écrire une seule ligne de code avant qu'un test n'existe pour cela. Mais les tests de l'unité n'existent pas non plus avant qu'un test d'acceptation n'existe pour cela. Et les tests d'acceptation proviennent des besoins réels des utilisateurs.
Donc, donc toutes les lignes de code proviennent d'un besoin réel.
Si vous n'êtes pas familier avec l'extérieur en principe, il dicte que vous commencez à écrire des tests pour la couche la plus externe de votre application (c'est-à-dire l'interface graphique dans pratiquement tous les cas) utilisant des tests doubles pour simuler le comportement des couches inférieures. Ensuite, vous implémentez juste assez pour que les tests passent. Cette implémentation de la couche supérieure dicte ensuite les tests que vous devez écrire pour la couche suivante, etc. jusqu'à ce que vous appuyez sur la couche inférieure de votre application.
Une solution est surchargée lorsque le temps supplémentaire pris pour la compléter vaut plus que l'impact négatif potentiel de lorsque la solution la plus facile est terminée lorsque celle-ci sera naturellement améliorée/modifiée.
Fondamentalement, vous négociez maintenant avec le temps avec le temps plus tard. Si vous dépensez plus de temps maintenant, vous économiserez plus tard, vous le faites mal. Si vous êtes vraiment sur l'ingénierie, vous passez du temps maintenant que cela n'affecte pas combien de temps (ou même fait il plus) que vous dépensez plus tard.
Vous vous améliorez de travailler cela plus d'expérience que vous avez. La meilleure façon de faire des choses (de mon expérience) est de faire ce dont vous avez besoin maintenant, mais d'une manière la plus facilement augmentée, les exigences ultérieures doivent la demander. Travailler comment faire c'est le bit tressant.
Je remarque que je suis meilleur à cela par expérience.
Quand j'étais (très) jeune, je suis toujours allé pour la solution la plus parfaite, pas de compromis. Maintenant, je suis mieux à garder des choses comme le budget et le temps à l'esprit.
La limite de temps dessine cette ligne assez claire.
Professionnellement et personnellement, la norme que j'essaie de s'appliquer à moi-même est la suivante:
Soyez du contenu avec gagnant.
Si mon code résout le problème, il est censé résoudre et ne créer aucun nouveau problème *, il est très probable de passer à autre chose. Lorsque vous apprenez à définir la barre aussi élevée que nécessaire, "assez bon" devient assez bon.
La perfection est comme la vitesse de la lumière: vous n'allez jamais y arriver, mais il n'y a pas de limite à l'énergie que vous pouvez dépenser en essayant.
(* - Notez que "Buggy" et "Difficile à maintenir" tombe fermement sous la rubrique "nouveaux problèmes". Je ne l'appelle donc pas terminé avant que le code ait été testé, si les bits superflus ont été coupés et avaient La documentation des commentaires/API a mis à jour.)