Développeur·euse Full-stack
Questions d'entretien structurées pour Développeur·euse Full-stack, avec ce qu'une bonne réponse révèle pour chacune.
ComportementaleDécision technique Décrivez la décision technique la plus difficile que vous avez prise sur votre dernier poste. Pourquoi était-elle difficile et comment l'avez-vous tranchée ?
Ce qu'une bonne réponse révèleCapacité à structurer une décision sous incertitude : identification des contraintes, arbitrages explicites, consultation des parties concernées, validation a posteriori avec données. Bonus : la·le candidat·e mentionne avoir changé d'avis en cours de route ou avoir documenté la décision pour les futur·e·s. Les candidat·e·s qui décrivent une décision « évidente » avec recul révèlent qu'ils·elles n'ont jamais vraiment arbitré.
ComportementaleDebug et investigation Parlez-moi d'un bug en production que vous avez résolu. Quel était le symptôme, comment avez-vous diagnostiqué, et combien de temps a-t-il fallu ?
Ce qu'une bonne réponse révèleMéthode de debug structurée : reproduction, logs, instrumentation, hypothèses validées par expérimentation. Honnêteté sur la durée (un vrai bug de prod dure rarement < 30 min). Bonus : la·le candidat·e cite la cause profonde et le correctif systémique (pas seulement le hotfix). Les réponses « j'ai redémarré le service » sans diagnostic révèlent une faiblesse d'investigation.
ComportementaleApprentissage et humilité Décrivez un moment où vous avez dû refactorer ou réécrire du code que vous aviez vous-même écrit quelques mois auparavant. Que s'était-il passé entre-temps ?
Ce qu'une bonne réponse révèleHumilité technique et capacité à apprendre. Bonus : la·le candidat·e identifie ce qu'il·elle aurait fait différemment dès le départ. Les candidat·e·s qui n'ont « jamais vraiment dû refactorer leur code » mentent ou n'ont pas porté de code en production sur la durée.
SituationnelleCourage technique Vous découvrez en revue de code une vulnérabilité de sécurité (injection SQL, secret en clair, etc.) dans une PR d'un·e collègue senior. Comment réagissez-vous ?
Ce qu'une bonne réponse révèleCapacité à pointer une faiblesse technique sans braquer : commentaire factuel sur la PR (« voici le risque, voici comment je propose de le résoudre »), proposition d'une solution, escalade à la·au lead si la PR est mergée malgré le commentaire. Les candidat·e·s qui « laissent passer parce que c'est un·e senior » révèlent une faiblesse de courage technique.
SituationnelleCommunication produit Un·e Product Manager vous demande une feature qui prendrait 3 semaines selon votre estimation. Le·la PM veut la livrer en 1 semaine. Comment réagissez-vous ?
Ce qu'une bonne réponse révèleClarification du besoin avant de négocier la timeline (peut-être que la feature peut être livrée en 2 phases, ou simplifiée). Proposition d'options : MVP en 1 semaine + V2 en 2 semaines ; coupes explicites de scope ; ajout de personnel. Les réponses « je peux le faire en 1 semaine si je travaille les week-ends » sont un drapeau rouge (signal de mauvaise gestion de soi).
SituationnellePragmatisme et priorisation Vous rejoignez une équipe avec une dette technique importante : tests insuffisants, déploiements manuels, monitoring quasi-absent. Quel est votre plan en 30 jours ?
Ce qu'une bonne réponse révèleDiagnostic d'abord : ne pas tout vouloir réparer en même temps. Priorisation par risque / impact (typiquement : monitoring d'abord pour voir, puis tests sur les zones critiques, puis automatisation du déploiement). Validation avec l'équipe et la·le lead avant d'engager. Les candidat·e·s qui se lancent dans la refonte complète révèlent un manque de pragmatisme.
Étude de casDesign système Conception : nous voulons ajouter à notre application un système de notification temps réel (par exemple : « un·e collègue a commenté votre document »). Comment concevez-vous cela ?
Ce qu'une bonne réponse révèleClarifications avant de proposer (volume attendu, contraintes de latence, devices supportés, persistance des notifs non vues). Architecture cohérente : push (WebSocket ou Server-Sent Events) vs pull (polling), persistence (DB de notifs), idempotence des envois, fallback email. Bonus : reconnaissance des zones d'incertitude (« je ferais un POC avant de m'engager sur WebSocket vs SSE »). Les candidat·e·s qui plongent dans le code sans clarifier les contraintes révèlent une faiblesse de design.
Étude de casDebug et investigation Debug : votre API renvoie une réponse 500 sur 2 % des requêtes. Les logs ne montrent pas d'erreur particulière. Comment investiguez-vous ?
Ce qu'une bonne réponse révèleMéthode structurée : (1) augmenter le niveau de log temporairement sur les endpoints concernés, (2) corréler avec les métriques (latence, taille de payload, source), (3) identifier un pattern (heure de la journée, type de requête, utilisateur·rice spécifique), (4) hypothèses ordonnées (timeout DB, race condition, mémoire). Les candidat·e·s qui se précipitent sur « c'est sûrement la DB » sans investiguer révèlent un biais.
Étude de casOptimisation Performance : une page de votre application met 8 secondes à charger. Vous avez 1 semaine pour la passer sous 2 secondes. Plan d'action ?
Ce qu'une bonne réponse révèleMesurer avant d'optimiser : DevTools, Lighthouse, profiler côté serveur. Identifier le bottleneck (rendering, requêtes DB, payload, CDN). Hiérarchiser par effort × impact. Les réponses « je vais ajouter du cache » sans diagnostic révèlent un réflexe d'optimisation prématurée. Bonus : la·le candidat·e mentionne qu'une page à 8s en prod indique souvent un problème systémique (N+1 queries, payload énorme) plus qu'une optimisation locale à faire.
TechniqueQualité du code Quelle est votre approche du testing ? Décrivez votre dernier projet : combien de tests, quels types, quelle couverture, et que mesurez-vous vraiment ?
Ce qu'une bonne réponse révèleCompréhension de la pyramide de tests (beaucoup d'unitaires, moins d'intégration, peu d'e2e). Distinction entre couverture et utilité (90 % de couverture sur du code trivial vaut moins que 60 % sur la logique métier critique). Bonus : la·le candidat·e cite une fois où un test a évité une régression réelle. Les candidat·e·s qui répondent « je teste à 100 % » sans nuancer révèlent une faiblesse de jugement.
TechniqueFondamentaux back-end Différence entre une transaction DB et un lock applicatif ? Dans quel cas utiliseriez-vous l'un plutôt que l'autre ?
Ce qu'une bonne réponse révèleTransaction DB = atomicité + isolation gérées par la DB (ACID), bornée à la durée de la transaction. Lock applicatif = coordination entre processus / instances via Redis, Zookeeper, ou similaire ; utile quand la coordination dépasse une seule DB (microservices, queue de tâches). Risque de deadlock pour les deux. Les candidat·e·s qui ne savent pas distinguer ces deux mécanismes vont créer des race conditions en production.
TechniquePragmatisme et priorisation Vous arrivez sur un codebase React mal organisé : composants à 500 lignes, props drilling 5 niveaux, pas de séparation logique / présentation. Plan d'action en 60 jours sans tout casser ?
Ce qu'une bonne réponse révèleApproche progressive : (1) cartographier les composants critiques et les patterns récurrents, (2) extraire les hooks et la logique métier d'abord (impact massif, risque faible), (3) découper les gros composants par boundary métier (pas par contrainte technique), (4) introduire un state-manager si nécessaire (Context ou Zustand pour PME, Redux si volume) seulement sur les zones où le props drilling est réellement douloureux. Les candidat·e·s qui veulent tout réécrire en React Server Components dès le jour 1 manquent de pragmatisme.
ValeursCoachabilité Comment recevez-vous une review de code critique sur du code que vous étiez convaincu·e d'avoir bien fait ?
Ce qu'une bonne réponse révèleOuverture : capacité à dissocier le code de l'ego personnel. Bonus : la·le candidat·e cite une fois où il·elle a changé d'avis grâce à une review. Les candidat·e·s qui décrivent avoir « expliqué leur logique » au reviewer au lieu de l'écouter révèlent une faiblesse de coachabilité critique pour le travail en équipe.
ValeursMentorat et transmission Quel rôle jouez-vous dans la transmission technique aux junior·e·s ou aux nouveaux·elles arrivant·e·s ?
Ce qu'une bonne réponse révèlePosture de mentorat actif : pair-programming, reviews pédagogiques (pas juste « ok merge »), documentation des décisions, partage de bonnes pratiques. Les candidat·e·s qui répondent « j'aide quand on me demande » sans plus de précision révèlent une posture passive. En PME où l'équipe technique est petite, la capacité à transmettre est essentielle pour la pérennité.
ValeursJeu d'équipe produit Comment travaillez-vous avec un·e Product Manager ou un·e designer ? Décrivez une situation où vous avez poussé en arrière sur un brief.
Ce qu'une bonne réponse révèlePosture de partenariat : challenge constructif basé sur la faisabilité ou la complexité, proposition d'alternatives. Bonus : la·le candidat·e cite un cas où il·elle a accepté le brief initial après échange (n'est pas en mode opposition systématique). Les candidat·e·s qui décrivent les PMs / designers comme « ne comprenant pas la technique » révèlent une faiblesse de jeu d'équipe.
Playbook d'évaluation
Le rôle de Développeur·euse Full-stack se signale à travers cinq stades d'évaluation. Le test technique (stade 4) doit être réaliste et borné dans le temps : un test de 8h prend 24h en pratique, démotive les bon·ne·s candidat·e·s et n'évalue pas mieux qu'un test de 2-3h bien construit.
Stade 1: Lecture du CV
Cherchez la cohérence stack (un·e profil React + Python ne se replonge pas dans Java sans 3-6 mois de réadaptation), la stabilité (durée minimale 18-24 mois sur les postes précédents), et les signaux d'autonomie (projets perso, contributions open source, side-projects). Le diplôme compte moins que les 3-5 dernières années d'expérience : un·e autodidacte avec 5 ans de production solide vaut plus qu'un·e diplômé·e top école avec 2 ans de stage prolongé.
Stade 2: Phone screen (30 min)
Trois questions seulement : (1) « Décrivez le projet le plus récent dont vous êtes le·la plus fier·ère ; quelle a été votre contribution exacte ? », (2) « Quelle décision technique avez-vous prise récemment dont vous doutez encore ? » (humilité et rétrospection), (3) « Pourquoi un changement maintenant ? ». Sortie : go / no-go en 5 min, pas plus. Évitez les questions « gotcha » techniques à ce stade.
Stade 3: Entretien technique (60-90 min)
Pair-programming ou code review sur un exercice borné (45-60 min), suivi de 15-30 min de Q&A sur l'architecture et les décisions techniques. Évaluez la capacité à raisonner à voix haute, à demander des clarifications, à itérer. Évitez les algorithmes purement académiques sans rapport avec le métier ; privilégiez un exercice qui ressemble au quotidien (refactoring, ajout d'une feature, debug d'un cas non couvert).
Stade 4: Mise en situation système (60 min)
Discussion d'architecture sur un cas concret : « Comment concevriez-vous un système de [feature spécifique au produit] ? » Évaluez la capacité à clarifier les contraintes avant de proposer, à arbitrer entre simplicité et scalabilité, à reconnaître les zones d'incertitude. C'est le stade le plus prédictif pour un·e Full-stack qui devra prendre des décisions techniques en autonomie en PME.
Stade 5: Références (vérification structurée)
Appelez deux références : un·e ancien·ne lead tech ou manager direct et un·e ancien·ne collègue développeur·euse. Posez les mêmes 4 questions : « Sur quoi est-il·elle le plus fort·e ? », « Sur quoi recruteriez-vous quelqu'un de complémentaire ? », « Le·la reprendriez-vous demain ? », « Un exemple de décision technique difficile prise en autonomie ? ». La 4e question révèle le vrai signal d'autonomie.
Comment reconnaître une excellente recrue
| Compétence | Sous la barre | Au niveau | Au-dessus |
|---|---|---|---|
| Solidité technique | Bute sur les fondamentaux (HTTP, transactions DB, asynchrone). Cherche les solutions par essai-erreur sans modèle mental clair. Difficile à charger sur un nouveau langage ou framework. | Maîtrise la stack actuelle en autonomie. Sait apprendre un nouveau framework en 2-4 semaines. Comprend les fondamentaux suffisamment pour déboguer en profondeur quand nécessaire. | Référent·e technique sur sa stack et capable de basculer sur une nouvelle stack en quelques semaines. Anticipe les pièges classiques (race conditions, fuites mémoire, edge cases). Construit des abstractions utiles, pas prématurées. |
| Design système et pragmatisme | Plonge dans le code sans clarifier les contraintes. Sur-conçoit (microservices pour un MVP) ou sous-conçoit (monolithe spaghetti à 50 k LOC). Difficile à arbitrer entre simplicité et scalabilité. | Clarifie le besoin avant de coder. Pragmatique sur les arbitrages : ne sur-conçoit pas pour le futur incertain, mais identifie les zones où un peu de structure paiera. Sait pivoter quand l'hypothèse initiale ne tient pas. | Conçoit des systèmes qui vieillissent bien : abstractions justes, dépendances minimales, frontières métier claires. Reconnaît ses zones d'incertitude et propose des POCs ciblés. Forme l'équipe sur la pensée systèmes. |
| Qualité et hygiène du code | Pas de stratégie de test claire ; ajoute des tests « pour faire couverture ». Code mal structuré (composants à 500 lignes, copier-coller, magic numbers). Reviews superficielles. | Pyramide de tests pertinente sur les zones métier. Code lisible avec naming clair et fonctions courtes. Reviews structurées avec feedback actionnable. Refactor au passage quand pertinent. | Référence de l'équipe sur la qualité : conventions documentées, automatisation des contrôles (linters, type-checkers, CI). Reviews pédagogiques qui font progresser les junior·e·s. Sait dire non à du code qui passe les tests mais qui vieillira mal. |
| Autonomie et débrouillardise | Bloque sur un sujet inconnu sans demander d'aide pendant des heures, ou demande de l'aide au moindre obstacle. Pas de stratégie de debug structurée. | Sait diagnostiquer en autonomie sur les sujets familiers, demande de l'aide après une investigation préalable (résumé du problème, hypothèses, ce qui a déjà été essayé). | Débrouillardise élevée sur des sujets non familiers : lit le code source des dépendances, instrumente le runtime, isole les causes profondes. Documente les apprentissages pour l'équipe. |
| Communication et jeu d'équipe | Explique mal son travail aux non-techniques. Posture défensive en review. Travaille en silo, partage peu son contexte. Posture d'opposition systématique face aux PMs / designers. | Sait expliquer son travail à un·e PM ou un·e dirigeant·e en langage clair. Reçoit la review constructivement. Partage son contexte en revues d'équipe et 1:1. | Pont entre la tech et les autres fonctions. Anime les debriefs techniques, vulgarise les arbitrages, négocie les timelines de manière transparente. Référence dans l'équipe pour la communication transverse. |
Plan 30/60/90 jours
À J+30
- Setup complet de l'environnement local et déploiement d'une PR en production (même triviale) validée
- Lecture et compréhension du code des 3 modules les plus critiques de la stack métier
- Premier 1:1 documenté avec la·le tech lead sur les conventions, la dette identifiée, et les priorités
- Première PR substantive (fix de bug ou petite feature) reviewée et mergée
À J+60
- Livraison d'une feature complète bout en bout (front + back + déploiement) en autonomie
- Première review de PR d'un·e collègue avec feedback structuré, sans juste cliquer approve
- Premier on-call ou astreinte (si applicable) avec gestion d'au moins un incident
- Documentation rédigée ou mise à jour sur un module récemment touché
À J+90
- Livraison régulière (1-2 PRs par semaine) avec qualité validée par l'équipe en review
- Première décision technique en autonomie sur un sujet ambigu (refactor, choix de librairie, design)
- Mentorat informel d'un·e junior ou nouveau·elle arrivant·e (pair-programming, reviews pédagogiques)
- Bilan formel avec la·le tech lead : ramp validé, plan de progression sur 1-2 axes prioritaires