Disseny d'un scorecard de prova tècnica per a contractació en React Native

Com vaig dissenyar un scorecard de prova tècnica que funciona de Graduate a Senior

El problema de l’«això és un 3 o un 4?»

Quan vaig començar a construir el procés de contractació per al meu equip, volia un scorecard estructurat des del primer dia. Vaig escriure sobre la prova tècnica en si en un post anterior. La prova funcionava. La puntuació, no. Almenys, no com la vaig dissenyar al principi.

El meu primer scorecard feia servir una escala d’1 a 5 per a cada criteri. «Ús de TypeScript: puntuació 1 a 5». «Gestió d’estat: puntuació 1 a 5». Cada criteri tenia una rúbrica que descrivia què significava cada puntuació. Sobre el paper feia el fet.

Després vaig intentar fer-lo servir.

Dues persones van revisar la mateixa entrega. Una va puntuar el TypeScript amb un 3 («hi ha tipus però no són estrictes»). L’altra va posar un 4 («tipus nets arreu del codi, bon ús de hooks tipats»). Estaven mirant el mateix codi. Simplement van llegir la rúbrica de manera diferent. Si dues persones raonables poden no estar d’acord en la puntuació, la rúbrica no és prou específica. L’eina és el problema, no els revisors.

Checklists en comptes de rúbriques

La solució era simple: substituir cada puntuació subjectiva per una checklist de sí/no.

Així quedava un sol criteri abans i després. Aquest és l’ús de TypeScript:

AbansRúbrica subjectiva
PuntuacióDescripció
5Tipat fort arreu del codi, mode estricte, genèrics on correspon
4Tipus nets, mínim any, props i navegació tipats
3Tipus per a les estructures principals, una mica d'any solt, funciona però no és estricte
2TypeScript mal utilitzat, any freqüent, aporta poca seguretat
1any a tot arreu, bàsicament JavaScript amb extensions .tsx

El problema: «tipus nets» i «tipus per a les estructures principals» són descripcions raonables del mateix codi. Un revisor hi veu un 3, l’altre hi veu un 4. Tots dos tenen raó.

DesprésChecklist observable
Els fitxers font utilitzen extensions .ts/.tsx
Existeixen interfaces o types per a dades d'API, forma de l'estat i props de components
Els paràmetres de navegació estan tipats
Zero any en codi de producció
Hooks tipats utilitzats (useAppSelector, useAppDispatch)
TypeScript estricte habilitat
Schemas de Zod o Yup per a validació
Els quatre primers checks són la línia base (qualsevol candidat competent els tindrà en una entrega de 4 a 6 hores). Els tres últims són senyals d'experiència més profunda. L'ordre s'encarrega del nivellament per tu.

Mateix criteri. Set checks. Cadascun és un fet que pots verificar mirant el codi. Dos revisors marcaran les mateixes caselles perquè no hi ha res a interpretar.

Vaig fer això per a cada criteri en quatre seccions:

  • Funcionalitat core: funciona l’app?
  • Capa de dades i API: com obté i gestiona les dades?
  • Qualitat de codi: el codi està ben escrit i ben organitzat?
  • Testing: està provat, i com?

100 checks. 100 punts. Un punt cadascun.

Mateixa prova, diferent sostre

Els checks estan ordenats segons la inversió que representen.

Els primers checks de cada criteri són coses que qualsevol candidat competent aconseguirà en un termini de 4 a 6 hores:

  • El FlatList renderitza ítems?
  • Funciona la paginació?
  • La pantalla de party té un estat buit?
  • Hi ha tipus per a les estructures de dades principals?
  • Hi ha almenys un fitxer de test?

Això és la línia base. Si vas construir el que demanava el brief, passes aquests checks.

Els checks de més avall requereixen més temps, més experiència, o totes dues coses:

  • GraphQL en comptes de REST
  • Validació de respostes en runtime amb Zod
  • MSW per fer mock d’HTTP en tests
  • Estructura de projecte feature-first
  • BDD amb Cucumber
  • Llindars de cobertura obligatoris

Res d’això no es fa en un cap de setmana. Són patrons que aprens posant apps reals en producció.

Un candidat que hi dedica de 4 a 6 hores treu entre 50 i 65. Un candidat amb anys d’experiència que hi dedica una setmana sencera pot treure de 85 a 95. El brief és el mateix. Les expectatives escalen amb la puntuació.

Com es mapegen els nivells

La puntuació total es mapeja directament a un nivell:

NivellPuntuació de code review
Graduate20–45
Associate46–64
Software Engineer65–88
Senior89–100
Per sota de 20, és un rebuig directe: l'entrega no va superar els checks de línia base.

La puntuació del code review no és tot el panorama. La trucada de walkthrough afegeix més senyal. El code review és la base.

Respectar la limitació de temps

Una prova tècnica no és una app de producció. Els candidats tenen feines, famílies, vides. T’estan donant el seu vespre o el seu cap de setmana. Penalitzar algú per no implementar una capa de cache o per no posar els seus estils al costat del component seria com treure punts a un assaig fet a contrarellotge per no tenir notes a peu de pàgina.

Per això importen els checks de línia base. Tenir-los tots bé et dona entre 50 i 65 de 100. Això és territori d’Associate a Software Engineer. A la meva antiga rúbrica, un «3 de 5» sonava a premi de consolació. 55 de 100 a la checklist és un resultat positiu amb un camí clar cap al següent nivell.

Com queda «per sobre de la línia base»

Els checks de més avall són on els candidats es diferencien. No són requisits. Són senyals.

Un candidat que afegeix tests E2E amb Detox amb helpers extrets em diu alguna cosa sobre la seva cultura de testing. Un que implementa GraphQL amb Apollo em diu alguna cosa sobre com pensa les APIs. Un que configura MSW amb múltiples conjunts de handlers (èxit, error, 401, timeout, offline) em diu que ja ha depurat fallades d’API reals.

Res d’això no és obligatori. Tot es nota.

Els stretch goals se sumen als 100 punts com a bonificacions: cerca, mode fosc, accessibilitat, i18n, Storybook, ErrorBoundary. Són les marques d’algú que va tenir temps i va triar fer-lo servir bé.

Què hi afegeix el walkthrough

El code review em dona un número. El walkthrough em dona context.

Un candidat que treu 65 al code review pot pujar a 85 després del walkthrough si sap explicar cada trade-off, dir què canviaria amb més temps i moure’s pel seu codebase de memòria. També passa a la inversa: una entrega que fa bona pinta però que el candidat no sap explicar baixa un nivell. El número mesura el que van construir. La conversa mesura com pensen.

Vaig dissenyar el walkthrough com un conjunt de taules de preguntes. Cada pregunta té cinc descripcions de senyal, des de «no troba el codi» fins a «ho explica de memòria amb edge cases». L’entrevistador marca una fila per pregunta. S’assembla a la rúbrica de l’1 al 5 que acabava d’abandonar, però els ancoratges són d’una altra mena: cada fila descriu un comportament observable, no un judici de qualitat, així que dos entrevistadors que veuen la mateixa resposta marquen la mateixa fila. S’ha acabat l’«aquell walkthrough va ser un 3 o un 4?».

Per a candidats Senior hi ha una secció addicional de disseny de sistemes a la mateixa trucada. Sense entrevista separada. Els últims 15 a 20 minuts passen d’«ensenya’m el teu codi» a «com dissenyaries això per a un equip de 20 enginyers?». Les mateixes taules de preguntes, el mateix format de marcar una fila.

Què vaig aprendre construint això

Comença amb checklists, no amb rúbriques. Cada cop que escrivia una rúbrica («5 = excel·lent, 3 = bé, 1 = malament»), es convertia en un debat sobre què vol dir «bé». Les checklists acaben el debat. El criteri és al codi o no hi és.

Ordena els checks per inversió, no per importància. Els primers checks no són més importants que els últims. Només són més assolibles en un termini de 4 a 6 hores. Un candidat Senior que se salta el check 3 però clava el check 7 no és castigat pel salt perquè el total segueix reflectint el seu nivell.

Separa el que pots veure del que necessites preguntar. L’scorecard del code review és 100% observable des del codi. Res de «l’arquitectura està neta?». El walkthrough és 100% conversacional. Res de llegir codi durant la trucada. Cada document té una sola feina.

Mantén la línia base assolible. Si un check requereix més de 6 hores de feina d’un Software Engineer competent, pertany a la meitat superior de la checklist, no a la línia base. Em vaig enxampar diverses vegades escrivint checks de línia base que en realitat eren expectatives de Senior. La pregunta que em feia una vegada i una altra: «Esperaria això d’algú que fa aquesta prova després de la feina un dimecres al vespre?». Si la resposta era no, el pujava.

He fet servir aquest scorecard per a la nostra primera ronda de contractació de React Native, i el meu company EM el va revisar i també el va adoptar per a les contractacions del seu equip. Aquesta és la prova d’un bon sistema: algú altre pot agafar-lo i fer-lo servir sense que tu siguis a la sala. Els nivells podrien necessitar recalibració quan passin més candidats, però l’estructura ha aguantat.

Si estàs muntant un procés de contractació i els teus entrevistadors segueixen sense posar-se d’acord en les puntuacions, prova de substituir la teva rúbrica per una checklist. Et sorprendrà com es posen d’acord quan deixes de preguntar «com és de bo això?» i comences a preguntar «això hi és?».

Si vols veure la perspectiva del candidat sobre el que avalua aquest scorecard, vaig escriure un post complementari: Com aprovar una prova tècnica de React Native.

Warren de Leon
Warren de Leon

Software Engineering Manager. Recentment he liderat l'equip de Mobile Platform a Hargreaves Lansdown. Escric sobre lideratge tècnic, React Native i com construir bons equips.

Veure perfil