Incidents, leçons apprises et améliorations continues du projet INES
2
Critiques
3
Majeurs
1
Mineurs
Migration SQLAlchemy → SQL brut
Problème
Les modèles SQLAlchemy généraient des requêtes N+1 non maîtrisées et des erreurs de type sur les colonnes JSON.
Leçon apprise
Utiliser du SQL brut via psycopg2 permet un contrôle total des requêtes et élimine la magie implicite de l'ORM. Moins de "magie", plus de prévisibilité.
Déploiement d'un batch Celery sans test de charge
Problème
Un worker Celery a saturé la mémoire Redis en production lors du traitement d'un import de 50 000 lignes.
Leçon apprise
Tout batch > 10 000 opérations doit être paginé par chunks de 500. Ajouter un budget mémoire dans la spec avant implémentation.
Composant React avec styles inline
Problème
Un composant utilisait des styles inline pour le thème dark/light, causant des incohérences visuelles au changement de thème.
Leçon apprise
Règle absolue : 0 styles inline. Toujours utiliser des classes Tailwind avec variables CSS. Revue de code systématique sur ce point.
JWT sans refresh token en production
Problème
Les utilisateurs étaient déconnectés toutes les 15 minutes (durée du access token) sans mécanisme de renouvellement silencieux.
Leçon apprise
Implémenter le pattern access + refresh token dès le début. Access token court (15min), refresh token long (7j) stocké en httpOnly cookie.
React Flow : re-render infini sur le graph
Problème
La mise à jour d'un nœud déclenchait un re-render complet du graph (300+ nœuds) à chaque frappe clavier dans un champ du panneau latéral.
Leçon apprise
Isoler l'état local des formulaires du state global du graph. Utiliser useCallback et memo pour les handlers de nœuds. Profiler avant d'optimiser.
CORS mal configuré en staging
Problème
L'environnement de staging acceptait toutes les origines (*) par erreur de copie de config. Découvert lors d'un audit de sécurité.
Leçon apprise
Ne jamais copier-coller la config dev/staging en prod. Utiliser des variables d'environnement distinctes par env. Audit CORS dans la checklist de déploiement.