Agile Speccing: Écrire des spécifications de fonctions qui fonctionnent réellement (Français (French))

Agile Speccing: Écrire des spécifications de fonctions qui fonctionnent réellement

Tuesday, 11 November 2025

//

67 minute read

Introduction

Au fil des ans, j’ai lu / écrit des centaines de spécifications d’éléments généraux . Certaines étaient brillantes

Voici ce que j’ai appris à Microsoft qui a changé la façon dont je pense aux spécifications. Une spécification n’est pas une bible; c’est un outil' . Comme n’importe quel outil, vous l’utilisez pour accomplir un travail.

Treat a spec as sacred, un document inchangable et vous ' construisez la chose erronée parfaitement M SK2 fonctionnent très, très rapidement dans la direction erronnée'). Traitez-le comme un outil vivant et vous

Cette approche agile à l’égard des spécifications crée un défi particulier: si la fonctionnalité peut évoluer au fur et à mesure que vous apprenez , comment tu l’estime-t-il ?

En général, un principe que j’ai respecté dans ma carrière.

Fondamentalement; une spécification de fonction est un outil de conversation pour améliorer la fonctionnalité NON un dogmatiqueM SK1 LA loi inchangée.

Pourquoi l’agile ( et ce que cela signifie en réalité

L’agilité n’est pas un obstacle à la mise en place d’un système de gestion des risques. Stratégie économique pour bâtir la bonne chose sous l'incertitude. Les spécimens vivent à l’intérieur de cette incertitude ,, donc ils doivent être aussi agiles Manifeste Agile, laissez-le devenir la façon dont vous pensez au développement de tout ce que vous faites . Pensez à cela comme à un modèle de conception pour le développement des produits . Il ne s’agit pas d’un processus, mais d’une mentalité.

Principes fondamentaux

  • Le changement est par défaut, non l'exception. Les marchés évoluent.
  • L’apprentissage bat la prédiction. Vous découvrirez les exigences réelles seulement après que les humains ont touché la chose. Agile fait de l’apprentissage économie et rapidité.
  • Flow over heroics. Petits, des mouvements continus battent les grandsM SK1 peu fréquents “ un grand bang” des chutesMSC4

L’économie (comment cela vous permet d’économiser de l’argent?

  • Réduire au minimum le coût de l’erreur. Les cycles courts + les spécifications de poids léger signifient que les mauvaises idées meurent rapidement au lieu d’être construites six semaines plus tard
  • Délai des décisions irréversibles. Maintenir les options ouvertes jusqu’au dernier moment responsable; s’engager lorsque l’information est la plus élevée et le risque le moins élevé
  • Réduire l’inventaire. La moitié des épiques écrites et les sections massives de la LSQ1, de la future LS Q2 sont du travail.

Les boucles de rétroaction sont le produit.

Chaque boucle accroît la distance entre “ideaM SK1 et “utilisable”:

  • Spec ⇄ Dev: Capture des impossibilités avant que le code ne les cimente.
  • Dev ⇄ QAM SK1 transformer les critères d'acceptation en vérifications exécutables.
  • Aliments pour chiens internes ⇄ Utilisateurs: démontrer qu’il résout un problème réel, non imaginatifM SK1

Mise à jour de la spécification après chaque boucle. Le journal des changements est le L'histoire de ce que vous avez appris.

Qu'est-ce qui rend une bonne spécification

Le modèle de résolution du problème-

Le principe le plus important pour écrire les spécifications: Commencez toujours par le problème, non la solution.

Ce modèle est simple:

  1. Problème - Qu’est-ce qui ' est en fait défectueux ? Quels sont les souffrances subies par les utilisateurs M SK3 Quelle serait l’opportunité que la fonctionnalité créerait MSC4
  2. Solution - Voici comment nous proposons de le corriger / exploiter cette occasion
  3. Dans le champ d'application - Ce que nous faisons dans ce spec
  4. À l'extérieur de la portée - Ce que nous ne faisons pas explicitement ', qu'il est tout aussi important d'agir en ce qui a trait à la planification future et arrête les questions suivantes :

I' j’ai vu des spécifications innumérables qui sautent directement dans "User clicks button X which calls API Y" without ever explaining what the user is actually trying to achieveM SK3 This is arseMNK4backwardsMRK5 Les détails de la mise en œuvre devraient s’écouler naturellement à partir d’une compréhension du problème MNK6

Rappelez-vous que les développeurs sont des machines de construction de fonctionnalités (code est l’outil pour livrer des fonctionnalités a besoin de faire PAS comment le faire. si vous avez une personne UX qui est responsable de la spécification UX, alors le développeur et eux devraient travailler ensemble. Le point est d'établir la meilleure fonctionnalité pour l'utilisateur qui peut changer et quiconque est habilité à faire pression pour le changement ( dans la spécification ) et à avoir ce processus d’examen tester l’idée

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é de l'objet

Avant de rédiger un mot sur la mise en œuvre, vous devez répondre à une question. Pourquoi?

Pourquoi construisons-nous ce système?

Une bonne spécification commence avec:

  1. L'énoncé du problème - Qu’est-ce quiM SK1 est-il endommagé ou manquant ? Spécifiez-le
  2. L'incidence sur les utilisateurs - À qui il importe et pourquoi?
  3. Critères de succès - Comment pouvons-nous savoir que nous l’avons résolue?
  4. Objectifs non - - Qu’est-ce que nous ne faisons pas explicitement ?

Le niveau de détail approprié

C’est là que la plupart des spécifications vont tits-upM SK1 Trop vague et les développeurs sont laissés à penser; trop détaillés et vous 're micromanaging implementation choices that developers are better qualified to makeMSC4

Le truc consiste à spécifier LE QUESTION Il faut que cela se fasse sans prescrire COMMENT il se produit. Par exemple:

BonLorsqu’un utilisateur tente de soumettre un formulaire comportant des données invalides, il doit recevoir une rétroaction immédiate indiquant les champs à corriger.

Faible: "Aux fins de la présentation du formulaire, le bouton de soumissionM SK3s onClick l'interprète devrait appeler validateFormMSC4 qui se répète par le biais du formulaireArraye des champs vérifiant chaque champMNK5valeur contre sa validationMRK6propriété regex et si aucun défaut doit appeler showErrorMEK7 avec le champ MNK8nom et validation.paramètres de messageMNK10

La première m’indique quelle devrait être l’expérience de l’utilisateur; Je peux la mettre en œuvre dans React, VueM SK2 JavaScript vanilla , ou pigeon transporteur pour tout ce qui importeMSC4 La seconde suppose des détails de mise en oeuvre qui pourraient être complètement erronés pour le cahier technique ou introduire des contraintes inutilesMST5 Différentes personnes ont des forces différentes souvent la personne qui écrivait la spécification n’est pas MST6t technique Mst7 n’était pasM st8t celle qui écrirea le codeMSt9 Imaginez vous être un chauffeur de taxi et ne pas avoir été informé du lieu de destination mais chaque changement de vitesseM ST10 miroir etc.

## Utiliser des images / diagrammes de débit; Obtenir le point à travers

Rappelez-vous que vous 'essayons de faire comprendre aux gens ce que vous suggérez 're suggérant Veiller à ce que vous soyez compris. Utilisez les outils dont vous avez besoin

Dans un Wiki mermaid.js, les diagrammes sont GREAT pour ce ! ; rappelez que l’AI est très efficace pour les produire aussi en donnant une description textuelle

Certaines personnes peuvent analyser des descriptions écrites, certaines ont besoin de photos et de filmsM SK1

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]

Traitement des cas de bord et d'erreurs

S’il y a une chose, je l’ai apprise. Les utilisateurs trouveront des façons de briser votre merde que vous n'avez jamais imaginé.

Une bonne spécification ne décrit pas simplement le chemin heureux, mais considère qu’il s’agit d’un chemin positif.

  • Que se passe-t-il lorsque le réseau échoue à la mi-parcours de l’opération?
  • Que faire si l'utilisateur n'a pas de permissions?
  • Que dire des modifications concurrentes?
  • Comment traiter les défaillances partielles dans des opérations distribuées?

Il n’est pas nécessaire de résoudre toutes ces questions dans la spécification, mais il faut reconnaître qu’elles existent.

Pour MANY, il est probable que ces spécifications ne soient pas applicables à ce spec.

Considérations relatives à la sécurité et au rendement

Ces exigences ne devraient pas être prises en considération lors de l’examen du code.

De même, s’il y a des contraintes de performance qui sont importantes M SK1 Cette recherche doit être effectuée sous 200ms pour les ensembles de données d’un nombre maximal de millions d’enregistrements

Structure d'une bonne espèce

Voici le modèle que j’utilise pour les spécifications de fonctionnalités.

1. Aperçu

Un paragraphe ou deux résumant ce que nous construisons et pourquoi cela est important.

2. Contexte

Quel est l’état actuel de la situation?What' What prompted this feature?What have users been asking for?What would help us make more money?

Je l’ai reçu—let Les histoires des utilisateurs avec des personnes enduites dans, de sorte qu’il’ n’est pas seulement une liste de contrôle mais une carte vivante de la façon dont les différents types d’utilisateurs interagissent avec le système .


3. Historiques d'utilisateurs (avec Personas)

Les histoires des utilisateurs ne sont pas seulement une boîte, mais aussi un exercice d’affichage. Intégrer des gens réels et leurs objectifs. Vous connaissez, vos utilisateurs c'est tout le point de construire cette merde.. En assurant l’ancrage de chaque histoire à une personne, vous vous forcez à réfléchir aux habitudes d’utilisation réelles.

En fin de compte, les personnes sont un bon moyen d’identifier comment votre logiciel peut servir différents TYPES d’utilisateurs. Peut-être Alex a besoin d’un tableau de bord pour voir les problèmes de sécurité dans votre fonctionnalité, peut-être Morgan a besoin de ses permissions restreintes pour lui empêcher de détruire des choses, etc.

En tant que [Personne / type d'utilisateur] Je veux [pour faire quelque chose] Ainsi que [J’ai atteint un objectif.

L'article 5 de la Loi sur l'immigration et le statut des réfugiés “soit queM SK1 La clause est la garantie contre les caractéristiques de construction dont personne n’a besoin.


Exemple Personnes

  • Alex l'Administrateur – se soucie du contrôleM SK1 de la surveillance , et de l’efficacité.
  • Jamie l'utilisateur occasionnel – valorise la simplicité et les gains rapidesM SK1
  • Priya l'utilisateur de puissance – pousse le système à ses limites, veut une customization avancéeM SK2
  • Morgan le nouveau venu – a besoin d’une orientation , à bord de l’aéronef
  • Taylor, intervenant – ne utilise pas le système tous les jours, mais il faut une visibilité des résultats.

Échantillon de récits d'utilisateur

Personne Historique Pourquoi cela est important
Alex (Administrateur) En tant que Administrateur, Je veux attribuer des rôles et des permissions de façon à ce Je peux assurer la sécurité des données et leur conformité. M SK1 Prévient l'accès non autorisé et maintient le système digne de confiance
Jamie Utilisateur occasionnel, Je veux un tableau de bord simple de façon à ce Je peux voir rapidement l’information la plus importante sans être surpeuplée. M SK1 Réduit les frictions et augmente l’adoption
Priya Utilisateur de puissance, Je veux créer des flux de travail personnalisés de façon à ce Je peux automatiser les tâches répétitives et économiser du temps. Débloque l'efficacité et les cas d'utilisation avancées.
Morgan (Nouveau(e) arrivant(e). Nouveau-commissaire, Je veux des guides et des conseils d'outils de façon à ce Je peux apprendre le système sans se sentir perdu. M SK1 Améliore l’aéronef et la retenue.
Taylor (Contrôleur de l’entreprise Les intervenants, Je veux recevoir des rapports réguliers par courriel de façon à ce I can track progress without logging in. M SK1 Keeps decision -makers informed and engaged.

Pourquoi les personnages + Stories travaillent ensemble

  • Personnes humainent l’abstract. Au lieu de “consommateurs,”, vous ’ pensez à AlexM SK3 JamieMST4 PriyaM ST5 MorganMTS6 et TaylorMSS7
  • Les histoires lient les caractéristiques aux objectifs. Le “ afin que la clause ” force la clarté M SK2 chaque caractéristique doit servir un but .
  • Des patrons apparaissent. Lorsque vous composez plusieurs histoires, vous voyez des chevauchements, conflits et priorités entre les personnes.

4. Exigences détaillées

Il s’agit de votre viande et de vos pommes de terre.

Pour chaque exigence, spécifier,

  • Le comportement attendu
  • Toutes contraintes ou règles de validation
  • Exigences relatives à la gestion des erreurs
  • Comment il interagit avec les caractéristiques existantes

5. NonM SK1Exigences fonctionnelles

Objectifs de rendement,exigences en matière de sécuritéM SK1standards d'accessibilité ,browser/support des périphériquesMSC4 Ne pas assumer que ces éléments sont évidentsMNK6 Mais dans certaines équipes, ils peuvent être TOTALES AUTRES ÉQUIpesMMK7mais ne pasMRK8ne pas perdre l'attentionMBK9 Si une partie de votre cycle devient un cascade alors vousMEK10 avez perdu l'agilité par définitionMDK11

6. hors champ d'application

Cette section est tout aussi importante que ce que vous faites.

Pourquoi cela importe:

  • Prévient la perte de champ d'application - " Mais ne pouvions-nous pas ' nous n’avons pas seulement..." les conversations meurent rapidement lorsque vous pouvez indiquer à la section Out of Scope
  • Établit les attentes - Les intervenants savent quoi 't être livrée (à ce momentM SK1
  • Activer les travaux futurs - Les articles ici pourraient devenir leurs propres spécifications plus tard
  • Concentrer l'équipe - Tout le monde connaît les limites de ce travail

Exemples de biens hors champ d’application:

  • "Support mobile ( sera abordé dans une spécification distincte
  • "Migration des données existantes
  • "Interface de l'administrateur pour la configuration
  • "Intégration avec le Système X

Si quelqu’un fait valoir qu’une question hors de la portée de l’article - du - devrait figurer dans le champ d’application de celui-ci, , indique que ' est une conversation qui vaut la peine d’être tenue AVANT le début du développement , n’est pas à mi-chemin de mise en œuvre

7. Questions ouvertes

Soyez honnête quant à ce que vous ne savez pas.

8. dépendances

Quels autres systèmes/teams /features dépendent-ils de ce qui se passe?

9. Critères d'acceptation

Comment l'AQ vérifiera-t-elle cette question?? Ces déclarations devraient être concrètes.

Le problème des bogues de Spec

C’est là quelque chose dont on ne parle pas assez. Les spécifications peuvent comporter des erreurs too.

Une erreur de spécification se produit lorsque la spécifications elles-mêmes sont incorrectes.

Comment les bogues de Spec se produisent

  1. Perception incomplète - La personne qui écrivait la spécification ne comprenait pas pleinement le problème ou le système existant.
  2. Exigences conflictuelles - Différentes parties prenantes veulent des choses différentes et personne n’a résolu le conflit.
  3. Impossibilité technique - La spécification demande qu’on fasse quelque chose qui ne peut pas être fait dans les limites raisonnables.
  4. Changement des exigences - Le monde a progressé, mais la spécification n’a pas été mise à jour

Traitement des bugs spéciaux

Lorsque vous trouvez une erreur de spécification en tant que développeur, vous avez quelques options:

Option 1: Le relever immédiatement

C’est presque toujours la bonne réponse.

Envoyez un message clair à quiconque possède le spec:

  • Ce que dit la spécification
  • Pourquoi la question de ' est-elle problématique
  • Que pensez-vous que devrait se produire plutôt (si vous avez une suggestionM SK1

Veuillez le faire par écrit.

Option 2: La mettre en œuvre de toute façon

Parfois, vous serez tenté de construire simplement ce qui est spécifié, même si vous le savez. DON'T DOT THIS.

J’ai vu les développeurs mettre en œuvre des spécifications qu’ils savaient être erronées parce que "c’est ce que 'tout cela dit de faire" et ensuite agir surprenant lorsque la QA le rejette ou que les utilisateurs se plaignent.

L’exception est que si vous' avez soulevé la question(s), ,, on vous a dit d’aller de l’avant, , et que vous l’avez reçue par écrit(s).

Option 3: Fixer par vous-même

Si vous êtes certain que vous savez ce qu’il faut dire dans la spécification, vous serez peut-être tenté de le corriger par vous-même.

Ne changez jamais silencieusement les exigences. C’est ainsi que vous obtiendrez des caractéristiques de construction dont personne n’a demandé

Prévention des erreurs de spécification

La meilleure approche consiste à prévenir les bugs spéciaux en premier lieu:

  1. Faire participer les développeurs tôt - Obtenir l’examen technique des spécifications avant qu’elles ne soient finalisées.
  2. Faire en sorte que les AQ soient prises en charge tôt - Si on ne peut pas l’essayer, il n’est pas possible de construire, ' votre travail consiste à faire quelque chose qui puisse être utilisé par les utilisateurs.
  3. Utiliser des exemples de façon libérale - Les descriptions abrégées sont faciles à mal interpréterM SK1 Exemples concrets "L'utilisateur John a la permission X, essaie de faire YMST4 et voit ZMSS5 sont beaucoup plus clairsMSST6
  4. Valider contre le système existant - La spécification fait-elle des hypothèses sur la façon dont les choses fonctionnent actuellement?
  5. Iterer sur les spécifications - Traiter la spécification comme un document vivantM SK1 Comme vous en apprendrez davantage pendant la mise en œuvre, la mettre à jourMSC3 Les futurs développeurs vous seront reconnaissants .

Cas spéciaux communs

The Novel-Length Spec

Certaines personnes pensent que plus de détails sont toujours meilleurs.

Si votre spec se transforme en guerre et paix, vous êtes soit :

  • Besoin de l'établir en fonctions multiples
  • Préciser les détails de mise en œuvre qui devraient être laissés aux développeurs
  • Résoudre le problème erroné et faire un pas en arrière

La vague onde des mains

Le problème opposé : "Construire un système de rapports ." Oui M SK3 Je vous félicite pour cela MSC4 IM SK5 Je mettrai tout simplement quelque chose sur la table et nous' Nous verrons s’il correspond à ce que vous avez eu dans votre tête.

Si votre spécification peut être pleinement saisie dans une seule phrase, il 'il n’est pas un spécificateur;ilM SK3il s’agit d’un souhait vague

La solution-First Spec

"Nous avons besoin d’un clavier de bordM SK1est-ce'il n’est pas une exigence ;c’est une solution préconçue

La cible en mouvement

Les exigences qui changent quotidiennement sont les suivantes :

La vaisselle de cuisine

" Alors que nous sommes là, ' Nous pourrions-nous y être aussi?

Traitement des spécifications comme le code source

C’est le changement de mentalité qui a changé la façon dont je écrive les spécifications: Traitez votre spécification exactement comme vous traitez le code source.

Contrôle de la version

Vos spécifications devraient être contrôlées en version à côté de votre code. Vérifiez-les dans les fichiers. Suivez les changements de traçageM SK2 Rédigez des messages d'engagement significatifs lorsque vous les mettez à jour . Ceci crée une histoire de la façon dont les exigences ont évolué

À Microsoft, nous avons maintenu les spécifications dans les mêmes répertoires que le code.

Réfactorisation des spécifications

Tout comme le code doit être réfactorié,, aussi les spécifications. À mesure que vous apprenez davantage pendant la mise en oeuvreM SK2, la spécification devrait évoluer pour refléter cet apprentissage .

Trouver une meilleure façon de résoudre le problème? mettre à jour la spécification pour refléter la nouvelle approche et expliquer pourquoi vous avez changé de direction . découvrir un cas en bordure que vous n’avez pas examiné ' ne l'avez pas pris en considération

Les spécifications après le développement devraient être plus raffinées que celles avant le développement.

Le principe du document vivant

Une spécification n’est pas 't "accompliquéeM SK2 lorsque le développement commence, c’est 'c’est juste ♫'réaliste~' pour ce stade . Celle-ci ' est faite lorsque la fonctionnalité se déplace et devient un mode d’entretien

Cela ne signifie pas que la spécification devrait changer quotidiennement.

Pensez-en de cette façon: si vous voudriez' ne laisser pas les commentaires périmés dans le code , ne laissez pas l’information périmée dans les spécifications

Pourquoi les spécimens doivent demeurer en actualité

Il y a ici quelque chose qui ne fait pas l’objet d’un débat suffisant. votre spec devient la base de tout ce qui vient après.

Plans d'essai: L'AQ écrit les cas d'essai en fonction de la spécification. Si le spécificateur est désuet , Les essais font l'objet d'une vérification erronéeM SK3 Vous obtiendrez des positifs faux

Documentation: Documentation de l'utilisateurM SK1 Dossiers API, Systèmes d'aide , votre fantaisie agent de soutien RAG AI | - ils allèguent tous à la spécification\ . Si le spécificateur décrit des éléments qui ne sont pas existants ou manquent les éléments qui le sont |, vos dossiers sont erronés depuis le premier jour

Développement futur: Quand quelqu’un a besoin d’étendre la fonctionnalité six mois plus tard , ilsM SK2 liront le spécimen pour comprendre comment elle fonctionne . Si elle ne correspond pas à la réalité MSC4 elles,ilsMST6commenter avec des hypothèses incorrectes MST7

Débarquement: Les nouveaux membres de l’équipe apprennent le système partiellement en lisant les spécifications . Les spécificateurs périmés leur inculquent un modèle mental erroné sur la façon dont fonctionnent les caractéristiques

C’est pourquoi la spécification doit demeurer courante. Il ne s’agit pas seulement de la mise en oeuvre initiale ; il est fondamental pour tout le reste

À Microsoft, nous avons traité les mises à jour des spécifications avec la même importance que l’actualisation du code. Les modifications de spécification ont fait l’objet d’une révision . Elles ont été mises en version parallèlement au code

Si vous modifiez le code mais ne mettez pas à jour la spécification, vous aurez créé un DEBT TECHNIQUE.

# La relation entre spec et mise en œuvre

Voici ce que les jeunes développeurs ne comprennent souvent pas : La spécification n'est pas la source de la vérité; le code est.

Les spécifications vous disent ce que vous cherchez à bâtir.

Cela signifie:

  1. Les espèces devraient évoluer - À mesure que vous découvrez des choses pendant la mise en œuvre , mettre à jour la spécification. IlM SK3 sa documentation de ce que vous construisezMSC4 , n’est pas un texte sacréMNK6
  2. Détails de mise en œuvre Don't appartient aux spécifications - Une fois que vous ' avez commencé à mettre en œuvre , le code lui-même documente la façon dont
  3. Tests pour combler la lacune - De bons essais permettent de vérifier que la mise en œuvre correspond aux exigences.

Écrire des spécifications pour différents auditoires

Différents gens ont besoin de choses différentes des spécifications:

Exécutifs - Vous voulez connaître la valeur de l’entreprise et le calendrier approximatif . Donnez-leur un aperçu et des critères de réussite M SK2

Gestionnaire de produits - Besoin de comprendre comment il s’inscrit dans la stratégie et la feuille de route des produits plus vastesM SK1 Donnez-les les histoires d’utilisateurs et les dépendances

Développeurs - Besoin de suffisamment de détails pour mettre en œuvre correctement sans être informé de la façon dont ils doivent faire leur travail . Donnez-leur les prescriptions

QA - Besoin de savoir comment vérifier qu’il fonctionneM SK1 Donnez-les les critères d’acceptation.

Des concepteurs - Besoin de savoir quelle devrait être l'expérience de l'utilisateur . Donnez-leur les histoires d'utilisateur et les flux d'interaction M SK2 Il est encore préférable qu'ils développent un spec UX / tableaux d'histoire en parallèle tout en travaillant avec le dev

Une bonne spécification sert tous ces auditoires sans être bloquée. Utiliser des sections et une structure pour que les gens puissent lire ce qui leur importe

Évaluation de votre spec

Avant d’appeler une spécification faite, demandez à vous-mêmes:

  1. Un développeur qui n’a jamais vu cette fonctionnalité pourrait-il la construire à partir de ce spec? Si ce n’est pas le cas, vous' vous manquez de détailsM SK2 NEVER have pieces like MSC3this works like feature x in the currrent system '. Premièrement, cette fonctionnalité pourrait changer ou être difficile à comprendre les cas-marchésMST8
  2. Peut-on QA rédiger des cas d'essai à partir de ce spec? Si ce n’est pas le cas,, vos critères d’acceptation ne sont pas suffisamment clairs'
  3. Pouvez-vous construire quelque chose complètement inutile qui correspond toujours à cette spécification? Si oui, vous n’avez pas capté correctement les besoins réels '
  4. Cette spécification décrit-elle comment mettre en œuvre ou OUI réaliser? Si ce n’est le premier, vous assurez la microgestion.

L'approche agile à l'égard des spécimens

Mais nous sommes agiles. Nous n’avons pas besoin de spécifications.

L’agilité n’implique pas 't, c’est-à-dire "pas de planification" ou "absence de documentationM SK4 Il s’agit de réagir au changement par suite d’un plan. Les spécifications sont des outils, non des contrats. Vous les créez avec suffisamment de détails pour commencer.

Comment les espèces agiles diffèrent de la cascade

La différence fondamentale est le format ou la longueur de ;, mais aussi sa mentalité et son processus.

Espèces des chutes d'eau:

  • Rédigé entièrement à l'avant avant tout développement
  • Obtenir l'intégrité dès le premier jour
  • Les changements nécessitent des processus formels de contrôle du changement
  • La spécification est "bloquéeM SK1 une fois approuvée
  • Suppose: nous pouvons savoir tout avant de commencer
  • Linéaire: Spec M SK1 Établissement → Essai → Déploiement

Specs agile:

  • Commencez par un détail viable minimal pour commencer
  • Expérer une incomplète au début (et que 's fineM SK2
  • Les changements sont attendus et bienvenus
  • Spec évolue continuellement avec la fonction
  • Assomption: nous'apprenons tout en construisant
  • Cyclique: Ébauche M SK1 Établissement → Apprenez CSM3 Spec de mise à jour CSM4 Établissez plus MCSM5 Apprentissage plus

L’approche de la cascade suppose que vous pouvez spécifier tout parfaitement avant d’écrire une ligne de code. Que ' est une belle fantaisieM SK2 Dans la réalité, vous découvrirez la moitié des exigences une fois que les utilisateurs ont effectivement essayé la fonctionnalitéMSC4 Planifier pour celaMST5 l’adopterM ST6 Les utilisateurs sont les testers ULTIMATEM st7 Ils peuvent détruire ce qu’ils n’ont pas faitMst8 ils ne savent même pas qui vous êtesMSt9 il a été fait à un rythme qui semble violer la causalitéM St10 attendez-le,MST11 le planifiez,Mst12 le registrez et le corrigez,MSt13 et le ajoutez à une spectre future MS ST14 cette si vousM S ST15 vous êtes encore dans la spectre,MS S ST16 s M S ST17 durée de vie,M S S ST18

## Les boucles de rétroaction sont tout

Dans le cadre d’un spectage agile, les boucles de rétroaction sont votre meilleur ami.

Rétroaction du développeur: "L'approche initiale a gagné't ne fonctionne pas parce que XMSC3 IM SK4m propose Y au lieu de l'amendement+." \→ Mise à jour des spécifications pour refléter la nouvelle approche et pourquoi elle a changé+. En fin de compte, vous='vous êtes ALWAYS le premier 'utilisateur~' d'une fonctionnalité~. Si cela semble une merde~M SK12sepc bug and get it sorted (Even if you stop whatever sprint ♪/ spike etc to do it ♪

Rétroaction des utilisateurs: Essayez la fonction avec des utilisateurs réels ( même à l'interne). "Ce n'apporte pas de solution à mon problème car Pivot la spécification selon ce que vous apprenez.

Rétroaction sur la mise en œuvre: À mesure que vous construisez,, vous détectez les cas à bordM SK2 les contraintes techniques , ou des approches plus efficaces

Rétroaction en matière de QA: "La spécification dit X, mais n’a pas pris en considération le scénario YM SK2

Chaque cycle de rétroaction permet d’améliorer la spécification.

C'est la raison pour laquelle les spécifications des chutes font souvent défaut: elles échappent aux cycles de rétroactionM SK1 Au moment où vous découvrez que le spec était erroné , vous' avez construit la chose erronée et MSC4 changer la spécification

Une grande chose, rétroaction aussi tôt que possible. C'est pourquoi j'ai construit LLMApi il vous aide à construire un BIT puis à utiliser des données fausses pour obtenir une rétroaction utile.

Accepter l’incomplété (A la première foisM SK1

Voici ce qui fait nerveux les gestionnaires de projet traditionnels. il' est tout à fait bon si la spécification initiale comporte des lacunes

Marquez les sections comme suit : "TBDM SK1 si vous ne le savez pas'ne sait pas encoreMSC3 Listez les questions ouvertes de façon éloignée . Soyez explicite sur ce que vous n’avez pas encore comprisMSSK5ne l’avez toujours pas compris

Ce n’est pas de la piètreté, mais de l’honnêteté. Vous ne connaissez rien, ', vous ne savez pas tout à l’avance.

Commencez par:

  • Déclaration de problème claire ( vous devez le savoir )
  • Approche de solution proposée (mois changements possiblesM SK1
  • Critères approximatifs "accomplétésM SK1critères ( seront raffinés)
  • Questions ouvertes

Ensuite, remplissez les lacunes au fur et à mesure que vous apprenez.

La spécification changera

Acceptez-le maintenant: votre spécification changera au cours du développement. Si ce n’est pas le cas, soit vous avez eu une chance incroyable ou vous n’avez rien appris.

Changements à attendre:

  • L'approche technique évolue lorsque vous détectez des contraintes
  • Ajustement de la portée lorsque vous constatez que vous construisez trop (ou trop peu
  • "Améliorer les critères de l’examen afin que vous compreniez mieux le problème
  • Nouveaux cas de bord découverts pendant la mise en œuvre
  • De meilleures solutions trouvées grâce à l'expérience

Chaque changement devrait être:

  1. Documentation - Mettre à jour la spécification , ne pas modifier le code
  2. Communiqué - Dites aux intervenants ce qui a changé et pourquoi
  3. Raisonnée - Expliquez ce que vous avez appris qui a incité le changement

L'historique de la version du spec' devient un document de ce que vous avez appris.

Lorsque les spécifications agiles vont mal

L’approche agile peut échouer si vous oublierez une chose cruciale: " changera " ne signifie pas

mauvaise spécification agile:

  • Les spécifications changent quotidiennement sans raison claire
  • Aucune définition de "doneM SK1, la fonction continue d'augmenter
  • Les changements n’ont pas été communiqués.
  • "Agile" utilisé comme excuse pour ne pas réfléchir
  • Les intervenants sont surpris par les changements de portée parce qu’aucun ne leur a dit

Bonne spécification agile:

  • Les changements se produisent pour des raisons claires fondées sur l'apprentissage
  • Les critères sont clairs, même si d’autres détails ne le sont pas
  • Les modifications sont discutées, approuvées , et documentées
  • Être agile ne signifie pas, ', être piètre.
  • Les intervenants font partie du cycle de rétroaction

Le spec est un document vivant, mais il n’est pas chaos. Il évolue sur la base de l’apprentissage et non des caprices.

Il ne fait jamais ce que vous voulez et il l’appelle toujours.

Il s’agit d’un processus dynamique dont le but principal est de bâtir les meilleurs produits aussi rapidement que possible. Manifeste Agile dit comme il l’a fait : « Le premier principe de ' est le suivant:

" Notre priorité la plus élevée est de satisfaire le client par le biais d'une livraison rapide et continue de logiciels précieux."

Il n’est pas important de s’enfuir en tirant du code parce que vous aimez le sentiment.

Just Enough Detail to Start

Il s’agit de savoir ce que nous devons savoir pour commencer à construire avec confiance.

Pour certaines fonctionnalités qui pourraient être:

  • Un paragraphe décrivant le problème
  • Trois points de tir en vue d'élaborer la solution
  • Une définition claire de ce que "done" ressemble

Pour d’autres, il pourrait être ::

  • Flux d'utilisateur détaillés avec des modèles
  • Exigences relatives au rendement fondées sur les données
  • spécifications d'intégration pour plusieurs systèmes

Ajouter des détails lorsque l’incertitude existe. Si tout le monde est d’accord sur la façon dont une chose devrait fonctionner, vous n’avez pas besoin de l’écrire en détail.

Mais au bout du compte, il y a suffisamment de détails pour lancer le cycle de rétroaction.

## Templates and AI: Getting Started Quickly

Ne pas trop considérer la spécification initiale.

  • Une estimation approximative (même un SWAG - Shitty WildM SK2Assed Guess MSC3 est meilleur que rien MSC4
  • Input pour les discussions sur la priorité
  • Il suffit pour vous personnellement de commencer à coder

Utiliser des modèles: Mettre en place un modèle de base avec les sections clés (Problème, RésolutionM SK3 Dans l'étendue du champ d'applicationMSC4 À l'extérieur de l'éventail de la zone d'utilisationMska5 Critères remplisM Ska6 Remplissez ce que vous savezMka7 Laisser les section(s) vides si vous ne le savez pasM ska8ne sait pas encoreMSKA9 Nommer celles-ci comme :

Un modèle simple pourrait être ::

# [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
-
-

C’est ce qu’il faut faire. Il y a cinq minutes pour le remplir et vous avez assez pour commencer à discuter ou même construire.

Utilisation de l'AI pour dessiner des spécifications: Des outils comme Claude ou ChatGPT peuvent être brillants pour obtenir un premier ébauche. Envoyez-le le problème et quelques contextes

Mais - et cela est critique - don't let the AI 's thoroughness seduce you into adding everythingM SK2

L’AI aime être globale. ElleM SK1 vous donnera des sections sur les considérations de sécurité, Exigences en matière de rendementMSC3 Accèsibilité , InternationalisationMST5 Traitement d’erreurs MST6 EnregistrementM ST7 SurveillanceM st8 Stratégie de déploiementMst9 Plans de roulementMSt10 et dix-sept autres choses dont vous aurez peut-être besoinMSS11 finalementMSSS12

Débarrasser la majeure partie de cela. Gardez ce dont vous avez besoin NOW. Le reste peut être ajouté plus tard lorsque vous le aurez réellement besoinM SK2

Pensez au spec généré par l’AI- comme à un menu . Choisissez les bits qui sont importants pour le démarrage

L’objectif n’est pas ', il s’agit d’un spectre complet, mais de ;, et ' est suffisamment précis pour commencer à travailler. . Que ce soit une estimation rapide, ,, une décision sur la priorité ou simplement une clarté quant à ce que vous construisez pour vous-même.

Le modèle de collaboration

Voici les changements apportés à l’agile Vous ne faites pas de spécifications et jetez-les sur le mur aux développeurs. Le spec est un effort de collaboration.

La meilleure approche que j’ai vu I'

  1. Product/PM décrit le problème - Que faut-il résoudre et pourquoi
  2. Les développeurs contribuent à l'approche technique - Comment pouvons-nous le résoudre , Quelles sont les contraintes
  3. Les concepteurs contribuent aux exigences UX - Quel devrait être l'expérience de l'utilisateur
  4. QA contribue aux scénarios d'essai - Cas à bord et méthodes de validation

Tout le monde contribue à la spécification.0 Aucun n’en possède exclusivement.1 Cette approche coopérative attire les problèmes tôt lorsqu’ils sont résolus.2 Il est plus économique de les régler que tard quand ils sont coûteux.4

Plus important encore, , signifie que la spécification reflète ce qui est réellement possible, mais non ce que quelqu’un souhaitait en isolement.

Évolution au cours du développement

Voici' où les spécifications agiles diffèrent de celles traditionnelles: la fonctionnalité peut évoluer au fur et à mesure que vous la construisez.

Vous découvrez que votre approche initiale a été retenue' ne fonctionne pas ? Mise à jour de la spécification pour refléter la nouvelle approche.

Vous essayez la fonction et constatez qu’elle ne résout pas le problème.

La rétroaction de l’utilisateur révèle une meilleure solution? L’intégrer et expliquer le changementM SK1

Cette évolution est une caractéristique.

Mais cela crée un problème: si la fonction peut changerM SK1 comment l’estimer? Comment savoir quand vous le faites?

Le défi de l'estimation

C’est le secret de l’agile: L’estimation est vraiment difficile lorsque les caractéristiques peuvent évoluer.

Les estimations traditionnelles supposent que vous saviez ce que vous construisez.

L’estimation agile reconnaît que vous ne connaissez rien'pas tout à l’avanceM SK1 La fonctionnalité pourrait changer au fur et à mesure que vous apprenez . Comment est-ce que vous estimez?

Vous estimez les plages, non des valeurs absoluesM SK1 Au lieu de ", cela prendra 3 semaines M SK2 vous dites "dans un endroit entre MSC4 et MSC5 semaines selon ce que nous découvrerons

Vous estimez en iterations. Nous passerons un sprint à l’exploration de cette question et ferons rapport sur ce que nous avons appris. Ensuite, nous pourrons estimer le reste avec plus de précision.

Vous utilisez le temps-box au lieu du champ d’applicationM SK1boxing. Nous passerons 2 semaines à ce projet. À la fin de 2 semaines, nous aurons la meilleure version que nous pourrons construire en cette périodeM SK6

Mais toutes ces approches ont une exigence essentielle : Vous devez savoir ce que "doit" signifie Sans une définition claire de fait,, une fonction peut continuer à métasser pour toujours.

Il s’agit d’une critique courante de l’Agile par rapport aux approches Waterfall.

Définir "DoneM SK1 (Our Comment mettre fin à la métastase de l'élément de fonction)

C’est là que de nombreuses spécifications agiles se détruisent.

Sans une définition claire de ce qui a été fait, les caractéristiques ne se terminent pas, ' ne s’achèvent pas et ; mettent en métastase, . ne se propagent pas,. ne font que pousser des tendrils vers d’autres parties du système.

Le problème avec la vague "Done"

I' j’ai vu des spécifications comportant des critères d’acceptation comme

  • "Les utilisateurs peuvent commenter les articles
  • "Le tableau de bord montre les informations pertinentesM SK1
  • "La recherche fonctionne bien"

Ce n’est pas une définition de « fait », mais des aspirations vagues.

Le développeur doit savoir: quelle chose spécifique, lorsque mise en œuvre, signifie que je peux cesser de travailler sur cette fonctionnalitéM SK2

Critères d’écriture de béton "Done"

Bonne "doneM SK1 Les critères sont :

  • Évaluable - Vous pouvez vérifier s’il
  • Spécifique - Pas de mots vagues tels que "goodM SK2 ou "relevant"
  • Bounded - Ils n’impliquent pas une portée infinite

Faible: "Les commentaires devraient être modérésM SK2 Bon: "Les utilisateurs de l'administrateur peuvent approuver les commentaires, rejeter ceux-ciM SK3 ou supprimer les commentaires du panel d'administrateursMSC4 NonMNK5 Les commentaires approuvés ne sont pas visibles aux utilisateurs réguliersMRK6 Une notification par courriel est envoyée à l'Administrateur lorsqu'un nouveau commentaire est affichéMMK7

Faible: "La recherche devrait être rapideM SK2 BonLes résultats sont classés en fonction de la pertinence (full-text search score ) with date as tieM SK9breakerMSC10

Faible: "Le tableau de bord montre des mesures utilesM SK2 Bon: "Displays de tableaux de travailM SK2 vues totales de la page ( dernière 30 jours ), visiteurs uniques SMK6 dernière 30 journées), haut de la liste MESK9 articles par points de vue S( dernière 7 jours~), et répartition des visiteurs selon le pays~. Tous les paramètres sont mis à jour une fois l'heureMSC14

Remarquez la différence? Les bons exemples vous disent exactement ce qui doit exister et quand vous pouvez cesser d’ajouter des choses.

La section Out of Scope est votre ami

Rappelez-vous que j’ai dit plus tôt que la section Out of Scope est aussi importante que ce qui suit :

Pour chaque fonction, il y a des dizaines de choses que vous pouvez ajouter.

Dans le champ d'application: Commentaires nichés (un niveau de réponsesM SK2 À l'extérieur de la portée: Traitement des commentaires illimitéM SK1 Vote du commentaire , Traitement des commentaires, Sortage des commentaires le mieux possibleMSC4 permalinks de commentaires MSC5ils peuvent arriver ultérieurement en tant que fonctions distinctesMSM6

Maintenant, lorsque quelqu’un suggère que " devraitn 't les commentaires ont des votes supérieurs?" vous pouvez indiquer la spécification et dire MSC3que SMC4 est hors de portée pour cette iterationMSC5 Laissez l’examiner en tant qu’élément distinct une fois que les commentaires de base sont fonctionnelsM SK7

Oh et la prochaine spécification? Bon, vous avez déjà une foule d’idées bonnes non utilisées captées! Plus facile à commencerM SK2

Time-Boxing as a Last Resort

Parfois, vous ne savez pas vraiment ce qui se passe.

À la fin de 2 semaines, nous ' évaluerons ce que nous avons appris et déciderons si nous voulons produire une seule approche, , essayer quelque chose de différent,, ou abandonner la fonctionnalité.

Mais remarquez que : vous avez encore un béton de construction " réalisée M SK2 condition МSK3 semaines , puis évaluer MSC5 VousM SK6 ne construisez pas seulement indéfiniment MST7 Ces explorations sont souvent effectuées dans un contexte tel qu’une Sprint dans SCRUM appelée une 'Spike'

Spikes & SprintsM SK1

Un Spike est l’un de ces ' aller jouer et trouver cette technologie ' il peut durer aussi longtemps qu’une imprimante

On s’attend à ce qu’une piste soit livrable au bout (qu’une chose autre que la personne qui y participe puisse tester pour le boucle ). Une Spike peut avoir, mais probablement le seul produit livré est les connaissances de l’équipe

Ils sont aussi intéressants pour les développeurs et ils aident l’équipe Je recueille souvent des idées de Spike pendant un projet et quand il y a une pause je laisse aux développeurs choisir d’en explorer une.

Prévention de la perte d'étendue du champ d'application pendant le développement

Même avec des critères clairs "donnée" Critères de l’utilisationM SK2 le champ d’application peut s’écrouler . Vous détectez les cas à bordMSC4 Vous vous rendz compte que les utilisateurs ont besoin d’une chose qu’ils n’avaient pas prise en considérationMNK5non examinéeMMK6 Comment traitez-vous de cette question sans rompre votre définition du fait?

Documentez-le, ne le faites pas Lorsque vous découvrez quelque chose de nouveau qui doit être ajouté, mettre à jour la spécification . Faire explicitement savoir que le champ d’application a changéM SK2 Obtenir l’accord des intervenants.

Cela sert à deux fins:

  1. Visibilité - Tout le monde sait que la portée a changé et pourquoi
  2. Sensibilisation aux coûts - Les intervenants estiment que l’ajout des choses a une incidence sur le calendrier

Si votre spec continue d’augmenter, , signifie que ' est un signal . soit vous construisez la chose erronée ( et vous devez revenir à l’avant et réexaminer ), ou cela devrait être de multiples fonctionnalités , ou vous devez réduire le champ d’application pour envoyer quelque chose utile plus tôt

Quand l'on doit le faire

À un moment donné, vous devez expédier. La fonctionnalité ne doit pas être parfaite ' il faut qu’elle soit utile

Un bon test: Les utilisateurs peuvent-ils tirer profit de cette fonctionnalité en sa forme actuelle?

Si oui, envoyez-leM SK1 Vous pouvez toujours iterer dans la prochaine version. Terminé ne signifie pas ' ne sera jamais amélioréMNK5 Cela signifie MMK6 résout le problème suffisamment bien que les utilisateurs profitent et nous pouvons passer à d'autres travauxMRK7

Si non, vousM SK1la tâche n’est pas encore terminée , indépendamment de ce que votre spécification dit.

La partie la plus difficile de l’agilité est ce qui suit :

Mais rappelez-vous que vous devez évaluer si vous la publiez à tous, avoir un groupe étroit pour A/B M SK2 UAT ( essais d’acceptation des utilisateursMSC4 QueMST5 est souvent une décision commerciale entourant le risqueMst6 Parfois, le public est EN VIGUEUR et voit une fonction de prévision partiellement complétée comme le GOSPEL POUR LA QUALITÉ DE votre SYSTÈMEM st7 Si c’est là un problème, un groupe contrôlé est plus sûrMSt9

# Le processus d’examen des spécifications

Une spécification n’est pas effectuée lorsque vous l’avez rédigé, mais lorsqu’elle a été examinée par les personnes qui la utiliseront.

Treat Spec Reviews Like Code Reviews

Les meilleures pratiques que j’ai apprises à Microsoft: Les commentaires spéciaux fonctionnent exactement comme les commentaires de code. Ils sont 'coopératifs ,non antagonistesM SK2même si le club des garçons de Microsoft'' a souvent fait que les commentaires sur la spécification se sentaient comme un combat gladiatorial si quelqu’un était un pédophile.

Lors de l'examen des spécifications:

  • Demander des questions - "Qu'est-ce qui se passe si X survient?
  • Suggérer des solutions de rechange - "Avez-vous pris en considération l’approche Y?
  • Indiquer les cas manquants - "Il ne s’agit pas d’un scénario Z.
  • Hypothèses de défi - " Pourquoi nous y trouvons-nous de cette façon?

Lorsque votre spécification est examinée:

  • Les questions sont des occasions Ils révèlent ce qui n’est pas clair et ce que vous avez manqué
  • Suggestions améliorent la spécification - Les considérer sérieusement même si vous ne les acceptez pas toutes
  • Il n’est pas personnel - À l’instar de la révision des codes , il s’agit d’améliorer le travail , sans vous attaquer
  • Le réviseur pourrait avoir tort - Expliquez pourquoi votre approche est sensée , ils pourraient également apprendre quelque chose

Les meilleurs examens des spécifications sont les conversations. Vous allez de l’avant à l’arrière. Vous apprenez les uns des autresM SK2 La spécification qui apparaît est meilleure que ce que l’une ou l’autre personne aurait pu rédiger seule .

Qui devrait examiner

Obtenir des commentaires de toutes les perspectives importantes:

Examen du développeur - Cela fonctionnera-t-il réellement?? Y a-t‐il des contraintes techniques que nous n’avons pas prises en considération?

Évaluation du produit - Cela résout-il le problème correct?? Il s’aligne-t-il sur la stratégie de produit? ? Qu’est-ce qui manque dans '?

Examen de la conception - Est-ce que l'expérience de l'utilisateur a un sens?

Examen de la QA Les critères d’acceptation sont-ils suffisamment clairs?

Vous n’avez pas besoin de signaux officiels.

Questions communes d'examen

De bons examinateurs posent des questions qui améliorent le spec:

  • "Qu'est-ce qui se passe si l'utilisateur s'occupe de X?"
  • "Comment cela interagit-il avec la fonction existante Y
  • "Qu'est-ce que 'qui est notre régression si la dépendance Z n'est pas prête?
  • "Pouvions-nous simplifier cette question en faisant W au lieu de ?"
  • "Comment on sait si cela a réussi?
  • "Qu'est-ce que nous ne faisons pas?

Aucune de ces questions n’est achevée. Elles sont des questions authentiques qui permettent d’élaborer le spec.

Incorporation de la rétroaction

Vous wont't accept every suggestion. That 's fineM SK3 But for each piece of feedbackMSC4

  1. Prenez en considération ce qui suit : - Je ne le rejette pas parce qu’ils ne comprennent pas
  2. Si vous le acceptez, - Mise à jour de la spécification, merci au réviseur
  3. Si vous ne l’acceptez pas, - Expliquez pourquoi , peut-être ils M SK2 manquent de contexte
  4. Si ' est hors de portée - Ajoutez-le à la section

La spécification devrait s’améliorer avec chaque cycle d’examen. Si elle ne l’est pasM SK1t, vous 'vous n’écoutez pas ou vos réviseurs ne sont pas

Obtenez des commentaires de toutes ces perspectives avant d’entreprendre la mise en œuvre. Trouver les problèmes dans les minutes des coûts spéciauxM SK1 les trouver dans les coûts de production semaines.

Exemple concrète: Service de traduction Markdown

Pour rendre tout cela moins abstracte, ici 's ce qu’une spécification pourrait ressembler pour la fonction de traduction automatique de marquage-à-tête que j’ai construite pour ce blog. Cela démontre les principes que nous avons discutésM SK3

Énoncé du problème

Les articles de blog écrits en anglais excluent uniquement les autres -Les lecteurs anglophones parlant l’anglais .La traduction manuelle de chaque post dans plusieurs langues est un temps de publication considérable et retarde la parution. Nous avons besoin d’une solution automatisée qui traduit des articles de Blog markdown dans plusieurs langages cibles sans nécessiter une intervention manuelle pour chaque articleM SK4

Solution

Mettre en oeuvre un service de référence qui traduit automatiquement les fichiers de marquage vers des langues cibles configurées à l’aide du service de traduction automatique EasyNMT. Le service sera

  • Surveiller les fichiers de marquage en vue des changements
  • Extraire un texte traçable tout en préservant la structure de marquage et les blocs de code
  • Demandes de traduction par lots pour efficacité
  • Gérer des fichiers de marquage traduits avec les suffixes linguistiques appropriées

Critères de réussite (Qu'est-ce que "DémarrerM SK2Comme il ressemble)

Ces critères nous disent exactement quand nous pouvons cesser de travailler sur cette fonctionnalité:

  • Les nouveaux articles de blog sont traduits automatiquement dans toutes les langues configurées (initiellement : Espagnol, FrançaisM SK3 AllemandMSC4 Italique+, Portugais=, Chinois+M SK7 Arabe+, Hindi+MST9 Japonais+MSP10 Corée+MSV11 Pays-Bas+MSS12 Russie+MSST13
  • Les fichiers traduits conservent une structure de marquage identique aux originaux
  • Blocs de code, URL d'image, et formattage demeurent inchangés
  • La traduction se termine en 15 minutes pour un article type de blog.
  • Le système ne traduit que les fichiers qui ont été modifiés ( vérifiés par comparaison achevée
  • Le service commence avec succès même si l'API de traduction n'est pas disponible temporairement
  • Les erreurs lors de la traduction sont enregistrées, mais don't crash the application

Veuillez noter qu’ils sont spécifiques et testables. Nous pouvons vérifier chacune d’entre elles . Lorsque toutes les conditions sont remplies, nousM SK3on a terminéMSC4 Nous ne continuons pas à ajouter des fonctions comme MST6cotation de la qualité de la traduction MST7 ou SST8édition de traductions manuelles MSS9 à moins que nous n’élargissions explicitement le champ d’applicationMSS10

Dans le champ d'application

  • Service d'information pour traiter les fichiers de marquage
  • Intégration avec l'API de traduction EasyNMT
  • Détection des changements basée sur Hash- afin d’éviter une retranslation inutile
  • Traitement par lot pour traiter EasyNMT's word limit
  • Équilibrage de la chargerobin à travers plusieurs instances EasyNMT
  • Préservation de la syntaxe de marquage, blocs de code, et images pendant la traduction

À l'extérieur de la portée

  • Interface d'utilisateur pour l'édition manuelle de la traduction (amélioration future)
  • Gestion de la mémoire de traduction ou du glossaire ( peut ajouter si des problèmes de qualité se posent
  • Traduction réelle-traduction en temps M SK1processage fondé est acceptable)
  • Traduction des commentaires de code dans les blocs de code (exclué intentionnellementM SK1
  • Évaluation automatique de la qualité des traductions (exigence initiale d'examen manuelM SK1

Constraints techniques

  • EasyNMT a une limite de mots ~500 par demande (NOT vrai pour mostlylucid-nmt ce qui peut prendre des livres fucking) ; doit battre en conséquence
  • Le service de traduction peut être lent.
  • Instances EasyNMT multiples requises pour une performance raisonnable (ne s'avère pas très claireM SK1nmt 😜)
  • Système de fichiers I/O ne doit pas bloquer l'application principale

Questions ouvertes à l'heure spécifiée

  • ~~Pouvons-nous cacher les traductions afin d'éviter de les répéter? Résolue: Oui, en utilisant la comparaison du hash des fichiers
  • Comment traitons-nous des défaillances de service EasyNMT ? Résolue: Erreur d'enregistrement et archivage de fichiersM SK1 fera une nouvelle tentative lors du prochain remarrage du service / un débrouillard de circuit ( peut-être un pic
  • Quels problèmes de qualité pourraient-nous voir avec le contenu technique? Décision: Ship and evaluateM SK1 manual review catches issues

Ce que nous avons appris au cours de la mise en œuvre

Plusieurs choses se sont produites au cours de l’élaboration qui ont raffiné le spec:

Ajustement de la taille des lots: Démarré avec 20- batches de lignes, mais a trouvé que les lignes 10 étaient plus fiables pour rester sous EasyNMTM SK4 sa limite verbale tout en gardant le contexteMSC5

Détection de l'image: Au départ, les noms de fichiers d'images figurant dans le marquage étaient envoyés au service de traductionM SK2 Partage des phrases en rupture. Détection additionnelle de l'extension des fichiers pour faire passer les cheminements d’images .

Disponibilité du service: EasyNMT peut être tempéré lors du démarrage . Ajout d’un contrôle de santé qui vérifie /model_name point final avant de tenter les traductions.

Entreposage Hash: Originalement prévu, stockage de bases de données pour les haches de fichiersM SK1 mais basé sur le système de fichier - .hash Les fichiers se sont avérés plus simples et ont évité la dépendance de base de données pour ce service.

Ces enseignements ont été regroupés dans la documentation et ont donné des renseignements similaires plus tard.

Pourquoi cette spécification fonctionne

Cette spécification suit les principes discutés:

  • Question-première: Démarré avec le problème réel (la traduction manuelle est lenteM SK2 non la solution (utiliser EasyNMT)
  • Éclaircissement du champ d'application: Nous avons exprimé explicitement ce que nous n’avions pas fait
  • Niveau de détail droit: Préciser ce qui doit se produire ( préserver la structure de marquage-démarrage M SK2 sans prescrire une mise en œuvre précise
  • Documents vivants: Les questions ouvertes ont été réglées et les décisions documentées à mesure que la mise en œuvre progressait
  • Collaborative: Raisé au cours des problèmes de mise en œuvre (comme la manipulation du nom de fichier d'imagesM SK2 ont été discutées et résolues, puis documentées

Le résultat: une fonctionnalité qui' est en cours de production depuis des mois , traduit automatiquement tous les articles sur le blog avec un minimum d’interventionsM SK3

Questions courantes concernant les espèces agile

Sur la base de ce que nous avons couvert, les questions qui se posent fréquemment sont les suivantes :

"Dois-je vraiment avoir besoin d'une spécification pour une petite fonctionnalité?"

Il dépend de "small." Si c’est vraiment trivial 'changer le texte des boutonsM SK4 corriger une erreur de saisieMST5 nonM ST6 Mais si vous avez besoinM st7

  • Estimation du temps qu’il faudra
  • Obtenir l'accord des parties prenantes
  • Assurer que la QA sait ce qu'elle doit tester
  • Documentez ce que vous avez construit pour la référence future

Ensuite oui, même une spécification rapide aide. Il n’est pas nécessaire ' il n’y a pas besoin d’être formelM SK3 Quelques points de bullet dans un billet couvrant le problèmeMST4 SolutionM ST5 et les critères faits sont souvent suffisantsM st6

Le test: s’il est possible de vous expliquer dans deux phrases ce que " a fait M SK3 ressemble à quoi

"Comment traiter les parties prenantes qui veulent tout dans le champ d’application?

Pointez sur la section hors champ d’application. Expliquez ce qui suit

  1. Ajouter d'autres augmentations du calendrier - Est-ce qu’ils veulent la fonction A dans les semaines 2 ou les fonctions AM SK2 B, CMSC4 et D dans les mois МSK5
  2. Nous pouvons le faire ensuite. - "C'est une excellente idée.
  3. Time-box force les priorités [TRADUCTION] Nous avons 2 semaines . Quelle est la plus importante de ces dernières?

S’ils insistent sur le fait que tout est tout aussi critique, ils suggèrent de choisir un autre travail à reporter plutôt.

"Qu'arrive-t-il si la spécification change tellement qu'elle n'est pas reconnaissable depuis le début?

Que' est une amende , pour autant queM SK2

  • Les changements sont documentés (actualiser la spécification,donnM SK2non modifier simplement le codeMSC3
  • Les changements sont communiqués (les intervenants savent ce qui a changé et pourquoiM SK1
  • Vous avez appris quelque chose. Les changements reflètent l’apprentissage.

Si la spécification n’est pas reconnaissable parce que vous avez complètement mal compris le problème à l’origine, que ' est un signe de faire plus d’exploration avant de commencer la prochaine foisM SK2 Mais on s’attend à une itération et à une apprentissage.

L’histoire de la version du spec' devrait vous raconter ce que vous avez appris.

Dans les Startups, cela est appelé 'Pivot' où vous commencez à bâtir un jeu et terminez par construire un système de messagerie incroyable au lieu d’un autre.

Don't get too locked in . If there's opportunities by pivoting TAKE THEMM SK3

"Pois-je rédiger des spécifications pour corriger les erreurs?

Pour les bogues critiques: non, juste les corrigerM SK2

Pour les bogues complexes qui touchent plusieurs systèmes ou nécessitent des modifications architecturales: ouiM SK1 Traitez-le comme une fonctionnalité. Qu’est-ce queMSC3que vous avez défectué (qu’il y a problèmeMST5 comment vous le réparerez MST6comme vous le remédierons Mst7résolutionM st8de quelle façon vous le connaissezMSt9elle sera corrigéeMt10qui est réparéeMstr11critères remplisMtr12 ce que vous ne modifiez pasM str13Mr14 hors de portéeMrt15

Pour tout ce qui est entre-temps: utilisez votre jugement. Si la solution n’est pas évidenteM SK2 ou peut avoir des effets secondaires , une spécification rapide vous aide

Cela est particulièrement vrai pour les bugs de sécurité. Vous devez savoir exactement ce que vous corrigez et comment vous le vérifierez.

"Qu'est-ce que la spécification doit être formelle?

As formal as your team needs. Some teams are fine with detailed JIRA ticketsM SK1 Others want proper documents in version control.

La formalité est moins importante que le contenu

  • Énoncé de problème clair
  • Résolution proposée
  • Définition de fait
  • Définir les limites du champ d'application

Vous pouvez l’écrire dans Markdown.

C'est la clé souvent invoquée pour le développement agile; et pourquoi je haine les cadres agiles (et SCRUM ). Le point central est que comme un spécificateur agile, votre processus doit être adapté aussiM SK3 Si écrire peu ne fonctionne pasMSC4pour une seule équipe mais beaucoup, mais cela se produitMST5fait ce qui suitM ST6Si aucun document ne fonctionne pour une petite équipe mais tous les documents fonctionnent pour une grande. Si les cycles de jour 5 fonctionnent pour une équipe mais que les sprints hebdomadaires 2 s’effectuent pour un autre team, le fait est le même. L’IDEA intégrale est de faire le meilleur produit; votre équipe est la machine FAIRE ce produit . Faire fonctionner la machine aussi doucement que possible

En tant que gestionnaire, regardez ce qui sont vos sorties; si le panneau a besoin d’un graphique brûlé puis comment pouvez-vous utiliser les données courantes pour construire un graphe?

En fin de compte, vous produisez des caractéristiques et ce dont les intervenants ont besoin. Si vous pouvez réduire l’impact sur l’équipe alors que ' est votre PARTIE

"Qu'arrive-t-il si je suis le seul développeur du projet?

Vous avez encore besoin de spécifications.

En plus, vous devez encore:

  • Estimation du travail pour quiconque vous paie
  • Définir ce que signifie "done" afin de pouvoir terminer
  • Documentez ce que vous avez construit pour d’autres personnes qui pourraient s’y joindre plus tard

Écrire des spécifications pour vous-même est comme écrire les tests d'unité: il se sent plus lentement maintenant mais économise du temps plus tard (comme moiM SK2 I'm dans mon MSC4sMNK5 Je FORGET SHIT ces jours-ci

"Comment puis-je faire face à l'écrouissement du champ d'application masqué sous forme de 'Clarification des exigencesM SK2

Lorsque quelqu’un dit "OhM SK2 J’ai oublié de mentionner qu’il devrait aussi faire X," que ' n’est pas une clarificationMSC5 c’est ' son nouveau champ d’applicationMST7

Réponse: M SK1C'est là une bonne exigence ' mais ce n'est pas ce que nous avons convenu dans la spécification . Nous l'ajoutons à la section Out of Scope pour le moment et discutons de l'inclure ou de la sauvegarder pour la version

Si c'est vraiment une exigence (ne serait pas un bon

  1. Mise à jour de la spécification pour y inclure
  2. Mise à jour de l'estimation
  3. Obtenir un accord sur la nouvelle échéancier ou ce qu'il faut couper pour correspondre à l'échéance initiale

N’absorber jamais silencieusement la dérive de portée. Celle-ci ' détruira vos estimations et votre crédibilité.

" Puis-je commencer à coder avant que la spécification ne soit terminée?

Oui, si vous'vous faites des prototypes pour répondre aux questions ouvertesM SK2 NonMSC3si vous 'vous construisez une usine de production

Il est bon de prototyper pour apprendre.

Construire un code de production avant que la spécification ne soit prête signifie que vous 'es-vous apercevez les exigences . Vous ' construirez probablement la chose erronée

Exception: si vousM SK1 êtes propriétaire et développeur du produit (projet solo ), vous pouvez spécifier et coder simultanémentMSC4 Mais documentez toujours vos décisions au fur et à mesure que vous allez

Le ' jusqu’à ce que la spécification soit prête ' est une bonne façon de faire charger les dévs pour commencer M SK2 Évaluation des approches technologiques , écriture d’une plaque chaudière commune, etc.

"Qu'arrive-t-il si mon équipe ne lit pas les spécifications?

Découvrez pourquoi:

  • Trop long? Les rendre plus courtes, plus faciles à scanner
  • Trop formel? Utiliser un format plus léger
  • Non pertinent? Assurez-vous qu’ils ont effectivement besoin du détail que vous fournissez
  • mauvaise habitude? Commencez à exiger l'examen des spécifications avant le début du développement

Si les gens échappent aux examens des spécifications et construisent ensuite la chose erronée, ce n’est pas le cas. , Make the pain visible . " This wasn’'t in the spec , so we’ll need to rework it

De plus, les spécifications sont faciles à trouver.

" Combien de temps dois-je consacrer à une spécification?

Règle de la colonne d’oeil: M SK1 du temps de développement.

Pour une fonction hebdomadaire de 2-, les jours suivants sont indiqués sur la spécification Pour une fonction hebdomadaire de 1-:une demi-journée sur le specM SK2 Pour une fonction 2-journéeM SK1 une heure ou deux sur le spec.

Mais ne soyez pas religieux à cet égard.

Si vous' consacrez plus de temps à la spécification qu’à sa mise en oeuvre, vous ' l’excèdez dans vos réflexionsM SK3 Rappelez-vous que les spécifications sont des outils qui vous aident à travailler

" Pourquoi les estimations sont-elles toujours erronées?

Étant donné que l’estimation du logiciel est fondamentalement difficile. C’est là la vérité incommode ' Les estimations ne fonctionnent que si vous avez fait EXACTEMENT cette tâche avant la dernière dans cet environnement.

Ce qui ne se produit presque jamais.

Chaque fois que vous estimez la valeur de l’employé(e) :

  • On ne sait pas non plus - Problèmes que vous ne connaissez pas
  • On ne sait pas - Problèmes que vous savez exister mais que vous n'avez aucune idée de comment résoudre
  • Modification des exigences - Les spécifications évoluent au fur et à mesure que vous construisez.
  • Différences en matière d'environnement - Cette bibliothèque a fonctionné dans votre dernier projet, mais cette dernière a des dépendances différentes.
  • Questions d'outils - Le système de construction, le pipeline de déploiement et l’environnement d’essais se comportent différemment
  • Surprises de l'intégration - L’API que vous appelez ' ne fonctionne pas quite as documented
  • Facteurs humains - Vous 'êtes intermittent, maladeM SK3 ou traitez de problèmes de production
  • Finances - Une version plus petite est parfois nécessaire plus tôt parce que *Autrement, nous 'pourrions manquer d’argent ^ que's COMMON dans les startupsM SK3 (IMSC5nous aurons un article sur le Développement de l’entreprise initiale~' et comment il diffère de ce qui se passe à l’avenir?

C’est pourquoi:

  • Estimations des points de frappe dans les plages - "2-5 joursM SK2 reconnaît l'incertitude
  • Aide à l'épice - Passez un jour à faire des recherches avant d’estimer le travail complet ; cette technique est-elle plus difficile ou plus facile que je l’ai estimé?
  • Travaux de boxage Nous passerons 2 semaines et nous verrons ce que nous obtiendrons.
  • Question des données historiques - Suivre combien de temps des tâches similaires ont réellement pris
  • Le padding est honnête - Si vous croyez que les jours de 3, , disent 5. Vous aurez plus souvent raison.
Plus le travail est nouveau, plus les estimations sont mauvaises. Établir la même forme de CRUD que vous ' vous avez construite MSC3 foisM SK4 Vous ' vous serez proches. Intégration avec un nouveau service à l’aide d’un protocole inconnuMNK7 Votre estimation est une supposition entourée d’espoirMMK8

C'est pourquoi les spécifications doivent être claires.

"Qu'en est-il des spécifications pour les tâches de recherche ou d'exploration?

Ils ont besoin de critères différents "doneM SK1critères. Au lieu de "feature X fonctionneMST4 ilMSC5s "nousMSS7on a répondu à la question YMSSS8

Exemple de spécifications pour l'exploration:

  • Problème: Nous ne savons pas si l’approche A ou B est meilleure pour le moteur de recommandation
  • Solution: Consacrer une semaine à la mise au point de prototypes pour les deux approches
  • Critères remplis: Nous avons mis au point des prototypes de chacune des mesures de rendement pour les deux systèmes, et nous avons formulé une recommandation sur la voie à suivre.
  • Out of scope: Mise en œuvre de la production

Le temps-la boxing est cruciale pour l’exploration . Sans elle, les tâches de recherche ne se terminent jamais.

"Comment écrire les spécifications pour des fonctions que je ne connais pas 'Je n'en comprends pas encore complètement?"

Commencez par ce que vous savez:

  • Déclaration de problème (il faut savoir ce qui suit)
  • Approche proposée (la meilleure estimation possibleM SK1
  • Questions ouvertes (tout ce que vous ne savez pasM SK1ne sais pas )
  • Critères remplis (même s’il est brutM SK1

Marquez les sections comme suit : "TBD." Soyez honnête en ce qui concerne l’incertitude

Utilisez ensuite le processus d’examen des spécifications pour combler les lacunes.

Rappelez-vous: incomplèteM SK1mais -honest beats complete-butMST4falseMSC5

"Les émissions de GitHub peuvent-elles être spécifiées?

Absolutement. La spécification n’est pas requise ' ne doit pas être un document distinct. Une émission écrite de GitHub ou d’un billet JIRA peut servir comme spécifications parfaitement bienM SK4

Ce qui importe, c’est le contenu.

  • Énoncé de problème clair - Qu’est-ce que nous réalisons et pourquoi?
  • Résolution proposée - Comment nous l’aborderons ?
  • Critères remplis - Critères d'acceptation testables
  • Limites de portée - Qu'est-ce que ' est dans le champ d'application et hors de celui-ci utilisez des étiquettes comme :
  • Questions ouvertes - Marquez-les avec une étiquette "questionM SK2 ou similaire

Avantages de l’utilisation des émissions:

  • Tout en un seul endroit - Code , spécifications, discussionsM SK3 et suivi des tâches ensemble
  • Liens faciles - Questions connexes de référenceM SK1 PRs, engagements
  • Élaboré-en version - L’histoire de l’édition des numéros montre comment les exigences ont évolué
  • Flux de travail familier - L'équipe sait déjà comment l'utiliser

Conseils pour utiliser les questions comme spécifications:

  • Utiliser la description du problème pour le spec, non enfoué dans les commentaires M SK1les gens lisent la description)
  • Mise à jour de la description au fur et à mesure que le spec évolue (ajouter "EditM SK2 sections pour montrer les changements)
  • Utiliser les étiquettes pour indiquer l'état: "necessité-specM SK3 MSC4spec+-réalisteMST6 \MST7spec=MST8changed+MST9, etc.
  • Pin des discussions importantes sur les spécifications de façon à ce qu’elles ne se perdent pas dans les commentaires '
  • Lien vers les documents supportants (diagrammesM SK1 mockups) s'il y a lieu

L’essai: pourrait-on lire le problème et savoir ce qu’il faut construire , ce que " faitMSC3 signifieM SK4 et ce quiMST5 est hors de portéeM ST6 Si ouiM st7 c’est une bonne spécification indépendamment du formatMst9

"Qu'en est-il des spécifications dans les industries réglementées?

Si vous travaillez dans les secteurs de la santé, des finances, de l’aérospatiale ou d’autres domaines réglementés, il se peut que vous ayez besoin de spécifications plus formelles pour assurer votre conformité.

  • Commencez par le problème
  • Définir clairement ce qui est fait
  • Évoluer à mesure que vous apprenez
  • Garder les spécifications courantes

Mais vous devrez aussi

  • Suivez les normes de documentation de votre industrie'
  • Inclure les sections requises (analyse de la sécuritéM SK1observation réglementaire , pistes d’audit)
  • Obtenir un signal officiel-offs lorsque nécessaire
  • Maintenir l'historique plus détaillé de la version
  • Maintenir les spécifications après la fin du projet (pour vérificationsM SK1

Même dans des environnements réglementés, la spécification agile fonctionne. vous n’avez qu’un plus grand nombre de boucles à franchir . la spec est toujours un outilM SK3 c’est-à-dire ' il s’agit simplement d’un outil qui doit satisfaire les organismes de réglementation ainsi que les développeurs

En conclusion

La rédaction de bonnes spécifications de fonctions dans un environnement agile est une compétence qui s’améliore avec la pratique.

Principes clés:

  • Les spécifications sont des outils, non des contrats - Ajouter le détail là où vous en avez besoin , évoluer à mesure que vous apprenez
  • Commencez par le problème, non la solution - La mise en œuvre découle de la compréhension du problème
  • Collaboration, donM SK1t dictate - Tout le monde contribue à améliorer la spécification
  • Définir clairement "doneM SK1 - Prévenir la métastase de la caractéristique avec du béton
  • Questions hors champ d'application - Ce que vous ne faites pas est aussi important que ce que vous êtes
  • Expérer l'évolution - Les fonctionnalités changent au fur et à mesure que vous les bâtissez ; capture l’apprentissage
  • Garder les spécifications courantes - Ils sont devenus les fondements des essais, de la documentation et du développement futur

L’élément le plus difficile est de ne pas écrire la spécification initiale. Il faut savoir quand cesser d’utiliser une fonction.

C’est pourquoi les estimations agiles sont si difficiles.

Le meilleur que vous pouvez faire: être clair sur ce qu'il faut M SK1 faire " signifier, le tempsMST4 l'incertitude de la boîteMSSK5 et mettre à jour la spécification comme vous l'aviez apprise.

Une bonne spécification permet aux développeurs de résoudre les problèmes avec intelligence tout en sachant exactement quand ils peuvent s’arrêter.

Et si vous êtes un développeur qui lit une spécification qui n’a pas de sens ou qui ne possède aucun critère clair " a fait " Critères : s’exprime, . Il n’est pas difficile d’utiliser ' il n’y a pas de difficulté à utiliser ; il est professionnel ' Il vaut mieux le trier maintenant que de construire une fonctionnalité qui continue de croître jusqu’à ce qu’elle prenne en charge l’application entière

Finding related posts...
logo

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