Alla ricerca dei pochi d'élite: trovare e assumere i migliori sviluppatori di software del settore
Pubblicato: 2022-03-11La sfida
Assumere talenti nello sviluppo di software - un vero talento - è un'abilità multiforme che si trova al crocevia di social networking, acume tecnico, gestione dei processi e intuizione. Chiunque abbia mai avuto responsabilità di assunzione comprende fin troppo bene la portata e la profondità della sfida di assunzione.
Particolarmente impegnativo è il fatto che le qualità distintive di eccezionali candidati all'ingegneria del software sono estremamente difficili da valutare. Come esplori la capacità di un candidato di innovare e pensare in modo creativo? Come si determina se è un giocatore di squadra? Come diagnosticare la sua capacità di ricevere feedback costruttivi? Come si indaga sulla fibra morale di qualcuno?
Sebbene valutare questi criteri "morbidi" non sia un compito facile, farlo è essenziale nella ricerca di assumere i migliori. Eppure, troppo spesso, i tentativi di valutare questi attributi cruciali, ma sfuggenti, consistono in domande o sfide sufficientemente trasparenti perché le risposte "corrette" siano ovvie per la maggior parte dei candidati. Quindi, non si ottiene nulla di sostanza chiedendo loro.
Una trappola comune che ne risulta è invece concentrarsi troppo sulle minuzie tecniche, piuttosto che valutare la capacità del candidato di risolvere i problemi, pensare in modo creativo e lavorare in modo compatibile con il resto del team.
Certamente, interviste e assunzioni efficaci di sviluppatori di software avanzati sono tanto un'arte quanto una scienza. Tuttavia, esistono approcci e metodologie per valutare le dimensioni più sottili delle abilità e abilità di un ingegnere del software.
Se utilizzate collettivamente, queste tecniche di reclutamento producono un processo di screening altamente efficace con una comprovata esperienza di successo per l'assunzione di talenti di programmazione stipendiati o freelance. Questo processo è ciò di cui tratta questo post.
Per iniziare: riempire la pipeline con il meglio
Il processo di ricerca e assunzione dei pochi d'élite inizia molto prima del colloquio stesso. In effetti, un approccio sistematico per identificare correttamente i candidati potenzialmente qualificati può snellire e aumentare significativamente l'efficienza dell'intero processo di reclutamento.
Senza dubbio, l'unica migliore fonte di candidati qualificati è il networking personale, poiché le persone di qualità tendono ad associarsi a persone di qualità. I referral personali dominano come la fonte più produttiva per le nuove assunzioni di successo (fonte).
Altre preziose fonti di talento tecnico di prim'ordine includono:
- Blog e post tecnici online. I blog degli sviluppatori possono essere un'ottima fonte di candidati forti. I post tecnici spesso forniscono preziose informazioni sull'acume tecnico di uno sviluppatore, sull'approccio alla risoluzione dei problemi e sulle capacità di scrittura, tutti criteri importanti per identificare i candidati migliori.
- Collaboratori di codice open source. L'analisi di progetti open source su siti come GitHub e SourceForge può produrre candidati altamente qualificati. Un ulteriore vantaggio di questo approccio è che consente di vedere e valutare campioni di codice di un candidato prima ancora di decidere di prendere contatto.
- Conferenze. I relatori e i co-partecipanti a conferenze tecniche pertinenti spesso forniscono una risorsa preziosa per i candidati qualificati. Se non sei in grado di partecipare, rivedi il programma online e valuta la possibilità di contattare i relatori. Potresti semplicemente contattarli "al momento giusto", oppure potrebbero essere in grado di indirizzarti a qualcun altro altamente qualificato.
Il bello di queste risorse è che forniscono candidati di ingegneria che hai controllato, in un modo o nell'altro, prima ancora di intervistarli. O qualcuno nella tua azienda, o qualcuno che conosci, li conosce e li consiglia vivamente. Oppure hai esaminato il loro codice open source e ne sei debitamente colpito. Oppure i loro post sul blog suggeriscono un livello maturo di competenza tecnica e comprensione (e idealmente anche un senso dell'umorismo :-)). La chiave qui è che, nel momento in cui stabilisci il contatto, il candidato è già molto più di un "solo un altro curriculum".
Inoltre, considera l'utilizzo di modelli di descrizione del lavoro (come questi per SEO, sviluppo web front-end e sviluppo web back-end) che stabiliscono un'aspettativa elevata per i tipi di candidati che desideri.
Valutazione dell'acume tecnico degli sviluppatori di software
Un'efficace determinazione della competenza tecnica va ben oltre le sfumature di uno specifico linguaggio di programmazione o tecnologia. Sebbene questi dettagli tecnici non debbano certamente essere ignorati, in genere non sono l'elemento più importante del processo di valutazione.
È la forza tecnica e la comprensione fondamentali del candidato, il pensiero creativo e la risoluzione dei problemi che sono fondamentali da valutare.
I migliori sviluppatori non perdono tempo a dedicare alla memoria ciò che può essere facilmente trovato in una specifica del linguaggio o in un documento API. Inoltre, l'apprendimento di una nuova lingua, tecnologia o modello di progettazione è un esercizio relativamente banale per uno sviluppatore forte (ed è in realtà un'abilità essenziale data la velocità con cui le nuove tecnologie vengono introdotte e guadagnano quote di mercato). Sono quindi fondamentali la forza tecnica e la comprensione, il pensiero creativo e la risoluzione dei problemi del candidato che sono fondamentali da valutare.
Un metodo collaudato per raggiungere questo obiettivo è quello di porre una sfida di programmazione non vincolata dal linguaggio . Presenta al candidato un problema e chiedigli di codificare una soluzione nella lingua di sua scelta. L'unico requisito dovrebbe essere che la soluzione sia completa e corretta, inclusa la risoluzione di eventuali condizioni marginali o potenziali errori. Ricorda, l'obiettivo qui è valutare la (a) capacità del candidato di risolvere i problemi, (b) la conoscenza dell'informatica e (c) lo stile di codifica. A questo punto non stai valutando l'attitudine in un linguaggio di programmazione specifico. (Un ulteriore vantaggio di questo approccio, per inciso, è che evita di richiedere all'intervistatore di essere un esperto nella lingua in cui il candidato sta codificando.)
Esistono numerose risorse online da cui è possibile selezionare tali sfide di programmazione da incorporare nel processo di intervista. Quelli che si concentrano sugli algoritmi (piuttosto che sulla conoscenza di un linguaggio di programmazione specifico) facilitano la valutazione delle basi informatiche e delle capacità di risoluzione dei problemi di un candidato. Alcuni esempi degni di nota includono hackerrank.com, projecteuler.net e beatmycode.com. Tieni presente, tuttavia, che non è necessario utilizzare questi siti per amministrare i test; piuttosto, puoi semplicemente usarli come risorse da cui selezionare le sfide e quindi avere il codice candidato una soluzione durante il colloquio di persona (su una lavagna, ecc.).
Detto questo, i test online possono essere una preziosa componente aggiuntiva del processo di intervista. Quando si utilizzano servizi di test online, tuttavia, è importante evitare il rischio di concentrarsi troppo sui punteggi generati dal sito di un candidato piuttosto che sulle specifiche delle loro soluzioni. Per prima cosa, potresti non essere d'accordo con le metriche di valutazione utilizzate dal servizio di test. Inoltre, potrebbero esserci aspetti di una soluzione che consideri particolarmente intelligente o elegante, di cui il processo di valutazione automatizzato potrebbe essere del tutto ignaro.
Esiste anche la possibilità di "falsi positivi" o "falsi negativi" con valutazioni fornite dai servizi di test online. Da un lato, i falsi positivi possono comportare uno spreco di tempo e risorse nell'intervistare candidati non qualificati, mentre i falsi negativi possono squalificare candidati altamente degni di considerazione. A lungo termine, quest'ultimo ha ramificazioni più serie ed è quindi qualcosa che bisogna monitorare attentamente.
In generale, i test somministrati di persona sono intrinsecamente più affidabili di quelli somministrati online, poiché riducono il potenziale di inganno. Inoltre, i test di persona offrono l'opportunità di osservare come un candidato ingegnere del software opera sotto pressione. Tuttavia, l'uso di servizi di test online può essere una componente efficace del tipo più completo di processo di screening qui proposto, che incorpora altre tecniche per aiutare a eliminare i candidati fraudolenti o sottoqualificati.
I test di sviluppo online possono anche fungere da prezioso filtro preliminare per eliminare la percentuale incredibilmente alta di candidati le cui competenze tecniche sono di gran lunga inferiori alla media. È interessante notare che molti di questi candidati abbandonano il processo senza nemmeno provare a sostenere i test, a causa della mancanza di fiducia. Detto questo, la fiducia non è sempre il miglior barometro dell'atteggiamento, come attesta l'effetto Dunning-Kruger.
Un'altra tecnica estremamente preziosa per valutare l'acume tecnico è chiedere al candidato di fornire un elenco di progetti open source di cui è autore, o almeno contribuito, su siti come GitHub e SourceForge (se erano solo contributori, chiedi loro di indicarti quali parti del codice hanno creato personalmente). Puoi quindi venire al colloquio dopo aver esaminato il loro codice, preparandoti a chiedere loro decisioni di progettazione specifiche, stili di codifica, modelli impiegati e così via. Tale discussione può essere sostanzialmente più preziosa del semplice interrogare il candidato sulla minuzia tecnica di una lingua.
A proposito di lingua...
I membri delle poche élite non sono solo esperti di tecnologia, sono consumati professionisti dello sviluppo software che comunicano in modo chiaro, efficace e conciso, sia verbalmente che per iscritto.

Le capacità di comunicazione verbale sono facili da valutare nel corso di un colloquio, sia di persona che al telefono. Sebbene le abilità verbali siano certamente meno critiche in alcuni ruoli tecnici "dietro le quinte" che non coinvolgono il contatto con l'utente, sono comunque importanti per massimizzare le interazioni efficaci del team e lo scambio di idee.
Le capacità di comunicazione scritta possono essere valutate al meglio chiedendo al candidato di fornire campioni di scrittura. I campioni di scrittura tecnica sono fortemente preferiti, poiché dimostrano non solo abilità di scrittura, ma anche chiarezza tecnica. Richiedere questi campioni prima del colloquio può essere particolarmente utile. Per prima cosa, questo offre l'opportunità di rivedere e analizzare i loro scritti in anticipo in modo che tu possa venire al colloquio preparato per discutere e criticare i loro scritti con loro. Inoltre, alcuni candidati tecnici saranno “scoraggiati” dalla richiesta di scrivere campioni che di per sé possono fungere da prezioso filtro.
Il dilemma morale
C'è una vecchia barzelletta su un padre che vuole insegnare a suo figlio l'etica. Il padre dice a suo figlio che lui e il suo partner hanno un'attività di lavaggio a secco. Un giorno, racconta il padre, una cliente viene nel nostro negozio a ritirare il suo lavaggio a secco. Quando la cliente si gira per andarsene, mi rendo conto che è stata pagata in eccesso di 10 dollari. OK, quindi ecco che arriva l'etica… lo dico o non lo dico al mio partner?!
Al contrario, i veri dilemmi etici – i dilemmi morali – possono spesso essere oscuri e complessi e si presentano sicuramente negli affari. Il più forte sviluppatore di software può devastare indicibilmente un progetto se non ha una bussola morale adeguatamente calibrata. Questa dimensione di un candidato è quindi fondamentale da valutare.
Una tecnica altamente efficace per raggiungere questo obiettivo è presentare al candidato un ipotetico dilemma morale e chiedere cosa farebbero nella situazione. Perché ciò sia efficace, è essenziale che il dilemma non abbia una risposta ovvia. Idealmente, ogni possibile risposta dovrebbe essere imperfetta e alquanto problematica. La risposta che il candidato fornisce a una domanda del genere può fornire un'enorme comprensione di come pensano, dei loro standard etici e delle loro priorità.
Ecco un esempio:
L'azienda per cui lavori è stata assunta per lavorare su un progetto da un'altra azienda. Il progetto richiede l'utilizzo di un particolare subappaltatore. In precedenza hai lavorato per quel subappaltatore e quindi sai di prima mano che spesso riempiono le loro ore e sovraccaricano i loro clienti per il loro tempo. Se lo fanno su questo progetto, tuttavia, non danneggerà la tua azienda, poiché tali costi verranno trasferiti al cliente della tua azienda. Ne hai parlato al tuo capo e lui ti ha consigliato di non dire nulla al cliente, soprattutto perché la parte del progetto del subappaltatore rappresenta solo una piccola parte del budget complessivo. Tuttavia, hai un amico molto intimo che lavora per il cliente. Un giorno a pranzo, il tuo amico ti chiede cosa sai di questo subappaltatore, poiché sa che ci lavoravi. Come rispondi e cosa gli dici?
Il bello qui è che non c'è una risposta chiaramente "giusta" e la situazione rispecchia la complessità morale della vita reale e del mondo degli affari. Se posta correttamente, la risposta a una simile domanda di "dilemma morale" può essere una delle parti più significative e preziose del processo di intervista per l'assunzione di sviluppatori di software.
Conoscerti (Chi sei veramente ?)
Uno dei difetti intrinseci del processo di intervista è che non c'è davvero modo di sapere come sarà lavorare con una persona finché non lavorerai davvero con loro. Ottenere un'idea realistica della personalità e del temperamento di un candidato è comunque fondamentale per un'assunzione di successo.
L'élite tecnica non è solo tecnicamente superiore, ma è anche altamente professionale. La loro ricerca non si limita quindi ad una valutazione strettamente tecnica.
Con questo in mente, ecco alcune tecniche di colloquio che possono essere utili per valutare la personalità e la professionalità di un candidato...
Per uno, considera di iniziare intenzionalmente il processo di intervista con un prescreen da parte di un membro del personale non tecnico (come un assistente amministrativo). Puoi quindi chiedere a questo membro dello staff come il candidato lo ha trattato una volta che si è reso conto che non erano tecnici. Erano umilianti, impazienti e condiscendenti, o erano piacevoli, pazienti e rispettosi? Ciò che il membro del personale ti trasmette può essere davvero molto significativo. Vuoi sapere se il candidato tratta gli altri con rispetto, indipendentemente da chi siano.
Durante il colloquio, cerca le opportunità per fornire al candidato un feedback costruttivo. Osservare attentamente la reazione che questo suscita. Il feedback è apprezzato o il candidato sembra mettersi sulla difensiva?
Impegnarsi in "chiacchiere" non tecniche per i primi 5 o 10 minuti di un colloquio come mezzo per ottenere informazioni sulla personalità del candidato. Il candidato potrebbe pensare che questo sia semplicemente un preludio al colloquio vero e proprio e quindi sarà più propenso a "sciogliersi i capelli". In questo modo potresti essere in grado di discernere una quantità sorprendente della loro personalità durante questo periodo. E, naturalmente, se esibiscono un senso dell'umorismo, è sempre un buon segno. :-)
Oltre a queste tecniche generali per l'assunzione di ingegneri, ecco alcune domande di esempio per aiutare a valutare la personalità, la sicurezza, l'onestà e la professionalità di un candidato :
- Quando guardi indietro alla tua carriera, qual è una specifica situazione difficile che hai dovuto affrontare che ti salta in mente? Descrivi la sfida e come l'hai affrontata in dettaglio. Cosa pensi di aver gestito particolarmente bene? Cosa potresti fare di diverso se avessi l'opportunità di farlo di nuovo?
- Qual è l'errore più grande che pensi di aver mai fatto nella tua carriera?
- Cosa ti piace di più dello sviluppo software? Cosa ti piace di meno?
- Se potessi dipingere la posizione ideale per te, quale sarebbe? Come sarebbe in termini di ruolo e responsabilità, dimensioni e tipo di azienda, ambiente di lavoro e così via?
- Quali sono i tuoi maggiori punti di forza? Cosa guadagneremmo assumendoti?
- Nessuno di noi è perfetto. Quali sono alcuni aspetti della tua personalità su cui stai lavorando per migliorare?
- Se chiamassi il tuo attuale capo e gli chiedessi di te, cosa mi direbbe?
- Di cosa dovremmo preoccuparci nell'assumerti?
Collettivamente, è stato dimostrato che queste domande e tecniche favoriscono una comprensione molto più forte e più profonda di chi è veramente il candidato, il che è fondamentale per prendere una decisione di assunzione di successo.
Il sentimento è reciproco?
Quindi, hai trovato un candidato A+. Altamente qualificato. Personalità positiva e ottimista. Ottimo adattamento culturale. È fantastico! Ma…
C'è ancora una domanda fondamentale a cui resta da rispondere: in che misura il candidato è specificamente interessato alla tua posizione disponibile ea lavorare per la tua azienda? La risposta a questa domanda è di fondamentale importanza per garantire un'assunzione di successo. Le relazioni unilaterali non funzionano meglio negli affari di quanto non facciano in qualsiasi altro aspetto della nostra vita.
Ancora una volta, porre semplicemente la domanda direttamente ha un valore minimo poiché, nel contesto del processo di colloquio, si deve essere sospettosi del candore di un candidato nel rispondere a una domanda del genere. Piuttosto, questo è qualcosa che si deve tentare di accertare attraverso altri mezzi, meno diretti.
Per cominciare, il modo in cui il candidato ti si avvicina dall'inizio è un indicatore di interesse abbastanza affidabile. Il candidato offre una spiegazione convincente e convincente del motivo per cui è particolarmente interessato alla tua azienda e alle opportunità disponibili? Se è così, questo non solo mostra un reale interesse, ma anche un livello di maturità professionale e raffinatezza. Un tale candidato ha chiaramente fatto almeno un certo livello di ricerca precedente sulla tua azienda e l'opportunità, prima di contattarti (piuttosto che semplicemente "sparare il proprio curriculum in giro per la città").
I candidati che entrano nel processo di assunzione degli sviluppatori dopo aver svolto i compiti sull'azienda e sui suoi prodotti o servizi, forniscono un utile indicatore sia del loro interesse che della loro esperienza. Particolarmente degni di nota sono i candidati che si sono spinti fino a fare ricerche anticipate sull'intervistatore (ad esempio, leggendo la sua biografia, il profilo LinkedIn, i post del blog e così via). I candidati più sofisticati si impegneranno a rivelare queste informazioni nel corso del colloquio. Per gli altri, semplici domande aperte come "Cosa sai della nostra azienda?" e "Cosa ti interessa in particolare della nostra azienda e di questa posizione?" può suscitare risposte molto eloquenti.
Infine, un candidato sinceramente interessato probabilmente porrà domande durante il processo di intervista. Ciò nonostante, è sempre una buona idea chiudere il colloquio chiedendo se il candidato ha delle domande. La mancanza di qualsiasi domanda può essere una bandiera rossa, anche con qualcuno che altrimenti sarebbe stato considerato un candidato A+.
Incartare
Le tecniche qui descritte possono fungere da prezioso processo di base per trovare e assumere sviluppatori di software che siano i migliori del settore. Eppure è importante ricordare che l'assunzione efficace non è una destinazione, è un viaggio. È necessario rivalutare e modificare continuamente il loro processo, poiché un processo statico è destinato a diventare un processo morto.
Il percorso di ogni azienda sarà diverso, basato sulla propria cultura e priorità. Trova il percorso giusto per la tua organizzazione ed eseguilo. Avrai successi e fallimenti, ma finché impari da questi ultimi, puoi essere certo che sei sulla strada giusta.