Mi piace e ho alzato la risposta di mcottle, ma voglio coprire alcune altre dinamiche e argomenti che le altre risposte non hanno ancora sollevato.
In primo luogo, 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 trovi è dal tuo team che prova e fallisce, che è molto costoso. Dopo aver fallito, ci sono due possibili lezioni da imparare da questo. Un'opzione è che impari che hai bisogno di sviluppatori più competenti e così li assumi e completi il progetto con un budget eccessivo e una pianificazione eccessiva, ma almeno sei preparato in futuro. L'altra opzione è che un tale progetto è "troppo difficile" per il tuo team e tali cose non dovrebbero essere tentate in futuro, cioè rinunci al progetto e in modo efficace a qualsiasi altro simile. Ovviamente, raramente sarà espresso 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 altri. Quest'ultima visione può distorcere in modo significativo la prospettiva di un'azienda su cosa è possibile e per quanto tempo / costoso sviluppo dovrebbe essere. "Se ci vuole un anno per non fare X, forse sei mesi per fare la più semplice Y è ragionevole."
Una domanda è, qual è esattamente il piano della tua azienda? Ok, assumeranno programmatori economici e junior. Passano tre anni, e adesso? Cosa fanno con lo sviluppatore che è stato con loro durante questi tre anni? Non gli hanno mai dato un aumento? Le opzioni qui sono le seguenti:
- Rendono competitivi i saldi per mantenere i dipendenti, nel qual caso perché dovrebbero avere un problema a pagare i tassi di sviluppo senior ora? Tornerò su questo però.
- Hanno tassi di stagnazione che significano che alla fine si "ridurranno" ai dipendenti che mancano di guida e / o abilità.
- Rimuovono più attivamente i dipendenti più anziani.
I secondi due casi implicano un notevole turn-over dei dipendenti, che significa perdita di conoscenza della società 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 programmi crescenti. Il modo in cui questo andrà a finire è che tutto va bene per il progetto X fino a quando Jim parte, che è stato uno dei migliori sviluppatori, perché non ha ottenuto un aumento in due anni, ora il progetto "comprensibilmente" durerà molto più a lungo è necessario assumere e formare nuovi sviluppatori junior che (presumibilmente) non saranno all'altezza di Jim. Ecco come ricalibrare le aspettative.
Anche nel caso in cui vengano forniti rilanci competitivi, se tutti voi avete sviluppatori junior dove e come dovrebbero imparare? In pratica, speri che uno di loro imparerà le buone pratiche da solo nonostante il loro ambiente di lavoro, e alla fine guida gli altri (invece di partire per i pascoli più verdi). Avrebbe molto più senso "innescare la pompa" con alcuni buoni sviluppatori. Più probabilmente svilupperai una cultura di Principianti esperti . Il risultato è che finirai per pagare alti tassi di sviluppo a persone che sono solo leggermente migliori degli sviluppatori junior e sono culturalmente tossiche.
Un vantaggio, in particolare, molto di buoni sviluppatori, che sono sorpreso che nessun altro abbia menzionato è che possono facilmente essere un fattore moltiplicativo . Potrebbe anche accadere che uno sviluppatore junior e uno sviluppatore senior impieghino lo stesso tempo per creare un tavolo. Tuttavia, un buon sviluppatore non lo farà. Creeranno un generatore di tabelle che riduce il tempo per tutti per creare una tabella. In alternativa / in aggiunta, aumenteranno il limite massimo 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 utenti di MapReduce non sono assolutamente in grado di creare una versione del loro algoritmo ampiamente distribuita, ora possono facilmente Riduci mappa. 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 'l'altro lato, forse i superiori hanno ragione. Forse gli sviluppatori più esperti non sono necessari. Se questo è il caso, tuttavia, sembrerebbe che lo sviluppo non sia una parte significativa dell'azienda. In tal caso, eliminerei completamente gli sviluppatori e utilizzerei software off-the-shelf o assumere appaltatori su richiesta. Potrebbe valere la pena esplorare perché non usano solo appaltatori piuttosto che un team interno. Se avrai comunque un sacco di dipendenti in abbandono, allora gli imprenditori non dovrebbero essere un problema.