Sur Symfony et les traitements asynchrones, la migration et la reprise des échecs sont solides. Sur la fiabilité des flux de paiement, le rapprochement est expliqué par analogie et les montants sont sûrs. Sur Doctrine et PostgreSQL, la démarche est bonne mais sur MySQL. La conception orientée domaine est peu développée, Redis n'est pas abordé et l'usage de l'IA est cadré.
Romain a conduit sept ans de migration progressive d'un portail vers Symfony en encapsulant l'ancien code dans des services. Il explique le rapprochement bancaire par analogie avec un export comptable, ce qui reste juste, mais il n'a pas pratiqué PostgreSQL ni le domaine par agrégats.
Détail par exigence
Symfony et traitements asynchrones
indispensableSolide
A migré un portail vers Symfony avec des services qui encapsulent l'ancien code et gère des relances par Messenger avec reprise bornée.
Fiabilité des flux de paiement
indispensableSolide
Explique la réconciliation par analogie avec un export comptable et protège les comptes par verrou et référence unique.
Doctrine et PostgreSQL
indispensableSolide
Résout les lenteurs MySQL par plan et index composé, sans pratique de PostgreSQL en production.
Conception orientée domaine
Solide
La conception par domaine est abordée par l'encapsulation de l'ancien code, sans agrégats ni événements cités.
Redis et cache
Non abordée
Redis n'est pas abordé ; le transport Messenger est en base.
Usage de l'IA
indispensableSolide
Emploie l'assistant pour comprendre du code ancien, ne lui confie pas la logique métier et exclut les données de production.
Points d'appui
Migration route par route avec services qui isolent l'ancien code.
Rapprochement expliqué clairement par analogie comptable.
Montants en centimes et verrou par transaction.
Assistant utilisé pour comprendre le code ancien, jamais pour la logique métier.
Points de vigilance
Aucune pratique de PostgreSQL en production.
Rapprochement bancaire jamais réalisé en vrai.
Conception par agrégats et événements absente.
Sujets abordés
Symfony et traitements asynchrones · Fiabilité des flux de paiement · Doctrine et PostgreSQL · Conception orientée domaine · 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
Romain connaît Symfony en profondeur et sait expliquer simplement. Il lui faudrait se familiariser avec PostgreSQL et la conception par domaine pour ce poste.
Ses points forts
Expérience longue sur un produit
Explications accessibles
Prudence avec l'assistant
À creuser en entretien
PostgreSQL non pratiqué
Pas d'agrégats ni d'événements
Savoir-être
Expliquer
Rend le rapprochement bancaire accessible par une comparaison comptable.
Apporterait de la stabilité et de la mémoire produit, avec un appui sur le domaine.
Détail par exigence
Symfony et traitements asynchrones
indispensableSolide · 7,3/10
Découpage en services et injection de dépendances · 7/10Découpage progressif en services.j'ai écrit des services Symfony qui encapsulent les anciennes requêtesRéponse
R1
Handlers idempotents face aux messages rejoués · 8/10Rejeu inoffensif.en vérifiant si la relance est déjà marquée comme envoyéeRéponse
R2
Stratégie de retry et file des messages en échec · 7/10Reprise bornée.trois essais puis la file des échecsRéponse
R2
Fiabilité des flux de paiement
indispensableSolide · 7,7/10
Rapprocher les paiements avec les relevés bancaires · 8/10Démarche de rapprochement.on prend chaque ligne du relevé et on cherche la ligne correspondante chez nousRéponse
R3
Représenter les montants sans erreur d'arrondi · 7/10Centimes en entiers.Je mets les montants en centimes dans une colonne entièreRéponse
R4
Transactions et verrous contre les doubles débits · 8/10Verrou dans une transaction.une transaction avec un verrou sur la ligne du compteRéponse
R4
Doctrine et PostgreSQL
indispensableSolide · 7,5/10
Requêtes lentes, index et plan d'exécution · 7/10Démarche par le plan.Je commence par le plan avec EXPLAINRéponse
R5
Hydratation, N+1 et chargement des relations · 8/10Limitation du chargement.en évitant de charger des colonnes inutilesRéponse
R5
Conception orientée domaine
Solide · 7/10
Frontières entre contextes métier · 7/10Frontière posée entre ancien code et nouveau.pour pouvoir les remplacer plus tard sans toucher aux contrôleursRéponse
R1
Redis et cache
Non évalué
Rien de démontré sur cette exigence pendant l'entretien.
Usage de l'IA
indispensableSolide · 7,3/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 · 8/10Usage d'explication.pour comprendre du vieux code que personne n'a documentéRéponse
R6
Comment il relit, teste et corrige le code que l'assistant produit · 7/10Relecture et tests.en relisant le code et en lançant les tests existantsRéponse
R6
Ce qu'il ne confie jamais à l'assistant : données confidentielles, sécurité, décisions d'architecture, cas où il s'est trompé · 7/10Limite claire.Je ne lui donne jamais de données de productionRéponse
R6