From 3c7cff3ac6136d54080cf0a251d2dfbf251bfcff Mon Sep 17 00:00:00 2001 From: Bertrand Benjamin Date: Sun, 9 Aug 2026 14:56:14 +0200 Subject: [PATCH] =?UTF-8?q?D=C3=A9cider=20d'un=20cycle=20de=20vie=20pour?= =?UTF-8?q?=20les=20projets,=20et=20d'un=20horizon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Une petite mairie a plus de projets imaginables que de temps pour les mener, et la crainte première est d'en oublier. La section 27 pose les quatre états — envisagé, engagé, terminé, écarté —, l'horizon en mois des envisagés, et surtout ce qu'on écarte : la matrice d'Eisenhower, un backlog séparé, une vue de rétrospective. Elle garde aussi la trace de ce que le premier essai a corrigé, dont l'immobilité de la barre d'horizon, abandonnée à l'usage. Co-Authored-By: Claude Opus 5 --- docs/decisions.md | 225 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) diff --git a/docs/decisions.md b/docs/decisions.md index cb87858..be04070 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -827,3 +827,228 @@ vont par paires. La génération aurait produit une liste exacte et illisible. Elle se lit, elle ne s'édite pas (décision 24) : rien n'y aurait de sens à désigner. `j`, `k`, `gg` et `G` y font donc ce qu'ils font dans un document — ils déroulent la liste. `gm` et `ga` marchent dans les deux vues, le reste attend le retour à la frise. + +## 27. Le cycle de vie d'un projet, et l'horizon + +L'outil est employé pour piloter les chantiers d'une petite mairie : beaucoup plus de projets +imaginables que de temps pour les mener, et une crainte première — **ne rien oublier**. Une idée +qu'on ne peut pas traiter cette année ne doit pas disparaître pour autant. + +Or l'outil ne connaissait que les projets déjà planifiés. Tout ce qui n'était pas encore engagé +vivait ailleurs — un carnet, une tête, un compte rendu de réunion — de sorte que l'arbitrage se +rendait **sans voir le planning**, alors que c'est précisément le planning qui dit s'il y a la +place. + +### La priorité est une décision d'avant l'engagement + +Le point de départ était une matrice d'Eisenhower dans le panneau d'un projet. Deux objections +l'ont déplacée. + +L'urgence est **déjà dans les dates**. La resaisir crée un champ qui se périme en silence : un +projet coché « urgent » en juin ne l'est plus en septembre, et rien ne viendra le décocher. + +Surtout, une fois un projet planifié, **l'arbitrage est déjà rendu** — ce sont ses dates qui le +portent. Une priorité posée sur un projet engagé ne déciderait plus rien, elle commenterait. Le +lieu de la priorisation est donc en amont, sur ce qui n'est pas encore engagé. + +### Quatre états, dont deux se déduisent + +Un projet traverse quatre états, et deux d'entre eux se lisent dans les données sans qu'on ait +rien à tenir à jour : + +| État | Comment on le sait | +|---|---| +| **Envisagé** | il n'a qu'un horizon, pas encore de phase | +| **Engagé** | on lui a donné au moins une phase datée | +| **Terminé** | toutes ses phases sont finies **et** on l'a acté | +| **Écarté** | on a décidé de ne pas le faire | + +Une règle unique les résume : **les phases commandent l'état, sauf quand on a prononcé quelque +chose.** Livré n'est pas clos, et abandonner est une décision — ces deux-là s'actent. Le reste se +déduit. + +**Clore un projet termine toutes ses phases avec lui.** Sans cela la frise se contredirait : une +ligne éteinte au-dessus de segments pâles, et la vue par mois annonçant des tâches à venir dans un +projet fini. C'est donc la seule opération du cycle qui **écrase des données** — le statut d'une +phase bloquée est perdu, et rouvrir le projet ne peut pas le deviner. Elle se confirme à ce titre, +comme une suppression (décision 21), mais **seulement quand il reste quelque chose à écraser** : un +dialogue qui ne prévient de rien apprend à cliquer sans lire. + +Engager n'est donc pas un bouton : c'est un geste, celui de donner ses premières dates fermes. Et +écarter n'est pas supprimer — le projet quitte la frise mais reste retrouvable, avec dans ses notes +la raison pour laquelle on a dit non. Les mêmes idées reviennent tous les deux ans, portées par +d'autres : savoir qu'on les a déjà examinées, et sur quel motif, a de la valeur. + +### L'horizon est le repli des bornes + +Un projet envisagé n'est pas une ligne hors du temps : il porte un **horizon**, exprimé en mois — +« mars 2027 », « de mars à septembre 2027 », « courant 2028 » — et il se pose **sur la frise**, à +cet horizon. C'est là que l'arbitrage devient concret : quand le printemps 2027 est déjà chargé et +que six projets pâles s'y superposent, on décide devant l'évidence plutôt que dans l'abstrait. +C'est ce qui remplace le calcul de charge que l'outil ne fera jamais. + +La règle tient en une phrase, et elle ne mélange pas le saisi et le calculé : + +> L'emprise temporelle d'un projet se calcule depuis ses phases. Un projet qui n'en a pas encore la +> déclare à la main : c'est son horizon. + +Les phases gagnent toujours. `bornesProjet()` fait déjà ce calcul et retourne `null` quand il n'y a +aucune phase — l'horizon bouche ce trou, il n'ajoute pas de règle. Corollaire : **on ne réécrit +jamais une saisie par un calcul**. Un projet qui perdrait sa dernière phase retrouve l'horizon qu'il +avait déclaré, pas l'enveloppe des phases disparues. + +Le grain est le mois, jamais l'année : en début de mandat, tout est à faire, et un horizon annuel ne +range plus rien. Un horizon s'exprime comme un intervalle de mois plutôt que par des crans nommés — +ni trimestre ni semestre à apprendre, un seul mécanisme, et trois propriétés qui en découlent : + +- **la largeur de la barre pâle *est* l'incertitude**, l'œil la lit sans qu'on l'écrive ; +- **la précision de l'horizon suit la maturité du projet** : on resserre à mesure qu'on y voit + clair. Il n'y a pas de frontière entre envisagé et engagé, il y a un dégradé ; +- **engager, c'est préciser au jour près** ce qui était au mois près. + +La barre d'un projet envisagé se dessine donc autrement : pâle, aux bords fondus, et **accrochée au +mois** — jamais au jour. C'est l'accroche au lundi de la décision 9 poussée d'un cran : le geste +existe, il ne permet simplement pas de poser une date qu'on n'a pas. + +Elle fut d'abord rendue **immobile**, au motif qu'interdire physiquement valait mieux qu'une +convention. L'usage a tranché autrement, et pour une bonne raison : on ajuste un horizon *en +regardant ses voisins*, pour voir si le printemps 2027 est déjà chargé. Obliger à passer par un +panneau pour ce réglage-là, c'est le faire à l'aveugle. L'accroche au mois suffisait à protéger ce +qui devait l'être. + +L'horizon **survit à l'engagement**. Non pour le comparer à ce qui a été planifié, mais parce que ne +rien effacer est ici plus simple qu'effacer, et parce qu'il sert de filet si le projet se dépeuple. + +### Un horizon échu remonte à la surface + +Un backlog échoue toujours de la même façon : tout ce qu'on n'ose pas refuser y atterrit, il gonfle, +plus personne ne le relit. Les deux garde-fous habituels — un plafond, une péremption qui efface — +sont ici interdits par la crainte de départ. + +L'horizon en fournit un meilleur : **un projet dont l'horizon est dépassé se signale**. On est en +juin, quatre projets visaient le premier trimestre : il faut trancher, on repousse ou on écarte. +Rien ne disparaît, mais rien ne dort — et la relecture tombe d'elle-même au rythme des arbitrages +budgétaires. + +### Ce qui ancre un projet écarté + +La question n'a pas la même réponse selon d'où vient l'écartement. + +Un projet écarté **depuis l'état engagé** garde ses phases datées, dont certaines ont réellement eu +lieu. Il a un ancrage, et un vrai : le travail fait ne doit pas s'effacer, puisque la frise est notre +mémoire. + +Un projet écarté **depuis l'état envisagé** n'a rien. Son horizon a cessé d'être une prévision — on +ne le fera pas à cette date, on ne le fera pas du tout — et l'y laisser serait un mensonge sur la +frise. + +D'où **la date d'écartement**, posée automatiquement, jamais saisie. C'est l'ancrage commun aux deux +cas, celui sans lequel les écartés ne forment plus qu'un tas. Il ne s'agit pas de journaliser les +décisions — les comptes rendus de réunion font ce travail, et mieux — mais d'horodater une sortie. + +La clôture est horodatée de la même façon, et c'est ce qui donne au modèle sa forme définitive : +**les deux actes prononcés laissent une date, et ces deux dates sont l'unique trace de l'état dans le +fichier.** Acter, c'est dater. Il n'y a pas de champ « état » — il se lit dans ces deux dates et dans +la présence de phases. + +On les retrouve d'abord en les cochant dans le filtre par état, ce qui les ramène dans la colonne +des libellés, groupés et éteints. Cela répond à « je sais que ça existe, je veux le retrouver ». Cela +ne répond pas à « relire d'un coup deux ans d'idées écartées avec leurs motifs », qui demanderait une +liste — geste assez rare pour attendre que le manque se fasse sentir. + +### La réanimation ne demande aucun mécanisme + +Puisque les états se déduisent, il suffit de **retirer l'écartement** : le projet retrouve tout seul +l'état que ses données commandent. Des phases, il redevient engagé ; un horizon seul, envisagé. Pas +de destination à choisir, une seule commande. + +Le système se referme bien : un projet écarté en 2026 et réanimé aujourd'hui revient avec un horizon +périmé, donc se signale aussitôt comme échu. On le redate dans la foulée. + +``` + écarté ←──────┐ + ↗ ↑ │ réanimer + / │ │ (l'état se + envisagé ──────┴─ engagé ──→ terminé recalcule) + (un horizon) (≥ 1 phase) (acté) + ↑ │ + └──────────────┘ + s'il perd sa dernière phase +``` + +### L'état ne passe pas par les tags + +Un tag est libre, disparaît quand plus personne ne le porte, et dérive orthographiquement +(décision 16) : trois propriétés inacceptables pour un état. Ce sont deux mécanismes indépendants +qui filtrent la même frise, et les tags restent disponibles pour ce à quoi ils servent. + +Les deux filtres ne se comportent d'ailleurs pas pareil, et il faut que cela se voie : **celui des +tags est conjonctif, celui des états est disjonctif**. Un projet porte plusieurs tags mais un seul +état — cocher `client` + `urgent` resserre, cocher `envisagé` + `engagé` élargit. La même case à +cocher voudrait sinon dire deux choses opposées selon la ligne où elle se trouve. + +Comme celui des tags, le filtre par état **n'est pas enregistré** : c'est un état de vue, pas un +réglage. + +### Ce que le premier essai a corrigé + +Trois choses ne se sont vues qu'en manipulant l'outil, et toutes disaient la même : **un projet +envisagé ne doit pas être un citoyen de seconde zone**. + +**Engager démarre à l'horizon.** La première phase d'un projet envisagé naissait à la date du jour, +comme celle de n'importe quel projet vide. Elle apparaissait donc à des mois de la barre pâle qu'elle +venait remplacer, et le lien entre les deux se perdait. Elle commence maintenant au premier jour de +l'horizon : engager, c'est préciser au jour près ce qu'on avait déclaré au mois près, pas repartir +d'ailleurs. + +**Les deux actes sont dans le panneau, pas seulement dans le menu.** Ils avaient été rangés dans le +menu ⋯ au nom de la décision 20 — un bouton permanent se mérite, et clore un projet est rare. Mais +c'est dans le panneau qu'on **lit** l'état du projet, donc c'est là qu'on cherche à en changer : les +y chercher et ne pas les trouver coûte plus cher que deux boutons de plus. Ils figurent aux deux +endroits, comme « plier » ou « masquer ». + +**Les projets sans phase paraissent dans la vue par mois.** Ils n'y figuraient pas, faute de phase à +lister — alors qu'un projet visé pour mars 2027 *arrive* bel et bien en mars 2027. Les omettre +revenait à dire que la liste ne montre que l'engagé, quand toute cette décision pose le contraire. +Ils s'y rattachent au premier mois de leur horizon, dans les mêmes colonnes que les phases mais en +italique. C'est ce qui a fait renommer `phasesParMois` en `entreesParMois` : la liste ne montre plus +seulement des phases. + +La règle porte sur **l'absence de phases et non sur l'état**, exactement comme `empriseProjet` : un +projet écarté avant d'avoir jamais été engagé n'a lui non plus que son horizon pour se situer, et +il doit se retrouver là quand on ouvre le cimetière. La distinguer par l'état aurait fait du +cimetière de la liste par mois une collection des seuls projets qui avaient démarré — soit +l'inverse de ce qu'on y cherche. + +### Ce qui a été reporté, et pourquoi + +Ces choix ne sont pas des refus définitifs. Ils attendent leur moment, et il vaut mieux savoir +lequel. + +**La matrice d'Eisenhower.** Elle n'a pas de sens sur des projets engagés, pour les raisons +ci-dessus. Sur les seuls envisagés elle redevient cohérente, et se branche même bien : l'horizon +fournit l'axe d'urgence, il ne resterait que l'importance à saisir. À reprendre quand une liste +existera, et seulement si l'horizon seul ne suffit pas à départager. + +**Une vue liste des envisagés.** La frise sait situer, elle ne sait pas ranger : on ne peut pas +ordonner six projets par priorité dans un empilement de couloirs. Cette première étape ne livre donc +**aucun mécanisme d'ordre explicite entre projets** — ce qu'elle livre, c'est l'horizon, et c'est +déjà l'arbitrage le plus décisif. Reste le départage fin entre projets visant le même trimestre. + +**Un dézoom de l'axe temporel**, pour embrasser plusieurs années d'un coup. Le jour où il arrivera, +il faudra rouvrir la décision 14, « une seule échelle, pas de zoom ». + +**Une vue de rétrospective.** La frise défile en arrière sans limite (décision 15) : le passé y est +déjà lisible, et un écran de plus l'aurait redit. Corollaire à tenir : **un projet terminé reste sur +la frise**, éteint mais présent, sinon on perd le bilan. + +**Des dates réelles à côté des dates prévues.** Ce serait doubler chaque champ pour un gain nul : +dans cet outil on recale les barres au fil de l'eau, donc la date de fin *devient* le réel. La +contrepartie est assumée — la qualité du bilan dépend de l'entretien de la frise, et aucun champ ne +répare un planning qu'on ne tient pas. + +**Un repère de fin de mandat**, comme le repère « aujourd'hui ». Pertinent sur le principe, sans +urgence en début de mandat. + +**Un retour arrière déclaré**, d'engagé vers envisagé. On déplace les dates, cela suffit. Le seul +cas où il survient — retirer la dernière phase — se résout tout seul par la règle des bornes.