Lavoro in una squadra abbastanza grande (circa 15 sviluppatori) che sta attualmente discutendo la nostra metodologia di lavoro. Il software su cui lavoriamo è abbastanza ricco di funzionalità e si sta espandendo rapidamente in termini di ambito, quindi il numero di sviluppatori è aumentato ultimamente e continuerà ad aumentare. Al momento i diversi sviluppatori hanno diverse aree di interesse in cui sono bravi. Alcuni si concentrano sull'interfaccia utente, alcuni sulla logica aziendale e altri sul back-end. Ma uno sviluppatore dell'interfaccia utente potrebbe aggiungere qualcosa al back-end se ha voglia di farlo.
Man mano che il numero di sviluppatori cresce, non possiamo più lavorare nello stesso team (è piuttosto difficile cercare di seguire ciò che fanno altre 20 persone). Molte squadre che lavorano nella stessa base di codice potrebbero diventare disordinate se le persone stanno cambiando il "codice di altri popoli".
Stiamo discutendo alcuni modi alternativi per dividere i nostri compiti, e diverse persone argomentano in modi diversi:
- Alcuni pensano che il modo attuale di fare le cose sia abbastanza buono. Certo, un ragazzo che si concentra sull'interfaccia utente potrebbe apportare modifiche alla logica di business del backend e potenzialmente incasinare le cose. Ma allo stesso tempo ci fidiamo di lui per non incasinare troppo. Le revisioni delle modifiche potrebbero essere sufficienti per garantire che la qualità rimanga valida.
- Alcuni preferiscono che una squadra venga assegnata a un livello specifico. Ad esempio, un team (2-3 sviluppatori) potrebbe essere assegnato a lavorare solo sull'implementazione della logica aziendale nel backend, mentre un altro team potrebbe essere assegnato a lavorare su frontend e un terzo potrebbe concentrarsi sulle cose di persistenza. Ciò incoraggerebbe le persone a essere esperti nel proprio livello. Il lato negativo è che se uno sviluppatore della UI ha bisogno di qualcosa nel back-end, c'è un sovraccarico con la pianificazione se la persona che fa il back-end si trova in un'altra squadra.
- Un terzo modo suggerito è quello di avere team con membri che conoscono tutti i livelli. Quindi un team si concentrerà su un tipo specifico di funzionalità e quindi includerà i membri che conoscono l'interfaccia utente, la logica aziendale, il back-end, ecc. Ciò darebbe il vantaggio che una squadra non dovrà attendere l'arrivo di un'altra squadra per implementare una nuova caratteristica che interessa tutti i livelli. Il lato negativo della gente vede qui che questo potrebbe portare a una maggiore focalizzazione tra gli sviluppatori, che potrebbe portare a una minore qualità.
Non sono sicuro di quello che sto chiedendo qui, ma se qualcuno ha esperienza, o se ne conosce qualcosa su un buon materiale di lettura su questo argomento, sarebbe apprezzato.