Maintenabilité
Le code est lu bien plus souvent qu'il n'est écrit. La maintenabilité est ce qui distingue une base de code de trois ans agréable d'un bourbier. Optimisez pour le prochain développeur, qui pourrait être vous dans six mois.
Règles
- Une fonctionnalité, un emplacement. Regroupez par fonctionnalité (voir backend/core/SKILL.md). Une modification unique doit toucher des fichiers adjacents, et non des couches éparpillées.
- Interfaces uniquement aux frontières des modules. À l'intérieur d'une fonctionnalité, les classes concrètes sont acceptables. Les interfaces existent pour permettre aux appelants de dépendre de contrats à travers les frontières, et non pour décorer chaque classe.
- Supprimez, ne mettez pas en commentaire. Le code mort et les commentaires
// TODOéternels pourrissent. Git se souvient ; l'IDE n'a pas besoin de se souvenir. - Préférez les petites fonctions pures. Plus faciles à tester, plus faciles à raisonner, plus faciles à composer. Les effets de bord aux limites du système, pas dispersés à travers lui.
- Les tests couvrent le comportement, pas l'implémentation. Réécrire les internes ne devrait pas casser les tests. Si cela arrive, le test est couplé à la mauvaise chose.
- Les API publiques sont versionnées. Les modifications cassantes derrière une nouvelle version ou un feature flag — jamais un renommage silencieux.
- Injection de dépendances plutôt que singletons statiques. Les statiques sont non testables et cachent le couplage. Passez les dépendances ; mockez-les dans les tests.
- Épinglez et mettez à jour régulièrement les dépendances. Lockfiles commits ; Renovate/Dependabot en PR automatique. Laisser deux ans de retard signifie une migration imprévue de deux semaines.
- Documentez le "pourquoi", pas le "quoi". Le code montre ce qui est fait ; les commentaires expliquent la règle métier, la contrainte historique, le compromis non évident.
- Lint, formatez, et vérifiez les types dans l'IC. Pas en mode conseil, en mode bloquant. Les humains devraient débattre de conception, pas d'espacement.
- Gardez le build vert et rapide. Les tests instables ou lents sont ignorés, et une fois ignorés, ils ne protègent rien.
Signaux d'alarme
- Un fichier de plus de ~500 lignes, ou une classe avec plus de ~10 méthodes publiques — généralement une fonctionnalité qui cherche à s'échapper.
- Un package "utils" partagé où les assistants orphelins vont mourir.
- Moquer la chose testée pour faire passer un test.
- "Ne touche pas à ce module, plus personne ne le comprend."
- Temps de build IC mesuré en dizaines de minutes.