Développeur·euse Front-end
Questions d'entretien structurées pour Développeur·euse Front-end, avec ce qu'une bonne réponse révèle pour chacune.
ComportementaleDécision technique Front-end Décrivez la décision Front-end la plus difficile que vous avez prise sur votre dernier poste (choix de framework, refactor majeur, arbitrage performance vs DX). 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 (équipe, calendrier, dette existante, parc utilisateur·rice), arbitrages explicites, consultation des parties concernées (designer, back-end, PM), validation a posteriori avec des données (Core Web Vitals, taux d'erreur, feedback équipe). Bonus : la·le candidat·e mentionne avoir changé d'avis en cours de route ou avoir documenté la décision. 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 Front-end Parlez-moi d'un bug Front-end pénible que vous avez résolu (rendu cassé sur un navigateur, fuite mémoire dans un composant, layout shift inattendu). 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, DevTools (Performance tab, Memory tab, rendering, network), instrumentation, hypothèses validées par expérimentation. Honnêteté sur la durée (un vrai bug Front-end dure rarement moins de 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 changé une propriété CSS au hasard et ça a marché » sans diagnostic révèlent une faiblesse d'investigation.
ComportementaleApprentissage et humilité Décrivez un moment où vous avez dû refactorer ou réécrire un composant Front-end 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 (découpage, gestion d'état local vs global, séparation logique / présentation). 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.
SituationnelleCollaboration design system Le·la designer vous livre une maquette Figma qui propose un nouveau composant ressemblant beaucoup à un composant existant du design system, mais avec quelques variations visuelles. Comment vous positionnez-vous ?
Ce qu'une bonne réponse révèlePosture de partenariat : challenger constructivement, proposer un échange rapide pour comprendre l'intention (variation justifiée par un cas d'usage différent ou simple écart non intentionnel ?), proposer 2 options chiffrées (étendre l'existant via une variante de composant vs créer un nouveau composant). Bonus : la·le candidat·e mentionne le coût caché des composants quasi-doublons (maintenance, accessibilité, cohérence visuelle). Les candidat·e·s qui implémentent en bloc sans poser de question, ou qui refusent en bloc sans proposer d'alternative, révèlent une faiblesse de collaboration.
SituationnelleCommunication produit Un·e Product Manager vous demande d'ajouter une feature Front-end que vous estimez à 2 semaines. Le·la PM veut la livrer en 5 jours pour une démo client. Comment réagissez-vous ?
Ce qu'une bonne réponse révèleClarification du besoin avant de négocier la timeline (la démo a-t-elle besoin de toute la feature ou seulement du happy path ?). Proposition d'options : MVP visuel non interactif en 2 jours pour la démo + V2 fonctionnelle en 2 semaines ; coupes explicites de scope (un seul navigateur, pas d'accessibilité clavier, pas de gestion d'erreur). Bonus : la·le candidat·e signale les risques de chaque coupe. Les réponses « je peux le faire en 5 jours si je travaille les week-ends » sont un drapeau rouge.
SituationnellePragmatisme et priorisation Vous rejoignez une équipe avec un Front-end legacy : pas de design system, composants à 600 lignes, jQuery mélangé à React, pas de tests, pas de typage. Quel est votre plan en 60 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 : extraction d'un noyau de tokens et de 5-10 composants partagés d'abord, puis introduction progressive de TypeScript sur les nouvelles features, puis tests sur les zones critiques). Validation avec l'équipe et la·le lead avant d'engager. Bonus : la·le candidat·e propose de mesurer la valeur du chantier (vélocité, taux de régression, accessibilité) plutôt que de refactorer pour la beauté du geste. Les candidat·e·s qui veulent tout réécrire en React Server Components dès le jour 1 manquent de pragmatisme.
Étude de casPerformance web Performance : votre page principale charge en 6 secondes sur mobile 4G. LCP à 4,8 s, CLS à 0,28, INP à 380 ms. Vous avez 2 semaines pour passer les trois métriques en zone verte (Core Web Vitals). Plan d'action ?
Ce qu'une bonne réponse révèleMesurer avant d'optimiser : Lighthouse, WebPageTest, Chrome DevTools Performance tab, RUM si disponible. Identification des bottlenecks par métrique (LCP : image héros non optimisée, font-display:swap manquant, CSS bloquant ; CLS : images sans dimensions, fonts qui reflowent, bannières insérées tardivement ; INP : long tasks JS, listeners coûteux, hydration trop lourde). Hiérarchisation par effort × impact. Bonus : la·le candidat·e mentionne qu'une page à 6 s en prod indique souvent un problème systémique (bundle énorme, trop d'hydration) plus qu'une optimisation locale. Les réponses « j'ajoute un lazy-load » sans diagnostic révèlent un réflexe d'optimisation prématurée.
Étude de casAccessibilité Accessibilité : on vous demande de rendre accessible un modal complexe (formulaire à plusieurs étapes, validation inline, fermeture par clic extérieur). Comment cadrez-vous ?
Ce qu'une bonne réponse révèleConnaissance des patterns WAI-ARIA (rôle dialog, aria-modal, aria-labelledby, gestion du focus à l'ouverture, focus trap pendant l'ouverture, restauration du focus à la fermeture, gestion de la touche Escape). Distinction entre dialog modal et dialog non-modal. Bonus : la·le candidat·e mentionne avoir testé avec VoiceOver ou NVDA, et signale les pièges classiques (modal qui ferme au focus sur un input externe, validation inline non annoncée aux lecteurs d'écran). Les candidat·e·s qui répondent « j'utilise une librairie comme Radix » sans pouvoir expliquer ce qu'elle fait sous le capot révèlent un manque de fondamentaux.
Étude de casArchitecture de composants Conception : on vous demande de créer un composant Select autocomplete partagé pour le design system (recherche async, navigation clavier complète, multi-sélection optionnelle, support mobile). Comment cadrez-vous ?
Ce qu'une bonne réponse révèleClarifications avant code : volume attendu d'options (10 vs 10 000 changent l'architecture), source des données (local vs API), comportement attendu sur mobile (sheet vs popover), accessibilité requise (combobox WAI-ARIA pattern). Architecture cohérente : composition (un Select de base + variantes vs un Select monolithique configurable), gestion d'état (controlled vs uncontrolled), API publique stable. Bonus : reconnaissance des zones d'incertitude (« je ferais un prototype rapide pour valider l'API publique avec 2-3 cas d'usage de l'équipe avant de m'engager »). Les candidat·e·s qui plongent dans le code sans clarifier les contraintes révèlent une faiblesse de design de composant.
TechniqueFondamentaux framework Différence entre useMemo, useCallback, et React.memo ? Dans quels cas un mauvais usage cause-t-il plus de problèmes qu'il n'en résout ?
Ce qu'une bonne réponse révèleuseMemo mémoïse la valeur de retour d'une fonction coûteuse ; useCallback mémoïse une référence de fonction stable ; React.memo évite le re-render d'un composant si ses props n'ont pas changé (comparaison superficielle par défaut). Pièges classiques : mémoïser un calcul trivial coûte plus en mémoire et en complexité qu'il n'économise en CPU ; React.memo est inutile si le composant reçoit des props non stables (objets ou fonctions recréés à chaque render) ; la sur-mémoïsation rend le code illisible. Bonus : la·le candidat·e cite avoir mesuré avant de mémoïser (Profiler React DevTools). Les candidat·e·s qui mémoïsent tout par réflexe révèlent un manque de fondamentaux.
TechniquePerformance web Expliquez le rendering critical path d'une page web moderne. Quels sont les leviers Front-end pour réduire le LCP et le CLS ?
Ce qu'une bonne réponse révèleCompréhension de la séquence : HTML parsing, construction du DOM, CSS parsing et CSSOM, blocking resources (CSS et JS sync), construction du render tree, layout, paint, composite. LCP : optimiser le plus gros élément visible (image preload, fetchpriority=high, formats modernes, dimensions explicites, font-display:swap, CSS critique inline). CLS : dimensions explicites sur médias, réservation d'espace pour bannières et embeds, transitions CSS plutôt que reflows JS, font fallback métriquement proche. Bonus : la·le candidat·e mentionne les outils (Lighthouse, WebPageTest, Chrome DevTools Performance) et la distinction entre données synthétiques (lab) et données réelles (RUM, CrUX).
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, mélange de classes et de fonctionnels. 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 plutôt que par contrainte technique, (4) introduire un state-manager si nécessaire (Context, Zustand pour PME, Redux si volume) seulement sur les zones où le props drilling est réellement douloureux, (5) typer progressivement en TypeScript sur les nouvelles features et les zones touchées. 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 revue de code critique sur un composant Front-end 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, ou cite une review qu'il·elle a fait sienne après réflexion. 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.
ValeursCommunication produit et design Comment travaillez-vous avec un·e designer ou un·e Product Manager ? Décrivez une situation où vous avez poussé en arrière sur un brief ou sur une maquette.
Ce qu'une bonne réponse révèlePosture de partenariat : challenge constructif basé sur la faisabilité, la complexité, l'accessibilité, ou la cohérence avec le design system. 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 designers comme « ne comprenant pas la technique » ou les PMs comme « ne comprenant pas le Front » révèlent une faiblesse de jeu d'équipe.
ValeursJugement Front-end et curiosité Quels produits ou sites web utilisez-vous au quotidien et qui vous inspirent en ce moment sur la dimension Front-end (interactions, perf, accessibilité, design system) ? Qu'est-ce qui en fait la qualité ou la limite ?
Ce qu'une bonne réponse révèleCuriosité Front-end authentique : capacité à citer 3-5 produits récents (pas seulement Apple, Linear, Notion par réflexe), avec une analyse précise de ce qui fonctionne (qualité des interactions, performance perçue, cohérence visuelle, accessibilité au clavier, gestion des états). Bonus : la·le candidat·e cite un produit que personne ne cite et explique pourquoi. Les candidat·e·s qui répondent par des généralités (« j'aime quand c'est rapide ») ou par des produits évidents sans analyse révèlent un manque de regard critique entraîné, ce qui est rédhibitoire pour un poste qui exige du goût technique au quotidien.
Playbook d'évaluation
Le rôle de Développeur·euse Front-end se signale à travers cinq stades d'évaluation. Le pair-programming sur composant et le cas design system (stades 3 et 4) sont les plus prédictifs : ils révèlent la profondeur réelle sur HTML sémantique, CSS, accessibilité, et collaboration avec le design, là où le CV et le phone screen filtrent surtout sur la stack déclarée.
Stade 1: Lecture du CV et exploration GitHub / portfolio
Lisez le CV en parallèle du profil GitHub et d'éventuels dépôts publics. Cherchez la cohérence de stack (un·e profil React + TypeScript ne se replonge pas dans AngularJS sans 2-4 mois de réadaptation), la stabilité (durée minimale 18-24 mois sur les postes précédents), et les signaux d'investissement métier (contributions open source, articles publiés, talks meetup, side-projects avec démos publiques). 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é. Discount : profils qui n'ont jamais touché à CSS au-delà des classes utilitaires Tailwind, ou qui décrivent toute leur expérience sous l'angle algorithmique sans mention d'UI ou d'utilisateur·rice·s.
Stade 2: Phone screen (30 min)
Trois questions seulement : (1) « Décrivez le projet Front-end dont vous êtes le·la plus fier·ère ; quelle a été votre contribution exacte sur la couche UI ? », (2) « Quelle décision Front-end (choix de framework, refactor de composant, arbitrage perf vs DX) avez-vous prise récemment dont vous doutez encore ? » (humilité et rétrospection), (3) « Pourquoi un changement maintenant ? ». Sortie : go ou no-go en 5 min de débrief. Évitez les questions « gotcha » sur les API JavaScript à ce stade ; cherchez la maturité de raisonnement Front-end.
Stade 3: Pair-programming sur composant (60-90 min)
Exercice borné (45-60 min) : ajouter une feature ou refactorer un composant React, Vue ou Svelte existant. Cas typiques : ajouter la gestion clavier complète à un menu déroulant, refactorer un composant à 400 lignes en 2-3 sous-composants, débuguer un re-render inutile. Suivi de 15-30 min de Q&A sur les décisions prises. Évaluez la capacité à raisonner à voix haute, à demander des clarifications, à itérer, à reconnaître ce qu'il·elle ne sait pas. Évitez les algorithmes purement académiques sans rapport avec le métier ; privilégiez un exercice qui ressemble au quotidien d'un·e Front-end.
Stade 4: Cas design system et collaboration design (60 min)
Présentez un cas concret : « Voici une maquette Figma qui propose un nouveau composant proche d'un existant ; comment cadrez-vous la décision avec le·la designer ? ». Évaluez la capacité à reconnaître les patterns existants, à challenger constructivement la maquette, à proposer des arbitrages (étendre l'existant vs créer un nouveau composant), à anticiper l'accessibilité et les états (vide, chargement, erreur, focus visible). C'est le stade le plus prédictif pour un·e Front-end qui travaillera étroitement avec un·e designer en PME.
Stade 5: Références (vérification structurée)
Appelez 2 références : un·e ancien·ne lead Front-end ou tech lead et un·e ancien·ne collègue designer ou Product Manager qui a travaillé avec le·la candidat·e au quotidien. Posez à chacun·e les mêmes 4 questions : « Sur quoi est-il·elle le·la plus fort·e ? », « Sur quoi recruteriez-vous quelqu'un de complémentaire ? », « Le·la reprendriez-vous demain ? », « Un exemple de décision Front-end difficile prise en autonomie, ou d'arbitrage tenu sous pression PM ou design ? ». La 4e question révèle le vrai signal d'autonomie et de jeu d'équipe.
Comment reconnaître une excellente recrue
| Compétence | Sous la barre | Au niveau | Au-dessus |
|---|---|---|---|
| Solidité Front-end | Bute sur les fondamentaux (HTML sémantique, modèle CSS de flux, cascade, événements DOM, JavaScript asynchrone). Cherche les solutions par essai-erreur sans modèle mental clair. Difficile à charger sur un nouveau framework ou un nouveau navigateur. | Maîtrise la stack actuelle en autonomie (React, Vue ou Svelte avec TypeScript). Comprend le rendering critical path, la cascade CSS, la propagation d'événements. Sait apprendre un nouveau framework Front-end en 2-4 semaines. Comprend les fondamentaux suffisamment pour déboguer en profondeur quand nécessaire. | Référent·e Front-end sur sa stack et capable de basculer sur une nouvelle stack en quelques semaines. Anticipe les pièges classiques (re-renders inutiles, fuites de listeners, layout thrashing, hydration mismatches). Construit des abstractions utiles, pas prématurées. Lit le code source des dépendances quand nécessaire. |
| Collaboration design system | Implémente les maquettes en bloc sans questionner les patterns existants. Crée des composants quasi-doublons par réflexe. Pas de réflexion sur les états (vide, chargement, erreur, saturé). Pas de discussion en amont avec le·la designer sur la faisabilité ou la cohérence. | Reconnaît les patterns existants et propose d'étendre plutôt que de dupliquer. Discute la maquette en amont avec le·la designer sur les états et l'accessibilité. Maintient la cohérence visuelle et structurelle du design system. Sait dire non à un pattern qui casserait le système. | Référence sur le pont design-code : variables Figma alignées avec les tokens de code, composants partagés documentés, gouvernance légère et tenue. Pair fréquemment avec le·la designer pour cadrer les composants en amont. Forme l'équipe sur la composition de composants accessibles et performants. |
| Performance et accessibilité | Pas de mesure avant optimisation. Ne connaît pas les Core Web Vitals ni les patterns WAI-ARIA de base. Reflows JS, images sans dimensions, fonts qui décalent le layout, listeners coûteux, composants inaccessibles au clavier ou aux lecteurs d'écran. | Mesure avant d'optimiser (Lighthouse, DevTools Performance, profilage React ou Vue). Applique les fondamentaux d'accessibilité (HTML sémantique, focus visible, navigation clavier, labels de formulaire, contrastes WCAG 2.1 AA). Connaît les Core Web Vitals et sait identifier les bottlenecks classiques. | Référence dans l'équipe pour la performance et l'accessibilité. A déjà testé avec VoiceOver ou NVDA. Sait construire des composants complexes accessibles (combobox, dialog modal, datepicker) sans dépendance lourde. Pilote des chantiers performance avec mesure avant et après. Forme l'équipe sur les patterns WAI-ARIA et sur le profilage runtime. |
| Communication produit et design | Explique mal son travail aux non-techniques. Posture défensive en revue. Travaille en silo, partage peu son contexte. Posture d'opposition systématique face aux PMs ou aux designers (« ils ou elles ne comprennent pas la technique »). | Sait expliquer son travail à un·e PM, un·e designer, ou un·e dirigeant·e en langage clair. Reçoit la review constructivement. Partage son contexte en revues d'équipe et 1:1. Sait négocier une timeline ou un périmètre avec une proposition d'options chiffrées. | Pont entre la tech et les autres fonctions. Anime les debriefs Front-end, vulgarise les arbitrages performance et accessibilité, négocie les timelines de manière transparente. Référence dans l'équipe pour la communication transverse. |
| 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. Difficulté à lire la documentation officielle ou le code source d'une dépendance. | 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é). Lit la documentation officielle plutôt que les premiers résultats Stack Overflow. Reproduit les bugs de manière minimale. | Débrouillardise élevée sur des sujets non familiers : lit le code source des dépendances Front-end, instrumente le runtime navigateur, isole les causes profondes. Documente les apprentissages pour l'équipe. Capable de prendre une décision Front-end structurante en autonomie sur un sujet ambigu. |
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 zones Front-end les plus critiques de la stack métier
- Premier 1:1 documenté avec la·le tech lead ou lead Front-end sur les conventions, la dette identifiée, et les priorités
- Première PR substantive (fix de bug, petit composant) reviewée et mergée
À J+60
- Livraison d'une feature Front-end complète bout en bout (UI + état + intégration API) en autonomie
- Première review de PR Front-end d'un·e collègue avec feedback structuré, sans juste cliquer approve
- Première contribution au design system : nouveau composant partagé ou refactor d'un composant existant
- Documentation rédigée ou mise à jour sur un composant ou un pattern récemment touché
À J+90
- Livraison régulière (1-2 PRs Front-end par semaine) avec qualité validée par l'équipe en review
- Première décision Front-end en autonomie sur un sujet ambigu (refactor, choix de librairie, design de composant partagé)
- 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 (perf, a11y, design system, leadership technique)