Sur Symfony et les traitements asynchrones, le découpage et les tests sont propres. Sur la fiabilité des flux de paiement, les centimes sont acquis mais le verrouillage est la vraie faiblesse. Sur Doctrine et PostgreSQL, diagnostic et migrations sont solides. La conception orientée domaine est convaincante, Redis n'est pas abordé et l'usage de l'IA est cadré.
Valentin construit ses API Platform avec des contrôleurs fins et une logique en services injectés, ce qui rend ses tests faciles à écrire. Sa conception par domaine est claire, mais il reconnaît n'avoir jamais arbitré entre verrou pessimiste et optimiste sur un vrai cas de concurrence.
Détail par exigence
Symfony et traitements asynchrones
indispensableSolide
Découpe en services injectés, testés en unitaire et en fonctionnel, et rend le rejeu sûr par un identifiant de requête et un handler qui vérifie l'état.
Fiabilité des flux de paiement
indispensableSolide
Représente les montants en centimes et sait nommer les types de verrous, sans avoir tranché de cas de concurrence réel.
Doctrine et PostgreSQL
indispensableSolide
Diagnostique avec les logs de requêtes lentes et EXPLAIN, règle un N+1 et connaît la migration en trois temps.
Conception orientée domaine
Solide
Découpe en contextes avec une réservation qui protège un invariant et des paiements réagissant à un événement.
Redis et cache
Non abordée
Redis n'est pas évoqué dans l'entretien : l'idempotence et les verrous sont tenus en base.
Usage de l'IA
indispensableSolide
Utilise Cursor pour des DTO, fixtures et squelettes de tests, avec les fichiers voisins en contexte, et relit chaque diff.
Points d'appui
Services injectés par constructeur, testés en unitaire et en fonctionnel.
Migration en trois temps maîtrisée.
Réservation pensée comme un agrégat avec son invariant.
Contexte donné à l'assistant et relecture systématique du diff.
Points de vigilance
Verrouillage jamais éprouvé sur un cas de concurrence réel.
Aucun exemple de cache évoqué.
Pas d'épisode concret où l'assistant a changé son travail.
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
Valentin écrit un code propre et testable, et il découpe bien un domaine. Le verrouillage sur les paiements concurrents est le point à vérifier avec lui.
Ses points forts
Code propre et testable
Découpage du domaine
Migrations prudentes
À creuser en entretien
Concurrence à éprouver
Cache non abordé
Savoir-être
Structurer sa réponse
Sépare nettement contrôleur, service et interface.
Rejoindrait l'équipe core avec un bon appui sur les services, et un accompagnement sur la concurrence.
Détail par exigence
Symfony et traitements asynchrones
indispensableSolide · 8/10
Découpage en services et injection de dépendances · 8/10Architecture propre.la logique va dans des services qui reçoivent leurs dépendances par le constructeurRéponse
R1
Tests fonctionnels d'un flux Symfony · 8/10Tests de bout en bout.quelques tests fonctionnels qui appellent l'API de bout en boutRéponse
R1
Handlers idempotents face aux messages rejoués · 8/10Idempotence par vérification de l'état.un handler qui vérifie l'état de la réservation avant d'agirRéponse
R2
Fiabilité des flux de paiement
indispensableSolide · 8/10
Représenter les montants sans erreur d'arrondi · 8/10Règle claire.En centimes, avec une devise portée par un objet valeurRéponse
R3
Transactions et verrous contre les doubles débits · 8/10Faiblesse nette sur le verrouillage.je n'ai jamais eu à choisir sur un cas de concurrence réelRéponse
R3
Doctrine et PostgreSQL
indispensableSolide · 7,3/10
Requêtes lentes, index et plan d'exécution · 7/10Cause trouvée.un tri sur la date de départ sans index adaptéRéponse
R4
Migrations de schéma sans coupure de service · 8/10Migration en trois temps.j'ajoute la colonne nullable d'abord, puis je remplis, puis je rends obligatoireRéponse
R4
Hydratation, N+1 et chargement des relations · 7/10N+1 résolu.un N+1 sur les conducteurs, réglé avec un chargement groupéRéponse
R4
Conception orientée domaine
Solide · 7/10
Agrégats et invariants métier · 7/10Invariant porté par l'agrégat.la réservation comme agrégat qui protège qu'un trajet ne dépasse pas son nombre de placesRéponse
R5
Événements de domaine et effets de bord · 7/10Effet de bord par événement.Les paiements réagiraient à un événement de réservation confirméeRéponse
R5
Redis et cache
Non évalué
Rien de démontré sur cette exigence pendant l'entretien.
Usage de l'IA
indispensableSolide · 7,7/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/10Tâches déléguées nommées.générer des DTO, des fixtures et des squelettes de testsRéponse
R6
Son workflow avec l'assistant : découper la demande, lui donner le contexte (fichiers, conventions), tenir la taille du contexte et le coût en tokens, itérer · 7/10Contexte donné à l'assistant.en lui donnant les fichiers voisins pour qu'il suive nos conventionsRéponse
R6
Comment il relit, teste et corrige le code que l'assistant produit · 8/10Relecture et analyse statique.Je relis le diff comme une revue et je lance PHPStanRéponse
R6