Sur un projet green field, l’IA générative fait merveille; à mesure que le projet grossit, ses réponses perdent en justesse. Le modèle n’a pas changé: c’est le contexte qu’elle doit tenir qui a grossi. Context Budget, la méthode que j’ai mise en place sur plusieurs projets, découpe le code en bounded contexts que l’IA peut tenir en entier: le découpage se paie une fois, puis chaque requête ne paie que son propre contexte.
Depuis le 11 septembre 2026, le Cyber Resilience Act (CRA) impose une alerte sous 24h pour une vulnérabilité activement exploitée dans un produit, y compris sur le parc existant. Ce délai se prépare dans la chaîne de livraison, dans le nombre de versions maintenues et dans la capacité des produits à être atténués sans développeur.
Six étapes pour construire un graphe de connaissances à partir de C, de PL/SQL, de PHP et de vingt ans de documents, le garder vrai release après release et le servir à un LLM: des collecteurs déterministes, une barrière SHACL, des faits ajoutés et jamais réécrits, et un graphe qui sélectionne avant que le modèle ne lise.
Pourquoi le RAG vectoriel a échoué sur un legacy de deux millions de lignes, et comment une petite ontologie versionnée dans Git, avec RDF, SHACL et SPARQL, donne à un LLM un contexte filtré par release et un chemin traçable.
BMAD avec Superpowers sur une vraie fonctionnalité, entre un backend Java et un frontend Angular: ce qu’une méthode formelle ajoute à une spécification vivante, où les deux se heurtent, et quoi adopter, adapter ou écarter.
Une spécification vivante, des invariants, des revues contradictoires par l’IA et une vérification réelle font que le code écrit par l’IA reste correct, et l’ingénierie passe de l’écriture du code à l’exercice du jugement. Seconde partie d’une série de deux articles.
Comment j’ai demandé à Claude Code d’attaquer une conception plutôt que de la construire, les trois bugs que la revue contradictoire a trouvés avant tout code, et pourquoi l’ingénierie passe de la production de code à la validation technique.
Quand une méthode peut échouer pour plusieurs raisons, retourner true ou false perd la seule information dont l’appelant a besoin, la cause: pourquoi le retour booléen est un anti-pattern, d’où il vient, et quoi retourner à la place.
Pourquoi les branches de fonctionnalité qui s’éternisent nuisent à la livraison continue, ce que les feature toggles offrent à la place, et un exemple .NET qui permet d’activer une fonctionnalité via un en-tête HTTP en cinq étapes.
Mettre en place une CI/CD est souvent le premier réflexe DevOps d’une équipe, et souvent prématuré: ce qu’est une vraie chaîne, ce qu’il faut régler avant, et pourquoi la persistance et l’infrastructure méritent un soin à part.
Un CTO incapable de démontrer le ROI de Sonar et GitLab, un directeur qui ne peut pas chiffrer les bénéfices du pair programming: pourquoi le Craftsmanship se justifie par les problèmes métier qu’il résout, et se mesure à deux niveaux.
Plusieurs sites on-premise, chacun avec sa propre base de données, qui doivent continuer à fonctionner pendant plusieurs jours de coupure réseau, puis converger malgré tout: une table outbox, un cluster RabbitMQ, un échange de type fanout, des consommateurs idempotents et une source de référence pour rejouer les événements.
Au-delà de la définition des manuels: les décisions qu’une équipe doit prendre, composant par composant, pour que le Blue/Green fonctionne vraiment, de la compatibilité de la persistance et des sessions au décommissionnement et au retour arrière.
Comment le switch d’une fabrique grossit à chaque nouveau cas, et comment une map d’interfaces fonctionnelles, puis une énumération, garde sa complexité constante quel que soit le nombre de types ajoutés.
Un processeur Kafka entre deux topics ne doit perdre aucun message pendant que son producteur est en pause: pourquoi takeUntil, switchMap et combineLatest perdent des données, et comment windowToggle et bufferToggle les conservent.
D’un projet Quarkus vide à trois environnements Heroku avec un seul pipeline GitLab-CI: règles de branches et de tags, variables protégées, cache des dépendances et analyses de sécurité gratuites.
Local storage, session storage et cookies ordinaires exposent un JWT au vol: trois façons de conserver le jeton dans un navigateur, une closure, un cookie sécurisé et un service worker, et ce que chacune sacrifie.
Évaluer des expressions arithmétiques avec priorité des opérateurs: d’un switch qui viole le principe ouvert/fermé au polymorphisme, puis un lexer, un parser et un interpréteur, chaque étape vérifiée par des tests Jest.
Deux sorties de la pyramide de la mort: une petite fonction d’assertion qui s’enchaîne au lieu de s’imbriquer, et des conditions transformées en accesseurs pour que Math.max remplace les branchements.
Un seul niveau d’indentation par méthode, et pourtant un moyen de sortir d’une boucle: array_reduce ou la récursion à la place d’un retour anticipé imbriqué, avec le coût de chacun mesuré sur cinquante mille éléments.