Come determinare il numero di programmatori necessari per un progetto


18

Come fai a sapere quanti programmatori un determinato progetto deve avere successo?

La società per cui lavoro esegue gli ordini per le aziende clienti. Abbiamo redatto un sistema di gestione del magazzino interno che gestisce la gestione delle scorte in base all'ubicazione, l'elaborazione degli ordini, la generazione della polizza di carico, la fatturazione, il controllo delle merci e il reporting (probabilmente 50 report). Ha anche funzioni di scansione di codici a barre e un portale client insieme a dozzine di altre funzionalità più piccole. Include anche un orologio completo per i dipendenti. Si integra con Quickbooks, UPS e FedEx. Gestisce il lavoro per almeno 50 client, tutti leggermente diversi nella loro funzionalità. Ad esempio, importiamo ordini da file inviati dai clienti, ma ogni cliente invia un formato di file diverso (CSV, Excel, file flat e servizi Web), pertanto abbiamo impostato una dozzina di metodi di conversione degli ordini. Le esportazioni sono la stessa storia.

Il progetto è complesso e cresce in complessità ogni giorno con oltre un quarto di milione di righe di codice. Sono circa 250.000 righe di codice VB.NET, 6.200 righe di codice Ruby e forse 5.000 righe di PHP. Ha anche un database MySQL con circa 200 tabelle.

A causa dei requisiti in costante evoluzione e delle diverse esigenze di decine di clienti, il codice stesso varia notevolmente nella qualità da un codice estremamente scarso a relativamente buono.

Attualmente, questo progetto ha un solo programmatore: me stesso. Attualmente attualmente faccio anche tutto il supporto del prodotto per la nostra azienda di circa 75 persone. Ciò include la risoluzione dei problemi e l'impostazione di nuovi client e tutte le nuove funzionalità necessarie. Inoltre, stiamo cercando di riscrivere il tutto per essere basato al 100% su Ruby on Rails. E vorremmo commercializzare l'intero sistema entro il prossimo anno per essere utilizzato da altre società.

Attualmente, abbiamo solo me stesso come programmatore, ma non credo che sia sufficiente. Qualcuno ha qualche consiglio su quanti programmatori dovrebbe avere un progetto di questa portata o su come dovremmo determinare la risposta a quella domanda? Considerato in particolare il fatto che la direzione vorrebbe che il prodotto fosse di qualità commerciale entro il prossimo anno?


11
Stavo aspettando una battuta sulla lampadina :(
Oded,

lol ... google il titolo e probabilmente ne troverai alcuni. Quando stavo cercando su Google ho effettivamente trovato un mucchio di quelli lol accidentalmente.
kstevens715,

8
Se i requisiti continuano a cambiare, nessun numero di mani extra consentirà di spedire questo prodotto fuori dalla porta. Devi prima definire i requisiti.
Oded,

Questo è sicuramente vero nel mio caso. So che la domanda che sto facendo probabilmente non è molto rispondente. Ma se potessi confrontare su quali tipi di progetti stanno lavorando altre persone e quante persone sono coinvolte a tempo pieno in quei progetti, ciò potrebbe aiutare.
kstevens715,

Questa domanda sembra essere molto simile a questa domanda . Forse troverai anche alcune delle risposte utili.
S.Robins,

Risposte:


3

Direi almeno 5 persone. Uno per test, uno per specifiche, supporto e documentazione e 3devs. Ci sono molte cose da testare nel tuo caso, quindi un tester dedicato al 50% non dovrebbe essere irragionevole. Dovrebbe esserci una persona che annota i requisiti e che dispone dell'assistenza clienti che configura la propria infrastruttura per i test ecc. Tre sviluppatori che ritengo abbastanza bassi per un progetto come questo. Un ampio back-end integrato con molti sistemi di terze parti e un completo fronteggiato con moltissimi report personalizzati. Vorrei avere.

  1. Un buon sviluppatore di back-end (persistenza / livello aziendale)
  2. Un buon sviluppatore di fascia media / front-end che realizza classi d'azione e JavaScript CSS Design.
  3. Un bravo architetto di recitazione tuttofare, ma anche facendo codice in tutti i livelli con l'aiuto esperto degli altri due. Questo sviluppatore può anche fare cose come impostare il framework JUnit Maven Jenkins Git Branching e così via.

Cosa succede se parti, ti ammali in vacanza, ecc. Una persona per progetto non è mai intelligente. Né è bello essere soli perché non ci si evolve professionalmente senza colleghi. Lavoro abbastanza spesso da solo, costruendo nuove architetture e così via, spesso in team di 5 sviluppatori, ma non mi evolvo mai come quando dico a un collega, lo facciamo insieme e ci chiudiamo una settimana parlando, discutendo e scegliere i framework. La programmazione delle coppie è estremamente utile e non può essere eseguita con un solo sviluppatore, e chi farà revisioni del codice in caso di dubbi? Se rimani bloccato chi ti aiuterà? Avrei intrapreso un progetto di una sola persona se facesse parte di un ambito più ampio e, se necessario, avrei potuto ottenere risorse di esperti.


1
Ho fatto una vacanza di 2 giorni l'estate scorsa e qualcuno ha dovuto entrare in casa mia per prendere il mio laptop ... sì. Parlo sempre di lavorare nel vuoto perché non ho molti altri sviluppatori con cui interagire. E vivendo in una piccola città non ci sono nemmeno gruppi di utenti o nulla a cui unirsi. Abbiamo (io?) Appena iniziato a scrivere codice di prova di recente, in realtà quando abbiamo iniziato la transizione a Rails. Non riesco già a immaginare di svilupparmi senza test. Adoro l'idea di avere un tester dedicato al 50%.
kstevens715,

1
Almeno uno sviluppatore dovrebbe essere un funzionalista di database.
HLGEM,

8

Benvenuti nel difficile mondo delle risorse !

Il problema non riguarda le dimensioni del progetto e le dimensioni del team. Questo è un malinteso molto comune che spesso nasconde altri problemi che sono solitamente legati alla gestione. Il problema riguarda Scope . Devi decidere cosa puoi ottenere con le tue risorse attuali, ovvero te. Quindi devi decidere se la tua capacità di gestire il carico di lavoro è sufficiente per gestire l'attività entro i tempi che ti sono stati assegnati. Pertanto, le esigenze del progetto devono essere identificate e mirate.

  • Vuoi passare il tempo a ripulire la base di codice esistente?
  • È un requisito fondamentale per garantire il successo del progetto?
  • Hai nuove funzionalità da aggiungere al sistema? Quali sono gli aspetti più importanti del tuo progetto che devono essere affrontati e quali sono gli elementi minori presenti nella lista dei desideri?
  • Qualcuno dei requisiti può essere abbandonato o almeno rimandato alla prossima versione di manutenzione?

Quando si ha un'idea dell'ambito delle proprie esigenze, è possibile determinare più facilmente il carico di lavoro richiesto per ottenere un risultato entro un determinato periodo di tempo. Se è probabile che le tue risorse vengano sovrautilizzate, avrai bisogno di più personale. Se è probabile che le tue risorse siano sottoutilizzate, potresti trovarti in grado di avvicinare la scadenza o aumentare la portata del tuo progetto.

Se il tuo istinto ti dice che non hai abbastanza personale per gestire il progetto, potresti essere corretto, ma devi capire perché è che ti stai dicendo questo. Non è sufficiente avere semplicemente una sensazione. Invece, devi essere in grado di esaminare scientificamente il problema al fine di fornire prove a sostegno dei tuoi istinti e devi essere pronto ad affrontare la possibilità che i tuoi istinti possano persino essere sbagliati. Dopo aver raccolto le prove - Vale a dire: mirato al progetto, allora è davvero necessario sedersi con la propria direzione e presentare una richiesta per ridurre l'ambito del progetto o aumentare le risorse disponibili per garantire il successo del progetto, in base sulle prove a portata di mano.


Scope sembrerebbe essere la completa riscrittura di un sistema SLOC da 250 K in qualcosa che è di qualità termoretraibile (o almeno di qualità da software di consulenza). Il vantaggio è che la raccolta dei requisiti e la progettazione generale sono probabilmente già state fatte. Questo non è piccolo, e non è qualcosa per uno sviluppatore che ha altre responsabilità.
David Thornley,

@DavidThornley Dipende molto dall'ambito delle funzioni degli sviluppatori, dalle scadenze, dal carico di lavoro, da come la sua azienda sta già commercializzando il prodotto. Ho visto molti progetti complessi lavorati da un team di 1-2 persone che hanno avuto molto successo perché sono stati ben gestiti ... e molti altri che hanno fallito. Concordo tuttavia sul fatto che il compito è grande e che di per sé è già un po 'una bandiera rossa in termini di risorse. Il fatto è che non vale la pena assumere un sacco di persone senza aver prima fatto un po 'di compiti a casa, il che è davvero il punto della mia risposta. :-)
S.Robins

Scope è qualcosa che ho sollevato un po 'negli ultimi due mesi. Il 20% del progetto ha l'80% dell'impatto sull'azienda. Questo è ciò su cui sto cercando di concentrarmi. Sfortunatamente, l'80% che ha il 20% dell'impatto è ciò che viene spinto in prima linea mentre proviamo a gestire le "emergenze" lanciando più codice e funzionalità. Una volta ho chiesto un blocco delle funzionalità in modo da poter risolvere alcuni problemi fondamentali. Mi hanno dato 5 giorni. Inutile dire che sono trascorsi 5 anni e rimangono ancora molti dei problemi fondamentali. Grazie per il tuo post, molto utile.
kstevens715,

6

Il successo del prodotto / progetto dipenderà dall'impegno dell'azienda che lo paga. Se assumeranno più programmatori / personale di supporto, ci sarà una riduzione intrinseca della produttività da parte di un solo programmatore, che sa che deve addestrare, insegnare, gestire, ecc. Non che sia una cosa negativa ... ma ci sarà essere in calo prima che si realizzi un aumento .. c'è anche la necessità di analisti aziendali, manager, vendite e supporto del prodotto una volta che è disponibile in commercio ..

Ospitare un'applicazione commerciale è molto più che creare una solida piattaforma. ci sono requisiti di supporto, supporto tecnico, correzione di bug, formazione dell'utente, ecc.

hai qualche buona procedura di analisi / specifica / stima in atto? in caso contrario, inizia ora , puoi farlo da solo.

ti stai allenando il cervello in questo momento? In tal caso, preparati a lavorare due volte più duramente se sei tenuto a gestire questo processo e continuare a sviluppare (aumentare il debito?) ..

ed ecco la risposta della mia esperienza precedente trovandomi in una situazione simile nei prezzi della California meridionale:

5-6 persone && ~ 500k

  • 1 capo sviluppatore / gestore che indossa tutti i cappelli (~ 100k - 120k)

  • Programmatori di 2 Sr. (molto capaci, autonomi) con buona conoscenza del DB e abilità (2x ~ 80 - 100k)

  • 1 Project Manager per interfacciarsi con il Management ($$?) Questa persona dovrebbe anche essere in grado di comprendere le esigenze dell'app e comunicare tali esigenze direttamente ai programmatori

  • 1? Sviluppatore (HTML / UI)? con abilità javascript (odio programmare l'interfaccia utente / codice di markup)

  • 1? Persona del database? tuttavia, la maggior parte dei buoni programmatori non ha problemi a creare strutture di dati scalabili, tuttavia, se hai intenzione di preoccuparti dell'ottimizzazione, almeno vorrai avere un consulente


1
+1 Mi piace molto il tuo guasto! Completa OT gli stipendi che hai citato sono deprimenti per me poiché ho pensato di lavorare in SoCal ma non sono molto più alti dell'Europa occidentale, se la gente Sr è come MSc + 5 anni di lavoro.
Farmor

1
Sono d'accordo, tranne che consiglierei anche a un programmatore entry level di assumere compiti di supporto (configurazione del client e miglioramenti minori) e di fare un lavoro generale grugnito. La combinazione di alcuni ruoli può funzionare a seconda dei livelli di abilità coinvolti.
jfrankcarr,

Wow, puoi ottenere sviluppatori senior in So Cal per 80-100K? Sembra piuttosto basso dato il costo della vita. Forse abbiamo idee diverse di "senior"; gli sviluppatori senior che conosco a Dallas stanno ottenendo molto di più.
Kevin Cline,

Probabilmente abbiamo idee diverse su ciò che è buono anche per il gusto. Ho assunto 2 .Net Sr. che erano giovani e di talento con molta esperienza negli ultimi 10 anni che erano disposti a lavorare in quella gamma. Abbiamo usato l'ultimo Microsoft Stack (TFS, .NET 4, C #, EF 4.1, MSSQL 2008 R2, blah blah ..), e non abbiamo avuto problemi con l'ottenimento di un buon codice pulito. Eravamo una piccola squadra, e il problema che abbiamo riscontrato cercando di assumere alcuni suor era che erano resistenti all'apprendimento e avevano troppe opinioni e portavano troppo bagaglio (non avevamo nemmeno una finestra di noleggio)
hanzolo,

2

1 programmatore su una base di codice di grandi dimensioni con tutta la responsabilità di configurare, testare, comunicare, supportare, documentare e correggere i bug non avrà molto tempo per scrivere nuovo codice o aggiungere funzionalità (o addirittura refactoring vecchio codice).

Rompi la tua settimana in base alla percentuale di queste attività obbligatorie che non espandono il business e rimarrai sorpreso dalla rapidità con cui la gestione richiede ulteriore aiuto.

I grandi progetti hanno un certo sovraccarico associato che non andrà via (specialmente se implementando / testando con nuovi clienti tutto il tempo che sembri). Questo è il motivo per cui hai rotazioni di supporto e supporto in generale; così alcuni di quelli del team hanno il tempo di lavorare su nuove funzionalità.

Potresti anche voler leggere libri sulla stima del software. Questi libri potrebbero non sembrare che abbiano molto da dire, ma contengono interessanti studi di casi provenienti da una varietà di settori e confermano le loro affermazioni con prove.


Il 95% del mio tempo è dedicato a uno di questi compiti. Mi piace l'idea delle rotazioni di supporto. Potrebbe essere qualcosa da considerare se assumiamo qualcuno con cui posso ruotare con lol. Oggi, ad esempio, stavo davvero lavorando su un codice di base e sono stato interrotto perché qualcuno aveva bisogno di una batteria.
kstevens715,

@ kstevens715 - Sembra che tu abbia bisogno di aiuto, anche se è un figlio di qualcuno che è tecnico. Presumo che tu stia ricevendo un reddito di almeno 5 cifre, se mi viene detto di ottenere una batteria, costerebbe circa $ 10 per il mio datore di lavoro (35% della mia retribuzione oraria).
Ramhound,
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.