Décider d'un cycle de vie pour les projets, et d'un horizon

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 <noreply@anthropic.com>
This commit is contained in:
2026-08-09 14:56:14 +02:00
parent 3092be86ae
commit 3c7cff3ac6

View File

@@ -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.