Come si sviluppa il software senza criteri di accettazione?


70

Come sviluppare in modo collaborativo software in un team di 4-5 sviluppatori senza criteri di accettazione, senza sapere per cosa testeranno i tester e con più (2-3) persone che agiranno come proprietari del prodotto.

Tutto ciò che abbiamo è una 'specifica' imprecisa con alcune schermate e alcuni punti elenco.

Ci è stato detto che sarà facile, quindi queste cose non sono necessarie.

Sono in perdita su come procedere.

Informazioni addizionali

Ci è stata data una scadenza rigida.

Il cliente è interno, in teoria abbiamo un product owner, ma almeno 3 persone che testano il software potrebbero fallire un articolo di lavoro semplicemente perché non funziona come pensano che dovrebbe funzionare e c'è poca o nessuna trasparenza di ciò che si aspettano o per cosa stanno effettivamente testando fino a quando non ha fallito.

i proprietari dei prodotti non sono prontamente disponibili per rispondere a domande o fornire feedback. Non ci sono riunioni regolari programmate o chiamate con loro e il feedback può richiedere giorni.

Posso capire che non possiamo avere una specifica perfetta ma ho pensato che sarebbe stato "normale" avere criteri di accettazione per le cose su cui stiamo effettivamente lavorando in ogni sprint.


33
Direi, sviluppalo come vuoi. Finché ti senti a tuo agio ad entrare in una riunione e dimostrare come il tuo prodotto corrisponde alle "spec" e alle schermate imprecise, penso che tu stia bene. Certo, potresti sempre chiedere al creatore della specifica per ulteriori dettagli ...
FrustratedWithFormsDesigner

10
Fondamentalmente questo è uno sviluppo automatico o "Cowboy Coding". Gli sviluppatori compilano i dettagli. Gli sviluppatori hanno il controllo della maggioranza. Fondamentalmente non avrai mai requisiti formali. Sviluppa, demo per stackholder, raccogli feedback, risciacqua e ripeti.
Jon Raynor,

11
Il proprietario del prodotto comprende che si tratta di un modo eccellente per garantire una crescita dei costi e dei tempi sempre più elevata? Scienziati non informatici, spesso non comprendono l'importanza di chiare specifiche ben scritte. Ad esempio, il governo degli Stati Uniti si imbatte spesso in problemi simili, quando cambiano le aspettative per il nuovo hardware militare. Questo è uno dei numerosi motivi per cui l'hardware militare è spesso in overbudget e in ritardo. joelonsoftware.com/2000/10/02/…
nickalh

35
"Ci è stato detto che sarà facile, quindi queste cose non sono necessarie ... nessuna riunione o chiamata programmata con loro e il feedback possono richiedere giorni. " Hai la mia simpatia. Questi sono i segni distintivi di "Nessuna idea di come funzioni il software di scrittura. Assolutamente."
jpmc26,

13
Sei stato impostato per il fallimento. Questo è il tipo di cose che devono essere inoltrate alla direzione. Se non avessi una scadenza rigida, potresti ripetere fino a quando non ci riuscirai. Se le parti interessate fossero disponibili per il feedback, si potrebbe iterare abbastanza velocemente da (possibilmente) rispettare la scadenza. Idem per aver effettivamente una specifica ragionevolmente dettagliata. Ma qualcosa deve dare . Questa è la parte in cui chiedi al tuo capo molto bene di estrarre il tuo @ $$ dal fuoco.
Jared Smith,

Risposte:


130

Un processo iterativo lo farà bene, senza specifiche dettagliate.

È sufficiente creare un prototipo impreciso, chiedere feedback al cliente, apportare modifiche in base al feedback e ripetere questo processo fino al completamento dell'applicazione.

Se il cliente è abbastanza paziente da farlo in questo modo è una domanda diversa. Alcuni clienti e sviluppatori in realtà preferiscono questo processo; poiché il cliente è sempre pratico, alla fine otterrà esattamente ciò che desidera.

Va da sé che in questo modo non hai intenzione di stipulare un contratto a tempo determinato o a tempo determinato.


114
Si dovrebbe aggiungere: "assicurati solo di essere pagato all'ora" e non "pagato solo quando il cliente sta esaurendo le idee su ciò che manca".
Doc Brown,

22
Assicurati anche di documentare anche ciò che pensa il cliente, quindi almeno è catturato nelle note da qualche parte. Potrebbe non essere un criterio di accettazione formale, ma è molto importante avere quando stai cercando di fare effettivamente i prossimi passi ..
Enderland

4
@Doc Brown: OP modificato per aggiungere "Il cliente è interno", quindi si spera che il pagamento a ore non sia un problema.
sleske,

8
+1 Ho seguito questo processo per molti progetti interni e ho scoperto che funziona davvero bene ed è, inoltre, un risparmio di tempo complessivo. Un consiglio è quello di mantenere brevi le iterazioni: una settimana o due.
Bob Tway,

13
La mia esperienza è che questo funziona bene quando la ragione della mancanza di criteri formali di accettazione è che nessuno è ancora sicuro di ciò che vogliono veramente. I prototipi li aiutano a formare opinioni e tu accetti di avere un grande incerto compito da svolgere. Ma funziona abbastanza male quando la ragione è che le parti interessate non stanno trovando il tempo di pensare / parlare / scrivere su ciò che vogliono, o dove le parti interessate hanno requisiti contrastanti che per motivi politici non sentono di poter dire esplicitamente. Quindi un prototipo prende a calci la lattina lungo la strada e nulla migliora fino a quando non trovi uno stout stick.
Steve Jessop,

58

Se ciò che stai dicendo è vero e le specifiche non sono abbastanza buone da poter iniziare (e sei onesto in questa valutazione), ti consiglio questo approccio:

  1. Leggi gli schizzi e le specifiche "imprecise" che ti sono state fornite.
  2. Scrivi le tue specifiche a un livello sufficiente per poter codificare. Potrebbe essere necessario fare molte ipotesi.
  3. Mostra le tue specifiche al cliente per la revisione. Nota le parti che gli piacciono e ottieni maggiori informazioni sulle parti in cui pensano di aver sbagliato.
  4. Ripeti i passaggi 2 e 3 fino a quando tu e il cliente siete sincronizzati.
  5. Ora hai una specifica adeguata.

Se il tuo cliente aveva ragione quando ha detto "sarà facile", allora questo esercizio dovrebbe essere un gioco da ragazzi.

Se il tuo cliente ha sbagliato e in effetti ci sono tutti i tipi di problemi e lacune nei requisiti, la tua bozza specifica illustrerà rapidamente il problema e comunicherà loro che erano sbagliati (senza che tu abbia bisogno di puntare un dito o discutere) poiché lo farà essere proprio di fronte a loro e ovvio. Inoltre, le tue specifiche serviranno come un ottimo strumento di discussione per risolvere quelle ambiguità e serviranno come un registro delle decisioni chiave mentre le rivedi con il loro feedback.


27
A volte puoi ingannare il cliente chiamando le tue specifiche un "programma di lavoro" (che i loro cervelli non programmatori accettano come una cosa amichevole e utile per un progetto) invece di una "specifica" (che, nel caso dei clienti come questo che sono ostili a tutti i principi di base del coinvolgimento nel processo di sviluppo, i loro cervelli non programmatori considerano un noioso pezzo di scartoffie pedanti che i programmatori li fanno fare senza una buona ragione).
Steve Jessop,

In secondo luogo, suggerirei di scrivere solo le specifiche tecniche per lo sviluppatore. Altrimenti, lo sviluppatore non sarebbe in grado di iniziare il suo lavoro. In questo modo, è possibile collaborare con il team aziendale in parallelo sulla natura del lavoro che verrà sviluppato. In questo modo sia lo sviluppo che il team aziendale vengono sincronizzati tra loro sui requisiti.
Karan,

3
your draft specification will quickly illustrate the problem and communicate to them that they were wrong (....) since it will be right in front of them and obvious- Vorrei sottolineare che i clienti che si rendono conto di quanto sia ovvio tutto ciò sono esattamente i clienti con cui non avrai mai quel problema. O, per dirla in modo più succinto: la soluzione implica la non esistenza del problema (che è un paradosso che riconosco sempre più spesso in tutte le aree della vita) ...
Radu Murzea,

1
Ci sono alcune persone che non lo "capiranno mai", ma nella mia esperienza spesso aiuta a mostrare loro un esempio del livello di dettaglio di cui hai bisogno e mostrare loro il tipo di decisioni "sbagliate" che puoi prendere quando i requisiti sono ambiguo.
John Wu,

18

Il proprietario del prodotto ti ha consegnato un prototipo; restituiscilo a quelli migliori (fino a quando non hai finito)

Sembra che ti sia stato fornito un prototipo di carta per iniziare il progetto. Non è un inizio terribile. Ti suggerisco di comunicare con il proprietario dell'azienda nella stessa lingua , fornendo prototipi progressivamente capaci.

I tuoi prototipi dovrebbero iniziare con la carta, passare a modelli digitali e quindi essere costruiti con tecnologie "reali".

Treehouse ha una guida eccellente per questo, che conclude:

La cosa meravigliosa della prototipazione con un framework è che il prototipo spesso diventa il vero sito perché la struttura e lo stile sono già in atto. Non è necessario ricreare il sito da zero se utilizzerà lo stesso framework.

Potresti voler fornire anche una specifica formale, soprattutto se rimani preoccupato di essere incolpato per un brutto risultato. Ma probabilmente otterrai più feedback dai prototipi.

Rispetta la tua scadenza

Nota che i tuoi sforzi successivi non saranno i classici "prototipi", in quanto non saranno usa e getta (o parti di essi non lo saranno). L'ultima iterazione più completa che completi prima della scadenza diventa il tuo deliverable.

La scadenza è il requisito meglio definito che hai. Avere qualcosa di completo e coerente che puoi consegnare in tempo.

Collabora con i tuoi tester

Se questo processo allentato è una novità per la tua azienda, i tuoi tester probabilmente sono ancora più in perdita di te e potrebbero essere alla ricerca di una guida. Devi dedicare un po 'del loro tempo all'inizio del processo. Fai sapere al loro capo che stai cercando di aiutarli a fornire un test significativo senza ricevere criteri di accettazione formali.

Scopri se i tester hanno qualcosa di fermo che devono fornire, come la documentazione di prova del collaudo, a cui puoi "tornare".

Prova Test First Design

Dal momento che non hai requisiti formali, ottenere casi di test per sviluppare fornirebbe una struttura.

Acquisisci familiarità con Test First Design e / o sviluppo guidato dai test e fornisci indicazioni ai tuoi tester sul processo, se necessario. Per un progetto rapido come questo, non è necessario diventare esperti del processo. Ma l'utilizzo di una metodologia comprovata rifletterà bene su di te e sui tuoi tester.

Rispetta gli standard, in particolare per l'interfaccia utente

Non hai requisiti di aspetto, ma hai una scadenza. Usa il lavoro di progettazione di qualcun altro per ridurre al minimo il lavoro che devi fare per creare un artefatto dall'aspetto professionale.

Scegli un'interfaccia utente standard per il tuo sito e non personalizzarla a meno che / fino a quando non viene indirizzata a. Non so per quale piattaforma stai sviluppando, ma Bootstrap o Google Material Design sono due esempi.

Comunicare, ma non infastidire

Suggerirei di inviare una e-mail al proprietario del prodotto al giorno. Invia di più solo se è un'emergenza.

Se hai domande, descrivi come procedere se non ricevi assistenza. Per esempio:

Gli utenti di questa app dovranno accedervi con dispositivi mobili? In questo momento stiamo assumendo che questo sarà un sistema solo desktop / laptop.

Non fatevi prendere dal panico

Sono stato coinvolto molti progetti per persone che non conoscevano il termine "requisito". La maggior parte ha avuto successo. I proprietari di prodotti a mani libere ti danno la possibilità di creare grandi soluzioni.

Nota, alcuni proprietari di progetti in questi progetti erano impossibili da accontentare e si nascondevano dietro la scusa "Sono troppo occupato per ..." per la loro incompetenza. Ma la maggior parte è stata “deliziata” dai risultati finali.


L'unico punto non menzionato è la scadenza rigida: sarà importante che qualcosa venga consegnato in quella data e che funzioni (passa attraverso i movimenti), anche se mancano le campane, i fischi e le strisce più veloci. Con questa limitazione in atto, tutti gli altri punti che @Tim sottolinea dovrebbero andare bene
Philip Oakley,

@PhilipOakley, grazie per il feedback. Ho aggiunto un punto sul processo di prototipazione iterativo che dovrebbe produrre "risultati" sempre più accettabili per evitare una scadenza mancata. Fammi sapere se questo aiuta.
Tim Grant,

è un miglioramento. Forse anche cambiare 'Incontro' in 'Incontro' per essere più imperativo. Quindi forse aggiungi anche l'affermazione che se hanno dato una data senza le altre cose, allora questo diventa il requisito fondamentale, in modo che la seguente 'Nota' abbia un contesto. (spesso i clienti si preoccupano solo di tempo e costi, il resto è cosmetica e moda, come sono sicuro che tu sappia ;-)
Philip Oakley,

10

Un progetto è l'atto di ridurre l'incertezza fino al raggiungimento della certezza :

  • C'è sempre un certo grado di incertezza all'inizio. A volte è un po 'di ambiguità nei requisiti. A volte, è molto impreciso. Dovrai allenarti come parte del lavoro.
  • Il trucco è ridurre iterativamente questa incertezza (combinando analisi, progettazione e implementazione), perfezionando le storie degli utenti e implementando il tuo sistema.
  • Casi / scenari di test e criteri di accettazione dovranno essere chiariti allo stesso modo. Contribuiranno a ridurre l'incertezza su qualità e correttezza (tra l'altro).
  • Alla fine, viene raggiunta una sufficiente certezza: il cliente ottiene un prodotto testato che si adatta alle sue esigenze e può essere utilizzato.

Questo è il principio dell'elaborazione progressiva: i requisiti, i criteri e i risultati saranno elaborati passo dopo passo, così come la comprensione da parte del cliente delle proprie aspettative e requisiti attraverso il suo coinvolgimento nel processo di sviluppo.

È un problema?

Più sketchi sono i requisiti iniziali, maggiore è l'incertezza e maggiore è il tempo necessario per eseguire i compiti. Quindi è solo una questione di chi farà il lavoro aggiuntivo e chi pagherà i costi.

La risposta a queste due domande dovrebbe essere nel contratto. O sarà oggetto di una negoziazione. E il cliente deve accettare un ulteriore coinvolgimento (l'argomento principale sarà "immondizia, immondizia", ​​anche se ti consiglio vivamente di presentarlo in modo più diplomatico ;-))


1
Adoro la prima frase. Il fermalibri è che il cliente potrebbe: 1) non essere sicuro di ciò che vuole, 2) cambiare idea mentre va, 3) desiderare qualcosa di irrealizzabile. Ma se questo è in realtà un semplice progetto, allora ha buone possibilità di successo.

1
Questo è oro.
Bruno Guardia,

8

" Non ci sono riunioni regolari programmate ". Bene, perché non inizi a programmare incontri regolari allora? Il solo fatto che tu abbia più proprietari di prodotti garantisce che il tuo progetto NON sarà facile, poiché ognuna di queste persone avrà requisiti contrastanti che DEVONO essere discussi di persona con tutte le parti interessate presenti.

Inoltre, ti consiglio davvero di tenere un registro delle decisioni dettagliato . Come minimo scrivi tutto ciò che qualcuno ha deciso, con la data e un elenco di persone presenti al momento della decisione. Ancora meglio se riesci a scrivere PERCHÉ qualcosa è stato deciso così com'era. Non importa se si tratta di un file sul tuo PC, una pagina nella tua wiki intranet o un taccuino sulla tua scrivania. Il registro protegge te e il progetto: quando un tester dice che un elemento "fallisce", puoi sottolineare che è stato deciso in questo modo con queste persone, e non è un tuo problema ma tra loro e i tester. Se questo porta al cambiamento delle specifiche, va bene, ma a questo punto non possono aspettarsi di rispettare una scadenza che avevano in mente - o devono tagliare l'ambito da qualche altra parte.


8

Un progetto senza requisiti chiari, leadership sciolta, nessuna definizione di done (DoD), nessuno disposto ad essere responsabile di assicurarsi di disporre delle informazioni necessarie per svolgere il proprio lavoro in modo tempestivo e rispettare la scadenza è una ricetta per il progetto fallimento.

Lo sviluppo iterativo non è un cattivo suggerimento, ma richiede una stretta collaborazione tra i proprietari dei prodotti e gli sviluppatori. Cerca di convincere qualcuno a rispondere dicendo "Sappiamo che avremo domande. Chi può essere regolarmente disponibile per assicurarsi che ricevano risposta in modo che la consegna del progetto non sia ritardata?" Pianifica orari regolari con qualcuno per rivedere i progressi e rimuovere gli impedimenti. Se non mostrano, o rifiutano, segui con gentile corrispondenza scritta e ritardi o mancate risposte dei documenti. Se i proprietari dei prodotti non sono disponibili, chiedi loro di fornire un rappresentante che possa esserlo.

Inoltre, un altro segno distintivo dello sviluppo iterativo è che un cambiamento nei requisiti richiede un cambiamento nella sequenza temporale. Non puoi impegnarti a rispettare una scadenza se non puoi sviluppare una sequenza temporale e non puoi sviluppare una sequenza temporale se non hai una buona idea di ciò che deve essere fatto. Invece di chiedere dogmaticamente una specifica, rivedere la specifica corrente, documentare eventuali domande che tu o il tuo team avete riguardo a come dovrebbe funzionare, pianificare il tempo con i proprietari del prodotto per discuterne e documentare le risposte. Quando hai finito, avrai le tue specifiche in base alle loro decisioni, che puoi quindi far concordare ai proprietari del prodotto (per iscritto). Lo scopo di una specifica è rimuovere l'ambiguità e creare un DoD, che è esattamente ciò che una sessione di domande e risposte potrebbe fornire. Se c'è un'opposizione a una specifica, non chiamarla una specifica.

Non credere a nessuno quando ti diranno che sarà facile . A volte è davvero così semplice come sembra, e potrei crederci se (e solo se ) conosco i proprietari dei prodotti abbastanza bene da confidare pienamente che i requisiti siano davvero semplici come dicono che sono, e le specifiche che sono stato fornito sono autoesplicativi (in caso contrario, pianifico una sessione di domande e risposte e la documento). Sono stato in troppe situazioni in cui facile dal punto di vista delle operazioni è incredibilmente difficiledal punto di vista dello sviluppo, o pensi di aver completamente fatto e senti le parole della disperazione ("Oh, a proposito, ci siamo dimenticati di ..."). Esempio ... "Tutto quello che devi fare è leggere questi file PDF da un repository di documenti" che, durante i test di accettazione si trasforma in "Oh, abbiamo dimenticato che alcuni di questi sono stati letti lateralmente in modo completamente incoerente, e alcuni hanno la dimensione della pagina sbagliata definita e alcuni hanno bisogno di queste tre pagine aggiunte, e abbiamo bisogno che tutte mostrino la stessa cosa. È davvero facile da risolvere, giusto? ".

Il punto è che potrebbe essere davvero facile e un incontro veloce potrebbe confermarlo, permettendoti di documentare tutti i presupposti e ottenere la conferma che sono accurati e corretti. Ti consiglio di alzarti in piedi per rimuovere gli impedimenti che devi scrivere nel codice di lavoro che soddisfi le loro aspettative, perché indipendentemente dal fatto che passi le dita dei piedi, qualcuno sarà probabilmente infelice alla fine comunque. Se sei persistente nel ricevere risposte alle domande e irritare qualcuno, se ne dimenticheranno quando consegnerai un ottimo prodotto in tempo che soddisfi i requisiti. Se non si ottengono chiarimenti e non si consegna, nessuno si ricorderà che ti hanno detto di non disturbarli.


3

Senza una specifica, hai un lavoro di squadra. Diventa agile.

Siediti con l'OP e ritaglia una / e piccola / e piccola / e storia / e. "Forniremo solo questa schermata, con solo questo pulsante che diventa 'bing!'". Accontentarsi di alcuni AC. Trasmetti la storia. Dimostrare la storia. Si scopre che i pulsanti dovrebbero essere rossi. Solleva un bug o una nuova storia. Consegnare i pulsanti che vanno bong e bang. E così via.

Specificare e distribuire in modo collaborativo piccole sezioni verticali che sono spesso dimostrate.

Se il cliente non lavora con te in questo modo, cerca una via d'uscita.


-1

Ho trascorso diversi lavori facendo progetti proprio come hai delineato. Finché l'OP sa quali decisioni progettuali stai prendendo e perché le devi prendere, dovresti andare bene. Se, d'altra parte, non comprendono le decisioni di progettazione, è necessario premerle per almeno un documento scritto di prova di accettazione dell'utente.


-2

Hai bisogno di una specifica dettagliata e verificabile prima di poter iniziare a scrivere il codice. Questo è un dato di fatto e non c'è modo di aggirarlo.

Se nessun altro è disposto a scrivere quella specifica, gli sviluppatori devono scriverla. Quindi ottieni una specifica incompleta. Lo trasformi in una specifica completa (che significa "questo è quello che ho intenzione di implementare a meno che qualcun altro non mi dica di non"). Consegnate tale specifica agli stakeholder e date loro la possibilità di modificare la specifica. Solo un'opportunità per modificare le specifiche, non rovinarle per esempio dicendo "Non mi piace in questo modo". A quel punto, è la tua specifica, oppure possono fornire una specifica diversa, ma non rimuovere la specifica.

Potrebbe essere una buona idea ottenere una rapida recensione dai tuoi colleghi che potrebbero migliorare le specifiche. Ma comunque, hai una specifica, scrivi il codice di conseguenza, i tester testano di conseguenza. E hai fatto il tuo lavoro: avevi una specifica e l'hai implementata. Se la specifica non è ciò che il cliente desidera, è direttamente responsabilità del proprietario del prodotto o del cliente che non potrebbe essere disturbato a scrivere una buona specifica.


6
"Hai bisogno di una specifica dettagliata e verificabile prima di poter iniziare a scrivere codice. Questo è un dato di fatto, e non c'è modo di aggirarlo." I miei colleghi e io l'abbiamo fatto su molti progetti e abbiamo avuto molti successi e pochissimi fallimenti. La tua richiesta non è assoluta.
whatsisname

1
@whatsisname concordato. Anch'io ho scritto codice in questo modo. Questo accade quando l'attività ha un aspetto esplorativo. Ora ci sono degli svantaggi nella codifica senza una specifica, ma a volte sono più accettabili del dire che non è possibile raggiungere un obiettivo.
Cort Ammon,

1
@whatsisname, il fraseggio potrebbe essere migliorato, ma la verità di base è che non puoi soddisfare una richiesta senza capire di cosa si tratta. Se dico semplicemente "Scrivimi un programma in Java", è impossibile per te scrivere quel programma. Puoi inventare la tua idea di cosa dovrebbe fare il programma - in altre parole, inventare il tuo obiettivo e poi raggiungerlo - ma è una pura impossibilità di raggiungere un obiettivo che non è mai stato dichiarato da nessuno, incluso te. Questo vale per qualsiasi richiesta, grande o piccola; i bisogni e i desideri devono essere compresi prima che tu possa fare, produrre e / o presentarli.
Wildcard l'

Detto questo ... il livello di dettaglio che una richiesta effettivamente richiede per essere compresa e soddisfatta può essere drasticamente sopravvalutato. Può anche essere sotto stimato. L'unica soluzione a questo è la comunicazione.
Wildcard l'

@Wildcard: sì, penso che il fraseggio potrebbe essere molto approvato. Quello che stai cercando di dire è reminiscenza del paradosso di Zenone ma meno convincente.
whatsisname
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.