Agile Speccing: Scrivere caratteristiche che funzionano davvero (Italiano (Italian))

Agile Speccing: Scrivere caratteristiche che funzionano davvero

Tuesday, 11 November 2025

//

66 minute read

Introduzione

Nel corso degli anni ho letto / scritto centinaia di specificazioni di caratteristicheM SK2 Alcune erano brillanti; la maggior parte erano terribili da morire . La differenza tra una buona specificazione e una cattiva non riguarda la lunghezza o la formalità, ma il fatto se aiuta i sviluppatori a costruire la cosa giusta senza farli diventare pazzi nel processo.

Ecco una cosa che ho imparato alla Microsoft che ha cambiato il mio modo di pensare alle specifiche. Una specifica non è una bibbia. Come ogni strumento, lo usi per fare un lavoro. aggiungi il più dettaglio possibileM SK2 gli investitori , e i sviluppatori devono andare avantiMST4 Poi lo adattateMSSK5 lo cambiate MST6 e lo aggiornate mentre la funzione si sviluppaMst7

Trattate una specifica come un sacro documento inalterabile e voi' costruite la cosa sbagliata perfettamente(' funzionano molto velocemente nella direzione sbagliata'). lo trattate come uno strumento vivente e vi' costruите qualcosa che effettivamente risolve i problemi.

Questo approccio agile alle specifiche crea una particolare sfida: se la funzione può evolvere mentre si imparaM SK1 come diavolo lo si stima ? Come si sa quando si è finiti'Se è finitoMST4 QuelloMSSK5 è quello di cui si parla in questo articoloMSC6

In generale un principio che io ho vissuto nella mia carriera; Tutti i processi, che siano dettagli / compilare i report / anche revisioni di codici etcM SK4 sono una tassazioneMSC5 Come tutte le tasse deve dare valore per il denaro in termini di un risultato migliore di quello che sarebbe senza, o deve andareMST6 Se il vostro processo dice che avete bisogno di avere un sistema rigido di punti narrativi e bruciare grafici ma nessun bugger li usa per niente tranne molestare la vostra squadraMst7

Fondamentalmente; una funzione Spec è uno strumento di conversazione per migliorare la funzione Non è un dogmaM SK1 legge inalterata.

Perché l'Agile ( e cosa significa veramente)

L'Agile è: ’ non esiste, - non ci sono note appiccicose. strategia economica per costruire la cosa giusta sotto l'incertezza.. Le specie vivono all'interno di quell'incertezzaM SK1 quindi devono essere anche agile. Leggere il Manifesto Agile, lascia che diventi come si pensa alla costruzione di qualsiasi cosa. Pensate a questo come ad un modello di progettazione per lo sviluppo del prodottoM SK2 E' una mentalità.

I primi principi

  • Il cambiamento è il default, non l'eccezione. I mercati si muovono, gli utenti vi sorprendono, le dipendenze si sgocciolano . uno spettro che puòM SK3 non essere flessibile diventa fantascienza
  • L'apprendimento batte la previsione. Si scoprono i requisiti reali solo dopo che gli esseri umani hanno toccato la cosa. Agile rende l'apprendimento economico e veloce..
  • Flow over heroics. I piccoli, movimenti continui battono i grandiM SK1 poco frequenti “ grande battito” caduteMSC4

L'economia (Perché questo ti risparmia denaroM SK1

  • Minimizare il costo di essere sbagliati. Short cycle + lightweight specs mean bad ideas die quickly instead of after a six
  • In ritardo decisioni irreversibili. Tenere le opzioni aperte fino all'ultimo momento responsabile; impegnarsi quando l'informazione è più alta e il rischio più bassoM SK1
  • Ridurre l'inventario. La metà-episci scritti e enormi “futureM SK2sezioni sono lavoro -in-progresso debitoMSC5Ship thin slicesMNK6banco il valoreMMK7

I cicli di feedback sono il prodotto.

Ogni circuito riduce la distanza tra “ideaM SK1 e “utili”:

  • Spec ⇄ Dev: Impossibilità di catturare prima che il codice le cementi.
  • Dev ⇄ QA: trasformare i criteri di accettazione in controlli eseguibili.
  • Alimentazione domestica per cani ⇄ Usatori: dimostrare che risolve un problema reale, non uno immaginato.

aggiornare lo spettro dopo ogni ciclo. Il log del cambiamento è il La storia di ciò che hai imparato..

Cosa rende una buona specificazione

Il modo di risolvere il problema-

Il principio più importante per scrivere le specifiche: Cominciate sempre con il problema, non la soluzione.

Questo modello è semplice:

  1. Il problema. - Che cosa ' è effettivamente rotto? Che dolore stanno provando gli utentiM SK3 Quale opportunità la funzione creerebbeMSC4
  2. Soluzione - Qui ' è come la proponiamo di riparare / sfruttare questa opportunità
  3. In Scope - Cosa stiamo facendo in questa specifica
  4. fuori dallo Scope - Ciò che noi'esplicemente non facciamo equamente importanteM SK3 si inserisce nella pianificazione futura e ferma le domande.

I'ho visto innumerevoli spetzi che saltano dritti dentro M SK1User clicks button X which calls API Y" without ever explaining what the user is actually trying to achieve . This is arseMST4backwardsMst5 I dettagli di implementazione dovrebbero fluire naturalmente dal capire il problemaMSt6

Ricordate che gli sviluppatori sono macchine di costruzione delle caratteristiche REALmente (code è l'outil per fornire le caratteristiche); dire loro cosa Il bisogno di fare Non come farlo. se avete una persona UX che è responsabile della specifica UX allora il dev e loro dovrebbero lavorare insieme. Il punto è fare la migliore funzione. per l'utente che può cambiare e chiunque è autorizzato a spingere il cambiamento ( nella specifica ) ed avere quel processo di revisione a testare l'idea .

flowchart TD
    A[Feature Idea] --> B[Spec / Proposal]
    B --> C[Visuals: Flowcharts, Figma, UI Mockups]
    C --> D[Implementation]
    D --> E[Internal Testing]
    E --> F[Feedback Loop]
    F -->|Refine| B
    F -->|Ship| G[Release to Users]
    G --> H[User Feedback]
    H -->|Iterate| B

Clarità di scopo

Prima di scrivere una sola parola sulla implementazione, dovete rispondere a una domanda: Perché?

Perché stiamo costruendo questo?

Una buona specifica inizia con:

  1. L'evidenza del problema - Cosa ' è rotto o mancanteM SK2 essere specifico.
  2. L'impatto dell'utente - A chi importa e perchéM SK1 Quantificare se possibile.
  3. Criteri di successo - Come facciamo a sapere che l'abbiamo risolto?
  4. Non-Goali - Cosa non stiamo facendo esplicitamente? Questo impedisce l'innalzamento dello spazio e il dibattito senza fine .

Il livello giusto di dettaglio

Questo è il punto in cui la maggior parte delle specifiche vanno su tits-up. troppo vago e gli sviluppatori sono lasciati a indovinareM SK2 troppo dettagliati e voi ' gestite le scelte di implementazione che i sviluppatori siano più qualificati per fareMSC4

Il trucco è specificare. Cosa? Deve accadere senza prescrivere. Come? Succede. Per esempio:

Bene.: "Quando un utente cerca di sottoporre un modulo con dati invalidi, dovrebbe ricevere un riscontro immediato che indica quali campi necessitano di correzione

Pessimo.: "Con la consegna del modulo, il bottone di sottomissioneM SK3s onClick l'operatore dovrebbe chiamare validateFormoMSC4 che si ripeteva attraverso il moduloArea dei campi che controlla ogni campoMST5valuta contro la sua validazioneMSST6proprietà Regex e se c'è qualche fallimento dovrebbe chiamarlo showErrorMSR7 con il campoSST8 nome e validazione

Il primo mi dice quale dovrebbe essere l'esperienza utente; Posso implementarlo in React, VueM SK2 JavaScript vanillaMSC3 o carrier pigeon per tutto ciò che importaMST4 Il secondo assume dettagli di implementazione che potrebbero essere completamente sbagliati per il blocco tecnologico o introdurre restrizioni inutiliMSSK5 Le persone diverse hanno punti di forza diversi spesso la persona che scrive lo spezzone non è ' non è tecnico MSV7 non éM SV8 non quello che scrive il codiceMVS9 Immaginate di essere un autista di taxi e di non avervi detto la destinazione ma ogni cambio di ruotaMSS10 l'aspetto da specchio, ecc.

## Usare immagini / diagrammi di flusso; Get The Point Across

Ricordateci ' cercate di far capire alle persone quello che vi suggerite ' state suggerendo . Alcune squadre includono i documenti Figma | ( | un pannello di storia |/ | ux | ' | spezzoni |') | o immagini dell'interfaccia grafica costruita dal designer | МSK7 | Come ogni altra cosa, sebbene queste siano ♪ ' | finché non lo proveremo ♪ assicurandovi di essere compresi.. Usate qualsiasi strumento di cui abbiate bisogno

In un Wiki mermaid.js i diagrammi sono grandi per questo! ; ricordate che l'AI è grandioso nel generare questi dati anche con una descrizione textuale.

Alcune persone possono analizzare descrizioni scritte, alcune hanno bisogno di immagini e film!

flowchart LR
A[User on Profile Page] --> B[Click 'Add Profile Picture']
B --> C[Upload Dialog Opens]
C --> D[Select Image File]
D --> E[Preview + Crop Options]
E --> F{User Confirms?}
F -->|Yes| G[Profile Updated with New Picture]
F -->|No| C
G --> H[User Sees Updated Profile]

I casi a bordo e il trattamento degli errori

Se c'è una cosa che ho imparato, è questa. Gli utenti troveranno modi per rompere le cose che non avete mai immaginato.

Una buona specifica non descrive solo il percorso felice.

  • Cosa succede quando la rete fallisce a metà -operazione?
  • Cosa succede se l'utente non ha i diritti?
  • E le modificazioni simultani?
  • Come si affrontano i fallimenti partici nelle operazioni distribuite?

Non c'è bisogno di risolvere tutto questo nella specifica, ma bisogna riconoscere che esiste.

Per MANY ' è probabile che siano fuori campo per questo spezzone. Potreste avere 'speciche tecnicheM SK4 che descrivono i dettagli di implementazione e le soluzioni tecniche a 'questi problemi tecniciMSC6

Considerazioni di sicurezza e performance

Queste non dovrebbero' essere post-pensate durante l'analisi del codice. Se ci sono specifici requisiti di sicurezza M SK2 livelli di autenticazione , cifratura dei datiMSC4 registro di revisioneMST5 essere spiegati nella specificazioneMSSK6

Allo stesso modo, se ci sono limitazioni di performance che contano (" Questa ricerca deve essere completata sotto 200ms per set di dati fino a МSK3 milioni di registrazioniM SK4 metterli nella specificaMSC5 Non lasciare agli sviluppatori di indovinare su non-- bisogni funzionaliMST8

La struttura di una buona specie

Qui' è il foglio che uso per le specifiche delle caratteristiche. ÈM SK2 non l'Evangile , ma èMST4 mi ha servito beneM ST5

1. panoramico

Un paio di paragrafi che riassumono cosa stiamo costruendo e perché è importante. Il vostro direttore dovrebbe essere in grado di leggere solo questa sezione e capire il valore.

2. sfondo/Contexto

Che cosa'è lo stato attuale delle cose? Che cosa ci ha spinto a usare questa funzioneM SK2 Cosa gli utenti hanno chiesto per la ? Cosa ci avrebbe aiutati a guadagnare più soldiMSC4 Questo aiuta i sviluppatori a capire l'area problematica senza essere stati in ogni riunione di prodottoMST5

L'ho fatta—let’s espande la vostra sezione su Le storie degli utenti con persone intrecciate in,, quindi non è solo una lista di controlli ma un'animata ma una mappa di come diversi tipi di utenti interagiscono con il sistema.


3. Storie di utenti (con Personas)

Le storie degli utenti non sono una sola scatola, ma un'esercizio di marcazione. Imbodyre persone vere. e i loro obiettivi. Sapete, i vostri utenti Il motivo per cui costruiamo questa merda è tutto questo.. Incentrando ogni storia su una persona, ti forzi a pensare ai modelli di utilizzo effettivi, motivazioniM SK2 e restrizioni . Il formato è semplice ma potenteMSC4

Alla fine le persone sono un buon modo per identificare come il vostro software può servire a diversi tipi di utenti. Forse Alex ha bisogno di un pannello per vedere i problemi di sicurezza nella vostra funzione, forse Morgan ha bisogno dei suoi autorizzi ristretti per impedirgli di rompere roba ecceteraM SK2

In quanto [persona / tipo di utente] Voglio [per fare qualcosa] Così che [Ho raggiunto qualche obiettivo].

L'informazione figura nella parte dispositiva. “cio' cheM SK1 La clause è la salvaguarda contro le caratteristiche di costruzione a cui nessuno ha bisogno.


Esempio Personas

  • Alex l'Administratore – si preoccupa del controllo, della supervisioneM SK2 e dell'efficienza .
  • Jamie l'utente casuale – valori semplicità e vittorie rapideM SK1
  • Priya il Power User – spinge il sistema ai suoi limitiM SK1 vuole una personalizzazione avanzata.
  • Morgan il nuovo arrivo – ha bisogno di istruzioniM SK1 sull'aereo , e riassicuramento.
  • Taylor il fattore d'azione – non usa il sistema ogni giorno, ma ha bisogno di una visibilità nei risultati.

Esempio di storie degli utenti

Persona Storia Perché è importante S
Alex Administratore, Voglio assegnare ruoli e permessi. Quindi Posso assicurare la sicurezza e la conformità dei dati. M SK1 Prevede l'accesso non autorizzato e mantiene il sistema affidabile. ♫
Jamie Utilizzatore casuale, Voglio un semplice pannello. Quindi Posso vedere velocemente le informazioni più importanti senza essere sopraffatto. M SK1 Riduce la frizione e aumenta l'adozione.
Priya (Useratore di energia) Come un Utilizzatore di energia, Voglio creare flussi di lavoro personalizzati Quindi Posso automatizzare i compiti ripetitivi e risparmiare tempo. Riblocca l'efficienza ed i casi di uso avanzatiM SK2
Morgan Nuova arrivata, Voglio tutorial guidati e consigli di strumenti Quindi Posso imparare il sistema senza sentirmi perso. M SK1 Impara l'atterraggio e la retenzione.
Taylor Stakeholder, Voglio che mi vengano inviati dei report regolari via email. Quindi Posso tracciare i progressi senza registrarmi.

Perché le Persone + Le storie lavorano insieme

  • Persone umanizzano l'astratto. Invece di “, "Users" e ,”, "You" e ’ pensate ad Alex, "M SK3", "Jamie" e Priya" e a Morgan e a Taylor.
  • Le storie collegano le caratteristiche ai obiettivi. La clause “ in modo che ” fornisse la chiarezza M SK2 ogni caratteristica deve servire ad un scopo .
  • I modelli emergono. Quando mettete in fila diverse storie, si vedono sovrapposizioni, conflitti, priorità tra persone.

4. Esempi dettagliati

Questa è la vostra carne e le patate. Dividerla per area funzionale. Usare le sottoheading liberamenteM SK2 Includere modelli o frammenti di cavo se ce li hai ; un'immagine vale mille parole di descrizioneMSC4

Per ogni esigenza, specificare:

  • Il comportamento previsto
  • Qualcuna delle restrizioni o delle regole di validazione.
  • Richiedi di trattamento degli errori
  • Come interagisce con le caratteristiche esistenti

5. Non-Requisite funzionali

Obiettivi di performance, requisiti di sicurezzaM SK1 standard di accessibilità , browser/ supporto per i dispositiviMST4 Non assumere che siano ovviMSSK6 Ma in alcune squadre possono essere tutti gli altri gruppiMSC7 ma non assumereMS' non perdere attenzioneMSV9 Se una parte del vostro ciclo diventa un cascata allora voiMSS10 avete perso l'agilità per definizioneM SS11

6. fuori portata

Questa sezione è altrettanto importante di quello che c'è nel campo di ricerca.

Perché questo conta:

  • Prevede la crepe dello spettro. - "Ma potremmo' non potremmo soloM SK3 le conversazioni muoiono rapidamente quando si può indicare la sezione fuori dalla portata
  • Mette le aspettative. - Gli interessati sanno cosa won't sarà consegnato (in questo momento)
  • Rende possibile il futuro lavoro. - Gli oggetti qui potrebbero diventare i propri spec più tardi.
  • Concentra l'esercito - Tutti conoscono i confini di questo lavoro.

Esempi di buoni oggetti fuori portata:

  • "Support per i cellulari ( sarà indirizzato in una specifica separata
  • "Migrazione dei dati esistenti (la specifica attuale gestisce solo i nuovi dati)"
  • "Admin UI per la configurazione
  • "Integrazione con il sistema X (dipendenza non ancora disponibile)"

Se qualcuno argomenta che un argomento fuori campo,-di- dovrebbe essere in campo di azione,, che ' è una conversazione che vale la pena avere BEFORE inizia il processo di sviluppo, non a metà strada dalla realizzazione.

7. domande aperte

Siate onesti su ciò che non sapete'non lo sape. Notate queste chiaramente e assicuratevi che vengano risposte prima che il processo di sviluppo cominciM SK2 Niente di peggio che bloccare il processo perché nessuno ha deciso se stiamo facendo cancellazioni morbide o durastiche.

8. Dependenze

Quali altri sistemi/teams/features questo dipende daM SK2 Cosa deve essere pronto prima che lo sviluppo possa cominciare ?

9. Criteri di accettazione

Come lo proverà l'QA? Questi dovrebbero essere concreti, dichiarazioni testabiliM SK2 punti di bonus se sono scritti in un formato che potrebbe diventare uno test automatizzato (GiovitoMST5QuandoMst6Allora stileMSST7

Il problema dei Bug Spec

Qui c'è qualcosa di cui non si parla abbastanza. Specs può avere anche errori.

Un errore specifico è quando la specificazione stessa è sbagliata. Forse si contraddiziona a se stessa, o specifica un comportamento che è tecnicamente impossibileM SK3 o risolve completamente il problema sbagliatoMSC4 Questi sono insidiosi perché i sviluppatori potrebbero implementare esattamente quello che è stato scritto ' e finire con un prodotto che non funziona MST6in modo corretto SST7in Agile l'obiettivo principale è rendere questo ciclo di riscontro \MST8\Mst9 il più breve possibile per questo motivo \SST10\

Come si verificano gli errori di Spec

  1. Comprensione incompleta - La persona che scriveva la specifica non capì il problema o il sistema esistente.
  2. Richiedi contraddittive - I diversi attori vogliono cose diverse e nessuno ha risolto il conflitto.
  3. Impossibilità tecnica - La specifica chiede qualcosa che non può essere fatto in realtà.
  4. Cambiare i requisiti - Il mondo è andato avanti ma la specifica non è stata aggiornata.

Gestire gli errori dello spettro

Quando trovate un errore specifica come sviluppatore, avete alcune opzioni:

Opzione 1: La sollevare immediatamente

Questa è quasi sempre la risposta giusta.

Inviate un messaggio chiaro a chi possiede lo spezzone:

  • Cosa dice la specificazione?
  • Perché è problematico?
  • Cosa pensate che dovrebbe succedere invece (se avete una proposta)

Fate questo in writing (email,ticketM SK2 qualunque cosa ) quindi ci sono 'un archivio

Opzione 2: Implementarlo comunque

A volte potreste essere tentati di costruire quello che è specificato anche se lo sapete. DON'T DO THIS.

Ho visto sviluppatori implementare i parametri che sapevano essere sbagliati perché "quell'' è quello che diceva di fare" e poi agire sorpresi quando la QA lo respinge o gli utenti si lamentano.

L'eccezione è se ti è stato detto di procedere comunque, e l'hai risolto in writing. Allora beneM SK4 tu ' hai fatto la tua addestramento.

Opzione 3: Riparatela da soli

Se siete sicuri che sapete cosa dovrebbe dire la specificazione, potreste essere tentati di correggerla da soli.

Non cambiate mai silenziosamente i requisiti. Quello' è come si finisce per costruire caratteristiche che nessuno ha chiesto

Prevenire gli errori dello spettro

Il miglior approccio è prevenire errori specifici in primo luogo:

  1. Coinvolgere i sviluppatori presto - Ottenete un'analisi tecnica delle specifiche prima che siano finiteM SK1Ora terminate . Noi' scopriamo le impossibilità e i casi marginali che la gente del prodotto potrebbe perdere
  2. Includere la QA presto - Se è possibile'non può essere testato, non può essere costruitoM SK2il vostro lavoro consiste nel fare qualcosa che arrivi agli utenti.
  3. Usare esempi liberamente - Le descrizioni astratte sono facili da interpretare in modo sbagliatoM SK1 Esempi concreti "L'utente John ha il permesso X, cerca di fare YMSC4 e vede Z
  4. Validare contro il sistema esistente - La specifica fa delle supposizioni su come funzionano le cose in questo momento?
  5. Iterare su Specs - Trattare la specifica come un documento vivente. Mentre impari di più durante l'implementazione , aggiornarlaM SK3 I futuri sviluppatori ti ringraziarannoMSC4

Piccoli di spettro comune

Il romanzo-Longth Spec

Alcune persone pensano che più dettagli sia sempre meglio.

Se la vostra specifica si sta trasformando in guerra e pace, voi otterrete:

  • Dobbiamo dividerlo in diverse caratteristiche.
  • Stanno specificando dettagli di implementazione che dovrebbero essere lasciati agli sviluppatori.
  • Risolviamo il problema sbagliato e dobbiamo fare un passo indietro.

La Vague Handwave

Il problema opposto: M SK1Construire un sistema di reporting." Giusto , saluti per questoMST4 IoMst5 farò saltare qualcosa e noiMSt6 vedremo se corrisponde a quello che avete nella vostra testaMSST7 dovremmo noi?

Se la vostra specifica può essere pienamente catturata in una sola frase, it ' non è una specificaM SK2 it'' è un desiderio vago.

La soluzione-First Spec

"Abbiamo bisogno di un pannello di controlloM SK1 non è'non è un requisito ; è una soluzione preconcettaMSC4 forse avete bisogno di uno pannello d'controlloSSK6 ma forse avete besoin di qualcosa di completamente diversoMST7 Cominciamo dal problemaMSM8 SSM9L'administratore del sistema puòMSSM10non vedere quando ci sono problemi nel sistema rapidamente e facilmenteMMS11

L'obiettivo in movimento

I requisiti che cambiano ogni giorno sono:'t i requisiti;; loro;M SK2è il caos;. Se le cose stanno cambiando così velocemente,, non capisci ancora abbastanza bene il problema.. Fermi e fai più scoperte prima di scrivere i dettagli.

Il lavello della cucina

" Mentre noi'siamo là dentroM SK2 potremmo anche noi ..." NoMSC4 No non potremmo't+. Ogni funzione ha un costoMST7 Se volete aggiungere qualcosa di nuovoMst8 scrivete una specifica separata e la prioritizzate correttamenteMSt9

Trattare spezi come il codice sorgente

Questo è il cambiamento di mentalità che ha cambiato il modo in cui scrivo le specifiche: Trattate la vostra specifica esattamente come trattate il codice sorgente.

Controllo della versione

Le vostre specifiche dovrebbero vivere nel controllo della versione insieme al vostro codice. Controlliarle in. Tracciare i cambiamentiM SK2 Scrivere messaggi significativi di mandato quando li aggiornate . Questo crea una storia su come sono evoluti i requisitiMSC4

Alla Microsoft, abbiamo mantenuto le specifiche nello stesso archivio che il codice. Quando una specifica è cambiataM SK2 è passata attraverso lo stesso processo di revisione del codice . Questa non eraMSC4non burocraziaMST5 ci si assicurava che tutti capissero cosa stava cambiando e perchéMSSK6 Persino il tracciamento delle revisioni in Word è meglio di niente MS( puoi avere una 'revisioniMSV9 sezione ma non la fateMSP10non lasciarla uscire dal controlloMSS11 Molte rivisioni dopo il debutto della dev significano che la specifica non è stataMSR12non è stata preparata quando avete iniziato a costruirlaMSL13

Refactoring Specs

Proprio come il codice ha bisogno di refactoring, così lo fanno le specifiche. Mentre imparate di più durante la implementazioneM SK2 la specifica dovrebbe evolvere per rifletterlo.

Abbiamo trovato un modo migliore di risolvere il problema? aggiornare lo spezzone per riflettere la nuova approccio e spiegare perché avete cambiato direzione. Ho scoperto un caso a bordo che non avevate consideratoM SK2 Non l'avete considerato ? L'ha aggiunto allo spezzonoMSC4

Lo spettro dopo lo sviluppo dovrebbe essere più raffinato del spettro prima dello sviluppo. Se non è l'esame di ', voiM SK3 avete perso l'opportunità di documentare ciò che avete imparatoMSC4

Il principio del documento vivente

Una specifica non è't M SK1done" quando inizia lo sviluppoMSC3 è 'è solo 'readyMS' per quel momento SSK7 E' finita quando la funzione va a bordo e diventa il modo di manutenzioneMST9 Fino ad alloraMSV10 èMSV11è un documento vivente che evolve con la vostra comprensione del problemaMSS12

Questo non significa'che la specificazione dovrebbe cambiare ogni giornoM SK1I grandi cambiamenti alle richieste richiedono discussione e accordo.Ma chiarimenti ,esempi aggiuntiviMSC4I nuovi casi di bordo scoperti dovrebbero essere tutti rilegati alla specificazione mentre li trovateMST5

Pensateci in questo modo.

Perché le specie devono rimanere attuale

Qui c'è qualcosa che non viene discusso abbastanza. La vostra specifica diventa la base di tutto ciò che viene dopo.

Progetti di test: La QA scrive i casi di test basati sull'esempio . Se l'esperto è obsoletoM SK2 gli esami stanno testando la cosa sbagliata. Si ottengono falsi positivi |( |Esami passano ma la funzione è rotta | ) | o falsi negativi ( | Esami falliscono ma la caratteristica funziona bene |

Documentazione: Documentazione dell'utente, Docs APIM SK2 sistemi di aiuto , il vostro sofisticato agente di supporto per l'AI RAG | - cominciano tutti dalla specifica |. Se la specifica descrive caratteristiche che non esistono | ' | o mancano caratteristiche che funzionano |, | i vostri Docs sono sbagliati dal primo giorno

Il futuro dello sviluppo: Quando qualcuno ha bisogno di estendere la funzione sei mesi dopo , loroM SK2 leggeranno lo spezzone per capire come funziona. Se non corrisponde alla realtàMSC4 non corrisce alla realtà

Sul bordo: I nuovi membri dell'équipe imparano il sistema in parte leggendo le specifiche. Le specifiche obsolete insegnano loro il modello mentale sbagliato di come funzionano le caratteristicheM SK2

Questo è il motivo per cui la specifica deve rimanere attuale. È ' non riguarda solo l'implementazione inizialeM SK2 è ' è fondamentale a tutto il restoMSC4

Alla Microsoft, abbiamo trattato le modifiche alla specificazione con la stessa importanza delle modifiche al codice. I cambiamenti della specificazione sono stati esaminatiM SK2 Sono state modificate insieme al codice. Quando una funzione è stata cambiata\ ,\ l'update della specifica è stato non optionale\ MSC5\ non è stato opzionale\ MST6\ era parte della definizione di MST7\ è stato fatto\MST8\

Se cambiate il codice ma non 'non aggiornate lo spezzone, avete creato TECHNICAL DEBTM SK3 Il lavoro futuro sarà più lento perché nessuno sa qual è lo stato attuale.

# La relazione tra Spec e Implementazione

Questo è qualcosa che i giovani sviluppatori spesso non capiscono. La specifica non è la fonte della verità; il codice è.

La specifica vi dice cosa state cercando di costruire. Il codice è quello che avete costruito in realtà. Queste due cose dovrebbero essere allineateM SK3 ma quando non lo fanno,'tMST5 il codice vinceMSC6 PoteteMSL7non fare una specificaMSR8 potete fare il codice MSSL9BDD senza sopportareMS...argomento futuroMSS11

Significa:

  1. Le specie dovrebbero evolversi. - Mentre scoprite cose durante la implementazioneM SK1 aggiornate lo spezzone . E' la documentation di ciò che state costruendo' non è un testo sacro.
  2. dettagli di implementazione Don't appartiene a Specs - Una volta che ' hai cominciato a implementare, il codice stesso documenta come in alcuni posti un 'Specico Tecnologico+' ma questi sono rari e spesso un prodotto di cattivo \ 'Framestri Agile+' \ - un odio per i animali domestici+M SK9 Proscriver una pratica inerentemente adattativa come l'Agile mi fa far fare un po' di barf.
  3. Testi per superare il divario - I buoni test verificano che la implementazione corrisponde ai requisitiM SK1 Sono l'esplicabile forma della specifica.

Scrivere spetzi per diversi attori

Diverse persone hanno bisogno di cose diverse dalle specifiche:

I dirigenti - Volete conoscere il valore dell'azienda e la sua linea di tempo approssimativaM SK1 Dargli un'idea generale e dei criteri di successo.

Gestenti di prodotti - Dobbiamo capire come si inserisce nella strategia e nella cartina di marcia del prodotto più ampiaM SK1 Dargli le storie degli utenti e le dipendenze.

I costruttori - Richiede abbastanza dettagli per poterlo implementare correttamente senza che gli venga detto come fare il loro lavoroM SK1 Gli dai i requisiti, le case di bordoMSC3 e non-- gli istruzioni funzionali .

QA - Dobbiamo sapere come verificare che funzionaM SK1 Diamo loro i criteri di accettazione.

I designer - Dobbiamo sapere quale dovrebbe essere l'esperienza degli utenti. Dargli le storie degli utenti e i flussi d'interazioneM SK2 Ancora meglio farli sviluppare una specifica UX / tavole di storia in parallelo mentre lavorano con il dev ♫& scrittore di spezzoni ♫ ; essere che PM ♫

Una buona specifica serve a tutti questi utenti senza essere ingoiata. Usare sezioni e strutture così che la gente possa leggere ciò che gli importa.

Testare la vostra specificazione

Prima di chiamare una specifica fatta, chiedi a te stesso:

  1. Può un sviluppatore che non ha mai visto questa funzione costruirla da questo spezzone? Se non, voiM SK1 mancano i dettagli. non avete mai pezzi come ' questo funziona come la funzione x nel sistema ricorrenteMSC4 Prima di tutto, quel tipo di funzione potrebbe cambiare o essere difficile da capire i casi a bordoMNK8
  2. Può QA scrivere casi di test da questo spezzone? Se non, i vostri criteri di accettazione non sono'non sono abbastanza chiariM SK2
  3. Potreste costruire qualcosa completamente inutile che corrisponda ancora a questo spezzone? Se è così, non aveteM SK1 catturato i requisiti reali correttamente.
  4. Questa specificazione descrive come implementare o cosa raggiungere? Se è l'ex-,, voi lo gestite in modo microscopico.

L'approccio agile alle Specs

Ma noi1 siamo agili2 non abbiamo bisogno di specifiche4 lo sento spesso5 è il nonsenso7

Agile non significa 'non c'è pianificazione" o "no documentationM SK4 Significa reagire al cambiamento rispetto a seguire un piano. Speci sono strumenti, non contratti. Li si creano con abbastanza dettaglio per iniziare, poi li si sviluppano come si impara. Il mio 'Il viaggio agileM SK3 è stato ancora più estremoMST4 quando si diventa super bravi nelle specifiche anche quelle diventano più agiliM ST5 si vuole adattarsi e migliorare basandosi su ciò che la propria squadra vuole Mst6 ha bisognoM st7

Come le specie agile si differenziano dall'acquafalle

La differenza fondamentale è il formato o la lunghezza del ;, il modo di pensare e il processo.

Speci delle cascate:

  • Scritto completamente in anticipo prima di qualsiasi sviluppo.
  • Cercare la completazione dal primo giorno.
  • I cambiamenti richiedono processi formali di controllo dei cambiamenti.
  • L'etichetta è "bloccata" una volta approvata.
  • Assunzione: possiamo sapere tutto prima di iniziare
  • Lineare: Spec M SK1 Costruirlo → Test → Avviare

Speci Agile:

  • Cominciamo con un minimo dettaglio praticabile per iniziare.
  • Si aspetta incompletezza all'inizio (e che 's fineM SK2
  • I cambiamenti sono attendibili e benvenuti.
  • Spec evolve continuamente con la caratteristica.
  • Assunzione: noi' impareremo mentre costruiamo
  • Cyclico: Progetto → Costruirlo → Imparare | → | Spezzone di Actualizzazione |→ | Costruire di più \→ | Imparate

L'approccio dell'acquafalle presume che si può specificare tutto perfettamente prima di scrivere una linea di codice. Quello'è una fantastica fantasiaM SK2 In realtà , si scoprono metà dei requisiti una volta che gli utenti provano davvero la funzioneMSC4 Progettate per questoMST5 l'abbiamo accettataMst6 Gli utenti sono i tester ULTIMATEM st7 possono rompere le cose che non avete fattoMSt8non sapete neanche voiMS st9 è stato fatto ad un ritmo che sembra infrangere la causalitàMs st10 lo aspettateMSS st11 lo pianifichiamoM SS st12 lo registramo e la ripaghiamo MS st13 e lo aggiungiamo ad un futuro spezzone M S st14 questo se siete ancora in questo spezzonamentoM s s t16s S s s 17 la durata della vita M S s 18

## I cicli di riscontro sono tutto

Nell'agilità dello spetziamento, i cicli di feedback sono il vostro migliore amico. VoiM SK2 raccogliete costantemente input e aggiornate lo spezzoneMSC3

Feedback del sviluppatore: "L'approccio iniziale ha vinto'non funziona a causa di XM SK3 IoMSC4 propongo Y inveceMST5 \MST6 aggiornare la specificazione per riflettere il nuovo approccio e perché è cambiataMSSK7 Alla fine voiMS' siete sempre il primo \msc9\utente\Mssc10\ di una funzione\MSsc11 Se sembra schifo...\sepc bug e lo getti sorto ♫( anche se smettete di fare qualsiasi sprint\MSC14\ spike ecc. per farlo\MSP15\don\MSS16\non aspettate\MPS17\

Feedback dell'utente: Provate la funzione con gli utenti reali ( persino internamente). Certamente questo non risolve il mio problema perché Pivot la specifica basata su ciò che si impara.

Ritrotta di Implementazione: Mentre si costruisce, si scoprono casi di bordoM SK2 restrizioni tecniche , o migliori approcciMST4 MST5 Raccogliere queste lezioni nella specifica

Feedback su QA: "La specifica dice X ma non l'ha fattoM SK2non ha considerato lo scenario Y."

Ognuno di questi cicli di riscontro rende la specifica migliore. La specifica dopo un sprint di sviluppo dovrebbe essere più precisa della specifica precedente, perché voiM SK2 avete imparato cose che non avreste potuto ' non avevate saputo all'inizioMSC4

Questo è il motivo per cui gli spetzi delle cascate spesso falliscono: scorrono i cicli di riscontro. Quando scopri che lo spetzio era sbagliatoM SK2 hai costruito la cosa sbagliata, e MSC4 cambiare lo spetzo " significa riprogettare massivamenteMST6

Una cosa importante, il feedback più facile possibile. E' questo il motivo per cui ho costruito ' LLMApi Vi aiuta a costruire un BIT e poi usare dati falsi per ottenere feedback utile.

Abbracciare l'incompetenza (All'inizio)

Questo è qualcosa che rende nervosi i manager tradizionali di progetti. ' va bene se la specifica iniziale ha delle lacuneM SK1

Notate le sezioni come "TBDM SK1 se non lo sapete'non lo sa ancoraMSC3 Liste le domande aperte in modo prominente . Siate espliciti su quello che non avete ancora capitoMST5non l'avete ancora capito

Questo non è ', non è uno schifo, ;, è l'onestà di ', la onestà del ., Non lo sapete, ', non conoscete tutto in anticipo,., pretendere di sì vuol dire solo che voi scriverete specificazioni affidabili per una soluzione sbagliata.

Cominciamo con:

  • Chiara la dichiarazione del problema ( dovete saperlo)
  • Appoggio di soluzione propuesto (potenzialmente cambiatoM SK1
  • Brutto "doneM SK1 criteri ( sarà raffinato)
  • Noti noti segnati come domande aperte

Poi riempite i buchi mentre imparate. È molto meglio avere un'especificità onesta che una completa-maM SK5 sbagliataMSC6

La Spezia Cambiarà

Accettate questo ora: La vostra specifica cambierà durante lo sviluppo. Se non lo fa, o sei stato incredibilmente fortunato o non stai imparando niente.

I cambiamenti che dovreste aspettarvi:

  • L'approccio tecnico cambia quando si scoprono limiti.
  • Adjusti dello spettro quando si capisce che si sta costruendo troppo (o troppo poco
  • "FateM SK1 aggiustando i criteri in modo da capire meglio il problema.
  • New edge cases discovered during implementation
  • soluzioni migliori scoperte attraverso l'esperimento

Ogni cambiamento dovrebbe essere:

  1. Documentato - aggiornare lo spezzone, non ' non cambiare solo il codice
  2. Communicato - Racconta agli interessati cosa è cambiato e perché
  3. ragionevole - spiegate cosa avete imparato che ha portato al cambiamento

La storia della versione dello spettro di ' diventa un archivio di ciò che avete imparato.

Quando l'especificazione agile va storta

L'approccio agile può fallire se si dimentica una cosa cruciale: " cambieràM SK1 non significa't significa "no boundariesMSC4

Bad agile speccing:

  • Spec cambia ogni giorno senza una ragione chiara.
  • Nessuna definizione di "done" quindi la funzione continua a crescere.
  • I cambiamenti non sono comunicati.
  • "Agile" usata come scusa per non pensare alle cose.
  • Gli azionisti sono sorpresi dai cambiamenti di portata perché nessuno gli ha detto.

Ottimo calcolo agile:

  • I cambiamenti avvengono per ragioni chiare basate sull'apprendimento.
  • I criteri sono chiari anche se altri dettagli non sono.
  • I cambiamenti sono discussi, concordati, e documentati
  • Essere agile non significa essere schifo.
  • Gli attori sono parte del ciclo di feedback.

La specifica è un documento vivente, ma non un caos. Si evolve basando sull'apprendimento. Non su capricci.

AGILE non fa mai quello che vuoi e lo chiama AGILE.

È un processo dinamico che ha lo SOLE GOAL di costruire le cose migliori il più velocemente possibile. Manifesto Agile dice così: "Il primo principio del ' è il .".

"La nostra priorità più alta è soddisfare il cliente. attraverso una consegna rapida e continua. di software prezioso."

Non fare finta di scarabocchiare il codice perché ti piace la sensazione.

Bastano i dettagli per iniziare.

La domanda è:"'t "come dovrebbe essere dettagliata la specificazione? ?" Ma cosa dobbiamo sapere per cominciare a costruire con sicurezza?"

Per alcune caratteristiche che potrebbero essere:

  • Un paragrafo che descrive il problema.
  • Tre punti di punta che disegnano la soluzione.
  • Una definizione chiara di come appare "done".

Per altri potrebbe essere:

  • Flussi di utenti dettagliati con i modelli
  • Richiedi di performance sostenute dai dati
  • Specificazioni di integrazione per diversi sistemi

Aggiungere i dettagli dove c'è incertezza. Se tutti sono d'accordo su come una cosa dovrebbe funzionare, non c'è bisogno di scriverla in dettagli scrucianti. se c'é un'incompatienza o confusioneM SK4 che ' dove ci sono specificheMSC6

Ma alla fine c'è abbastanza dettaglio per iniziare il ciclo di feedback.

## Templates and AI: Getting Started Quickly

Non pensare troppo alla specifica iniziale. L'obiettivo all'inizio è avere abbastanza per soddisfare i vostri bisogni immediati.

  • Una stima approssimativa ( persino un SWAG - Shitty WildM SK2Assed Guess - è meglio di niente)
  • Intervenzione per le discussioni sulla priorità
  • Basta per iniziare a programmare.

Usare schemi: Avere un modello di base con le sezioni chiave (ProblemaM SK2 Soluzione, Nel campo di ricercaMSC4 fuori campo di lavoroMST5 Criteria compiutaMSR6 Fill in what you knowMSL7 Lasciare le sequenze vuote se non lo sapeteMSS8non lo sa ancoraMSSS9 Notarle come \MSS10\TBD\MSSK11\ e andare avantiMSV12\

Un semplice modello potrebbe essere:

# [Feature Name]

## Problem
[What's broken? What pain exists?]

## Proposed Solution
[High-level approach]

## What "Done" Looks Like
- [ ] Specific, testable criterion 1
- [ ] Specific, testable criterion 2
- [ ] Specific, testable criterion 3

## In Scope
-
-

## Out of Scope
-
-

## Open Questions
-
-

Quello' è questo. Cinque minuti per riempirlo e voiM SK2 avete abbastanza da iniziare a discutere o anche costruireMSC3

Utilizzare l'AI per disegnare specchi: strumenti come Claude o ChatGPT possono essere brillanti per ottenere un primo disegno. inserirgli il problema e qualche contestoM SK2 chiedere loro di disegnare uno spezzone

Ma - e questo è critico - Non lasciate che l'IA, la sua profondità vi induca a aggiungere tutto.

L'Intelligenza Artificiale ama essere comprensiva. Ci darà sezioni su Considerazioni di Sicurezza, Prerequisizioni di PerformanceM SK3 AccetibilitàMSC4 Internationalizzazione , Mantenimento degli erroriMST6 LoggingMS, Monitoring MS, Strategia di DeploymentMSSK9 Plani di RollbackM, e altre 17 cose di cui potreste aver bisognoMSV11 alla fineMSS12

Ne tirate fuori la maggior parte. Tenere quello di cui avete bisogno NOW. Il resto può essere aggiunto più tardi quando lo avete davvero bisogno

Pensate all'IA-la specifica generata come a un menu . Prendete i bit che contano per iniziare. Ignoriamo il restoM SK3 Potete sempre tornare indietro per pochi secondiMSC4

L'obiettivo non è una specifica completa, ma una specifica sufficiente per iniziare a lavorare.

Il modello collaborativo

Ecco cosa cambia nell'agile. Non si scrive uno specifico e lo si butta sul muro agli sviluppatori. La specifica è un impegno collaborativo.

Il miglior approccio che ho visto.

  1. Product/PM schizzi il problema - Cosa deve essere risolto e perché
  2. I sviluppatori contribuiscono all'approccio tecnico. - Come potremmo risolverlo, quali sono le restrizioni
  3. I designer contribuiscono ai requisiti UX. - Quale dovrebbe essere l'esperienza dell'utente
  4. La QA contribuisce ai scenari di test. - Cassi a bordo e approcci di validazione

Tutti contribuiscono alla specificazione. Nessuno la possiede esclusivamente. Questo approccio collaborativo cattura i problemi presto quando si risolvono, quando sono economici, piuttosto che tardi quando sono costosi.

Ancora più importante, significa che la specifica riflette ciò che è realmente possibile, ma non quello che qualcuno desiderava in isolamento.

L'evoluzione durante lo sviluppo

Qui's dove le caratteristiche agile sono diverse da quelle tradizionali: la funzione può evolvere mentre lo costruisci.

scopri che il tuo approccio iniziale va bene' non funziona? aggiornare lo spettro per riflettere il nuovo approccioM SK2

Provate la funzione e vi rendete conto che non risolve il problema.

Il feedback degli utenti rivela una soluzione migliore? L'incorporre e spiegare il cambiamento.

Questa evoluzione è una caratteristica.

Ma questo crea un problema.

Il problema della stima

Questo è il buffo segreto di agile: La stima è difficile quando le caratteristiche possono evolvere.

La stima tradizionale presume che sappiate cosa state costruendo'You can break it down into tasks, estimate each taskM SK3 add them up

L'estimazione agile riconosce che non lo sapete'non sapete tutto in anticipo. La funzione potrebbe cambiare mentre imparateM SK2 Come si stima?

Si stimano le distanze, non l'absolutoM SK1 Invece di " questo richiederà 3 settimane" dite " da qualche parte tra SSK4 e S5 settimane a seconda di ciò che scopriamo.

Estimate in iterazioni. "Ci spendiamo una corsa per esplorare questo e riportarci quello che abbiamo imparatoM SK2 Poi possiamo stimare il resto con più precisione."

Avete il tempo-box invece di scopeM SK1boxing. Alla fine di 2 settimane avremo la migliore versione che possiamo costruire in quel periodo.

Ma tutti questi approcci hanno un requisito fondamentale: Dovete sapere cosa significa. Senza una chiara definizione di fatto, una caratteristica può continuare a metastasizzare per sempre.

È una critica comune dell'Agile rispetto agli approcci di Waterfall 'se non c'è una specifica concreta, non ci possono essere buone stime '. Dunno I' preferisco avere un'estimazione floppy che porta ad una buona caratteristica piuttosto che una morte per uno schifo

Definire "DoneM SK1 (O Come fermare la metastasi della funzione)

Questo è il punto in cui molte specche agile si spezzano.. Tutti, ', sono entusiasti della flessibilità e dell'iterazione,,, ma nessuno vuole essere quello che dice: ", giusto?

Senza una chiara definizione di fatto, le caratteristiche non si completano' non finisconoM SK2 si metastasizzano . si diffondono+. crescono tendrilli in altre parti del sistema+M SK5 Prima che lo sappiate+, il vostro MSC7 sistema di commenti semplici+MST8 si è trasformato in un intero network sociale con messaggistica+Mst9+profili+MSt10+e richieste di amici+M st11+

Il problema con il vago "Done"

I'ho visto spezzoni con criteri di accettazione come:

  • "Users can comment on posts"
  • "Il pannello mostra le informazioni rilevanti"
  • "La ricerca funziona bene"

Queste non sono definizioni di fatto, ma ambizioni vagie.

Il sviluppatore deve sapere: Che cosa in particolare, quando viene implementato, significa che posso smettere di lavorare su questa funzioneM SK2

Scrivere Concreto "Done" Criteri

Ottimo "doneM SK1 i criteri sono:

  • Testabile - Potete verificare se è stato raggiunto.
  • Speciale - Niente parole vague come "good" o SSK3relevanteM SK4
  • Imbrogliato - Non significano scope infinito

Pessimo.: "I commenti dovrebbero essere moderatiM SK2 Bene.: "I utenti dell'amministratore possono approvare, rifiutareM SK3 o cancellare i commenti dal pannello dell'administratoreMSC4 Non-approved comments are not visible to regular users. E-mail notification sent to admin when new comment is posted

Pessimo.: "La ricerca dovrebbe essere veloce" Bene.: "La ricerca restituisce risultati all'interno di SSK2ms per il percentile di domande 95 rispetto ad un set di dati di posti S100,000M SK5 I risultati sono classificati secondo la rilevanza.

Pessimo.: "La lavagna mostra misurazioni utili" Bene.: "Display del tassboard: totali visualizzazioni della pagina ♫(ultima ♫ 30 giorniM SK5 visitatori unici |( ultima | 30 giorni), in alto |5 postazioni per visualizzazioni ♫MSC10ultima 7 | giorni |MSC12 e breakdown dei visitatori secondo il paese | MSC13 Tutte le misurazioni vengono aggiornate una volta all'ora |msc14

Notate la differenza? I buoni esempi vi dicono esattamente cosa deve esistere e quando potete smettere di aggiungere cose.

La sezione fuori campo è il tuo amico

Ricordate che ho detto prima che la sezione "Out of Scope" è importante quanto quello che ' ha in "Scoperta".

Per ogni funzione, ci sono dozzine di cose che si possono aggiungere. La sezione "Out of Scope" indica esplicitamente quello che voi non state facendoM SK2This prevents the MSC4while weMST5re in thereMst6we could alsoM st7 conversations that cause feature metastasisMstr8

In Scope: Commenti inseriti (uno livello di risposte) fuori dallo Scope: Threading dei commenti senza limiti, votazione dei commentoM SK2 threading dei Commenti , classificazione migliore degli commentiMSC4 commenti permalinks ( questi potrebbero arrivare più tardi come caratteristiche separateSSK6

Ora, quando qualcuno suggerisce "dobbiamo'il commento non ha voti a favoreM SK2 puoi indicare la specificazione e dire "quell'' è fuori campo per questa iterazioneMSC5Lasciamolo discutere come una funzione separata una volta che i commenti di base stanno funzionandoMST7

Oh and the NEXT spec? Well you have a bunch of unused good ideas already captured! Way easier to start

Time-Boxing as a Last Resort

A volte non si sa veramente'non si sa esattamente cosa "ha fatto "come appare quando si iniziaM SK3 L'intervallo del problema è troppo incertoMSC4 completamente nuovo o persino un qualche sistema di back end deve essere costruito simultaneamente

" Noi' passeremo 2 settimane (o finché il backend non è prontoM SK4 prototipando diversi approcci all'algoritmo di raccomandazioneMSC5 Alla fine ♫2 settimane noiMST7 valutaremo ciò che abbiamo imparatoMst8 e decideremo se produrre un approccioM st9 provare qualcosa di diversoMstr10 o abbandonare la funzioneM str11

Ma notate, : avete ancora un materiale di cemento " finito" condizione MSC3 settimaneMSC4 poi valutareM SK5 Non state solo costruendo indefinitamenteMST7 Queste esplorazioni sono spesso fatte in un contesto come una Sprint in SCRUM chiamata '\Spike\MST10\

Spikes & Sprints.

Un Spike è uno di questi ' andate a fare un gioco e scoprite questa tecnologia ' può durare fino ad uno Sprint ♫ ( ♫ o più ♫) ♫ ma di solito dura solo pochi giorni ♫

Si aspetta che uno Sprint abbia dei risultati alla fine ( qualcosa che qualcun altro che la persona coinvolta in esso possa testare per il cerchio ). Un Spike potrebbe avere ma probabilmente l'unico risultato è la conoscenza dell'equipaggio .

Sono anche divertenti per i dev e aiutano il team spesso raccolgo idee su Spike durante un progetto, e quando c'è un'attesa li lascio scegliere uno per esplorarlo (ASSO per qualche futuro dev ma spesso solo per fermare Jim il junior dev Continua a farlo ).

Prevenzione della crepe dello spettro durante lo sviluppo

Anche con dei criteri chiari "doneM SK1 criteri, l'insieme può sfuggire . si scoprono casi a bordoMSC4 si capisce che gli utenti hanno bisogno di qualcosa che non avevate mai pensatoMST5non avete consideratoM ST6 Come si fa a gestire tutto questo senza rompere la propria definizione di fattoM st7

Documentarlo, non'non farlo soloM SK2 Quando scopri qualcosa di nuovo che deve essere aggiunto, aggiornare lo spezzone. Make it explicit that the scope has changed

Questo serve due scopi:

  1. Visibilità - Tutti sanno che la portata è cambiata e perché.
  2. Sensibiltà dei costi - Gli interessati vedono che aggiungere le cose ha un impatto sul tempo.

Se il vostro spettro continua a crescere, quello' è un segnaleM SK2 O tu ' stai costruendo la cosa sbagliata MSL4 e devi fare un passo indietro e ripensareMLS5 o dovrebbe essere una serie di caratteristicheMsl6 o devi tagliare lo spazio per spedire qualcosa di utile più prestoMSR7

Quando è finito?

A un certo punto, dovete spedire. la funzione non ha bisogno di essere perfettaM SK2 non deve essere perfetta; deve essere utile

Un buon test: Gli utenti possono ottenere un valore da questa funzione come ora è?

Se sì, la spedite. Potete sempre ripetere nella versione successivaM SK2 Finito non significa ' non sarà mai miglioratoMST5 Significa Mst6 risolve il problema abbastanza bene che gli utenti ne traggono beneficio e possiamo passare ad altri lavoriM st7

Se no, voi'non avete ancora finitoM SK2 indipendentemente da quello che dice la vostra specificazione .

La parte più difficile dell'agilità è: ' non cominciare il lavoro, ;", ' fermarsi al lavoro,.", "Clearmente" ", "Compiuto"," i criteri rendono possibile fermarsi.

Ma ricordate che dovete bilanciare se lo rilasciate a tutti, avere un gruppo stretto per AM SK1B / UAT ( test di accettazione degli utentiMスク4 CheMSC5 è spesso una decisione di affari sul rischioMST6 A volte il pubblico è in gamba e vede una preview incompleta come il GOSPEL per la qualità del vostro sistemaMst7 Se questo è un problema, un gruppo controllato è più sicuroM st9

# Il processo di revisione della specifica

Una specifica non è ' quando si finisce di scriverla.

Trattare le recensioni dello spettro come le recensione del codice

La migliore pratica che ho imparato a Microsoft: I commenti specific funzionano esattamente come i commenti di codice. Sono 'colaborativiM SK1non avversari (although il club di ragazzi Microsoft'' spesso faceva che le recensioni della specifica sembrassero un combattimento gladiatoriale se qualcuno fosse un cazzoMSC5 hey SimonMST6 L'obiettivo non è MST7di catturarvi fuoriM ST8è SST9di migliorare la specificaM st10

Quando si analizzano i dettagli:

  • Chiediamo domande - "Cosa succede se X si verificaM SK2 non è'non è una criticaMSC4 è l'identificazione di un divario
  • Suggere alternative. - "Hai considerato l'approccio Y?
  • Notate i casi scomparsi - "Questo non copre il scenario Z.
  • Assunzioni di sfida - "Perché lo risolviamo in questo modo?" potrebbe rivelare approcci migliori.

Quando la vostra specifica è in revisione:

  • Le domande sono opportunità. - rivelano ciò che è poco chiaro e quello che avete perso.
  • Suggestioni migliorano lo spettro. - Le considerate seriamente anche se non le accettate.
  • Non è personale. - Come la revisione del codice, si tratta di migliorare il lavoroM SK3 non attaccarvi.
  • Il critico potrebbe sbagliare. - Spiega perché il tuo approccio ha senso , potrebbero imparare anche qualcosa.

Le migliori recensioni dello spettro sono le conversazioni. Si va avanti e indietro. Si impara l'uno dall'altroM SK2 Il spettro che emerge è migliore di quello che una persona potrebbe aver scritto da sola .

Chi dovrebbe esaminare?

Ricevere recensioni da tutte le prospettive che contano:

Rivisione dei sviluppatori - funzionerà veramente? Ci sono restrizioni tecniche che non abbiamo consideratoM SK2t considered ? C'è abbastanza dettaglio da mettere in attoMSC4 Quali domande avreste se costruissimo questo?

Rivisione del prodotto - Risolve il problema giusto ? Si allinea con la strategia del prodotto? Cosa manca a 'M SK4 I criteri "doneMSC6 indicano realmente un valore per gli utentiMST7

Rivisione del design - L'esperienza dell'utente ha sensoM SK1 Abbiamo considerato l'accessibilità? Che ne diciamo del cellulare ? Risolviamo il problema dell'utilizzatoreMSC4 o costruiamo solo delle caratteristicheMST5

Rivisione QA - Possiamo testarloM SK1 I criteri di accettazione sono abbastanza chiari? Che ne dite dei casi a bordoMST3 Cosa potrebbe andare stortoM ST4

Non ti serve'non c'è bisogno di un segnale formale-di essere mandato da tuttiM SK2Avete bisogno della loro input per migliorare la specificazione .Pensiamoci come MSC4questo di commentiMST5non MST6questa di approvazioneM ST7

Questioni comuni di revisione

I buoni recensionisti fanno domande che migliorano lo spettro:

  • "Cosa succede se l'utente fa XM SK1 (esempi di bordo)
  • "Come questo interagisce con la funzione esistente YM SK1 (integrazione)
  • "Cos'è il nostro fallimento se la dipendenza Z non è ̈' ̈non è pronta ̈ ?" ̈
  • "Potremmo semplificare questo facendo W invece?
  • "Come saremo in grado di sapere se questo ha avuto successo?
  • "Cosa non stiamo facendo?

Nessuno di questi è appropriato. Sono domande vere che aiutano a concretizzare lo spettro

Incorporre il feedback

Vincerà'non accetterete ogni suggerimento. Quello ' va beneM SK3 Ma per ogni pezzo di feedbackMSC4

  1. Pensateci sinceramente. Non lo rifiutano perché non capiscono.
  2. Se lo accettate. - aggiornare lo spezzone, grazie al reviewer
  3. Se non lo accettate' - Spiega perché , forse ' manca il contesto
  4. Se il ' è fuori campo. - L'addizionare alla sezione "Out of ScopeM SK2 or SSK3Future Enhancements"

L'especificità dovrebbe migliorare con ogni revisione. Se non lo fa 't, tuM SK3non stai ascoltando o i tuoi recensionisti non sonoMSC4non sei coinvolto.

Prendete le recensioni da tutte queste prospettive prima di iniziare la implementazione. Trovare problemi nei costi specifici minuti; trovarli nei costi di produzione settimaneM SK2

Un esempio concreto: Markdown Translation Service

Per rendere tutto questo meno astrato, qui's come potrebbe sembrare una specifica per la funzione di traduzione automatica di marcamento che ho costruito per questo blogM SK2 Questo dimostra i principi che abbiamo discusso '

Proclamazione di problema

Post di blog scritti in inglese escludono solo quelli che non parlano inglese-Reader che parlano inglese.La traduzione manuale di ogni post in più lingue è un tempoM SK2Consomma e rallenta la pubblicazione .C'è bisogno di una soluzione automatizzata che tradisse i post dei blog in più linguaggi target senza bisogno di interventi manuali per ogni postMSC4

Soluzione

Implementare un servizio di fondo che traduce automaticamente i file di marcazione in lingue target configurate usando il servizio di traduzione automatica EasyNMT. Il servizio sarà:

  • Monitorare i file di marcazione per i cambiamenti.
  • Extrarre un testo tradutabile preservando la struttura e i blocchi di codici.
  • Requisizioni di traduzione in serie per l'efficienza
  • Genera file di marcazione tradotti con suffissi linguistici adeguati

Criteri di successo (Che cosa "Fai"SembraM SK3

Questi criteri ci dicono esattamente quando possiamo smettere di lavorare su questa funzione:

  • I nuovi post di blog sono tradotti automaticamente in tutte le lingue configurate (initialmente: spagnoloM SK2 francese , tedescoMSL4 italianoMSC5 portogheseMST6 cinese MST7 arabo Mst8 HindiMst9 giapponeseMSt10 coreanoM st11 olandeseMstr12 russoMt13
  • I file tradotti mantengono una struttura identica a quella degli originali.
  • Blocchi di codice, URL dell'immagine, e formatazione non sono cambiate.
  • La traduzione si completa nel giro di 15 minuti per un tipico post di blog.
  • Il sistema solo ri- traduce i file che sono cambiati ( verificato tramite il confronto con l'hash )
  • Il servizio inizia con successo anche se l'API di traduzione è temporaneamente inaccessibile.
  • Errors during translation are logged but don't crash the application

Notate che sono specifici e testabili. Possiamo verificare ciascuno di essiM SK1 Quando tutti sono soddisfatti, noi ' siamo finitiMSC4 Non continuiamo ad aggiungere funzioni come MSSK6 valutazione della qualità della traduzioneMST7 o " aggiustazioni di traduzione manualeMSM9 a meno che non estendiamo esplicitamente la portataMSS10

In Scope

  • Il servizio di sfondo per elaborare i file di scarico.
  • Integrazione con EasyNMT Translation API
  • Hash-detezione basata sul cambiamento per evitare una traduzione inutile.
  • Il processo di lotto per gestire il limite delle parole EasyNMT'
  • Round-Balanciamento della carico di Robin attraverso diverse instanze EasyNMT
  • Conservazione della sintaxa di demarcazione, blocchi di codice, e immagini durante la traduzione

fuori dallo Scope

  • Interfaccia utente per l'editoria manuale della traduzione (innalzamento futuro)
  • Gestione della memoria di traduzione o del glossario (può aggiungere se ci sono problemi di qualità)
  • Reali-traduzione temporale M SK1processo di fondo accettabile)
  • Traduzione dei commenti del codice nei blocchi di codici (escluso intenzionalmente)
  • Evaluazione automatica della qualità delle traduzione (testo manuale richiesto inizialmente)

Contrattivi tecnici

  • EasyNMT ha un limite di parole per richiesta ~500 ( non è vero per mostlylucid-nmt che può prendere i fucking BOOTS) ; devono battersi accordingly
  • Il servizio di traduzione può essere lento (~15 second timeout per lotch) (mostlylucidM SK3nmt is aroudn
  • Molte instanze EasyNMT necessarie per una performance ragionevole (nope più chiaraM SK1nmt 😜)
  • Il sistema di file I/O non deve bloccare l'applicazione principale.

Chiedere le domande al tempo specifica

  • ~~Dobbiamo archiviare le traduzione per evitare di ri-tradurre i file non cambiatiM SK2 Risolveto: Sì, usando il file hash comparison
  • ~~Come si affrontano i fallimenti di EasyNMT? Risolveto: Error log and skip file; will retry on next service restart M SK2 a circuit breaker (maybe a spike
  • Quali problemi di qualità potremmo vedere con il contenuto tecnico? Decisione: Ship and evaluate; manual review catches issues

Quello che abbiamo imparato durante la realizzazione

Diverse cose sono emerse durante lo sviluppo che hanno raffinato la specifica:

Affinamento della dimensione delle parti: Cominciò con 20- batchi di linee, ma scoprì che le linee erano più affidabili per rimanere sotto EasyNMTM SK4 il limite delle parole mantenendo il contestoMSC5

Detezione dell'immagine: Inizialmente, i nomi dei file dell'immagine in marcatura venivano inviati al servizio di traduzione , la parizzazione delle frasi che si romponoM SK3 L'aggiunta della rilevazione delle estensioni dei file per saltare i percorsi dell'immaginazioneMSC4

Disponibilità dei servizi: EasyNMT può essere temperamentale al startup. Added health check that queries the /model_name punto finale prima di provare traduzione.

Storage Hash: Originalmente programmato l'archiviamento della base di dati per file hashes, ma basato sul filesystemM SK2 .hash i file si sono dimostrati più semplici e si è evitata la dipendenza dalla base di dati per questo servizio.

Queste lezioni sono state ripiegate nella documentation e hanno informato caratteristiche simili più tardi.

Perché questo spettro funziona?

Questa specifica segue i principi discussi:

  • Problem-prima: Cominciamo con il problema reale (la traduzione manuale è lenta) non è la soluzione (usare EasyNMTM SK4
  • Calcolo dello spettro: Chiamiamo chiaramente cosa non stavamo facendoM SK1non stavamo lavorando (memoria di traduzione,Edition dell'interfaccia grafica
  • Il livello destro del dettaglio: Ha specificato cosa deve accadere ( preserve la struttura di demarcazione) senza prescrivere l'esatta applicazione
  • Documento vivente: Le domande aperte sono state risolte e le decisioni documentate nel corso dell'implementazione.
  • Collaborativo: è stato sollevato durante problemi di implementazione ( è stata discussa e risolta la gestione del filename dell'immagine) poi documentata

Il risultato: una funzione cheM SK1 è in produzione da mesi, traduce automaticamente ogni post di blog con un minimo intervento .

domande comuni su Agile Specs

In base a ciò che abbiamo descritto, ci sono domande che si fanno spesso.

"Ho veramente bisogno di un spezzone per una piccola funzione?"

Dipende da "small." Se è davvero banale 'change il testo del bottoneM SK4 riparare un errore di ortografiaMSC5 noMST6 Ma se doveteMSST7

  • Estimate quanto tempo ci vorrà.
  • Ottenere un accordo da parte delle parti coinvolte
  • assicurarsi che la QA sappia cosa testare
  • Documentare quello che avete costruito per un futuro riferimento.

Poi sì, persino una specifica veloce aiuta. Non c'è bisogno di ' non è necessario essere formaleM SK3 Un paio di punti d'allarme in un biglietto che copre il problemaMST4 La soluzioneM ST5 e i criteri fatti sono spesso abbastanzaM st6

L'esperimento: se si può' non spiega come appare in due frasi

"Come ho a che fare con le parti coinvolte che vogliono tutto nella portata?

Osservare la sezione fuori campo. spiegarlo:

  1. L'aggiunta di altre incrementi della linea temporale - Vogliono la funzione A in 2 settimane o le funzioni A, BM SK3 CMSC4 e D in \3 mesiMST6
  2. Possiamo farlo dopo. - "È un'ottima idea, 'Let's get the core working firstM SK5 then tackle that as a separate spec."
  3. Time-box forza le priorità - "Abbiamo 2 settimaneM SK3Quale di queste è la più importante?"

Se insistono che tutto sia ugualmente critico, suggeriscono di scegliere quale altro lavoro ritardare inveceM SK1 Questo di solito chiarisce le priorità velocemente.

"E se lo spettro cambia così tanto da essere incognibile dal principio?

Quello' è un fine, fino aM SK2.

  • I cambiamenti sono documentati ( aggiornare lo spezzone , non cambiare solo il codice)
  • I cambiamenti sono comunicati ( Gli attori sanno cosa è cambiato e perché )
  • Avete imparato qualcosa. I cambiamenti riflettono l'apprendimento.

Se la specifica non è riconoscibile perché avete completamente mal compreso il problema all'inizio, che' è un segno per fare più scoperte prima di iniziare la prossima voltaM SK2 Ma si aspetta che ci sia un'iterazione e l'apprendimento

La storia della versione specifica' dovrebbe raccontare la storia di quello che avete imparato.

In Startups questo si chiama 'Pivot' dove iniziate a costruire un gioco e alla fine costruite un meraviglioso sistema di messaggistica inveceM SK2 non avete mai sentito parlare del gioco mobile Glitch , probabilmente avete sentito parlere del bit di messaging.

Non si blocca troppo in . Se ci sono opportunità per ' pivotando TAKE THEM.

"Dovrei scrivere i dettagli per le correzioni di errore?"

Per gli errori critici: no, basta ripararliM SK2

Per gli errori complessi che influenzano diversi sistemi o richiedono cambiamenti architettonici: si. Lo tratta come una funzioneMSC2 CosaM SK3 è rotto M Sk4problemaM sk5 come l'avrete risolto M Sk6lo risolverà M sk7soluzione ), come lo avreste saputoMtk9lo avrete saputo+M Sk10lo sarà riparato+M sk11ha fatto dei criteri+), cos'hai fatto+'non lo stai cambiando+M SK14 fuori campo di attività=).

Per tutto ciò che c'è in mezzo: usa il tuo giudizioM SK1 Se la soluzione non è'ovvia o potrebbe avere effetti collaterali , un rapido spezzone aiutaMSC4

Questo è in particolare vero per gli errori di sicurezza. Bisogna sapere esattamente cosa si sta riparando e come lo si verificherà ' & condivide le correzioni WIDELY

"Come formale dovrebbe essere la specifica ?"

Il tipo di formale di cui ha bisogno la vostra squadra. Alcune squadre vanno bene con i biglietti dettagliati del JIRA. Altri vogliono documenti adeguati nel controllo della versioneM SK2

La formalità conta meno del contenuto:

  • Chiara la dichiarazione del problema
  • Soluzione propuesta
  • Definizione del fatto
  • Risolvere i confini dello spettro

Lo si può scrivere in Markdown.

Questo è il punto chiave spesso non menzionato per lo sviluppo agile; e perché odio i Frammi Agile (e SCRUMM SK2 Il punto principale è che come uno spettro agile il tuo processo deve essere anche adattabile . Se scrivere un po' non va bene per una squadra, ma molto lo faMSC5 lo fa. Se nessun documento funziona per una piccola squadra ma tutti i documenti funzionano per una grande. Se 5 cicli di giorno funzionano per una squadra ma 2 sprint settimanali per un'altra team, , lo fanno. L'idea generale è fare il miglior prodotto; la vostra squadra è la macchina che costruisce quel prodotto . Fa funzionare la macchina in modo più flessibile possibile.

Come manager, guardate quali sono i vostri output; se la tavola ha bisogno di un grafico di decomposizione allora come potete usare i dati attuale per costruirne uno

Alla fine la squadra produce delle caratteristiche e di cosa hanno bisogno gli investitori. Se si può ridurre l'impatto sul team allora questoM SK1 è la vostra parte.

"E se ioM SK1essi l'unico sviluppatore del progetto?"

Avete ancora bisogno di specifiche, forse più di così. In sei mesi quando dovete estendere questa funzioneM SK2 vi otterrete ' non vi ricordate perché avete preso certe decisioniMSC4 La specifica è il vostro sé passato che parla al vostro sé futuroMSL5

Inoltre bisogna ancora:

  • Estimate il lavoro per chi vi paga.
  • Definite cosa significa "done" così da poter finire.
  • Documentate quello che avete costruito per altri che potrebbero unirsi dopo.

Scrivere delle specifiche per voi è come scrivere dei test di unità: sembra più lento ora ma risparmia tempo dopo (come meM SK2 IMSC3m nel mio 50s, Sto dimenticando il problema oggigiornoMスク6 scriverlo così da poterlo fareMNK7 anche se siaMRK8 è solo una lista dei problemi di githubMK9

"Come mi occupo di uno spostamento dello spettro nascosto come 'Clarification dei requisiti'?"

Chiamiamolo. Quando qualcuno dice "OhM SK2 mi sono dimenticato di menzionare che dovrebbe anche fare X ," cheMSC4 non è una spiegazioneMST5 ma la MST6 il nuovo campo d'azioneMSST7

Risponde: M SK1Quell''è una buona richiesta , ma non è quello che abbiamo concordato nella specifica. LasciateMSC6la aggiungere alla sezione "Out of Scope" per ora e discutere se includerla o la salvare per la versione

Se è davvero un requisito (non una bella -to-avereM SK3 alloraMSC4

  1. aggiornare la specifica per includerla
  2. aggiornare la stima
  3. Ottenete un accordo sul nuovo grafico o su cosa tagliare per adattarlo al grafico originale.

Non assorbire mai silenziosamente uno spostamento dello spettro. Si distruggerà le vostre stime e la credibilità.

"Posso iniziare a programmare prima che la specifica sia completa?"

Sì, se voiM SK1 siete in fase di prototipo per rispondere alle domande aperte. No

Il prototipo per imparare è buono: "Ci sono tre approcciM SK2 Lasciate che vi spieghi ciascuno per vedere quale funziona meglio ." Questo informa lo spettro

Costruire il codice di produzione prima che la specifica sia pronta significa che voi'ste indovinando i requisiti . VoiM SK2 probabilmente costruirete la cosa sbagliata.

Escepzione: se sei il proprietario del prodotto e lo sviluppatore M SK2 progetto solo ), puoi specificare e codificare simultaneamente. Ma documentare le tue decisioni mentre stai andando

Il ' fino a quando la specifica è pronta ' è un modo grandioso per far caricare i devs fino al punto di iniziare. valutare gli approcci tecnologiciM SK3 scrivere una tastiera comune, ecc.

"E se il mio team non legge le specificheM SK1?"

Scopri perché:

  • troppo lungo? Renderli più brevi, più scannabili.
  • Troppo formale? Usare un formato più leggero
  • Non rilevante? Assicuratevi che abbiano bisogno del dettaglio che vi state fornendo.
  • Un cattivo आदतo? Cominciare a chiedere una revisione specifica prima di iniziare lo sviluppo.

Se le persone scorrono gli esami delle specifiche e poi costruiscono la cosa sbagliata, rendendo visibile il dolore. M SK2Questo non era ' nella specificaMST4 quindi noiMst5 dovremmo riprogettarelaM st6 è una lezione imparataMSt7

Inoltre: rende le specifiche facili da trovareM SK1 Se sono sepolte in un qualche obscuro wiki, nessuno li leggerà .

"Quanto tempo devo dedicare ad una specificaM SK1

Regola del pollice: 5-10% del tempo di sviluppoM SK2

Per una funzione settimanale di 2- days on the spec. Per una funzione settimanale di 1-: mezzo giorno sull'etichetta Per una funzione di 2- di giorno: un'ora o due sul spettroM SK2

Ma non si tratta di cose religiose. Alcune caratteristiche hanno bisogno di più attenzione, altre sono ovvie e la specifica richiede minuti.

Se' spendete più tempo sull'esempio che sulla implementazione , lo state superpensandoM SK3 ricordatevi: gli esempi sono strumenti per aiutarvi a lavorareMSC5 non opere d'arteMST6

"Perché le stime sono sempre sbagliateM SK1

Perché la stima del software è fondamentalmente difficile. Le stime funzionano solo se:' avete fatto EXACTamente quell'attività prima di che sia finita.

Che quasi mai succede.

Ogni volta che si stima ,, si tratta di '.

  • Non conosciuto non conosciuto - Problemi che non conoscete'non so se esistono ancora
  • Conosciuti non conosciuti - Problemi che sapete esistono ma che non avete idea di come risolvere
  • Cambiare i requisiti - La specifica evolve mentre si costruisce l'amministratore delegato ha un'idea pazzesca nella doccia..lo succedeM SK3 Una volta ho ricevuto una chiamata 3ho chiamato il mio cliente HUGELY DRUNK in doccia con degli indizi stupidi.
  • Differenze ambientali - Quella biblioteca ha funzionato nel tuo ultimo progetto, ma questa ha delle dipendenze diverseM SK2 Voi ' l'avete fatto funzionare tutti in IIS, ma questa deve funzionare su Linux.
  • Questioni di strumenti - Il sistema di costruzione, il tubo di deploiamentoM SK2 o l'ambiente di prova si comportano diversamente
  • Sorprese dell'integrazione - Quell'API che chiamate ' non funziona bene come documentato.
  • Factori umani - VoiM SK1 siete interrotti , malati, o si occupano di problemi di produzione
  • Finanzi - a volte una versione più piccola è necessaria prima perché *Altrimenti noi' siamo fuori di soldi^ cheM SK2s COMMON in startupsMST3 Mst4IM st5 avremo un articolo su MST6Startup devMSST7 e come si diffondono da MSST8normale devSST9 nel futuroMSS10

Ecco perché:

  • Ranges beat point estimate - "2-5 giorni" riconosce l'incertezza
  • Gli spikes aiutano. - Passare un giorno a fare ricerche prima di stimare il lavoro completoM SK1 questa tecnologia è più difficile o più facile di quanto ho stimato, dove può risparmiare tempo, ecc.
  • Tempo-opera di box - " NoiM SK2 passeremo 2 settimane e vedremo cosa otteniamo" stabilirà le aspettative
  • I dati storici sono importanti - Tracciare quanto tempo ci sono voluti realmente compiti compiti task simili.
  • Il trucco è onesto. - Se pensate 3 giorni, dite 5. Avrete ragione più spessoM SK5 L'approccio ScottyMSC7
Più nuovo il lavoro è, peggio sono le vostre stimeM SK1 Costruire la stessa forma di CRUD che avete costruito' ho costruito MSC3 volte ? VoiMST5 sarete viciniMSR6 Integrare con un nuovo servizio usando un protocollo sconosciutoMSL7 La vostra stima è una stima avvolta in speranzaMSV8

Questo è il motivo per cui gli spetzi hanno bisogno di un chiaro "doneM SK1 criterio. Potete 'non stimare accuratamenteMST4 ma potete definire quando fermareM ST5 CheM st6 è più preziosoMst7

"E le specifiche per la ricerca o l'esplorazione?

Questi hanno bisogno di criteri diversi "doneM SK1 criteri. Invece di " la funzione X funzionaMST4 è SSM5s " noiMSM7 ho risposto alla domanda YMSV8

Esempio di specificazione per l'esplorazione:

  • Il problema.: Non sappiamo se l'approccio A o B è migliore per il motore di raccomandazione.
  • Soluzione: Spend 1 week prototyping both approaches
  • Criteri fatti: Abbiamo prototipi lavorativi di ciascuna di queste metriche di performance per entrambi i , e una raccomandazione su cui seguire.
  • Non ha senso.: Implementazione della produzione ( arriva dopo aver deciso

Il tempo-il boxing è cruciale per l'esplorazione. Senza essoM SK2 le attività di ricerca non finiscono mai

"Come scrivo le specifiche per le caratteristiche che non conosco'non ho ancora capito completamenteM SK2

Cominciate con quello che sapete:

  • Proclamazione di problema ( dovete saperlo)
  • Appoggio propuesto (la vostra migliore stimaM SK1
  • Chiedere domande (Tutto quello che non saiM SK1non lo sai )
  • Criteri fatti ( anche se grossoM SK1

Notate le sezioni come "TBD." Essere onesti riguardo all'incertezzaM SK2

Poi usate il processo di revisione specifica per riempire le lacune. Le conversazioni durante la revisione spesso chiariscono ciò che non avete capito'non avete capito

Ricordate: incompleto-maM SK2honest beats complete -butMST4falsoMSC5

"Può issue di GitHub/Tickets per JIRA essere la specificaM SK2

Assolutamente. Lo spezzone non è'non ha bisogno di essere un documento separato . Un ben scritto issue GitHub o un biglietto JIRA può servire come spezzatura perfettamenteM SK4

Quello che conta è il contenuto, non il contenitore. Una buona questioneM SK2comeMSC3la specie dovrebbe avereMST4

  • Chiara la dichiarazione del problema - Cosa stiamo risolvendo e perché?
  • Soluzione propuesta - Come l'avremo affrontata?
  • Criteri fatti - Esempi specifici, criteri di accettazione testabili
  • Limiti dello spettro - Cos'è ' che è dentro e fuori lo spettro | |Usage etichette come " | fuori | - | dello spettro 5 | dallo spettro 6 | per oggetti che non state facendo |
  • domande aperte - Notate questi con l'etichetta "questionM SK2 o simile

I vantaggi dell'uso di questioni:

  • Tutto in un solo posto. - codice , spezzone, discussioneM SK3 e tracciamento dei compiti insieme
  • Easy linking - Questioni di riferimentoM SK1 Relazioni pubbliche, impegni
  • Costruita-in versione - La storia dell'editoria delle edizioni mostra come i requisiti sono evoluti.
  • Flusso di lavoro familiare - Il team sa già come usarlo

I consigli per usare i problemi come specifiche:

  • Usate la descrizione del problema per lo spezzone, non sepolto nei commenti (la gente legge la descripzioneM SK2
  • aggiornare la descrizione man mano che lo spettro evolve (add "EditM SK2 sezioni per mostrare i cambiamenti)
  • Utilizzate le etichette per indicare lo stato.
  • Pinare importanti discussioni specifiche in modo da non perdersi nei commenti '
  • Link ai documenti supportanti (diagrammiM SK1 mockups) se necessario

Il test: potrebbe qualcuno leggere il problema e sapere cosa costruire, cos'ha fatto " cosa significa " , e cosa è fuori campo di discussione' se sì, è un buon parametro a prescindere dal formato.

"Che dire delle specifiche nelle industrie regolateM SK1

Se si'si occupa di sanitàM SK1finanze,aviazione aerospaziale , o in altri campi regolatiMSC4 potreste avere bisogno di specifiche più formali per l'accomplenzamentoMST5I principi continuano ad applicarsiMSM6

  • Cominciamo col problema.
  • Definire i risultati chiaramente.
  • Evolvere come impari.
  • Keep specs current

Ma voi dovreste anche :.

  • Seguite le norme di documentation della vostra industria.
  • Includere le sezioni necessarie (analisi della sicurezza,difessione dalla regolazioneM SK2stop di revisioneMSC3
  • Ottenete un cartello formale, -, dove è necessario.
  • Mantenere una storia di versione più dettagliata.
  • Tenere i dettagli dopo la fine del progetto (per le revisioniM SK1

Anche in ambienti regolati, funziona la specificazione agile. Ci sono solo più gocce da saltare attraversoM SK2 La specifica è ancora uno strumento ; èMSC4 è solo uno strumento che ha bisogno di soddisfare sia i regolatori che gli sviluppatori

Conclusione

Scrivere buone specifiche di caratteristiche in un ambiente agile è una capacità che si migliora con la pratica. L'obiettivo è non scrivere dettagli perfetti in anticipo (non esistono 'no esistono ); ma \ ' scrivere dettagli che aiuteranno il vostro team a cominciare e evolversi mentre imparate.

I principi chiave:

  • Le specifiche sono strumenti, non contratti - aggiungere i dettagli dove ne avete bisogno, evolvere mentre imparate
  • Cominciamo con il problema, non la soluzione - Implementazione deriva dalla comprensione del problema
  • Collaborare, don't dicta - Tutti contribuiscono a migliorare la specificazione
  • Definire "done" chiaramente - Prevenire la metastasi delle caratteristiche con il cementoM SK1 criteri testabili
  • Questioni fuori tema - Quello che non fate è importante quanto quello che siete.
  • Aspettare l'evoluzione - Le caratteristiche cambiano mentre le costruite; cattura l'apprendimento
  • Keep specs current - Diventano la base dei test, docsM SK2 e del futuro sviluppo

La parte più difficile è: ' non scrivere la specifica iniziale, . sapere quando smettere di lavorare su una funzione, . Non avere una spiegazione precisa, " aver fatto "MSC5" criteri "M SK6" caratteristiche che crescono per sempre e che non vengono mai inviate.

Questo è il motivo per cui la stima agilità è così difficile. Voi'non stiamo solo stimando il tempo di implementazioneMSC2 voiM SK3 stiamo stimando i tempi di apprendimento . Quanto ci vorrà per scoprire ciò che effettivamente risolve il problemaMST5 Nessuno lo saMSST6 perché non l'avete ancora scopertoMSS7non l'ha ancora scopertaM SS8

La cosa migliore che si può fare: essere chiari su quello che M SK1fare" significa , tempoMST4incertezza della scatolaMSSK5 e aggiornare la specifica come si imparaMSC6 trattarla come un codiceMSS7 la sua versioneM SS8 la ristrutturareM SSS9 migliorarlaMISS10

Una buona specifica permette ai sviluppatori di risolvere problemi in modo intelligente, sapendo esattamente quando possono fermarsi.

E se sei un sviluppatore che legge uno spettro che non ha senso o non ha un chiaro " ha fatto " criteri

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.