Penso che questa domanda sia il punto cruciale della domanda sul ciclo di vita agile vs. cascata.
Se stai agendo, una premessa di base è che il codice, associato a una stretta interazione con gli sviluppatori, è migliore e più veloce delle specifiche dettagliate. Il team dà la priorità a rilasciare nuove funzionalità e alta qualità rispetto ad altre cose, come meccanismi di comunicazione formale come specifiche di progettazione dettagliate. Ma c'è uno scambio qui - devi avere canali di comunicazione tra i membri del team che permettono loro di chiedere sfumature e intenzioni di progettazione dettagliate quando ne hanno bisogno.
Se stai facendo cascata, stai lavorando partendo dal presupposto che il lavoro di compilazione del codice sotto la progettazione dettagliata e poi di testarlo sia significativo. E vuoi dare agli stakeholder una visione iniziale su come questo lavoro procederà e come sarà quando verrà fatto. Potrebbe essere il controllo del design con il cliente per assicurarsi di aver individuato le funzionalità che hanno senso. Potrebbe anche essere esaminarlo con esperti in altri ambiti, ad esempio recensioni sulla sicurezza, recensioni sulla sicurezza e recensioni dei membri del team che devono integrarsi con il tuo codice. Il presupposto è che queste revisioni consentiranno di risparmiare tempo a lungo termine perché ti eviteranno di indagare su una grande quantità di tempo nello sviluppo della cosa sbagliata.
Ultimamente, ho visto una fusione davvero grande tra i progetti dettagliati e gli strumenti di commento del codice, ad esempio JavaDoc. Poiché la maggior parte dei disegni dettagliati sono impronte del codice e brevi spiegazioni su ciò che farà, questa è più o meno la stessa cosa che ci si aspetterebbe da commenti al codice. Quindi avere uno strumento che trasformerà i commenti del codice in una specifica di progettazione dettagliata è fantastico - un modo molto migliore per tenerlo aggiornato rispetto a farlo manualmente.
Credo che una valutazione imprecisa su come dovrebbe essere il progetto dettagliato per il progetto, è un fattore importante nella crescita dei costi. La parte peggiore è che sei dannato se lo fai e dannato se non lo fai:
- Se il tuo progetto è troppo dettagliato per le dimensioni del team, la complessità del lavoro e i requisiti delle porte da superare (recensioni di sicurezza, recensioni sulla sicurezza, ecc.), hai perso tempo prezioso e denaro su un artefatto che non userai mai.
- Se il tuo progetto non è sufficientemente dettagliato, perderai denaro quando i membri del team formulano ipotesi errate che portano a problemi di integrazione e rischierai pesanti rilavorazioni quando un controllo finale di sicurezza o sicurezza rivela problemi che potrebbero essere stati risolti in modo rapido ed economico erano stati chiari aspetti del progetto prima dell'implementazione.
Non credo sia un caso in bianco e nero - ci possono essere molte volte in cui alcuni componenti sono "abbastanza buoni" se progettati ad alto livello, mentre altri richiedono un lavoro dettagliato e rigoroso. E cambiare il team o gli ambienti di progetto può dettare nuove esigenze di progettazione man mano che il progetto si evolve.