Récemment, j'ai eu une sollicitation de la part d'un intermédiaire spécialisé freelances, ce qui collait bien avec une disponibilité à venir.
Quand on essaie de recruter un freelance comme un CDI
L'interlocutrice, plutôt jeune semble-t-il, m'indique avoir un client de type Startup qui cherche une profil développeur Java Fullstack avec des compétences EmberJS. Il ne doit pas y avoir beaucoup de monde en disponibilité sur ce framework, mis en second plan derrière la vague actuelle des Angular, ReactJS et Vue.js, et je vois bien sur quoi repose le matching.
12 jours pour arriver à une conclusion
Le contexte décrit laisse entendre que le recrutement cible plutôt quelqu'un de maximum 5 ans d'expérience, et que c'est la première fois que la Startup envisage le recours à un freelance, sans pour autant perdre espoir sur une logique de pré-embauche.
Ca fait beaucoup de points de fragilité mais à partir du moment où j'ai été clair de mon côté sur un TJM plancher et ma non volonté de rebasculer dans le salariat, cela ne coûte rien d'explorer.
J'ai pour habitude de fournir mon CV en version anonymisée pour satisfaire aux contraintes des positionnement, mais ici j'ai droit au classique CV au format Word, ce qui me surprends puisque l'intermédiaire est spécialisé freelances. L'interlocutrice me rétorque qu'elle a l'habitude de rajouter le logo de sa société, mais lâche prise quand je lui dit que j'édite mon CV sous Google Docs et que je n'ai donc pas de format Word.
Sur la période où se passe l'avant-vente, je suis en mission et anime une formation, donc contraint par des horaires que j'avais communiqué à mon interlocutrice. Cela ne l'a pas empêché, plus que de privilégier une communication mail, de m'appeler sur les mauvais horaires et de me laisser des messages sur mon répondeur. Rien de plus agaçant quand il s'agit en fin de journée d'interroger son répondeur pour n'avoir pour nouvelles qu'un pouvez-vous me rappeler ?
J'étais prévenu dès le premier échange : le client a pour habitude de soumettre un test d'1 heure à ses candidats, et il était possible qu'on me l'impose. J'avais désamorcé le sujet, non sans laisser apparaître une opinion sur le sujet, en disant que je ne me vexerais pas. 5 jours après le premier contact, elle m'indique avoir eu un premier retour du client et confirme l'idée du test en me demande si j'étais bien d'accord pour le passer.
Je répond un matin de bonne heure et reçois une invitation Codility vers 10h30. Evidemment, je suis toujours en mission sur une formation longue avec une maigre heure de pause déjeuner qui me sert à préparer / consolider quand je décide de jeûner.
Hasard oblige, ce jour là était un jour off mais pas inactif puisque j'emmenais Clément à un RDV puis je tirais profit de cette bouffée d'air pour faire des courses. L'après-midi étant destiné entre autres à une séance de cryothérapie et la récupération de clés pour la première soirée HackYourJob Paris, la fenêtre de tir pour isoler 1h (voire plus) pour passer ce test en ligne était soumise à rude épreuve.
Sur le retour de ma matinée, l'intermédiaire m'appelle peu avant 12h et me demande si j'ai déjà passé le test. Je lui indique que je suis en voiture et que j'avais d'autres engagements ce matin. Elle semble soulagée et me présente le déroulement du test en insistant sur un découpage en 3 exercices de difficulté croissante, me mettant en garde sur le temps requis pour le dernier exercice.
Arrivé à la maison, j'avais tout juste 1 heure devant moi, mais étant donné le temps à consacrer pour lire les conditions d'utilisation de la plateforme et la FAQ, cela me paraissait Rock'n'Roll et j'ai préféré reporter.
Le timing de l'après-midi allant, non seulement je n'ai pas pu faire tout ce que j'avais prévu à titre personnel, mais en plus je ne me sentais pas assez concentré une fois les enfants couchés pour ce genre d'exercice.
C'est donc le lendemain matin de très bonne heure que je me suis familiarisé avec la plateforme et ai lancé le test avant d'enchaîner dépôt des enfants et animation de formation. Je ferais un focus sur l'examen plus loin dans l'article.
Nous sommes donc jeudi, l'examen est fait, le résultat m'est accessible et donc également à l'intermédiaire / au client. De mon côté je replonge dans mon quotidien pour n'avoir de nouvelles de l'intermédiaire que vendredi dans l'après-midi mais évidemment sous forme d'appels téléphoniques (le premier pendant la formation, le second pile au démarrage d'un meetup) qui finissent sur mon répondeur.
Constante dans sa pratique, l'intermédiaire m'indique vouloir prendre des nouvelles et débriefer sur le déroulement du test, mais ne laisse entendre aucun feedback / logique de suite. Je suis clairement vexé et me sens pris dans quelque chose qui ressemble à un processus de recrutement très traditionnel. J'ai passé facilement 2 heures et je n'ai toujours aucun élément de premier / second retour du client sur mon profil. Autant dire que je deviens méfiant et appréhende une discussion, score à l'appui, pour négocier mon TJM à la baisse sous prétexte que je n'aurai pas fait 100% au test.
Je laisse donc filer le week-end et décide d'attendre des nouvelles par mail ou un autre appel.
Evidemment, il n'y aura pas de nouvelles par mail et l'appel suivant tombera encore une fois sur mes horaires d'animation de formation. Je prends néanmoins sur moi lors de la pause de l'après-midi pour rappeler, et là surprise je tombe sur le répondeur qui après 5 secondes m'indique être plein. Je me sens définitivement agacé, d'autant que l'intermédiaire essaie de me rappeler 30' plus tard, ce qui évidemment encore une fois ne colle pas avec mon quotidien (d'autant que pendant la formation mon téléphone est en silencieux). Et toujours aucun feedback concret 12 jours (dont certes 2 week-ends) après le premier contact ...
Afin d'éviter de devenir désagréable au téléphone si tant est qu'un appel puisse se faire dans le bon timing, je lui envoie le mail suivant :
J'ai tenté de vous joindre pendant ma pause cet après-midi suite à vos appels vendredi.
Je n'ai pu avoir que votre répondeur qui m'a indiqué après 10 secondes être plein. Mon activité de formateur jusqu'au 1er octobre inclus ne me laissant que peu de temps morts en journée, je ne peux malheureusement pas être à l'affut de mon téléphone et encore moins quitter la salle de formation à n'importe quel moment.
Le processus pour l'opportunité que vous m'avez soumise me semble un peu trop complexe et consommateur de temps pour poursuivre comparé à d'autres opportunités de prestation. Il me semble raisonnable de ne pas poursuivre si après l'effort d'1 heure consacré à réaliser le test en ligne soumis par votre client ce dernier n'est pas en mesure de savoir s'il souhaite me rencontrer sur la base du profil partagé, du tarif indiqué, et du test réalisé.
Si toutefois, votre client souhaitait avancer, je vous laisse me l'indiquer par retour de mail, auquel cas je vous joindrais demain en milieu de matinée à l'occasion de la pause sur la formation que j'anime.
A compter de l'émission de ce mail, je n'ai plus eu la moindre sollicitation : ni appel, ni email. Preuve en est donc certainement que l'opportunité n'allait rien donner si ce n'est la transmission d'informations sur le test pour un prochain candidat ou une pseudo négociation sur le TJM.
Focus sur le test en ligne
La plateforme
Au travers de ma veille sur twitter j'avais déjà identifié la plateforme https://www.codility.com/ sans plus que ca m'y intéresser. Ce fût donc l'occasion de voir sur quels principes cette plateforme d'aide au recrutement reposait.
N'ayant évidemment plus accès au test, et étant limité dans mon propos aux conditions d'utilisations que j'ai accepté en procédant à l'examen, ma description peut évidemment être autant erronée qu'incomplète.
Je ne parlerais évidemment pas de la partie Refactor Yourself de cette plateforme qui vise à attirer / préparer les développeurs en leur proposant des compétitions / challenges indépendants d'un enjeu de recrutement pour un client. Je ne parlerais pas non plus de la partie CodeLive puisque cela n'a pas fait partie de cette expérience d'examen / test de recrutement.
Le terrain de jeu
Lorsque j'ai passé le test, je me suis évidemment penché sur la FAQ dans un premier temps pour identifier le terrain de jeux et les éventuelles restrictions.
A noter notamment :
- que le choix de partager le résultat revient au recruteur (frustration en prévision)
- qu'un navigateur suffit pour procéder au test
- que l'utilisation d'un moteur de recherche / documentation est toléré (you may) sauf contre-indication par le recruteur (ce qui n'a pas été le cas)
- que l'utilisation d'un IDE n'est pas proscrite
J'ai pris le temps de me familiariser avec l'outil dans un examen blanc qui n'est par contre accessible qu'à partir du lien initialement transmis (mais ne déclenche évidemment pas le décompte des 60 minutes).
Cela m'a permis de comprendre la philosophie appliquée pour les exercices de production de code, à savoir :
- un énoncé en haut à gauche
- un éditeur de code en haut à droite
- un ensemble de cas de tests en bas à gauche
- un zone de feedback lors d'une demande de validation du code
- un bouton pour soumettre définitivement la solution et passer au prochain test
N'ayant que peu de temps, j'essaie tout de même de m'intéresser à l'enrichissement des cas de tests puisqu'il est rappelé que les tests fournis ne sont pas exhaustifs et que nous sommes encouragés à en rajouter. J'y arrive mais trouve cela fastidieux : en effet, habitué d'écrire les tests sous forme de code, je n'ai pas de repères et le DSL pour décrire un test me paraît très pauvre (sans compter l'espace disponible).
Qu'à cela ne tienne, je considère que l'ajout de test est du bonus.
L'examen passé
C'est parti, le chrono défile et il faut rester focus (d'autant que les enfants vont bientôt se manifester, heureusement la maman est là).
Au menu :
- un exercice de code réputé simple
- un QCM composé de 10 items
- un exercice de code réputé complexe
Il est en principe possible de parcourir les différents exercices et de commencer par celui qui nous intéresse, personnellement je me suis laisser guider par l'ordre et n'ai même pas cherché à avoir un teaser du 3ème exercice.
Je suis clairement déstabilisé par le premier exercice, ma réaction est la suivante : mais pourquoi vouloir faire cela ?
Je ne peux évidemment pas vous décrire l'exercice, ce serait contraire à l'engagement pris, mais il correspond à une logique d'analyse de chaîne de caractère. 19 lignes de code plus tard, et quelques aller retour dans la JavaDoc et la table Unicode, nous y sommes. Le seul et unique test passe, j'en rajoute d'autres qui passent également. Cela fait déjà 18 minutes et il ne faut pas trop traîner ne sachant pas trop à quoi m'attendre pour la suite.
Même si le besoin me paraît tiré par les cheveux et peu représentatif de la vraie vie, il a l'avantage d'être très clair et je sais que mon score sera à 100% sauf pinaillage.
En effet, la plateforme affirme évaluer le code selon plusieurs axes :
- Task Score
- Correctness
- Performance
et le seul élément pour lequel on obtient un feedback immédiat et le premier.
Sur ce premier exercice, l'intitulé annonçait d'ailleurs que la performance n'était pas évaluée.
Je bascule donc sur le second exercice qui s'avère être un QCM composé de 10 items. Le QCM ... un grand classique ... qui pose toujours problème.
En effet, pour proposer des QCMs interactifs lors de mes formations, je me rends souvent compte à quel point il n'est pas toujours évident d'invalider ce qu'on pense être une mauvaise réponse : ca se joue à la formulation (parfois le mot près) et on peut parfois oublier qu'il y a des cas particuliers qui ne confirment pas la règle.
En l'occurence ici c'était en anglais, et toujours sans reprendre la teneur du QCM, j'ai identifié une question où la formulation pouvait prêter à confusion (type primitifs ou n'importe quel type/classe ?) et une autre où j'imaginais un cas particulier possible et ne savait pas si les affirmations étaient tirées par les cheveux ou non.
L'avantage d'un QCM, c'est que ca ne prend pas trop de temps quand on maîtrise son sujet. J'aurais sans doute passé autant de temps sur les 2 questions dont la formulation m'a fait hésiter que sur les 8 autres questions. Au final, je passe au dernier exercice après avoir passé 14 minutes sur le QCM. Je crois me souvenir que, dans la mesure où il est soumis, le résultat du QCM m'était indiqué ce qui m'a sans doute perturbé pour la suite puisque 70% ne m'avait pas paru satisfaisant par rapport à mon ressenti.
Il me reste donc 28 minutes pour le dernier exercice, ce qui me semble plutôt confortable ...
Ce dernier exercice se présente comme un cas d'école à mes yeux, c'est à dire - contrairement au premier - une activité à résoudre qui correspond déjà davantage à ce qu'on peut rencontrer dans le quotidien du développeur. Manipulation de chaînes de caractères, gestion d'ensembles, de doublon, règle de gestions, tout y est.
L'énoncé présente le contexte et illustre l'exemple de transformation à réaliser par l'intermédiaire d'une chaîne en sortie et une chaîne en entrée ... et c'est tout. C'est le même jeu de donnée qui est utilisé pour la vérification automatisée.
A niveau de complexité croissante, je m'attendais à ce qu'il y ait davantage de cas de tests, mais surtout une description davantage métier. En effet, les règles de gestion ne sont pas décrites mais simplement illustrées par le jeu de données. Ce jeu de données étant le seul fourni et donc relativement complexe, je me suis rendu compte à 2' de l'expiration du chronomètre (en lançant ma première vérification) de son existence.
J'ai finalement réussi à intégrer cette règle de gestion (heureusement que j'avais découpé ma solution plutôt que de me contenter de rester monobloc) et lancer une seconde vérification, positive cette fois, avant l'expiration de l'heure.
Bien évidemment, je n'avais plus le temps de tester d'autres cas de figure, mais en même temps je n'en vois pas l'intérêt étant donné la complexité du seul cas de test fourni.
Petite montée d'adrénaline sur la fin quand on se dit, d'après lecture de la FAQ, que le score peut être à 0 pour un petit détail, et puis j'ai juste le temps de voir la page récapitulative avant de me remettre en focus sur le train train enfants / métro / boulot.
Le résultat
Puisque c'est le premier élément qui va intéresser, portons nos yeux sur le résultat :
Pour le score total, ne faites pas le calcul, c'est une moyenne des trois scores intermédiaires.
Le rapport qu'on me présente est loin d'être aussi détaillé que celui présenté en exemple, il a donc été décidé de ne me donner qu'une synthèse minimaliste de l'examen et pas les métriques complémentaires.
J'espère que le rapport obtenu par les recruteurs est plus fourni (et a été exploité) car avec un nombre de lignes de code et un temps intermédiaire, la seule métrique qui peut ressortir (en plus du score) et le nombre de LOC produites par minutes (troll inside). Voici un exemple de rapport détaillé partagé par la plateforme.
En ce qui me concerne, je reste sur ma faim et me dit que 60% (sachant que - chose annoncée dans l'énoncé - la performance n'était pas un critère) ce n'est pas cher payé pour un programme qui répond au cas de test fourni, seul entrant pour la réalisation.
Il me manque ainsi un élément de feedback : fallait-il rajouter un ou plusieurs cas de test pour atteindre les 100% ? Fallait-il inventer une règle de gestion supplémentaire en extrapolant le seul exemple fourni en entrant ? Situation clairement frustrante.
Mon avis
L'idée de passer un test en ligne ne m'emballait pas, et m'emballe encore moins à l'issue de cette expérience.
Pourquoi ?
Premièrement car c'est assez fragile comme démarche dès lors qu'on adresse un public un minimum expérimenté (si ca permet sur des profils plus jeunes de faire le tri, tant mieux). Avec aucun test dont la performance / qualité de l'algorithmique n'était attendu, j'estime que le choix des 3 exercices n'est pas en adéquation avec les attentes qu'on peut avoir d'un profil expérimenté.
Sans reprendre en détail le ressenti partagé sur chacun des exercices, je n'en ai finalement trouvé aucun satisfaisant dans mon référentiel, plus particulièrement le dernier.
En effet, alors qu'on adresse un vrai sujet qui permet de s'illustrer, la façon dont l'exercice est fourni est très bancale et me fait penser à du développement à l'arrache. Oui, de l'arrache, car fournir un contexte métier et décrire à un unique jeu de données ce que le traitement doit faire, ce n'est ni du cycle en V bien mené, ni une pratique agile.
Soit on fait un focus sur les règles de gestion et on les énonce clairement en anglais / français, soit on fait un effort plus important sur les cas de test / critères d'acceptance.
Ici en l'occurence, l'entrant fourni n'est pas en ligne avec la vision qualité / craft que j'ai du métier de développeur, et me remémore tellement de situations réelles où le développement est critiqué alors que c'est la qualité du besoin / des exigences qui est en grande partie en cause.
La plateforme
D'un point de vue expérience utilisateur, la plateforme me semble à la traîne par rapport aux technologies disponibles de nos jours, illustrées notamment par les Web IDE. En effet, je n'ai pas souvenir de coloration syntaxique (mais je peux me tromper) mais surtout pas de compilation à la volée et évidemment donc pas de complétion dans l'éditeur intégré. Pour avoir un feedback il faut enregistrer et demander une vérification (qui n'est pas synonyme, heureusement, de soumission définitive).
C'est ainsi que je me suis naturellement tourné vers un IDE pour l'écriture des programmes et en ai fait un copier / coller dans l'éditeur Codility, ce qui m'a valu l'une ou l'autre vérification en erreur car je n'avais pas reporté les imports.
Conjugué à une logique de tests automatisés ne reposant pas sur l'outillage standard rattaché au langage pour lequel l'exercice porte, la plateforme n'est pas représentative de l'outillage du quotidien d'un développeur, ce qui serait sans aucun doute un élément positif dans l'expérience candidat.
Ici s'arrête mon regard sur la plateforme.
Le processus
On a tendance à parler de parcours de recrutement, ici de parcours je n'ai rien vu alors qu'il y a néanmoins du potentiel à exploiter d'une démarche incluant un test technique (quelles que soient ses modalités).
En particulier, tout test technique seul face à un écran amenant la production d'un livrable noté d'une manière ou d'une autre aura une connotation négative à mes yeux s'il n'y a pas un être humain compétent sur le sujet en face pour débriefer.
Peut-être qu'un junior ne s'offusquera pas de ce genre de démarche non intégrée, mais nul doute que des seniors verront d'un mauvais oeil l'absence d'interaction post examen :
- peu importe mon score sur le QCM, c'est l'échange autour des questions "en échec" qui va m'intéresser
- sans étude / échange sur le code produit et la démarche suivie (quand bien même ce n'était pas un critère indiqué par la plateforme), l'aspect OK / OK d'un exercice ne m'intéresse pas
- si je n'ai pas 100% alors que j'estime avoir satisfait aux exigences qui avaient été portées à mon attention, il m'est indispensable de comprendre sur quels critères repose cette notation et de pouvoir partager un regard critique sur ces derniers
- avoir du feedback fait partie de l'investissement qu'on peut attendre d'un client / entreprise pour le temps passé : les 90' consacrées à la prise de connaissance et réalisation de l'examen n'ont à aucun moment trouvé une contrepartie valorisant une quelconque expérience de recrutement, et le rapport fourni par la plateforme est loin de compenser ce bilan.
Ce sont de ces échanges que le processus de recrutement pourrait se nourrir, ce qui n'a pas été le cas pour moi, tout du moins ca n'en avait pas pris le chemin.
Le mot de la fin
Si j'avais un seul conseil à donner à ceux qui doivent passer par ce genre de processus de recrutement, sur la base du fonctionnement de cette plateforme, il serait de faire le QCM à la fin. En effet, sur une logique très comptable, il sera moins pénalisant puisque ce n'est pas du "tout ou rien" comme les exercices de production de programme, donc même si vous n'avez que 10' à y consacrer, vous n'aurez pas un 0% comme sur un exercice où il vous manque une ligne pour aboutir à l'effet escompté.
Vous trouverez également des conseils dédiés à la plateforme Codility en pied de page de leur FAQ.