Come impedire che le specifiche di sviluppo cambino a metà sviluppo?


61

Problema : sembra che con quasi tutti gli sforzi di sviluppo in cui sono coinvolto, indipendentemente dal tempo impiegato nella pianificazione prima di iniziare lo sviluppo, ci sono sempre molte modifiche necessarie a metà strada o verso la fine del progetto. Questi sono a volte grandi cambiamenti che richiedono un sacco di ri-sviluppo.

Non lavoro per clienti che pagano soldi, questo è un team di sviluppo interno su siti Web di sviluppo interni. Quindi, non è che posso farcela o altro. E alla fine, dobbiamo cercare di rispettare le scadenze.

Domande : quali sono alcuni dei modi migliori in cui voi ragazzi avete trovato per ridurre al minimo e impedire che le modifiche alle specifiche vengano interrotte a metà strada o dopo lo sviluppo?


9
stabilire una pietra miliare per il congelamento delle funzionalità in fase di sviluppo e organizzare / negoziare le cose in modo tale che tutte le richieste di funzionalità inviate dopo quella pietra miliare passino alla versione successiva e non a quella corrente. Il punto chiave qui è ovviamente pianificare più di una versione in anticipo e condividere questa comprensione con i clienti
moscerino del

4
@gnat Stai presupponendo che il PO funzioni presso un'organizzazione in cui la realizzazione di una pietra miliare di Freeze Feature sarebbe accettabile per le parti interessate. Sulla base dell'esperienza personale lavorando in team di sviluppo interni, se dovessi proporre una cosa del genere, le parti interessate mi fisserebbero e direbbero l'effetto di "Chi diavolo credi di dirmi quando posso e non posso cambiare il mio film richiede un capriccio? Per cosa credi che ti stia pagando? Conosci il tuo posto. "
maple_shaft

29
Hai provato a salvare le specifiche in un file di sola lettura?
orlp,

14
Ovviamente li addebiti: ogni modifica alla specifica ritarda il rilascio, quindi la tua risposta a una richiesta di modifica dovrebbe essere una stima della nuova data di rilascio se la modifica viene aggiunta alla specifica. Chiunque chieda il cambiamento è responsabile del ritardo e deve spiegarlo esattamente come si spiegherebbero le spese.
Simon Richter,

7
Non è per questo che esiste Agile? Non puoi bloccare le specifiche, quindi fai in modo che il tuo processo gestisca una specifica che cambia.
Craig,

Risposte:


89

C'è un famoso detto militare, attribuito a Helmut von Moltke: "Nessun piano di battaglia sopravvive al contatto con il nemico". Allo stesso modo, non penso che sia possibile fare una specifica che non dovrà essere cambiata - a meno che tu non possa predire il futuro e leggere le menti degli stakeholder (anche se potrebbero non aver ancora preso la loro decisione, anche se affermano di averlo fatto). Suggerirei invece di affrontarlo in diversi modi:

  1. Fai una chiara distinzione su cosa può essere cambiato e cosa no. Comunicalo chiaramente agli stakeholder, fai in modo che firmino esplicitamente cose immutabili il prima possibile.
  2. Preparare la modifica in anticipo. Utilizzare metodologie di codice che consentano di modificare più facilmente le parti sostituibili, investire in configurabilità, incapsulamento e protocolli chiari che consentano di modificare e sostituire le parti in modo indipendente.
  3. Parla spesso con le parti interessate, sollecita feedback e approvazione. Ciò ti terrebbe entrambi sincronizzato ed eviterebbe che affermino "oh, non è quello che volevamo" quando è troppo tardi. Come notato in altre risposte, metodologie agili e frequenti mini-release ti aiuterebbero in questo.
  4. Inserisci nel programma il tempo per accogliere le inevitabili modifiche. Non abbiate paura di dire "avremo bisogno di più tempo" in anticipo se pensate di farlo - se il programma che vi viene dato è irrealistico, è meglio conoscerlo (e farlo registrare sul disco) all'inizio che a fine.
  5. Se i cambiamenti sono troppo estesi e minacciano la scadenza - respingi e dì qualcosa come "questo cambiamento è possibile, ma spingerà la scadenza di X tempo, fai la tua scelta".
  6. Effettuare un processo formale di richiesta delle modifiche, assegnazione delle priorità alle modifiche e assegnazione delle modifiche alle versioni o alle versioni. Se potessi dire alla gente "Non posso farlo in questa versione, ma saremo felici di metterlo nei tempi previsti per il prossimo", è molto meglio che dire loro "sei troppo tardi, il tuo cambiamento non può entrare , arrivederci "e li renderebbe tuoi amici - sarebbero felici che tu rilasci in tempo, così potresti essere libero prima di arrivare alla prossima versione che avrà il loro cambiamento - e non il tuo nemico.

3
Puoi anche "congelarli" in più fasi e inserire le modifiche nella "versione successiva" .
Concedi Thomas il

3
Formalizzare il processo di modifica ed essere chiari sul campo di applicazione è un ottimo consiglio - se si sta eseguendo un contratto a portata fissa / prezzo. In altre impostazioni, questo approccio si riduce poiché dà la precedenza al programma e al prezzo rispetto all'ambito e alla qualità. Forse è quello che ti serve in una determinata situazione. Ma poi di nuovo, forse non è ...
tardato il

3
+1 per il numero 6. Ho avuto un'esperienza eccellente con il PM che ha implementato quel requisito da solo.
Joshua Drake,

3
I cicli brevi sono la chiave. Le persone sono molto meno arrabbiate per qualcosa che viene spinto nel prossimo sprint di due settimane rispetto a quando la "prossima uscita" è tra sei mesi.
Adam Jaskiewicz,

1
"Investire in configurabilità, incapsulamento" è molto, vario consiglio pericoloso. Può portare troppo facilmente all'effetto della piattaforma interna e a vuoti strati di astrazione, che rendono entrambi molto più difficile cambiare un sistema. Il sistema più facilmente modificabile è quello più semplice.
Michael Borgwardt,

40

Consegnare qualcosa (esito a usare qualsiasi parola) in anticipo e consegnare spesso. Cioè - usa una sorta di metodologia di sviluppo iterativo.

Questa è la base dello sviluppo Agile, ma può essere utilizzata con (quasi) qualsiasi metodologia.

Scomponendo il progetto in una serie di mini progetti ottieni un maggiore controllo in quanto puoi mettere qualcosa di fronte al cliente in anticipo, non sei bloccato in un lungo programma di sviluppo che diventa obsoleto quando il cliente cambia idea (come lo faranno).

Quando vedranno evolvere il sistema, alcuni requisiti cambieranno, alcuni diventeranno ridondanti e altri aumenteranno in priorità. Tuttavia, avendo un breve ciclo di vita del progetto sarai in grado di far fronte a questi cambiamenti.


22

La teoria secondo cui è possibile specificare completamente un progetto software di qualsiasi dimensione significativa è una fantasia completa. Si è scoperto che questa teoria non funziona in organizzazioni di grandi e piccole dimensioni praticamente per l'intera storia dello sviluppo del software.

DEVI trovare un modo per accogliere le modifiche mentre procedi! Succederanno, perché la maggior parte delle parti interessate, anche se dicono "sì, è quello che voglio" in realtà non hanno idea di ciò che vogliono fino a quando non è davanti a loro. Ecco perché abbiamo così tante persone che adottano metodi iterativi.

Sia che tu esegua l'iterazione del prodotto o qualsiasi altra cosa, DEVI trovare un modo per far fronte a questi cambiamenti, perché cercare di trovare modi per non apportare modifiche non è sufficiente chiedere alla gravità di spegnersi per qualche minuto in modo da poter volare.


2
La NASA lo fa con alcuni dei loro software, o almeno abbastanza per inviare navette nello spazio. Il fatto è che in realtà seguono il modello a cascata. Le specifiche sono effettivamente congelate. Almeno questa è la mia comprensione al di fuori dell'organizzazione.
Joshua Drake,

5
Ho lavorato su diversi progetti in cui siamo stati in grado di specificare completamente i sistemi abbastanza significativi (aggiunte di interruttori telefonici). La chiave in tutti questi casi è che stavamo prendendo di mira l'hardware che era già stato sviluppato e stavamo sviluppando specifiche pubblicate (ITU), quindi nessuno dei due poteva cambiare. Quindi il tuo argomento non vale per tutti i progetti, solo il 99% di essi! ;)
TMN il

@TMN: Non sarei d'accordo con il 99%. Penso che lo sviluppo a cascata abbia molto, molto più successo di quanto gli agilisti gli diano credito. Altrimenti, non verrebbe più utilizzato. La maggior parte dei progetti a cui ho lavorato sono stati a cascata. La chiave sta impostando una linea di base, quindi eventuali cambiamenti che si verificano vengono stimati per tempo e denaro aggiuntivi. Il cliente decide quindi se includere o meno la modifica e il programma e i dollari scorrono di conseguenza.
Dunk,

1
@Dunk: so che gran parte del nostro successo è stata la nostra aderenza a una metodologia sviluppata presso Bell Labs. Era una vera ingegneria, con tracciabilità completa dai requisiti alle specifiche, dai progetti ai piani di test da codificare per testare i risultati ai risultati finali. Quando un test ha esito negativo, puoi vedere esattamente quali requisiti non sono stati soddisfatti e sapevi esattamente dove cercare il codice in errore (o la progettazione non riuscita). Ci vuole molta disciplina e supervisione per far funzionare la cascata, ma hai ragione, può funzionare bene.
TMN,

1
@TMN Mi chiedo quindi quale sia la chiave del successo. L'uso del modello a cascata o il tuo approccio disciplinato? Sto pensando che il più tardi sia il più importante dei due.
Ross Goddard,

19

Non cercare di prevenire il cambiamento, abbraccialo . Più pianifichi in anticipo, più è probabile che il tuo piano cambi. Quindi, pianifica di meno , non di più. Adotta una metodologia di sviluppo agile in cui fornisci frequentemente piccoli pezzi di codice di lavoro, offrendo al cliente la possibilità di modificare le specifiche ogni paio di settimane.


Non so perché questo non mi sia venuto in mente prima, ma l'idea che avere il codice consente di abbracciare il cambiamento più facilmente non può essere corretta. È più facile e richiede meno tempo cambiare alcuni diagrammi o cambiare codice? Soprattutto quando il cambiamento è grande. Sono d'accordo che non provi a prevenire il cambiamento, devi semplicemente sottolineare gli impatti e applicarli di conseguenza al programma. Gli abbracci agili non cambiano più dei metodi a cascata. Penso anche che gestisca i cambiamenti peggiori della cascata poiché può essere un po 'più costoso apportare modifiche (a seconda di quando si verifica la modifica).
Dunk,

6
@Dunk Hai ragione nel dire che è più economico cambiare un diagramma e poi codificare, ma come scopri che è necessario che il cambiamento avvenga? Spesso questo accadrà solo dopo aver dato all'utente qualcosa da usare e si rende conto di aver comunicato l'idea sbagliata, questo non è quello che voleva, o ci sono anche queste altre cose che voleva. Il trucco è capire come scoprire questi cambiamenti il ​​prima possibile.
Ross Goddard,

@Ross: questo è uno dei motivi per i prototipi. Prendi in giro una sorta di sistema funzionante e ricevi feedback. È un mito che a cascata il cliente non sappia cosa sta ottenendo fino a quando non sarà fatto. Sono stato su progetti abbastanza grandi in cui la persona / le persone dell'interfaccia utente trascorrono i primi mesi a deridere un prototipo rappresentativo al fine di garantire che il cliente ottenga ciò che desidera. Si potrebbe sostenere che usare il sistema reale sia meglio, ma se finisce impiegando molto più tempo a finire perché il codice deve essere riprogettato frequentemente, non è un buon compromesso.
Dunk

12

Stai facendo la domanda sbagliata. Le modifiche alle specifiche avverranno sempre nei progetti di sviluppo software di qualsiasi dimensione.

Spesso è perché i requisiti aziendali cambiano, ma l'ho anche visto accadere perché i clienti (interni o esterni) possono avere difficoltà a visualizzare ciò che è possibile senza vedere qualcosa da cui iterare, quindi hanno una visione che cambia lentamente mentre interagiscono con soluzione in via di sviluppo.

La domanda che dovresti porre non è "come posso bloccare le specifiche", è "come posso strutturare il mio codice e i miei processi per rispondere a un ambiente che cambia senza buttare via tutto ciò che ho già scritto?"

Questo ti porta poi nell'arena del bingo di parole d'ordine: metodologie agili, sviluppo iterativo e soluzioni tecniche come la codifica basata su componenti / modulari, l'integrazione continua ... l'elenco continua.

Non sto dicendo che si tratta di una pallottola d'argento per tutti i tuoi problemi, ma sono nati tutti per il desiderio di gestire la situazione che stai descrivendo, per cui vale la pena investigare.

Scusate se non offre soluzioni concrete, ma tendo a pensare che un cambiamento di mentalità nell'accettare e gestire il cambiamento pagherà dividendi maggiori rispetto al tentativo di evitarlo.


Sì. Per riformulare la domanda originale: "Come possiamo garantire di consegnare ciò che il cliente desiderava all'inizio del progetto, piuttosto che quello che volevano alla fine?"
Steve Bennett,

5

Un cambiamento è solo una sorpresa ... se è una sorpresa!

Suggerirei di pensare a:

  • da dove vengono questi cambiamenti comunque?
  • perché non ne sei a conoscenza prima?
  • perché non stai contribuendo a questi cambiamenti (e potenzialmente rendendone ancora di più)?

Il cambiamento è la natura di ciò che facciamo. Da quando hai codificato un algoritmo esattamente come previsto il primo giorno?

Ma se vuoi evitare di essere perennemente lo sviluppatore frustrato "sorpreso" dai cambiamenti, penso che devi trovarti molto più vicino all'azione di dove vengono prese le decisioni. Dopotutto, sono sicuro che hai un sacco di idee su come migliorare il prodotto. Accomodati al tavolo o accetta per sempre che dovrai solo affrontare questi "cambiamenti a sorpresa".


+1 "Il cambiamento è la natura di ciò che facciamo" - Mi piace il cambiamento. Il cambiamento può essere una buona cosa. Mi dà la possibilità di vedere se le mie capacità di progettazione sono state all'altezza o meno. Se il cambiamento provoca molte rielaborazioni, allora ho fatto una cattiva progettazione. Offre inoltre l'opportunità di rendere il design più generico. Fornisce una scusa per risolvere ciò che hai passato di fretta al fine di rispettare il programma. Mi fa tornare indietro e sistemare la spazzatura degli altri. Tieni traccia delle richieste di modifica e incorporale nel programma in modo che quando consegni dopo il programma originale hai prove per dimostrare il perché.
Dunk il

4

Bene, questa è una telefonata, i clienti vogliono sempre di più, ma qui ci sono alcuni punti che dovresti considerare:

Mock-up HTML: crea sempre modelli Mock-up HTML per definire la parte dell'interfaccia utente di un'applicazione, mostrare loro come sarà e chiedere loro le loro opinioni. Se trovi qualcosa di ragionevole da modificare, fallo accadere nel prototipo HTML. Usando questo risolverai molte cose come problemi di interfaccia utente, flusso di base e alcuni componenti aggiuntivi (come ordinamento, paginazione, numero di record da visualizzare ecc.)


Partecipazione attiva dall'altra parte: questo è molto importante se si sta sviluppando per un'organizzazione aziendale, entrare nella propria attività, chiedere loro di chiarire i propri dubbi e chiedere loro quali cambiamenti vogliono nel loro flusso (se necessario).


Rilascio modulare: rilasciare il codice in modo modulare, rilasciare, testare, ricevere feedback e rilasciare di nuovo.


4

Ecco perché è quasi impossibile pianificare troppo in anticipo, ma non è una scusa per non pianificare affatto. Non innamorarti troppo dei tuoi piani e non dovrai preoccuparti che ti spezzino il cuore.

All'interno della tua azienda c'è un costo per l'utilizzo delle risorse IT indipendentemente dal fatto che qualcuno lo ammetta, lo segua o debba preventivare un budget. La realtà è che il tuo team può creare così tanto codice in un certo periodo di tempo. Tutti i dipartimenti e i progetti condividono questo budget.

Non puoi impedire a nessuno di voler cambiare i requisiti, ma non possono sfuggire alle conseguenze. Le modifiche possono aumentare significativamente i tempi di sviluppo. È un dato di fatto che devono affrontare o decidere di non apportare il cambiamento. Una richiesta di un dipartimento influisce su un altro? Potrebbe essere necessario spostare completamente il progetto dietro altri reparti perché la richiesta di modifica si sovrapporrà alla pianificazione temporale di un altro gruppo.


4

Il coinvolgimento attivo degli utenti durante tutto il ciclo di sviluppo e l'utilizzo della metodologia Agile possibile ci aiutano davvero con i nostri prodotti.

Le modifiche alle specifiche sono inevitabili, ma essendo trasparenti con gli utenti e, soprattutto, consultandole frequentemente significa che la maggior parte delle modifiche vengono acquisite il prima possibile.


3

Per me è abbastanza facile.
Dì a quello, il "Product owner" , che ha ordinato le funzionalità che questo è OK, ma deve scegliere un paio di funzionalità pianificate che potrebbe essere senza questa scadenza.
Pensalo come un incontro di mezzo sprint con l'OP in cui gli dici che lo sprint non brucerà fino a 0.

Ps. Se non è il "PO" , direi di non parlarmi passare attraverso il "PO"


1

Quali sono alcuni dei modi migliori in cui voi ragazzi avete trovato per ridurre al minimo e impedire che le modifiche alle specifiche vengano interrotte a metà strada o dopo lo sviluppo?

Non ci sono modi migliori. Spetta al management limitare le modifiche alle specifiche nella determinata fase dello sviluppo.

Tuttavia, è necessario progettare il software in modo tale da prevedere le modifiche. Quindi l'impatto dei cambiamenti sarebbe molto meno. Lo sviluppo iterativo e incrementale è un buon inizio.


1

Ho scoperto che, direttamente o indirettamente, i clienti sono la causa della maggior parte dei cambiamenti (e anche dei bug più critici, BTW). Quindi la soluzione ovvia è eliminare i clienti. (A che servono comunque?)


:) Se i clienti desiderano una personalizzazione folle, dovranno pagare con denaro e tempo. Se i venditori DEVONO assolutamente fare promesse per offrire funzionalità che non esistono ancora la maggior parte delle volte che effettuano una vendita, la società ha un problema più grande in generale: ha molti concorrenti e non è al top del suo gioco, ad es. Venditore di database SyBase. O diventerà irrilevante come azienda, o avrà bisogno di un CEO e deputati rivoluzionari.
Giobbe

1

Dal momento che non puoi impedire il cambiamento, devi abbracciarlo. Penso che la cosa più importante che puoi fare sia: devi cercare di ottenere le richieste di modifica dal cliente il prima possibile , perché è meno costoso cambiare le cose quando c'è solo poco codice. Quindi è necessario presentare il proprio progetto il prima possibile al cliente utilizzando prototipi (forse anche un prototipo cartaceo), utilizzare metodi agili e così via.


1

Potresti prendere in considerazione l'introduzione di una certa disciplina nel processo di sviluppo usando una metodologia come SCRUM. In SCRUM, un team fa un piano iniziale suddividendo l'implementazione delle funzionalità in storie e assegnando a ciascuna storia una stima dello sforzo (numero di ore o giorni di lavoro necessari per implementare quella storia).

Se è richiesta una modifica tardiva (per una storia che è già stata implementata) è necessario creare una nuova storia e stimare lo sforzo di implementazione per essa. Quindi puoi andare dal tuo manager (il proprietario del prodotto ) e semplicemente spiegare che la nuova funzionalità costerà quel tempo extra. Il project manager ha quindi la responsabilità di accettare lo sforzo extra e di adeguare il programma (eventualmente cancellando altre storie non ancora implementate).

Anche se il tuo team non implementerà completamente SCRUM o un altro processo di sviluppo, potresti almeno introdurre la pianificazione basata su storie , stimare lo sforzo di sviluppo per ogni storia e adattare il programma quando vengono richieste nuove storie.


0

http://teddziuba.com/2010/05/why-engineers-hop-jobs.html

Ho trascorso troppe serate dopo il lavoro stressate e infelici perché un altro tipo non capisce o si preoccupa di come funziona il business del software. Non ho problemi a confrontarmi con qualcuno più in alto, ma non ho il sostegno dei miei compagni nerd. Avere figli è una cagna, eh? Probabilmente smetterò presto.

Francamente, vorrei che i programmatori in generale avessero più palle. Diamo un'occhiata a questo:

"" "Non lavoro per i clienti che pagano soldi, questo è un team di sviluppo interno sui siti Web di sviluppo interni. Quindi, non è come se potessi pagare per questo o altro. E alla fine, dobbiamo cercare di rispettare le scadenze. "" "

Se avessi a che fare con un cliente $ -paying e se ti coprissi il culo con un contratto (http://vimeo.com/22053820?utm_source=swissmiss), le modifiche alle specifiche costerebbero a questo cliente più tempo E più denaro ( o potenzialmente stesso o meno tempo ma esponenzialmente più denaro). La tua azienda sta cercando di cavarsela cambiando le specifiche senza incorrere nel costo di più tempo e più denaro.

Nel frattempo, tentare di rispettare le scadenze provoca a te e ai tuoi colleghi UNNECESSARIO stress; non puoi trascorrere un fine settimana di qualità con amici / famiglia. In realtà non è necessario, perché chiunque ti sta lanciando il lavoro probabilmente non lo sa nemmeno, il che è triste.

La mia soluzione proposta: collettivamente avere le palle per affrontarle e spiegare che non c'è pranzo libero e tutto ha un costo, che un meccanico dovrebbe impiegare più tempo e caricare di più se le specifiche fossero cambiate a metà lavoro, che un'agenzia contraente impiegherebbe più tempo e caricare di più se le specifiche fossero cambiate durante il lavoro e c'è una buona ragione per farlo. Se non sono disposti a lavorare con voi in modo ragionevole, allora come gruppo vi alzerete e andrete via, e dovranno assumere sviluppatori che possano riprendere il progetto da dove era stato interrotto e consegnare in tempo.

Quindi c'è anche una promessa di sviluppo agile, che non implica scadenze rigide.

Devo ancora vedere i programmatori scioperare, ma questo sarebbe stato qualcosa. I gestori incompetenti sono troppo numerosi nelle società di software. Troppe persone vogliono ottenere qualcosa per niente, su Craigslist o all'interno di un'azienda reale. http://teddziuba.com/2011/07/the-craigslist-reverse-programmer-troll.html

I programmatori devono avere più palle.


0

Un approccio che ho scoperto che funziona in un certo senso OK (non con tutti i manager ovviamente) è "Penso di poterlo fare, sì. Dipende da quanto tempo extra stai assegnando a questo progetto? È un cambiamento abbastanza importante richiedente."

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.