Agile User Story per Deep Thought Machine

2

Se hai visto la guida di Hitchiker sulla Galassia, sai che il Pensiero Profondo (nella foto sotto) è una macchina costruita per calcolare il significato della vita:

ImmaginiamodiesserestatiincaricatidicrearequestamacchinautilizzandoAgileScrumediutilizzareUserStory.

Sembrachecisiasolounastoria,cheè:"Come utente, voglio conoscere il significato della vita, in modo che io sappia perché esisto"

La macchina è impercettibilmente complessa e impiegherà un molto tempo per essere costruita (più di quella che potrebbe contenere uno Sprint), quindi vogliamo dividere la nostra User story in User Story più piccole che si adattano nei nostri Sprint.

In vero Agile, dividiamo la User Story in User Story più piccole che creerebbero una sezione verticale attraverso il sistema Deep Thought. Tuttavia, in questo caso sembra che l'utente Story non possa essere scomposto in qualcosa di più piccolo in quanto è già la più piccola (e unica) cosa che l'utente vuole dal sistema, nel qual caso una slice verticale è l'intero sistema. Non possiamo fornire nulla di utile all'utente finché l'intero sistema di back-end non è completo. Ok, potremmo costruire la shell e consegnarla, ma da allora fino a quando gli interni non sono completi, l'utente non vedrebbe alcuna differenza.

Potremmo tuttavia suddividere la User story in Storie utente tecniche che descrivono le funzionalità di back-end da creare per supportare la nostra User Story, ma crea porzioni orizzontali nel sistema ed è disapprovato da veri Agilisti.

La ragione per cui la sto chiedendo è perché ho il compito di creare un sistema che possa essere descritto come sopra: un grande sistema di back-end con un singolo punto di ingresso che richiederà molto tempo per implementare prima di qualsiasi risposta (diversa da uno stub) può essere fatto a quel punto di ingresso.

Quindi, come possiamo scomporre "Come utente, voglio conoscere il significato della vita, in modo che io sappia perché esisto" negli elementi del backlog?

    
posta parrowdice 26.07.2016 - 18:13
fonte

2 risposte

2

Poiché non esiste un "vero agilista", creerò la mia definizione.

Un "vero agilista" sa che una storia più ampia è composta da storie più piccole. Pratiche agili ci insegnano a mettere in relazione queste storie con gli utenti e ad abbattere queste storie in pezzi sempre più piccoli finché non ci ritroviamo con singoli pezzi che possono essere completati entro i limiti di uno sprint.

Non importa se le storie sono user story, storie tecniche, storie front-end, storie back-end, sezioni verticali, fette orizzontali, ecc. Il punto è di rompere un grande lavoro in una serie di lavori più piccoli, dare la priorità a quei lavori in base alle esigenze dell'utente il più possibile, quindi lavorare su quei lavori e ottenere nel contempo un feedback costante.

Le storie dovrebbero essere associate agli utenti. Se stai costruendo una scatola nera, il cliente non è realmente l'utente. Il vero utente per le tue storie di utenti è il team che consegna la scatola.

Il cliente ha bisogno di un'interfaccia utente in cui presentare la domanda e ottenere la risposta. Lo sviluppatore dell'interfaccia utente ha bisogno di un'API in cui può inviare la domanda e recuperare la risposta. Lo sviluppatore dell'API ha bisogno di un back-end con cui parlare. Lo sviluppatore back-end ha bisogno di un database per memorizzare le conoscenze. I tester hanno bisogno di un'API in modo che possano testare il software. E così via. Le tue storie devono soddisfare i bisogni di tutti quegli utenti.

    
risposta data 26.07.2016 - 19:16
fonte
2

Questa cosa generalizzante e astratta ti distrae. Agile ti insegnerà molto rapidamente a diventare pragmatico. C'è ancora molto da imparare affrontando problemi in piccole parti altamente specifici. Una volta che fai a pezzi ogni parte, la ripetizione di questo processo ti aiuterà a imparare il processo e a costruire la conoscenza del dominio allo stesso tempo, avanzando così verso frazioni sempre più grandi del tutto mentre accumuli sempre più di questi piccoli pezzi. / p>

Potresti aver descritto il tuo "grande sistema di back-end con un singolo punto di ingresso" molto più esattamente senza fare un'analogia.

Penso che leggendo nel tuo racconto "fetta verticale", stai cercando di creare qualcosa come un'epica MVP per cominciare. Hai il mio applauso per questa intenzione. È molto caratteristico di una startup snella e qualcosa che ho fatto anche in passato.

Lo scopo di un MVP è l'apprendimento: testare le assunzioni più rischiose ("de-risk") e convalidare quegli elementi chiave. Quindi il prossimo passo è rompere questa grande idea nelle ipotesi. Dato che questo è così vago e ipotetico, farò delle ipotesi per dimostrare questo processo di "abbattimento". Eccoci:

  • Il valore parte di Come utente, voglio conoscere il significato della vita, in modo che io sappia perché esisto è "in modo che io sappia perché io esistere".
  • "in modo che io sappia perché esisto" risponde alla domanda filosofica ampia e molto "radicale" "Perché esisto?"
  • Se "Deep Thought" può rispondere alla domanda radice "Perché esisto?", è logico supporre che possa rispondere a molte più domande derivate e specifiche, come ad esempio "Che cos'è 1 + 1?"
  • Possiamo definire una porzione verticale come "Come utente, voglio calcolare l'aritmetica di base, così posso convalidare la mia comprensione aritmetica"? (o qualcosa di simile senza senso)
  • Forse non è una sezione verticale completa di tutti gli interni complessi per il calcolo della radice, ma testerà il sistema di input della query, il sistema di consegna risultato / output e alcune infrastrutture arbitrarie per modellare l'acquisizione di una query / richiesta e parte della pipeline di elaborazione (forse)
  • Diciamo che la nostra epica è Come utente, voglio calcolare l'aritmetica di base, così posso convalidare la mia comprensione aritmetica e la nostra prima storia è Come utente, voglio valutare 1 + 1, così posso verificare l'aritmetica di base . Boom! ora hai qualcosa di concreto ed esplicito puoi anche scrivere un test end-to-end per (forse)

Potresti ancora voler infrangere questa storia in flussi di utenti attorno all'input, all'output, ecc. mentre scopri di più. Ma questo processo di scoperta è facilitato dalla discussione che ti piace (questi punti elenco). Mentre ti costringi a fare brainstorming e tagliare le cose, scopri di più sul dominio e i dettagli si materializzano. Le cose diventano concrete ed esplicite, o almeno le costringi a farlo.

A proposito, anche questo è sbagliato: "Non possiamo fornire nulla di utile all'utente fino a quando l'intero sistema di back-end non sarà completo".

Proprio come un'azienda può costruire una facciata di un sistema automatizzato usando servizio di portineria , anche tu puoi fare lo stesso e fornire valore . Se la tua storia "1 + 1" si verifica e hai una sorta di test automatico che asserisce il risultato "2", puoi implementarlo usando il codice statico per superare il test giusto? ( Think TDD .) Non ha nemmeno bisogno di utilizzare inizialmente un operatore binario.

È possibile distribuirlo totalmente alla produzione e mostrare all'utente il modo in cui il prodotto (Deep Thought) può ragionare e produrre un risultato da una query molto specifica. Non devi dire che è "hard coded". Stai provando a testare le ipotesi in maniera agile e a catturare il feedback in un ciclo stretto.

Questo è ciò che sono agili e snelli: catturare l'apprendimento il più velocemente possibile. Ciò è reso possibile da una dimensione di batch il più piccola possibile. Il risultato di questo processo è il minimo spreco possibile.

    
risposta data 27.07.2016 - 17:22
fonte

Leggi altre domande sui tag