Mi piace e ho votato a favore della risposta di mcottle, ma voglio coprire alcune altre dinamiche e argomenti che le altre risposte non hanno ancora sollevato.
Primo, implicito nella risposta di mcottle è il fatto che al di sotto di un certo livello di abilità, alcuni problemi sono semplicemente impossibili. Sfortunatamente, il modo in cui lo scopri è che la tua squadra prova e fallisce, il che è moltocostoso. Dopo aver fallito, ci sono due possibili lezioni da imparare da questo. Un'opzione è che impari che hai bisogno di sviluppatori più competenti e quindi li assumi e completi il progetto in modo significativo con budget eccessivo e scadenze eccessive, ma almeno sei pronto in futuro. L'altra opzione è che un progetto del genere è "troppo difficile" per il tuo team e tali cose non dovrebbero essere tentate in futuro, cioè rinunciare al progetto ed effettivamente a progetti simili. Certo, raramente sarà definito come "siamo troppo stupidi per farlo", ma invece sarà razionalizzato come "i nostri sistemi sono molto complessi" o "abbiamo un sacco di codice legacy" o alcuni altri. Quest'ultima visione può deformare in modo significativo la prospettiva di un'azienda su ciò che è possibile e su quanto dovrebbe essere lungo / costoso lo sviluppo. "
Una domanda è: qual è esattamente il piano della tua azienda? Ok, assumeranno programmatori junior a basso costo. Passano tre anni, e adesso? Cosa fanno con lo sviluppatore che è stato con loro in questi tre anni? Non gli hanno mai dato un aumento? Le opzioni qui sono le seguenti:
- Danno aumenti competitivi per trattenere i dipendenti, nel qual caso perché avrebbero problemi a pagare le tariffe degli sviluppatori senior adesso? Tornerò su questo però.
- Hanno tassi stagnanti, il che significa che alla fine si "ridurranno" ai dipendenti che mancano di unità e / o abilità.
- Rimuovono più attivamente i dipendenti più anziani.
I secondi due casi implicano un sacco di turn-over dei dipendenti, il che significa perdita di conoscenza dell'azienda e pagamento continuo per aumentare i dipendenti. Nel secondo caso, si sta essenzialmente selezionando per gli sviluppatori cattivi e quindi i costi aumenteranno sotto forma di pianificazioni crescenti. Il modo in cui andrà a finire è che tutto andrà bene nel progetto X fino a quando all'improvviso Jim non se ne andrà, che è stato uno dei migliori sviluppatori, perché non ha ottenuto un aumento da due anni, ora il progetto "comprensibilmente" richiederà molto più tempo in quanto devi assumere e formare nuovi sviluppatori junior che (presumibilmente) non saranno bravi come Jim. Ecco come ricalibrare le aspettative.
Anche nel caso in cui vengano forniti aumenti competitivi, se tutto ciò che hai sono sviluppatori junior dove e come dovrebbero imparare? In pratica, speri che uno di loro apprenda da solo le buone pratiche nonostante il proprio ambiente di lavoro, e alla fine guidi altri (invece di partire per pascoli più verdi). Avrebbe molto più senso "innescare la pompa" con alcuni buoni sviluppatori. Più probabilmente svilupperai una cultura di esperti principianti . Il risultato è che finirai per pagare le tariffe degli sviluppatori senior a persone che sono solo leggermente migliori degli sviluppatori junior e sono culturalmente tossiche.
Un vantaggio, in particolare, di sviluppatori molto bravi, che sono sorpreso che nessun altro abbia menzionato è che possono facilmente essere un fattore moltiplicativo . Può darsi che uno sviluppatore junior e uno sviluppatore senior impieghino lo stesso tempo per preparare un tavolo. Tuttavia, un buon sviluppatore non lo farà. Faranno un generatore di tabelle che riduce il tempo per tutti di creare una tabella. In alternativa / in aggiunta, aumenteranno il limite di ciò che è possibile per tutti . Ad esempio, gli sviluppatori che hanno implementato il framework MapReduce di Google erano probabilmente estremamente qualificati, ma anche se gli utentidi MapReduce non sono assolutamente in grado di creare autonomamente una versione distribuita in maniera massiccia del loro algoritmo, ora possono farlo facilmente con MapReduce. Spesso questa dinamica è meno evidente. Ad esempio, un migliore controllo del codice sorgente, test e pratiche di implementazione rendono tutti migliori, ma può essere più difficile rintracciare una persona specifica.
Per discutere un po 'dall'altra parte, forse i piani alti hanno ragione. Forse non sono necessari sviluppatori più esperti. In tal caso, tuttavia, sembrerebbe che lo sviluppo non sia una parte significativa dell'azienda. In tal caso, eliminerei completamente gli sviluppatori e utilizzerei software standard o assumevo appaltatori su richiesta. Potrebbe valere la pena esplorare perché non usano solo appaltatori piuttosto che un team interno. Se hai un sacco di dipendenti che cambiano comunque, allora gli appaltatori in aumento non dovrebbero essere un problema.