Sur la fiabilité des flux de paiement, les verrous, les montants et la traçabilité sont clairs et illustrés. Sur Doctrine et PostgreSQL, le partitionnement et l'hydratation sont adaptés aux gros volumes. Sur Symfony et les traitements asynchrones, l'idempotence est comprise, la configuration fine des réessais moins. La conception orientée domaine reste théorique. Redis est utilisé avec une invalidation précise, et l'usage de l'IA est bien borné.
Thibaut traite le double comptage des relevés par une clé composée avec contrainte d'unicité, et fixe une règle simple pour les transactions : aucun appel réseau à l'intérieur, après avoir vu une base bloquée une heure. Il explique comment rejouer un calcul de facture pour justifier un écart. Sa conception orientée domaine reste surtout théorique.
Détail par exigence
Symfony et traitements asynchrones
indispensableSolide
Comprend l'idempotence par construction et la distinction entre rejouable et erreur de données, avec peu de pratique fine des réessais.
Fiabilité des flux de paiement
indispensableSolide
Choisit le verrou selon le conflit, garde chaque calcul rejouable et n'a pas écrit de rapprochement.
Doctrine et PostgreSQL
indispensableSolide
Partitionne par mois, lit le plan et limite l'hydratation sur les gros volumes.
Conception orientée domaine
Solide
Connaît les notions et a tracé des frontières par événements, sans agrégats riches.
Redis et cache
Solide
Garde les agrégats mensuels en cache avec une expiration courte et une invalidation à l'arrivée d'un relevé tardif.
Usage de l'IA
indispensableSolide
Délègue scripts de migration et tests de cas limites, garde l'architecture et la réflexion sur l'ordre des opérations.
Points d'appui
Clé composée compteur et horodatage pour éviter le double comptage, avec livraison au moins une fois assumée.
Choix du verrou selon la fréquence des conflits, et règle d'absence d'appel réseau en transaction.
Calcul de facture rejouable, avec version du tarif conservée.
Partitionnement par mois et hydratation par tableaux sur les gros volumes.
Points de vigilance
Conception orientée domaine décrite en théorie plus qu'en pratique.
Stratégies de réessai Messenger connues dans le principe, peu dans le détail.
Rapprochement vu chez le trésorier, pas écrit.
Sujets abordés
Symfony et traitements asynchrones · Fiabilité des flux de paiement · Doctrine et PostgreSQL · Conception orientée domaine · Redis et cache · Usage de l'IA
Entretien conduit en autonomie par le candidat, réponses transcrites puis analysées.
L'évaluation finale appartient au recruteur : Revelyum n'émet aucune décision automatisée.
En clair
Oui, il peut faire ce job
Thibaut a bâti une plateforme qui traite des milliers de compteurs et sait expliquer comment éviter qu'une mesure soit comptée deux fois. Il a une grande expérience des gros volumes. La conception en blocs métier reste surtout théorique.
Ses points forts
Grande expérience des gros volumes
Règles simples pour éviter les incidents
Sait justifier un calcul à un client
À creuser en entretien
Conception en blocs métier encore théorique
Réessais de messages à approfondir
Savoir-être
Structurer sa réponse
Pose d'abord la question du conflit fréquent ou rare, puis choisit le verrou.
Apporterait de l'expérience sur les gros volumes, avec un travail à mener sur le DDD pratique.
Détail par exigence
Symfony et traitements asynchrones
indispensableSolide · 7,5/10
Handlers idempotents face aux messages rejoués · 7/10Idempotence assumée.le consommateur est idempotent par constructionRéponse
R1
Stratégie de retry et file des messages en échec · 8/10Tri des échecs.Je distingue ce qui peut être rejoué et ce qui est une erreur de donnéesRéponse
R4
Fiabilité des flux de paiement
indispensableSolide · 7/10
Transactions et verrous contre les doubles débits · 7/10Verrou court.un SELECT FOR UPDATE dans une transaction qui fait le moins de choses possibleRéponse
R2
Représenter les montants sans erreur d'arrondi · 7/10Représentation adaptée au métier.avec l'unité explicitée dans un objet valeurRéponse
R3
Traçabilité et journal des opérations · 7/10Trace rejouable.Chaque calcul de facture stocke ses entrées, la version du tarif et le résultatRéponse
R3
Doctrine et PostgreSQL
indispensableSolide · 7/10
Requêtes lentes, index et plan d'exécution · 7/10Mesure sur le réel.on lit le plan et on regarde les lignes réellement parcouruesRéponse
R5
Hydratation, N+1 et chargement des relations · 7/10Hydratation limitée.des requêtes DQL qui renvoient des tableaux plutôt que des entitésRéponse
R5
Migrations de schéma sans coupure de service · 7/10Méthode par étapes.Les changements de schéma se font en plusieurs étapes avec un remplissage par lotsRéponse
R5
Conception orientée domaine
Solide · 7/10
Frontières entre contextes métier · 7/10Frontières posées, sans DDD strict.J'ai conçu des frontières entre l'ingestion, le calcul et la facturation, reliées par des événementsRéponse
R6
Redis et cache
Solide · 7,5/10
Invalidation du cache · 7/10Invalidation liée à l'événement.une invalidation quand un relevé tardif arriveRéponse
R5
Durées de vie et données périmées · 8/10Durée choisie pour la donnée.une expiration à l'heureRéponse
R5
Usage de l'IA
indispensableSolide · 7,5/10
S'il code avec un assistant IA (Copilot, Cursor, Claude Code, ChatGPT…) : quelles tâches de développement il lui confie, et lesquelles il garde · 7/10Tâches déléguées.pour écrire des scripts de migration de données et des tests sur des cas limitesRéponse
R7
Ce qu'il ne confie jamais à l'assistant : données confidentielles, sécurité, décisions d'architecture, cas où il s'est trompé · 8/10Limites nettes.Je ne lui confie jamais les décisions d'architecture ni le calcul de facturationRéponse
R7