Je construis un projet comme on construit une maison. I build a project the way you build a house.
Je ne pose pas les briques avant d'avoir coulé les fondations, et je ne coule pas les fondations avant de savoir qui habitera là. Chaque projet que je démarre passe par les mêmes cinq documents, dans le même ordre, du terrain jusqu'à la fiche de pose d'un seul mur — puis par le raccordement aux réseaux, sans quoi rien n'est habitable.
I don't lay bricks before the foundations are poured, and I don't pour foundations before I know who will live there. Every project I start goes through the same five documents, in the same order, from the plot of land down to the fitting sheet for a single wall — then through the utility hook-up, without which nothing is habitable.
Ces templates, je les ai écrits pour moi, à force de reprendre des projets que j'avais laissés de côté et de ne plus savoir ce que mon code d'il y a trois mois était censé faire. Ils ne décrivent aucun projet en particulier : ils décrivent ma façon de l'aborder.
I wrote these templates for myself, after picking up projects I had set aside and no longer knowing what my code from three months earlier was supposed to do. They describe no particular project: they describe how I approach one.
Je les remplis toujours dans cet ordre, et je m'interdis de passer au suivant tant que le précédent est flou. C'est la seule discipline que je m'impose vraiment — le reste s'en déduit.
I always fill them in this order, and I refuse to move to the next one while the previous one is still vague. It is the one discipline I really hold myself to — the rest follows from it.
Cahier de chargesRequirements brief
J'écris d'abord pourquoi le projet existe, pour qui, et dans quelles limites. Le contexte, les objectifs utilisateurs et business, le périmètre par type d'utilisateur, puis les besoins techniques : architecture backend, mobile, médias, mode hors-ligne, performance, monitoring, RGPD.
I first write down why the project exists, for whom, and within what limits. The context, the user and business goals, the scope per user type, then the technical needs: backend architecture, mobile, media, offline mode, performance, monitoring, GDPR.
Je termine par ce que j'avais l'habitude de remettre à plus tard : les contraintes, les phases, les indicateurs de succès et les risques. C'est le document qui m'autorise à dire non à une bonne idée six mois plus tard, la mienne y compris.
I end with what I used to put off: the constraints, the phases, the success metrics and the risks. This is the document that lets me say no to a good idea six months later, including my own.
Tant que je n'arrive pas à écrire la section 3 sans hésiter, c'est que je ne sais pas encore pour qui je construis. Je n'ouvre pas l'éditeur ce jour-là.
As long as I can't write section 3 without hesitating, I don't yet know who I am building for. I don't open the editor that day.
Spécifications fonctionnelles détailléesDetailed functional specifications
Le cahier de charges dit ce que je construis ; celui-ci dit comment chaque pièce se comporte. Je descends module par module : la fonction, les champs requis, le processus de validation, les vues disponibles, les filtres.
The requirements brief says what I am building; this one says how each room behaves. I go down module by module: the function, the required fields, the validation process, the available views, the filters.
Je donne un chapitre à part aux systèmes transverses — géolocalisation, modération — parce qu'ils traversent les murs et que je me suis déjà fait piéger à les traiter comme des détails d'un module. La roadmap et la conformité ferment le document.
I give cross-cutting systems — geolocation, moderation — a chapter of their own, because they run through the walls and I have already been caught treating them as details inside a module. The roadmap and compliance close the document.
Là, j'arrête de penser en développeur. This is where I stop thinking like a developer.
Une spécification décrit un système ; une user story décrit quelqu'un qui s'en sert. J'écris ensuite des critères d'acceptation que je peux cocher, ce qui m'empêche de décider tout seul que « c'est fini ».
A specification describes a system; a user story describes someone using it. I then write acceptance criteria I can tick off, which stops me deciding on my own that something is « done ».
Priorité MoSCoW, complexité en points, dépendances. Le récapitulatif par priorité dessine mon MVP : ce que je construis d'abord, ce que j'accepte de repousser.
MoSCoW priority, complexity in points, dependencies. The summary by priority draws my MVP: what I build first, what I agree to push back.
Plan de développementDevelopment plan
Je découpe le projet en features codées, chacune avec ses modèles, ses endpoints, ses services, ses règles métier, ses permissions et ses dépendances. Je trace le diagramme de dépendances avant de choisir par quoi je commence : je ne pose pas la toiture avant les murs, même quand la toiture est la partie amusante.
I break the project into coded features, each with its models, endpoints, services, business rules, permissions and dependencies. I draw the dependency diagram before choosing where to start: I don't put the roof on before the walls, even when the roof is the fun part.
J'en sors mes sprints, un planning estimatif et une checklist de démarrage. C'est le document que j'ouvre chaque semaine pour savoir où j'en suis.
Out of it come my sprints, an estimated schedule and a start-up checklist. It is the document I open every week to know where I stand.
Treize phases, les mêmes pour chaque feature. Thirteen phases, the same for every feature.
Je ne saute aucune étape, et je me suis fixé quatre paliers de tests bloquants : tant qu'ils ne passent pas, je ne monte pas à l'étage suivant. Ça me ralentit sur le moment ; c'est ce qui fait qu'un projet de six mois est encore reprenable au septième.
I skip no step, and I have set myself four blocking test gates: until they pass, I don't go up to the next floor. It slows me down in the moment; it is what makes a six-month project still workable in the seventh.
Spécification technique d'une featureTechnical spec for one feature
Mon dernier niveau de zoom : un seul module, avec sa priorité, sa durée estimée et ses dépendances. J'y note les modèles fichier par fichier, les champs et leurs contraintes, les managers, les méthodes, les services, les tests attendus et l'arborescence exacte des fichiers que je vais toucher.
My last zoom level: a single module, with its priority, its estimated duration and its dependencies. I note the models file by file, the fields and their constraints, the managers, the methods, the services, the expected tests and the exact tree of files I am going to touch.
Quand ce document est écrit, coder n'est plus une suite de décisions mais de l'exécution — et c'est le seul moment où je m'autorise à ouvrir l'éditeur.
Once this document is written, coding is no longer a series of decisions but execution — and that is the only point at which I let myself open the editor.
Infrastructure et exploitationInfrastructure and operations
Une maison sans eau ni électricité n'est pas habitable. Je prépare le raccordement pendant que les murs montent, pas après : environnements séparés, conteneurisation, secrets sortis du dépôt, base de données et stratégie de migration, reverse proxy et TLS.
A house without water or power is not habitable. I prepare the hook-up while the walls go up, not after: separate environments, containerisation, secrets kept out of the repository, database and migration strategy, reverse proxy and TLS.
Ensuite je l'exploite, et ça ne s'arrête jamais. Chaque commit passe par ma chaîne de CI/CD — linter, suite de tests, build de l'image, déploiement — et je ne mets rien en production sans savoir comment je reviens en arrière.
Then I operate it, and that never stops. Every commit goes through my CI/CD pipeline — linter, test suite, image build, deployment — and I put nothing into production without knowing how I roll back.
Puis je surveille : logs centralisés, métriques, alertes, sauvegardes que je restaure pour de vrai. Une sauvegarde que je n'ai jamais restaurée, je considère qu'elle n'existe pas.
Then I watch: centralised logs, metrics, alerts, backups that I actually restore. A backup I have never restored, I treat as non-existent.
C'est la partie que personne ne voit quand tout va bien. C'est aussi la seule qui me réveille la nuit, donc je préfère l'avoir écrite avant.
This is the part nobody sees when everything is fine. It is also the only one that wakes me up at night, so I would rather have written it down beforehand.
Pourquoi je m'impose autant d'écrit avant de coder Why I put myself through this much writing before coding
Je l'ai appris à mes dépensI learned it the hard way
Modifier le modèle de données au cinquième mois d'un projet me coûte un temps énorme : migrations, services, tests et API à reprendre en même temps. Décider tôt m'épargne des bugs, des maux de tête et des frustrations.
Changing the data model in month five of a project costs me an enormous amount of time: migrations, services, tests and API all have to be reworked at once. Deciding early spares me bugs, headaches and frustration.
Je travaille par intermittenceI work in bursts
Mes projets s'interrompent et reprennent. Ces documents gardent l'avancement hors de ma tête, cases cochées comprises : je reprends là où je m'étais arrêté, pas là où je crois m'être arrêté.
My projects stop and start again. These documents keep the progress outside my head, ticked boxes included: I pick up where I actually left off, not where I think I left off.
Je veux pouvoir déléguerI want to be able to delegate
Une feature spécifiée à ce niveau, je peux la confier sans réunion : les règles métier, les permissions et les tests attendus sont déjà écrits noir sur blanc.
A feature specified at this level I can hand over without a meeting: the business rules, the permissions and the expected tests are already written down.