Je me suis récemment retrouvé dans la position d'expliquer une application (interne) que j'ai écrite à deux candidats que mon entreprise aime embaucher pour aider à la maintenance et à l'ajout de fonctionnalités mineures.
C'est la première application "de production" que j'ai écrite, elle a 45k LOCs et j'ai passé presque deux ans de développement "en solo" dessus. Je suis assez jeune (18 ans) et j'ai écrit l'application à partir de zéro alors que j'étais contractuel en tant que remplaçant d'un ancien développeur qui a quitté l'entreprise. Sans expérience dans la conception d'applications de cette taille, j'ai essayé d'utiliser des modèles d'architecture et de conception courants.
Aujourd'hui, je sais que j'ai fait un peu trop d'ingénierie, par exemple en utilisant une architecture de suivi des changements déconnectée au lieu du modèle de l'unité de travail, que l'ORM choisi a déjà mis en œuvre. Je n'aurai probablement jamais besoin de passer à un "vrai" système à trois niveaux.
Les deux candidats ont plus de 10 ans d'expérience dans le développement d'applications internes avec la plateforme appropriée. Ayant la moitié de leur âge et peu d'expérience, je respecte leur opinion. Lorsque je leur ai expliqué l'architecture de l'application, ils ont fait des commentaires du genre :
- Jeez, personne ne me paierait pour faire des choses comme ça, je dois faire des choses.
- S'en tenir à ce que fait le cadre, ne pas utiliser de bibliothèques/technologies fantaisistes
- Ne pas envelopper le code du cadre. Dans une équipe, chacun écrira de toute façon son propre code wrapper.
- Vous utilisez .NET 3.5 ? Eh bien, nous utilisons 2.0.
- Qu'est-ce que ce truc LINQ m'apporte ? Toutes ces compositions et projections de requêtes semblent trop compliquées.
Je me pose maintenant la question :
Suis-je un architecture astronaute ? Comment savoir si je vais trop loin en matière d'architecture ? Quels sont les symptômes courants d'une ingénierie excessive ?