Idées & Perspectives

Explorer le développement AI-first, les garde-fous de code et l'architecture de la jetabilité.

Votre couche domaine importe Postgres. Votre CI s'en fiche.

Les diagrammes de clean architecture sont très beaux sur un tableau blanc. Voici comment faire en sorte que votre pipeline de build applique la direction des dépendances, pour que le code domaine ne puisse pas atteindre l'infrastructure.

Quelqu'un dans votre équipe vient d'importer dans . La PR compile. Les tests passent. La revue de code fait trois cents lignes, et personne ne remarque. Trois…

Votre diagramme d'architecture est déjà un mensonge

La documentation d'architecture pourrit dès que vous la sauvegardez. Voici comment garder une documentation honnête en utilisant des diagrammes générés depuis le code, des ADR et des tests d'architecture automatisés.

Chaque diagramme d'architecture que j'ai vu dans un wiki était faux. Pas dramatiquement faux. Juste calmement, progressivement faux. Le service nommé « Auth »…

Votre boucle de retry part du principe que la première requête a échoué. Ce n'est probablement pas le cas.

Un timeout ou un crash ne signifie pas que votre requête API a été perdue. Voici comment les clés d'idempotence rendent les retries sûrs, et le pattern de stockage qui empêche réellement les doublons.

Votre service plante au milieu d'une requête . Le client voit un timeout et retry. Vous avez maintenant deux charges. Le client est en colère. La base de…

Un verrou qui survit à votre processus : comment fonctionnent réellement les leases distribués

Les mutex en mémoire disparaissent lors du redémarrage de votre serveur. Voici comment les leases distribués avec des jetons de clôture (fencing tokens) et des TTLs empêchent le travail en double lors des crashs, et où ils échouent encore.

Votre ne survit pas à un . Il ne survit pas à un OOM, à un déploiement progressif, ni à un redémarrage de nœud. À l'instant où le processus se termine, le…

Un circuit breaker sans goroutines, sans timers et sans overhead d'arrière-plan

La plupart des bibliothèques de circuit breaker lancent des threads d'arrière-plan pour tester la récupération. Vous n'en avez pas besoin. Voici une conception pilotée par les requêtes qui élimine tout l'overhead d'arrière-plan sans sacrifier la correction.

Chaque circuit breaker en production que j'ai examiné finit par lancer un thread d'arrière-plan. Il peut s'agir d'une goroutine Go, d'un Java, ou d'une tâche…

Votre service web a un chemin d'arrêt gracieux. C'est le bug.

Les logiciels crash-only traitent chaque échec comme un crash et chaque démarrage comme une récupération. Pour les services web, cela signifie supprimer votre logique d'arrêt et concevoir un état qui survit à un kill -9.

Votre service web a un shutdown handler. Il vide les buffers, ferme les connexions, écrit des checkpoints. Vous l'avez testé une fois, peut-être. En…

Comment tuer un mutant survivant quand vous ne comprenez pas ce qu'il a changé

Le mutation testing a trouvé un survivant et vous n'avez aucune idée de ce que fait la mutation. Voici une méthode pas à pas pour écrire le bon test sans comprendre le mutant au préalable.

Votre rapport de mutation testing est plein de survivants, et au moins l'un d'eux n'a aucun sens pour vous. L'outil dit qu'il a inversé un en à la ligne 47, ou…

Le code d'authentification a besoin de 90% de couverture de mutation. Vos utilitaires de chaînes de caractères, non.

Pourquoi imposer un seul score de mutation à l'ensemble de votre codebase est une erreur, et comment définir des seuils par module qui correspondent au risque réel.

Imposer un seul score de mutation à l'ensemble de votre codebase est un excellent moyen de faire détester les tests à votre équipe. Lancez PIT ou Stryker sur…

Vos tests passent. Votre mutation score est de 40 %. Voici ce que les mutants survivants vous disent vraiment.

La couverture de code dit que vous êtes en sécurité. Le mutation testing dit que vos tests sont surtout de la décoration. Voici comment les mutants survivants exposent le fossé, et comment le combler.

Vos tests passent. Votre rapport de couverture indique 87 %. Mais votre mutation score est de 40 %, et la moitié de vos mutants sont encore vivants. Ce 40 % ne…

Le mutation testing en Rust fonctionne, mais vos temps de compilation vont le détester

cargo-mutants trouve les tests qui font semblant de vérifier votre code. Voici comment fonctionne le mutation testing pour Rust, ce qu'il détecte, et si le coût en temps de compilation en vaut la peine.

Vous avez 100 % de couverture de lignes. Chaque branche est exécutée. Chaque fonction est appelée. Puis quelqu'un change un en dans votre logique de…