Dare alle nuove reclute un sottoprogetto separato da sviluppatori esperti aiuterà i neofiti a crescere più rapidamente?


12

Abbiamo 7 sviluppatori in un team e dobbiamo raddoppiare il nostro ritmo di sviluppo in un breve periodo di tempo (circa un mese). So che esiste una regola di buonsenso che "se assumi più sviluppatori, perdi la produttività solo per i primi mesi". Il progetto è un servizio web di e-commerce e ha circa 270.000 righe di codice.

La mia idea per ora è quella di dividere il progetto in due sottoprogetti più o meno indipendenti e lasciare che il nuovo team lavori sul più piccolo dei due sottoprogetti, mentre il team attuale lavora sul progetto principale. Vale a dire, il nuovo team lavorerà sulla funzionalità di checkout, che alla fine diventerà un servizio web indipendente al fine di ridurre l'accoppiamento. In questo modo, il nuovo team lavora su progetti con solo 100.000 righe di codice.

La mia domanda è: questo approccio aiuterà gli sviluppatori principianti ad adattarsi facilmente al nuovo progetto? Quali sono altri modi per estendere rapidamente il team di sviluppo senza aspettare due mesi fino a quando i neofiti iniziano a produrre più software che bug?

=======

AGGIORNARE

Questa impresa è fallita completamente, ma non per i motivi menzionati. Prima di tutto, sono stato male informato sulle dimensioni e le capacità del nuovo team. Avrei dovuto valutarli da solo. In secondo luogo, l'assunzione si è rivelata un duro lavoro in quel sito. Nel sito dell'ufficio principale l'assunzione era molto più semplice, ma nella città della seconda squadra apparentemente c'era carenza di sviluppatori con la qualifica richiesta. Di conseguenza, invece di 1,5 mesi previsti, il lavoro è stato prolungato a circa 4,5 mesi ed è stato annullato nel mezzo dal top management.

Un altro errore che ho fatto (ed è stato avvertito da Alex D) è che stavo cercando di vendere refactoring al top management. Non vendi mai refactoring, solo funzionalità.

La startup si è comunque rivelata vincente. Il refactoring che non è mai accaduto si è trasformato in debito tecnico: il sistema è diventato più monolitico e meno mantenibile, la produttività degli sviluppatori è gradualmente diminuita. Non faccio parte del team adesso, ma spero che lo completino nel prossimo futuro. Altrimenti, non darei un soldo per la sopravvivenza del progetto.


2
se assumi più sviluppatori,
perdi

2
Cosa succede quando si tenta di integrare nuovamente le due parti? C'è una possibilità che i due pezzi superino ciascuno i propri test, ma un grande test di integrazione su tutto il lotto fallirà? Sospetto che scoprirai che la legge di Brook non è così facilmente aggirabile. Ottimo pensiero creativo però; vale un +1. E mi piacerebbe davvero sapere come funziona per te.
Dawood dice di ripristinare Monica il

1
javana:
Assumeremo

2
@DmitryNegoda Se riesci a trovarli in tempo sufficiente. Gli sviluppatori esperti in genere non sono senza lavoro, quindi anche se li intervisti e offri loro una posizione domani, probabilmente dovranno dare al loro attuale datore di lavoro un preavviso di alcune settimane prima ancora che possano iniziare. Se fossi in te preparerei un piano di emergenza per ogni evenienza, come prepararmi a lavorare serate e weekend per un po '.
maple_shaft

4
non importa quanto sia fantastico uno sviluppatore, non capiranno 100k righe di codice in meno di ~ 1 mese forse 3 settimane
Ryathal,

Risposte:


1

Tuttavia, sono d'accordo come tutti gli altri qui, che:

"... l'aggiunta di più sviluppatori a un progetto ritardato, rende il progetto, ritardare di più ..."

Ho la sensazione, lo farai ovunque, quindi ...

La tua idea può aiutare, se, il tuo progetto esistente, è abbastanza organizzato, da moduli, sottosistemi o sottoprogetti.

Quello che potresti voler provare è quello di dare loro piccoli pezzi / moduli / forme / classi del tuo progetto, con cui lavorare, invece di tutto il progetto.

Se usi un database, potresti voler fare una copia di un DB funzionante con i dati e accedervi dal modulo o sottosistema di codice con cui andremo a lavorare.

Avere nuovi sviluppatori che conoscono il linguaggio di programmazione o l'ambiente di programmazione, non è abbastanza, le applicazioni del software possono diventare molto complesse.

Hai qualche documentazione sull'applicazione come: UML, ER, Codd-Yourdon, qualunque cosa?

In bocca al lupo.


Stiamo parlando di solo 100K righe di codice, non è così complesso, tuttavia grazie per la preoccupazione
Dmitry Negoda,

1
@Dmitry Negoda: la complessità non è una funzione di LOC.
jmoreno,

Esistono numerose ricerche (ad es. Di Boehm) che dimostrano che la produttività del programmatore, in media, è una funzione di LOC.
Dmitry Negoda,

15

La mia domanda è: questo approccio aiuterà gli sviluppatori principianti ad adattarsi facilmente al nuovo progetto?

"Principiante" potrebbe significare nuovo per te, o potrebbe significare nuovo lavorare come sviluppatori di software. Se hai intenzione di assumere un gruppo di sviluppatori per lavorare su un progetto importante secondo un programma, assicurati che almeno la maggior parte dei nuovi assunti siano sviluppatori esperti e preferibilmente quelli che hanno scritto progetti simili a quello che stai provando costruire.

Quali sono altri modi per estendere rapidamente il team di sviluppo senza aspettare due mesi prima che inizino a produrre più software che bug?

  • Acquista o autorizza un prodotto esistente invece di provare a crearne uno tuo. Hai davvero bisogno di reinventare la ruota del checkout?

  • Come ho detto sopra, assumi persone che hanno esperienza nella costruzione del tipo di sistema che desideri.

  • Anche prima di assumere questo nuovo team, dovresti pensare a cosa dovranno sapere sulle tue cose esistenti. Assicurati di riservare abbastanza tempo per le sessioni di allenamento per aiutarli ad accelerare.

  • Hai creato una serie scritta di requisiti? In caso contrario, fallo ora. Se si prevede di progettare il progetto invece di lasciare che il nuovo team lo faccia, è necessario preparare anche un documento di progettazione chiaro, ma essere aperto alle modifiche in risposta all'input dei nuovi membri del team.

  • Hai un processo di sviluppo ben definito? Database di bug? Controllo versione? Processo di revisione del codice? Guida di stile? Metti queste cose a posto.

  • Non aspettarti miracoli. Si consiglia di assumere un team di sette persone e li hanno lavorare in modo produttivo in una questione di settimane, ma volendo non significa che si può avere questo. A seconda di dove ti trovi, potrebbe essere necessario molto più di un mese solo per trovare sette persone adatte. Cercare di affrettare le cose ora causerà dolore e spese solo in seguito.


1
+1 alla serie di requisiti scritti, sono un po 'datati ...
Dmitry Negoda,

3
E chi intervisterà questi nuovi assunti, aggiornerà i requisiti scritti e i documenti di progettazione, compilerà il database dei bug, passerà il tempo nelle sessioni di allenamento ... ?? Sono gli sviluppatori attuali? Perché ciò significa che non si svilupperanno a tempo pieno. Quindi la velocità di sviluppo diminuisce . Ops.
MarkJ,

Il codice è auto-documentante e assumeremo solo sviluppatori esperti. E sì, gli sviluppatori attuali aiuteranno quelli nuovi e la loro velocità diminuirà un po '. Spero solo che assumere sviluppatori nel progetto loc 100K non sarà così doloroso come assumere nel progetto loc 270K, e questa era la domanda.
Dmitry Negoda,

Hai un wiki interno o tutto è archiviato in documenti Word sparsi sulla LAN?
Spencer Rathbun,

1
100k, 50k o 10k rappresenteranno tutti la stessa cosa: una tonnellata di codice che nessuna persona trasferirà nella propria testa. Se ci sono diverse centinaia di righe di codice, è ragionevole. Una volta superate diverse migliaia, hai un sistema complesso e spesso i desideri di velocità non vengono raggiunti.
Michael Durrant,

12

L'IMHO che mette tutti i nuovi sviluppatori nel nuovo progetto, separati dal team esistente, è destinato a causare problemi. Sì, questo (può) lasciare che la tua vecchia squadra continui a lavorare più o meno al suo ritmo attuale. Tuttavia, i nuovi ragazzi non avranno la minima idea dell'architettura generale e del quadro generale, quindi impiegheranno molto tempo ad accelerare ... e anche allora potrebbero andare nella direzione sbagliata.

Suggerisco di dividere la squadra esistente in due e assumere nuovi membri in entrambe le squadre. In questo modo ci sono persone in entrambi i team che possono guidare i nuovi arrivati ​​e garantire che sia mantenuta una visione architettonica comune e coerente.

Altrimenti, sono d'accordo con Caleb per quanto riguarda la documentazione dei requisiti chiari, la definizione del processo e degli strumenti di sviluppo e la riserva di tempo per l'addestramento ... e anche che aspettarsi che un team di 7 persone venga assunto e aggiornato entro un mese è irrealistico.


4
+1: vuoi sicuramente usare i tuoi vecchi sviluppatori per coinvolgere i nuovi ragazzi. Anche se è inevitabile che questo ti rallenti un po '.
Mikera,

+1 pure. Volete che i vostri sviluppatori esperti guidino le nuove persone. Anche se i nuovi ragazzi hanno molta esperienza, non sapranno esattamente come la tua azienda fa le cose.
Andy,

9

Dmitry, raddoppiare il tuo ritmo di sviluppo in breve tempo è un obiettivo incredibilmente ambizioso. Alcuni buoni suggerimenti sono stati pubblicati qui; ma, qualunque cosa tu provi, tieni presente che potrebbe non accadere . se il tuo ritmo di sviluppo non raddoppia, quali sarebbero le conseguenze, dal punto di vista aziendale? Stai cercando di spingere per rispettare una scadenza?

Se stai cercando di rispettare una scadenza, potresti farlo in modo più affidabile tagliando le funzionalità? Ho trovato un ottimo modo per rendere accettabili "scadenze" accettabili per un cliente: fare rilasci incrementali; rilasciare una versione che ha un sottoinsieme delle funzionalità richieste e, man mano che sono disponibili più funzionalità, rilasciarle in modo incrementale, fino alla versione finale.


Non ci sono ancora scadenze. Ci aspettiamo un serio aumento del numero di potenziali clienti creando partnership. Volevamo solo che la nostra soluzione fosse più competitiva, in modo che i partner potessero scegliere noi. Non sono le scadenze che stiamo cercando, la sua capacità dimostrabile di offrire nuove funzionalità. Ma grazie per la preoccupazione.
Dmitry Negoda,

In tal caso, forse anziché mirare a raddoppiare il ritmo di sviluppo in un solo passaggio, forse puoi provare a "accelerare" per un periodo di tempo.
Alex D,

4

Quindi stai cercando di essere la squadra che non cade vittima del Mese dei Miti . Avrai diversi problemi, qualcuno nel team dovrà fare le interviste tecniche, quindi dovrai aspettare alcune settimane dopo aver accettato la posizione prima di poter iniziare. Potrebbero passare due mesi prima che i nuovi sviluppatori siano davanti alle loro tastiere.

Ogni nuovo dipendente ha una produttività negativa nei primi mesi. È peggiorato perché gli sviluppatori attuali dovranno guidarli, riducendo ulteriormente la produttività dei temi.

L'altra parte del MMM era che, man mano che il team cresce, aumentano anche i problemi di comunicazione. Le riunioni diventano più grandi, le catene di e-mail diventano più lunghe ...

Li porterei in gruppi più piccoli e saprei che per lungo tempo la produttività non sarà proporzionale all'aumento delle dimensioni della squadra. Considera anche che il drenaggio del flusso di cassa durante i primi mesi può essere significativo, a causa dei costi di imbarco e delle attrezzature.

Nel tuo commento ad Alex D hai menzionato "Non sono le scadenze che stiamo cercando, la sua capacità dimostrabile di offrire nuove funzionalità". Passa quindi a uno stile di sviluppo che definisca le funzionalità in blocchi più piccoli e più spesso. Chiedi ai nuovi membri del team di testare le nuove funzionalità, che li aiuteranno a comprendere la base di codice.


Non capisco come testare nuove funzionalità aiuterà a comprendere la base di codice. Assumiamo anche ingegneri addetti al controllo qualità, quindi lasciamo che gli sviluppatori sviluppino e test i tester.
Dmitry Negoda,

2

Faresti meglio a non assumere nessuno nuovo e guardare i tuoi processi per vedere dove è possibile apportare modifiche per rendere le cose più veloci. Prima vengono rilevati i bug, meno tempo ci vuole per risolverli, quindi come stai testando? Stai facendo recensioni di codice? Stai prestando attenzione alla qualità del requisito? Hai build automatizzati e processi di deplotyment? Hai dei test automatici? Stai organizzando riunioni stand-up quotidiane (Incredibile quanto può essere più veloce lo sviluppo quando qualcuno ti chiederà il tuo progresso ogni giorno!)? Stai usando processi agili? Hai alcuni difetti di progettazione di base che dovrebbero essere affrontati per rendere più veloce il resto dello sviluppo (una cattiva progettazione può rallentare incredibilmente un progetto di sviluppo)?

Si prega di leggere il Mito Man-month. Avrai chiaramente bisogno di essere in grado di dire al senior management perché stanno facendo le scelte consumate per accelerare un progetto. .


Sì, a tutte le tue domande è uscita l'ultima.
Dmitry Negoda,

0

Quindi vuoi buttarli da una scogliera e vedere se riescono a volare? Penso che quando scopri le cose da solo, tendono a rimanere con te a lungo termine piuttosto che avere solo delle soluzioni. Tuttavia, ciò presuppone che in realtà scopri soluzioni migliori. Non vedo perché non puoi permettere a questa squadra di avere un leader qualificato che si bilancerà permettendo loro di fare degli errori da soli insieme a dare loro guida e istruzioni imparando da esempi di qualità.


Mike Partridge ha cambiato la mia domanda. Non lancerò nessuno dalla scogliera. Naturalmente i nuovi sviluppatori lavoreranno insieme agli esperti, solo su un sottoprogetto diverso.
Dmitry Negoda,

Spero solo che assumere sviluppatori nel progetto loc 100K non sarà così doloroso come assumere nel progetto loc 270K, e questa era la domanda.
Dmitry Negoda,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.