È un adagio abbastanza comune che l'aggiunta di più programmatori a un progetto in ritardo peggiorerà le cose. Perchè è questo?
È un adagio abbastanza comune che l'aggiunta di più programmatori a un progetto in ritardo peggiorerà le cose. Perchè è questo?
Risposte:
Ogni nuovo sviluppatore deve essere introdotto nella base di codice e nel processo di sviluppo che richiede non solo il tempo della nuova persona ma richiede anche assistenza da parte di [a] sviluppatori senior (che li guidano attraverso il processo di compilazione, spiegano il processo di test, li aiutano con insidie nella base di codice, recensioni di codici molto più dettagliate, ecc . ) .
Pertanto, più nuovi sviluppatori si aggiungono al progetto, più tempo deve essere speso per portarli a un punto in cui possono effettivamente contribuire al progetto.
Oltre alle altre risposte: un altro fattore da considerare è la comunicazione.
Il caso peggiore per la quantità di canali di comunicazione in una squadra (che non è insolito), è un grafico completo . Come puoi immaginare, l'aggiunta di un solo sviluppatore può aumentare notevolmente i canali di comunicazione. Con metodi di comunicazione più snelli, l'impatto è inferiore ... ma si aggiunge comunque.
Il problema citato nel libro ha originariamente promulgato questa legge, The Mythical Man-Month , è la comunicazione. Comincia dicendo:
Uomini e mesi sono merci intercambiabili solo quando un'attività può essere suddivisa tra molti lavoratori senza comunicazione tra loro. Questo vale per la mietitura del grano o la raccolta del cotone; non è neppure approssimativamente vero per la programmazione dei sistemi.
Cita la formazione come parte del problema:
L'ulteriore onere della comunicazione è costituito da due parti: formazione e intercomunicazione. Ogni lavoratore deve essere addestrato nella tecnologia, negli obiettivi dello sforzo, nella strategia generale e nel piano di lavoro. Questa formazione non può essere suddivisa, quindi questa parte del lavoro varia linearmente con il numero di lavoratori.
... ma nota che l'intercomunicazione è di gran lunga il fattore più importante:
Poiché la costruzione del software è intrinsecamente uno sforzo di sistema - un esercizio di interrelazioni complesse - lo sforzo di comunicazione è grande e domina rapidamente la riduzione del tempo di attività individuale determinato dal partizionamento. L'aggiunta di più uomini allunga, non accorcia il programma.
Vale anche la pena notare che Fred Brooks (l'autore) ha le basi per sapere di cosa sta parlando. Gran parte del libro si basa sulla sua esperienza nella gestione del progetto OS / 360 di IBM. Nonostante decenni di aderenti che predicano ogni sorta di metodi di gestione "migliorati", e alcuni addirittura escogitano nomi interessanti (eXtreme, Agile, Scrum, ecc.) Quando ci si avvicina ad esso, da allora sembra essersi cambiato poco di essence 1 .
1 Per la definizione di "essence", vedere lo stesso autore "No Silver Bullet: Essence and Accident in Software Engineering", incluso nell'edizione del 20 ° anniversario di The Mythical Man-Month .
Non è solo un adagio; è verificabile. Dai un'occhiata a The Mythical Man-Month di Brooks .
Ecco alcuni pensieri su questo problema ...
ora, aggiungere nuove risorse per i test potrebbe non essere una cattiva idea ... potrebbe accelerare il processo di test (se i casi di test sono ben scritti), e sì, anche l'utilizzo di strumenti di test sarà di aiuto.
Perché la programmazione non è il lavoro di base della linea di produzione. Mettersi al passo con un progetto software richiede tempo. Le nuove persone devono porre molte domande che portano a una produttività negativa (ad es. Apprendimento di nuove persone, insegnamento delle persone anziane -> nessun lavoro effettivo svolto).
Per semplificarlo, immagina un progetto one-man relativamente semplice che dovrebbe durare 1 settimana: giovedì ti rendi conto che non sarà fatto in tempo, che invece ci vorrebbe un programmatore più di 6-7 giorni di 5. Se aggiungi un altro programmatore a quel punto, dovranno lavorare con programmatore1 per almeno qualche ora o un giorno o giù di lì, fare un sacco di domande per aggiornarti, ecc. Probabilmente non otterrai qualsiasi produttività netta positiva per il resto della settimana. È probabile che il nuovo programmatore introduca anche alcuni bug aggiuntivi (poiché non conosceranno il codice esistente così come il programmatore1), in modo da far saltare il ciclo di implementazione e test entro un altro giorno o altri due. Il progetto durerà facilmente ben due settimane lavorative invece di quella originale!
Fred Brooks ha scritto un intero libro "The Mythical Man-Month" rispondendo a questa domanda.
Ecco la versione quick-n-dirty:
1) Esiste un limite a quanto è possibile suddividere un progetto in parti distinte da assegnare a più programmatori.
2) Suddividere un progetto in più persone aumenta la quantità di comunicazione richiesta per coordinare tutte le parti dell'applicazione. Più comunicazione = Più lavoro.
3) Per ogni persona che aggiungi al progetto aggiungi più di un canale di comunicazione che deve essere navigato nel team. Questo numero cresce geometricamente e aumenta la quantità di comunicazione che deve avvenire. Più comunicazione = Più lavoro.
4) C'è una "curva a J" quando aggiungi ogni membro del team. In altre parole, le risorse produttive esistenti devono passare il tempo ad accelerare le nuove persone che altrimenti avrebbero potuto spendere lavorando al progetto. Alla fine puoi aumentare la capacità, ma rallenta temporaneamente il progetto. Più tardi nel progetto più si deve imparare, quindi più pronunciato l'effetto.
Un altro fattore che non ho visto menzionato è che alcune attività devono essere eseguite in un ordine specifico. Non è possibile eseguire l'attività 4 fino a quando l'attività 3 non viene eseguita perché dipende da 3. Non è utile assumere qualcuno per svolgere l'attività 4 contemporaneamente mentre qualcuno esegue l'attività 3. Spesso alla fine di un progetto , quelle attività che richiedono prima altre cose completate sono le attività rimanenti.
Spesso sono anche alcuni dei compiti più complessi che devono essere svolti, quelli che richiedono la migliore comprensione dell'intero progetto per evitare di rompere ciò che è già stato completato. Di solito richiedono anche la più ampia conoscenza del dominio aziendale. Potrei dopo aver lavorato al progetto per mesi essere in grado di svolgere il compito in una settimana o meno. Qualcuno nuovo passerebbe più di una settimana ad accelerare (e ad allontanarmi dai miei compiti per una buona protezione di quel tempo per rispondere alle domande) e probabilmente anche se estremamente abili impiegherebbero più tempo per svolgere il compito. Non perché non sia competente, ma a causa della scarsa familiarità con la struttura effettiva del progetto o del back-end del database.
Il adagio che ha sempre funzionato per me è che non puoi convincere nove donne a fare un bambino in un mese.
Suggerirei anche "Peopleware" di DeMarco e Lister.
E "The Deadline" di DeMarco presenta questo, e una serie di altre malattie e fallacie nella gestione di progetti software in modo spensierato e molto leggibile.
Approfondisce anche la dinamica delle persone che svolgono il lavoro di gruppo / progetto e fornisce alcuni dettagli su COME cose come la comunicazione e l'introduzione riducono il tempo di lavoro disponibile di una squadra.
Questi libri sono abbastanza economici, ti suggerirei di prenderli (Amazon o The Book Depository li hanno) e leggere. Le brevi risposte qui non possono davvero rendere giustizia alla domanda posta.
Perché nessuno si prende il tempo di avere un processo ben studiato, pianificato e testato per: assumere, addestrare, sviluppare e supervisionare i programmatori e tanto meno metterli al passo con la velocità su un particolare progetto.
Se stai gestendo un team di sviluppatori, dovresti avere subito diversi contatti delle persone che vorresti assumere se hai un'apertura. Unisciti ai gruppi di sviluppatori.
Quanto velocemente puoi ottenere una nuovissima configurazione della macchina di sviluppo e pronta per partire?
Hai mai testato la documentazione e le specifiche del tuo progetto mostrandole a uno sviluppatore su un altro progetto? Lo hanno guardato e hanno deciso di poter iniziare a lavorare al progetto se necessario?
Quanto è aggiornato il programma del progetto?
Risparmia per una giornata piovosa perché quando un progetto cade dietro è più simile a un uragano.
A parte il problema della comunicazione (di cui penso che tutte le altre risposte stiano parlando), è anche molto possibile che una persona aggiunta a un progetto crei bug, perché non conoscono ancora molto bene il codice.
Ogni volta che vengo aggiunto a un progetto, cerco sempre di non rompere le cose. Ciò significa che all'inizio sono molto più lento nel sistemare le cose.
Vorrei sottolineare qualcosa di totalmente ignorato finora dalle altre risposte.
Quando le persone vengono aggiunte a un progetto in ritardo, in genere molte cose sono andate male in tutta l'organizzazione. La direzione e il cliente non sono contenti. Le persone sono state sotto pressione per andare avanti. Le cose sono piuttosto tese.
Ora immagina di far parte di quella squadra. Ovviamente niente di tutto questo è colpa tua. La pianificazione (nessuna delle quali era tua) è stata troppo ottimista. Tutte le decisioni sbagliate sono state prese senza consultarti. Stai cercando di trarne il meglio e all'improvviso un gruppo di nuove persone vengono portate avanti. Quale messaggio trasmette?
Le persone di sopra ovviamente hanno perso la fiducia in te. Hanno chiamato i ragazzoni per compensare ciò che hai incasinato.
Sarai ancora motivato a rendere questo successo? Oppure ... sarai sempre più frustrato e dopo tutto preferiresti vedere tutto?
Prenditi il tuo tempo :-).