Supponiamo che tu abbia appena iniziato a lavorare in un piccolo gruppo su un progetto {attualmente relativamente piccolo, anche se si spera sia più grande}. Si noti che questo è un progetto reale destinato ad essere utilizzato da altri sviluppatori nel mondo reale, non un progetto accademico destinato a essere rottamato alla fine di un semestre.
Tuttavia, il codice non è ancora stato rilasciato agli altri, quindi nessuna decisione è ancora impostata in pietra.
Metodologie
A uno di voi piace iniziare a scrivere codice e fare in modo che i pezzi si incastrino mentre si va prima di avere necessariamente una chiara idea di come esattamente tutti i componenti interagiranno (progettazione dal basso verso l'alto). Un altro di voi ama fare l'intero progetto e annotare i dettagli di tutti i componenti e le comunicazioni prima di codificare una soluzione.
Supponiamo che tu stia lavorando su un nuovo sistema piuttosto che imitando quelli esistenti, e quindi non è sempre ovvio come dovrebbe essere il giusto design finale. Pertanto, nel tuo team, i membri di un team diversi a volte hanno idee diverse su quali requisiti sono addirittura necessari per il prodotto finale, per non parlare di come procedere per la sua progettazione.
Quando lo sviluppatore dal basso scrive un codice, lo sviluppatore top-down lo rifiuta a causa di potenziali problemi futuri previsti nel design, nonostante il fatto che il codice possa risolvere il problema, credendo che sia più importante ottenere il design è corretto prima di tentare di codificare la soluzione al problema.
Quando lo sviluppatore top-down prova a elaborare il design completo e i problemi previsti prima di iniziare a scrivere il codice, lo sviluppatore dal basso verso l'alto lo rifiuta perché lo sviluppatore dal basso non pensa che alcuni dei problemi in realtà sorgono nella pratica e pensa che potrebbe essere necessario modificare il design in futuro quando i requisiti e i vincoli diverranno più chiari.
Il problema
Il problema che questo ha comportato è che lo sviluppatore dal basso finisce per perdere tempo perché lo sviluppatore top-down decide spesso la soluzione che lo sviluppatore dal basso ha scritto dovrebbe essere scartata a causa di un difetto di progettazione, con conseguente è necessario riscrivere il codice.
Lo sviluppatore top-down finisce per perdere tempo perché invece di parallelizzare il lavoro, lo sviluppatore top-down ora frequentemente si siede per elaborare il progetto corretto con lo sviluppatore dal basso, serializzando i due al punto in cui potrebbe anche essere più veloce per 1 persona a fare il lavoro di 2.
Entrambi gli sviluppatori vogliono continuare a lavorare insieme, ma non sembra che la combinazione stia effettivamente aiutando entrambi in pratica.
Gli obiettivi
Gli obiettivi comuni sono ovviamente massimizzare l'efficacia della codifica (cioè ridurre al minimo lo spreco di tempo) e scrivere software utile.
La domanda
In parole povere, come risolvi questo problema e far fronte a questa situazione?
L'unica soluzione efficace a cui posso pensare che non perdi tempo è lasciare che ogni sviluppatore segua il suo stile per il design. Ma questo è più difficile di quanto possa sembrare quando si riesamina il codice e in realtà è necessario approvare le modifiche reciproche e quando si sta tentando di progettare un quadro coerente che gli altri possano utilizzare.
C'è un modo migliore?