Leçon 7 sur 8
Unité · Quelqu'un d'autre l'exécute
Écrit pour quelqu'un qui a votre poste et rien de votre contexte
Une passation n'est pas une description du code. C'est la liste de ce que vous savez et qui ne figure nulle part dans le dépôt — pourquoi cette colonne est écartée, à qui écrire quand l'export s'arrête, et quel nombre du rapport sera contesté.
À quoi sert une passation
Pas à dire « voici le code » — le code est dans le dépôt et un successeur compétent sait le lire. Une passation est la part qui n’est pas dans le dépôt, et c’est presque entièrement une liste de décisions et de relations.
Le test : votre successeur reçoit l’export mensuel, il paraît faux, et il doit décider quoi faire. Tout ce dont il a besoin pour cela est ce que contient le document.
Les sept sections
# Handover: nutrition surveillance analysis
Written 2026-03-14 by [name], for whoever holds this next.
## 1. What this produces, and who reads it
A quarterly GAM estimate by commune, in the cluster report and the district
health office's monthly pack. The cluster coordinator reads the commune table
first and asks about anything above 10%.
## 2. Run it
uv sync && uv run python run.py
Takes about four minutes. Outputs land in outputs/ and are safe to delete.
## 3. Where the data comes from, and who to ask
data/raw/muac-screening-YYYY-MM.csv — exported from the screening database on
the 5th of each month by [name, role, email]. If it does not arrive by the
10th, that is who to chase; it has been late three times in two years and the
cause was a permissions change each time.
## 4. Decisions that are not obvious from the code
- Commune names arrive spelled four ways. Normalisation is in src/clean.py.
Ungrouped, the worst commune splits into four fragments and none looks
alarming, which is how this went unnoticed for two rounds.
- Children with no age recorded (about 2%) are excluded from the age-
disaggregated table but kept in the total. The cluster agreed this in
March 2025; the alternative was excluding them everywhere, which moved the
headline by 0.4 points.
- MUAC is the case definition, not weight-for-height. This is a screening
dataset and there are no heights.
## 5. What breaks, and what it looks like
- A new water_source code stops the pipeline with "Unknown water_source
values". It is usually a form change; map it in src/clean.py and tell
[name].
- A row count outside 2,000-3,000 stops it. Usually a truncated download.
- If the report renders but a commune is missing, screening did not happen
there; that is real and should be stated in the narrative.
## 6. What gets challenged
The commune ranking. Eleven of eleven adjacent communes have overlapping
intervals, so the chart supports "these three are above the district median"
and does not support ranking one commune against its neighbour. The caption
says so; keep it there, because it comes up every quarter.
## 7. What I would do next
The screening register has no follow-up measurement, so the MUAC 125mm
eligibility threshold cannot be evaluated as a discontinuity design. Adding
an eight-week re-measurement on a sample of children just above the cut-off
would make it estimable. I raised this in January; it is not funded.
Les sections 4 et 6 sont celles qu’on ne peut pas reconstituer. Tout le reste, un successeur le retrouverait en une semaine.
Pourquoi la section 4 est tout le document
Chaque exclusion, recodage et seuil de la chaîne était une décision, et le code
enregistre ce qui a été décidé en perdant le pourquoi. Un successeur qui lit
df = df[df.age <= 20] sait ce que cela fait et ignore s’il a le droit de le changer.
# Excluded: 14 children with recorded ages above 20 years in an under-5
# screening. These are data-entry errors (the age field accepts free text).
# Agreed with the screening lead 2025-03; they are excluded everywhere rather
# than corrected, because we cannot tell 2 from 20 from 12.
survey = survey[survey["age_months"] <= 60]
# The comment is the handover. Write it when you make the decision.
Écrivez le commentaire au moment de la décision, non au moment de la passation. Au moment de la passation, vous vous souviendrez des décisions et non des raisons, ce qui est exactement l’inverse de ce qu’il faut.
La section 6, et pourquoi elle n’est pas défensive
Nommez les nombres qui sont contestés et quelle est la réponse. Toute analyse récurrente en a deux ou trois, et un successeur qui les ignore capitulera devant une contestation déjà tranchée ou rouvrira une discussion déjà close.
C’est de la mémoire institutionnelle, et c’est la première chose perdue dans une passation. C’est aussi la moins coûteuse à écrire : trois puces.
La passation n’est pas un document, c’est une période
Le document est nécessaire et il ne suffit pas.
Faites-leur l’exécuter pendant que vous êtes encore là. Non pas vous regarder l’exécuter — l’exécuter eux-mêmes, depuis un clone neuf, sur leur propre machine, avec vous disponible. Tout ce qui échoue est une lacune du dépôt ou du document, et c’est le seul moyen de trouver ces lacunes.
Faites-leur produire une vraie sortie. Le prochain rapport mensuel, non un essai. Un successeur qui a produit un rapport a fait le travail une fois.
Laissez le canal de questions ouvert pendant un cycle. Un trimestre, un mois, selon la cadence. L’essentiel de ce qu’ils auront besoin de demander arrive au moment où cela casse pour la première fois.
Ce qu’il faut écrire au fil de l’eau
Le document de passation est bien plus facile s’il n’est pas écrit au moment de la passation.
| Écrivez-le | Quand |
|---|---|
| Le commentaire de décision | Au moment de la décision |
| L’entrée « ce qui casse » | La première fois que cela casse |
| L’entrée « ce qui est contesté » | La première fois que c’est contesté |
| Le contact et la cadence | Au moment où vous les mettez en place |
| Le « ce que je ferais ensuite » | Dès que vous y pensez |
Gardez-le dans le dépôt, dans HANDOVER.md, en gestion de versions. Une passation
dans la boîte mail de quelqu’un est une passation à une seule personne.
Le README et la passation sont deux documents différents
| README | Passation |
|---|---|
| Pour quiconque ouvre le dépôt | Pour la personne qui le reprend |
| Ce qu’il produit, comment l’exécuter | Pourquoi il est ainsi |
| Reste court | Peut être long |
| Mis à jour avec le code | Mis à jour quand une décision est prise |
Un README devenu une passation a cessé d’être lu, ce qui fait perdre les deux.
Rapportez-le en entier
Continuity
HANDOVER.md documents the analysis decisions, the upstream contacts and
cadence, the known failure modes, and the findings that are routinely
challenged. It is version-controlled and was last reviewed 2026-03-14.
Every exclusion and recode in src/ carries a comment giving the reason and
the date it was agreed.
The incoming analyst ran the March cycle end-to-end from a fresh clone,
with the outgoing analyst available. Two gaps were found and closed: the
screening database export permission, and an undocumented commune-name
variant.
Le dernier paragraphe est la preuve que la passation a eu lieu. Un document de passation que personne n’a exécuté est un document jamais testé, et les deux lacunes qu’il a trouvées sont ce pour quoi il existe.
La suite
La dernière leçon retourne le cours sur cette plateforme. Chaque affirmation qu’il a faite — données brutes en lecture seule, environnement figé, sortie déterministe, vérifications qui échouent bruyamment, un modèle pour plusieurs sorties — se vérifie dans ce dépôt, et la leçon est une visite guidée de l’endroit où.