This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
Tuesday, 11 November 2025
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.
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à.
Ogni circuito riduce la distanza tra “ideaM SK1 e “utili”:
aggiornare lo spettro dopo ogni ciclo. Il log del cambiamento è il La storia di ciò che hai imparato..
Il principio più importante per scrivere le specifiche: Cominciate sempre con il problema, non la soluzione.
Questo modello è semplice:
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
Prima di scrivere una sola parola sulla implementazione, dovete rispondere a una domanda: Perché?
Perché stiamo costruendo questo?
Una buona specifica inizia con:
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]
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.
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
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
Qui' è il foglio che uso per le specifiche delle caratteristiche. ÈM SK2 non l'Evangile , ma èMST4 mi ha servito beneM ST5
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.
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.
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.
| 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. |
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:
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
Questa sezione è altrettanto importante di quello che c'è nel campo di ricerca.
Perché questo conta:
Esempi di buoni oggetti fuori portata:
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.
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.
Quali altri sistemi/teams/features questo dipende daM SK2 Cosa deve essere pronto prima che lo sviluppo possa cominciare ?
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
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\
Quando trovate un errore specifica come sviluppatore, avete alcune opzioni:
Questa è quasi sempre la risposta giusta.
Inviate un messaggio chiaro a chi possiede lo spezzone:
Fate questo in writing (email,ticketM SK2 qualunque cosa ) quindi ci sono 'un archivio
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.
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
Il miglior approccio è prevenire errori specifici in primo luogo:
Alcune persone pensano che più dettagli sia sempre meglio.
Se la vostra specifica si sta trasformando in guerra e pace, voi otterrete:
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.
"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
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.
" 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
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.
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
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
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.
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:
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.
Prima di chiamare una specifica fatta, chiedi a te stesso:
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
La differenza fondamentale è il formato o la lunghezza del ;, il modo di pensare e il processo.
Speci delle cascate:
Speci Agile:
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.
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:
Poi riempite i buchi mentre imparate. È molto meglio avere un'especificità onesta che una completa-maM SK5 sbagliataMSC6
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:
Ogni cambiamento dovrebbe essere:
La storia della versione dello spettro di ' diventa un archivio di ciò che avete imparato.
L'approccio agile può fallire se si dimentica una cosa cruciale: " cambieràM SK1 non significa't significa "no boundariesMSC4
Bad agile speccing:
Ottimo calcolo agile:
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.
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:
Per altri potrebbe essere:
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.
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.
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.
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.
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.
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
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+
I'ho visto spezzoni con criteri di accettazione come:
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
Ottimo "doneM SK1 i criteri sono:
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.
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
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\
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 ).
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:
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
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.
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:
Quando la vostra specifica è in revisione:
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 .
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
I buoni recensionisti fanno domande che migliorano lo spettro:
Nessuno di questi è appropriato. Sono domande vere che aiutano a concretizzare lo spettro
Vincerà'non accetterete ogni suggerimento. Quello ' va beneM SK3 Ma per ogni pezzo di feedbackMSC4
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
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 '
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
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à:
Questi criteri ci dicono esattamente quando possiamo smettere di lavorare su questa funzione:
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
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.
Questa specifica segue i principi discussi:
Il risultato: una funzione cheM SK1 è in produzione da mesi, traduce automaticamente ogni post di blog con un minimo intervento .
In base a ciò che abbiamo descritto, ci sono domande che si fanno spesso.
Dipende da "small." Se è davvero banale 'change il testo del bottoneM SK4 riparare un errore di ortografiaMSC5 noMST6 Ma se doveteMSST7
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
Osservare la sezione fuori campo. spiegarlo:
Se insistono che tutto sia ugualmente critico, suggeriscono di scegliere quale altro lavoro ritardare inveceM SK1 Questo di solito chiarisce le priorità velocemente.
Quello' è un fine, fino aM SK2.
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.
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
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:
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.
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:
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
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
Non assorbire mai silenziosamente uno spostamento dello spettro. Si distruggerà le vostre stime e la credibilità.
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.
Scopri perché:
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à .
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é 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 '.
Ecco perché:
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
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 tempo-il boxing è cruciale per l'esplorazione. Senza essoM SK2 le attività di ricerca non finiscono mai
Cominciate con quello che sapete:
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
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
I vantaggi dell'uso di questioni:
I consigli per usare i problemi come specifiche:
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.
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
Ma voi dovreste anche :.
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
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:
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
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.