Stai lottando per trovare grandi sviluppatori JavaScript senior? Il tutoraggio è la risposta

Involucri asciutti - Vern (CC-BY-NC-2.0)

Più studio l'impatto del tutoraggio sui team con cui lavoriamo, più sono colpito dall'entità del cambiamento che produce. Il costo del tutoraggio aumenta su scala lineare nel tempo, ma l'impatto del tutoraggio aumenta su scala esponenziale, con un aumento della produttività che restituisce ordini di grandezza superiori al tempo e al denaro investiti.

A causa delle scale radicalmente diverse (lineare vs esponenziale), è difficile avvolgere il nostro cervello su quanto saremo ricompensati investendo di più nel tutoraggio. I nostri cervelli sembrano predisposti a pensare in termini lineari, ed è frustrantemente difficile farli pensare in termini di scale esponenziali e ricompense complessive.

Il problema del pensiero lineare può portarci a fare enormi errori, come l'intero settore del software che investe radicalmente nella formazione. Il risultato non è buono

Spesso, i manager cadono nell'errata convinzione che se i dipendenti non sono impegnati a scrivere codice, non vengono utilizzati in modo efficace. Si scopre che questa convinzione semplicemente non è supportata dai fatti.

  • Secondo il sondaggio Stack Overflow del 2016 di oltre 56.000 programmatori, i programmi di tutoraggio sono correlati a una retribuzione più elevata rispetto a un diploma universitario, riflettendo il fatto che il tutoraggio è un modo estremamente efficace per apprendere le competenze.
  • Secondo il sondaggio Stack Overflow 2017, le opportunità di apprendimento sponsorizzate dall'azienda si posizionano costantemente tra i principali vantaggi che i dipendenti cercano nelle opportunità di lavoro.
  • L'88% dei dipendenti ritiene di poter beneficiare di una maggiore formazione.

Benefici del tutoraggio per gli allievi

  • Accelera l'apprendimento e la crescita
  • Aumenta la fiducia
  • Migliore accesso agli esempi positivi (come fare le cose nel modo in cui gli esperti le fanno)
  • Diminuisce la paura del contributo / collaborazione / condivisione di idee
  • Aumenta le capacità comunicative
  • Gli allievi si sentono più investiti e apprezzati
  • Migliora la mobilità verso l'alto: uno studio di Sun Microsystems ha scoperto che gli allievi hanno una probabilità 5 volte maggiore di essere promossi
  • Gli allievi diventano mentori e trasmettono tutti questi benefici

Prestazioni di tutoraggio per i datori di lavoro

  • Ottimo vantaggio per il reclutamento
  • Aumenta la produttività e la fidelizzazione degli sviluppatori¹ ²
  • Riduce i silos di conoscenza
  • Migliora il fattore bus - riduce i rischi di successione
  • Crea una cultura di squadra più positiva, utile e collaborativa
  • Aumenta la lealtà
  • Aumenta il coinvolgimento e la motivazione dei dipendenti, migliorando notevolmente i risultati finanziari³
  • Migliora la pipeline di identificazione e promozione dei leader: i tutor hanno una probabilità 6 volte maggiore di essere promossi (Sun Microsystems)

L'industria riconosce che c'è un divario di competenze in crescita e ha cercato di colmare offrendo abbonamenti gratuiti per l'apprendimento online, libri gratuiti, ecc ..., ma quelle risorse sono sottoutilizzate dai dipendenti perché:

  • I dipendenti di solito non sanno su cosa concentrarsi o come impararlo, e smistare gli abbonamenti di apprendimento gratuiti sembra una perdita di tempo colossale quando è difficile trovare materiali direttamente pertinenti al loro lavoro
  • I dipendenti temono che lo sviluppo della loro carriera non sia abbastanza importante per l'azienda da interrompere il flusso di lavoro quotidiano

Un mentore si impegna 1 su 1 con i dipendenti. Un buon mentore dovrebbe essere in grado di identificare rapidamente e facilmente i punti deboli e contribuire a colmare le lacune di conoscenza senza perdere tempo a cercare risorse di apprendimento casuali.

Incorporando il tutoraggio nelle normali mansioni dei dipendenti, è possibile rimuovere le "interruzioni" del flusso di lavoro quotidiano percepito e assegnare ufficialmente il tempo ai dipendenti per apprendere e interagire tra loro.

Squadre di sollevamento per una produttività 10x

Una preponderanza della ricerca suggerisce che esiste un ordine di differenza di grandezza nelle prestazioni tra gli sviluppatori. Per citare Steve McConnell (autore, "Codice completo"):

La conclusione generale secondo cui "ci sono differenze nell'ordine di grandezza tra i programmatori" è stata confermata da molti altri studi di programmatori professionisti (Curtis 1981, Mills 1983, DeMarco e Lister 1985, Curtis et al. 1986, Card 1987, Boehm e Papaccio 1988, Valett e McGarry 1989, Boehm et al 2000).

Ciò non significa che uno sviluppatore con le migliori prestazioni scriverà 10 volte più codice o svilupperà 10 volte più funzioni. Ciò significa che forniranno 10 volte più valore organizzativo. (Vedi anche “Arrivare a 10x”).

Al contrario, molti sviluppatori sono in grado di produrre software che offra valore organizzativo, ma lo fanno sostenendo un'enorme quantità di debito tecnologico: scrivere codice che è difficile o impossibile da mantenere o pieno di bug. Di solito entrambi.

Tali sviluppatori possono produrre valore a breve termine, ma contribuiscono nel tempo a un valore netto negativo per l'organizzazione.

Il problema è che è difficile assumere sviluppatori senior:

La differenza media tra i salari degli sviluppatori junior e senior negli Stati Uniti è di $ 40.000 all'anno (fonte: Indeed.com), portando alcune aziende a cercare di risparmiare assumendo un numero maggiore di sviluppatori junior e meno sviluppatori senior.

Questa strategia è controproducente perché senza la guida adeguata, gli sviluppatori junior di solito costano molto di più della differenza salariale nella qualità e produttività del prodotto degradate.

Se vuoi risparmiare, non assumere sviluppatori più economici. Formare sviluppatori migliori.

Gli sviluppatori senior sono difficili da trovare e reclutare. Poiché la crescita dell'occupazione tecnologica ha costantemente superato l'afflusso di nuovi sviluppatori sul mercato per anni, la concorrenza per assumere sviluppatori senior è agguerrita e gli stipendi possono facilmente superare i budget di tutte le società tranne quelle più ben finanziate. Al momento della stesura di questo documento, le migliori aziende spendono abitualmente $ 140k - $ 250k + (fino a $ 400k in aziende che adottano la strategia di fidelizzazione della mano d'oro) per sviluppatori senior di alto livello.

Che cos'è uno sviluppatore senior, comunque? Forse hai sentito parlare della regola delle 10.000 ore. Ci vogliono circa 10.000 ore di pratica deliberata per padroneggiare un mestiere. Sono circa 6-10 anni. Ma gli sviluppatori con 1-5 anni di esperienza vengono spesso assunti per ricoprire incarichi di "senior developer". Chiaramente, il livello di padronanza di 10k ore non è quello utilizzato per definire "sviluppatore senior" nel settore oggi - per una buona ragione.

Ho visto sviluppatori con 20 anni di esperienza di cui non mi fiderei per costruire un'app todo, e altri con meno di 1 anno mi sarei fidato dell'architettura di un prodotto mission-critical. Sebbene non vi sia alcun sostituto per l'esperienza, dopo il primo anno, l'esperienza conta molto meno della passione per il mestiere e del desiderio di eccellere.

Dopo 1-3 anni, inizi a vedere davvero la differenza tra gli sviluppatori impegnati nell'eccellenza e nella pratica deliberata, e quelli che ci sono solo per il J-O-B. Uno sviluppatore "senior" non deve essere un maestro del mestiere in questo momento, ma almeno dovrebbe essere sulla strada giusta.

Detto questo, non c'è davvero alcun sostituto per la vera esperienza. Puoi davvero trarre beneficio da qualcuno che è già stato diretto prima e che ha avuto abbastanza tempo di pratica deliberato per sviluppare una profonda padronanza delle abilità richieste. Non importa quanto sia buono il tuo allenamento, è bello avere almeno un mentore esperto disponibile per aiutare la tua squadra.

Attributi del mentore esperto ideale (dovrebbero avere la maggior parte di questi)

  • Empatia
  • Pazienza
  • Comunicatore eccellente e scrittore tecnico
  • Oltre 6 anni di esperienza nella creazione di app a tempo pieno (Sì, l'esperienza conta in questo caso - stiamo cercando padronanza. Vedi la regola delle 10k ore.)
  • Una profonda conoscenza dei principi di sviluppo software in molteplici paradigmi (OOP, FP, ecc ...)
  • Esperienza con più linguaggi di programmazione, preferibilmente di diverse famiglie linguistiche (famiglia C, famiglia Lisp, famiglia ML, ecc ...)
  • Esperienza nel ridimensionamento di un'app con oltre 20 sviluppatori e oltre 10 milioni di utenti
  • 1–2 anni di esperienza con il tuo stack tecnologico specifico

Il grosso problema è che i dipendenti che corrispondono a tale descrizione sono estremamente difficili da trovare e difficili da permettersi per le piccole aziende. (Per favore, contattami se ti ho appena descritto).

La maggior parte delle offerte di lavoro attualmente denominate "Sviluppatore JavaScript senior" non richiede questo livello di competenza. 1–3 anni di esperienza, con 1 anno nello stack tecnologico richiesto e una formazione JavaScript di alta qualità sarebbe più che adeguata. Associali a un buon mentore esperto e contribuiranno (o molto vicino) al livello dei migliori sviluppatori senior del team. Alcuni si distingueranno e supereranno le tue migliori aspettative.

Come assumiamo gli sviluppatori 10x?

Più lavoro con i leader della tecnologia cercando di creare grandi team, più penso a quali qualità rendono alcuni sviluppatori 10 volte migliori di altri e alle qualità che rendono alcuni team 10 volte migliori di altri.

Universalmente, i team 10x impiegano 10 sviluppatori. Non ho mai visto un'eccezione a quella regola. Ma non tutti i team con uno sviluppatore 10x su di esso diventano un team 10x.

Qual è la differenza?

Mentorship Culture

Il primo passo è promuovere una cultura di tutoraggio nelle tue squadre. Uno dei modi migliori per farlo è proteggere i rami dei repository di codice in modo da non poter unire nel trunk principale senza una revisione del codice.

Molte persone pensano che si tratti di prevenire i bug, ma funziona meglio quando gli sviluppatori lo considerano un meccanismo per l'apprendimento e la condivisione delle conoscenze. Quando vedi il codice che potrebbe essere semplificato, segnalalo. Quando vedi gli anti-pattern, indica le alternative. Devi sempre avere almeno un altro membro del team che riveda ogni riga di codice prima che venga unita.

È solo un bell'effetto collaterale che fare questo porti a un minor numero di bug. Ogni ora trascorsa nella revisione del codice consente di risparmiare 33 ore di manutenzione. (Vedi anche: "Il costo scandaloso di saltare TDD e revisione del codice")

Ma questo è solo il primo passo. La maggior parte degli sviluppatori di lavoro (anche sviluppatori senior) mancano delle basi di base nell'essenza dello sviluppo del software: la composizione. Tutto lo sviluppo del software è l'atto di scomporre i problemi in pezzi più piccoli e comporre le soluzioni insieme per formare un'applicazione. Puoi farlo intenzionalmente, con uno scopo, o puoi farlo accidentalmente, con nastro adesivo e colla folle.

Per ottenere i migliori risultati, hai bisogno di qualcuno nel tuo team con una solida base su come comporre bene funzioni e strutture di dati, capire cosa va dove e come mettere insieme tutti i pezzi.

Ho delle brutte notizie da dirti:

C'è quasi il 100% di probabilità che nessuno nella tua squadra sia qualificato.

Come lo so? Perché intervisto regolarmente candidati per lavori JavaScript dal 2010 e ho incontrato quasi zero candidati che si qualificano al momento del colloquio senza una formazione supplementare.

Cosa intendo con ciò in particolare? Il candidato dovrebbe essere in grado di rispondere correttamente alle seguenti domande e dimostrare i principi del codice:

  • "Cos'è la composizione della funzione?"
  • "Cos'è la composizione dell'oggetto?"

Insieme, questi sono i cardini della programmazione funzionale e del riutilizzo flessibile degli oggetti.

In JavaScript, sono supportati da 2 funzioni molto importanti che io chiamo "i due pilastri di JavaScript":

  • Ereditarietà prototipale
  • Programmazione funzionale (in particolare in JavaScript, le funzioni di prima classe con chiusure lo consentono)

Quando faccio da mentore alle nuove reclute, il primo ordine del giorno è aiutarli a comprendere le basi della programmazione funzionale e OOP flessibile.

"Favorisci la composizione degli oggetti rispetto all'eredità di classe". ~ Gang of Four, "Design Patterns: Elements of Reusable Object-Oriented Software"

Questi semplici pilastri forniscono una solida base per la creazione di app, con tutte queste funzionalità:

  • Meno codice
  • Meno bug
  • Chiarezza del codice migliorata
  • Costi di manutenzione ridotti

La cultura del tutoraggio consente anche la più facile diffusione di idee utili in tutta l'organizzazione. Idee con un enorme potenziale di impatto sulle metriche delle prestazioni aziendali critiche, come:

  • TDD e processi di test migliorati, che consentono di risparmiare tempo e denaro
  • Consegna continua (automatizzata con strumenti e flussi di lavoro CI / CD), che riduce il rischio di vaporware e rischi di stima del budget
  • Migliore organizzazione del codice, che riduce i costi di manutenzione del software

Quanto dovresti investire nel tutoraggio?

I vantaggi sono così chiari e di grande impatto, la domanda sull'implementazione del tutoraggio nella tua organizzazione di sviluppatori non dovrebbe essere se lo farai, ma quanto dovresti investire.

La mia regola generale è che ogni sviluppatore dovrebbe essere associato a un mentore più esperto, qualcuno che è stato dove vuoi che lo sviluppatore vada.

Tale regola non riguarda semplicemente il personale junior o le nuove assunzioni, ma anche il personale più anziano.

Dovresti contare su una spesa di circa il 30% in più rispetto allo stipendio annuale di uno sviluppatore per fornire un tutoraggio adeguato a quello sviluppatore. Tale costo è principalmente il costo dell'associazione di uno sviluppatore con un mentore più esperto (pagato in stipendio al mentore). Per il basso costo del 30%, puoi ottenere fino a un aumento della produttività del 1000%. Dovresti essere pazzo o disinformato per passare l'accordo.

Il tutoraggio dovrebbe consistere in un mix tra la formazione di abilità specifiche e l'associazione a problemi nei tuoi progetti reali.

Abbinando, avrai due persone che lavorano insieme, collaborando per risolvere un problema con il giovane nella coppia che fa la maggior parte della guida - il mentore dovrebbe adottare un approccio pratico, fungendo da navigatore. Non è necessario accoppiare gli sviluppatori a tempo pieno per fornire il beneficio del tutoraggio, ma è necessario riservare almeno un'ora alla settimana affinché il mentore e l'allievo lavorino insieme uno contro uno. Gli sviluppatori junior avranno bisogno di molto più tempo per l'abbinamento.

Questo suona abbastanza bene fino a quando non si pone la domanda "chi farà da mentore ai mentori?"

"Chi farà da mentore ai mentori?"

Nella mia esperienza in team con culture di tutoraggio, anche gli sviluppatori più giovani del team raggiungono rapidamente il livello di abilità delle persone più qualificate nel team, ma quando lo raggiungono, il miglioramento colpisce un muro di mattoni e i progressi aggiuntivi sono molto lenti .

Per rimuovere quel soffitto artificiale, è necessario avere accesso a tutor di livello superiore, persone che non fanno necessariamente parte del team.

Sono uscito alla ricerca di una piattaforma di tutoraggio per trovare mentori qualificati per fare esattamente questo, e non sono riuscito a trovarne uno, quindi ho cofondato DevAnywhere.io. Abbiamo sviluppato un curriculum JavaScript avanzato, iniziato a tutorare gli sviluppatori uno a uno e il programma ha prodotto risultati spettacolari.

Se hai bisogno di tutor per i dirigenti della tua squadra e le nuove reclute, possiamo aiutarti.

Aumenta le tue abilità con il tutoraggio live 1: 1

DevAnywhere è il modo più veloce per salire di livello con competenze JavaScript avanzate:

  • Lezioni dal vivo
  • Orari flessibili
  • Tutoraggio 1: 1
  • Crea app di produzione reali
https://devanywhere.io/

Eric Elliott è autore di "Programmazione di applicazioni JavaScript" (O’Reilly) e cofondatore di DevAnywhere.io. Ha contribuito alle esperienze software per Adobe Systems, Zumba Fitness, The Wall Street Journal, ESPN, BBC e i migliori artisti della registrazione tra cui Usher, Frank Ocean, Metallica e molti altri.

Lavora dove vuole con la donna più bella del mondo.

  1. Secondo Sun Microsystems, i tassi di conservazione sono superiori del 72% per gli allievi e del 69% per i tutor rispetto ai dipendenti non partecipanti.
  2. Secondo lo Spherion Emerging Workforce Study, il 35% dei dipendenti che non ricevono un tutoraggio regolare cerca un altro lavoro entro 12 mesi
  3. Le aziende con un elevato coinvolgimento hanno aumentato il reddito operativo del 19,2% in un periodo di 12 mesi, mentre quelle senza un reddito operativo hanno registrato un calo del 32,7% nello stesso periodo. "Coinvolgere per il successo"