lucidiot's cybrecluster

Blog-Driven Development

Lucidiot Productivité 2022-08-14
Une longue réflexion sur une pratique que j'ai commencé sans vraiment y penser depuis un an.


Officieusement, j'essaie de me fixer une cadence de publication sur Brainshit d'un article par semaine. J'essaie de publier chaque dimanche, de sorte à me donner tout le week-end pour pouvoir travailler sur un article, mais il arrive souvent que je publie finalement plus tard durant la semaine suivante parce que je n'ai pas eu le temps de terminer. Je me retrouve par moments avec plus d'un ou deux mois d'articles déjà écrits. Ensuite, des choses de la vie se produisent, et je perds ma motivation, ou je n'ai plus le temps d'écrire, ou n'importe quelle autre excuse, et il y a un trou dans mes publications régulières. Ça arrive à beaucoup d'autres blogueurs, et on retrouve régulièrement des articles où l'auteur s'excuse de ne pas avoir pu poster comme prévu, ou de poster quelque chose de plus court.

Je n'ai pas envie de ressentir cette culpabilité de ne pas suivre mon rythme, cette impression de décevoir des gens. C'est une sensation complètement inventée, comme beaucoup d'autres. Je n'ai tout simplement jamais reçu de messages de lecteurs, même quand ces lecteurs disent suivre ce que je publie ou quand ils sont en fait mes amis, me faisant des remarques quant à ma vitesse de publication. Mon objectif d'un article par semaine reste donc complètement officieux, et ne comptez surtout pas sur moi pour que cet objectif soit toujours rempli. Je me fixe cependant toujours cet objectif personnellement, tout simplement pour faire de l'écriture une activité régulière. J'essaie de construire une habitude, une routine, d'écrire en général, que ce soit sur ce blog ou sur mes autres sites. J'essaie cependant en particulier de publier sur ce blog parce que j'ai adopté ces derniers mois une nouvelle approche dans mes publications et elle semble bien fonctionner.

Je surnomme ma pratique actuelle le Blog-Driven Development, en référence aux diverses techniques de développement informatique telles que le TDD, le DDD, le BDD (à ne pas confondre avec la BDD), le MDD, le FDD, etc. Je l'appelle parfois aussi Brainshit-Driven Development ou Blog Post-Driven Development parce que le nom n'a aucune fichue importance. Le nom décrit cela dit bien la place du blog : le blog est le moteur, mais le véritable objet est le développement.

Problèmes

Ma façon d'écrire des articles est apparue de façon assez spontanée, mais elle a déclenché une réflexion qui a mûri au fil du temps et m'a fait comprendre que je venais de résoudre la plupart de mes problèmes avec mon blog et mes divers projets informatiques de façon accidentelle.

Plein de projets laissés en plan

J'ai énormément de projets. Le nombre exact dépend de si je me souviens de où je les mets, de comment on définit la différence exacte entre un projet et une idée, si on compte tous les projets terminés ou abandonnés, ou si quelque chose qui ne se terminera jamais est un projet. J'aimerais avoir moins de projets sur lesquels je veux travailler ou suis censé travailler, mais cela impliquerait que je passerais juste moins de temps dessus. Une des raisons pour lesquelles j'ai autant de projets, outre le fait que j'aie beaucoup trop d'idées, est que je n'arrive pas souvent à rester concentré et motivé sur un seul projet à la fois. Quand je passe du temps sur mes projets, j'ai beaucoup d'options pour pouvoir espérer avoir au moins un projet qui me donnera envie. J'ai déjà essayé de me forcer à me limiter à un seul, ou à un petit nombre de projets, et ça n'a jamais vraiment bien marché.

Avec ce grand nombre de projets vient une certaine pression. J'ai beaucoup de choses en tête, tellement que j'en oublie la plupart, et j'ai aussi de nombreuses manières de les noter et pas vraiment de moyen de tout regrouper facilement en un seul endroit. J'ai aussi l'impression de ne pas travailler assez sur ces projets, puisque travailler un tout petit peu sur chaque projet ne donnera certainement pas l'impression d'avancer nulle part. Pire encore, je ne termine jamais aucun projet, parce qu'en avançant très lentement dessus, je me retrouve à force à perdre tout l'intérêt que j'avais au départ pour ce projet et il reste planté là.

Et même lorsque je ne travaille plus sur un projet, n'aie plus d'intérêt ou d'envie pour travailler sur un projet, je n'aurai pas le courage de juste laisser tomber. Il y aura quand même eu pas mal d'efforts mis dans ce projet là, souvent rien que dans les recherches initiales qui conduisent à trouver cette nouvelle idée ou à imaginer comment elle pourrait être réalisée, et abandonner un projet semble vraiment être du gaspillage. Je voudrais que tout ce temps passé aie un effet, un produit concret, un livrable pour reprendre les termes courants des projets logiciels.

Des contacts sur tilde.town ont initié le mouvement SOFA, encourageant à commencer des choses sans jamais les finir dans l'unique but de s'amuser et d'apprendre, mais j'ai vraiment besoin de plus que ça. Ce n'est pas pour autant une question de productivité, de toujours vouloir accomplir des choses au maximum, parce que je sais que je n'arriverais jamais à cet objectif et que ce sont des hobbies. Il s'agit plutôt de préserver mes recherches, d'inspirer d'autres personnes, qui sait, peut-être trouver d'autres personnes intéressées par les mêmes sujets que moi, et de pouvoir regarder dans mon passé en me disant que j'ai suivi mes passions et satisfait ma curiosité.

Documenter le pourquoi

Parfois, le livrable seul n'est même pas suffisant pour me satisfaire. Si par exemple je termine un projet logiciel, publie le projet, le documente entièrement, etc., j'ai encore l'impression qu'il manque quelque chose, quelque chose qui ne rentre pas dans les cases normales des projets logiciels : une trace du travail que j'ai mis dans le projet. Pas seulement une liste de commits, mais les réflexions, les décisions, les ressources externes que j'ai utilisé pour apprendre des choses sur le sujet, etc. C'est le genre de choses qu'on peut retrouver parfois pour des gros projets open-source dans leur système de tickets ou dans un forum séparé, mais faire ça pour moi tout seul est incroyablement fatiguant et peu pratique.

Un autre argument en faveur d'une documentation sur le pourquoi du projet, ou sur tout ce qui m'est passé par la tête ou tous les liens que j'ai cliqué, est que si pour une quelconque raison je veux revenir sur ce projet plus tard, par exemple pour en utiliser les choses que j'y ai appris dans un autre projet, ou pour aller un peu plus loin avec ce projet-là, je ne retrouve plus rien. Vu que j'ai beaucoup de choses en tête et que ma prise de notes sur les projets est souvent très insuffisante, même lorsqu'elle n'est pas publiée, je perds tout.

La documentation classique d'un projet logiciel n'est cependant pas la bonne place pour discuter de l'historique du projet, de l'historique d'une implémentation particulière, ou de toutes les étapes qui ont mené à une implémentation particulière. La documentation doit contenir des informations factuelles, objectives, sur l'état actuel du projet, sans parler de son futur, et n'est qu'un outil permettant à quelqu'un de savoir rapidement ce qu'un projet propose ou comment faire quelque chose de particulier. On ne lit que rarement un manuel comme un livre, du début à la fin ; on veut aller rapidement dans une section exacte pour répondre à une question spécifique sur le moment. Du coup, je n'avais pas l'impression d'avoir de bon endroit pour discuter de tout ça.

Quoi publier ?

Enfin, j'ai eu d'autres questionnements en ce qui concerne Brainshit. On ne peut pas dire que j'ai été très prolifique durant l'année 2020 et jusque mi-2021, alors que pourtant le premier confinement en France s'était très bien passé pour moi. J'avais un rythme de sommeil assez stable, beaucoup moins de choses où m'inquiéter vu que le monde extérieur n'était plus un problème, beaucoup plus de contrôle sur mon quotidien et j'étais globalement de meilleure humeur. Je suis la seule personne dans mon entourage à avoir assez bien vécu ce confinement.

Il y a diverses raisons pour lesquelles je n'ai quand même rien publié, entre autres le fait que j'aie été occupé à publier ailleurs, sur mes autres sites, ou à travailler sur des projets au lieu d'écrire. Je commençais aussi à manquer un peu d'inspiration pour des articles à écrire sur Brainshit, car au fil du temps la plupart des styles d'articles que je faisais ont disparu.

Je me suis beaucoup plus limité en ce qui concerne des articles méta, ou des articles dédiés à exprimer mes opinions, en particulier parce que je n'ai plus l'impression de trouver le moindre espace sain sur Internet pour exprimer ces opinions sans me faire attaquer, et parce que je ne m'estime pas assez cultivé sur aucun sujet pour pouvoir avoir le droit d'exprimer mon opinion.

Je ne fais plus d'études pseudoscientifiques, tout simplement parce que ça ne m'intéresse plus. Pas grand chose de plus à dire.

Je n'ai plus aucune motivation à écrire de la fiction, comme je l'avais expérimenté avec Vacances ou Carthage. J'avais déjà une idée globale du scénario pour au moins 7 chapitres supplémentaires, mais ça ne me donne plus envie. Un projet d'aussi longue haleine fonctionne mal pour moi, puisque je vais rapidement vouloir changer de sujet.

En plus, relire mes précédents chapitres me donnait déjà en 2020 la légère honte que je ressens en relisant tout ce que j'ai pu écrire précédemment, que ce soit du code ou de la prose, ou même parfois en repensant à des vieux souvenirs. C'est normalement un signe de progression, d'évolution, puisque j'ai suffisamment appris pour pouvoir me critiquer moi-même ; j'en ai eu un rappel récemment en me promenant sur des blogs. Mais ressentir ça n'est certainement pas un facteur qui va m'aider à reprendre.

J'avais posté quelque fois à propos de mes projets informatiques, mais le plus souvent ces posts étaient des annonces pour montrer que j'avais terminé un projet. Comme je l'ai dit précédemment, je ne termine que rarement mes projets, donc ça ne me donne pas beaucoup de matière à écrire non plus.

Une solution simple

Publier des articles sur ma progression dans ces projets, sans attendre qu'ils se terminent.

Cela résoud tous mes problèmes en une seule fois :

Cela a aussi d'autres avantages auxquels je n'avais pas pensé :

Cette solution paraît très évidente comme ça, mais elle n'est pas arrivée aussi facilement. D'abord, je n'avais pas rassemblé et expliqué tous les problèmes comme je l'ai fait dans la section précédente pour pouvoir y réfléchir. C'est ce que j'aurai normalement fait dans mon journal, sur papier, mais je n'avais pas non plus reconnu totalement que j'avais tous ces problèmes.

Le chemin vers la solution

Tout ce que vous lisez là est le fruit d'une réflexion qui a duré des mois après la publication de mon article sur le traitement de dates en langue chinoise avec jq, la version française et plus longue d'une des premières pages de mon wiki. En écrivant la version anglaise sur mon wiki, je me suis dit que je pourrais facilement publier ça sur Brainshit, et montrer aux lecteurs français que je suis toujours en vie et que je code des choses étranges.

Ce traitement de dates a été réalisé dans le cadre d'un projet dont je n'ai encore que très peu parlé dans Brainshit, ITSB, et j'ai au moins une bonne quinzaine d'articles à écrire pour en parler correctement. Je comptais l'utiliser comme une douce introduction vers ce projet, et j'ai publié un ou deux autres articles tournant autour du pot, mais j'ai finalement été interrompu par le projet de scan de réseaux Wi-Fi que j'ai réalisé avec mon meilleur ami.

C'est avec ce projet Wi-Fi que je me suis vraiment mis à essayer de publier au maximum : j'avais beaucoup d'énergie pour ce projet, et c'était un tout nouveau projet où je pouvais commencer à publier à partir de rien, en cours de route, au lieu d'essayer de faire de l'archéologie dans mes anciens projets pour refaire toutes mes réflexions et rattraper mon retard. Avec ce projet, puisque très peu de choses sont dans un dépôt Git et que tout n'était qu'un assemblage de scripts shells un peu moches dans une base de données PostgreSQL privée, les articles allaient en plus être la seule vraie production de ce projet, ce qui me poussait encore plus à les faire. J'avais également parlé de techniques que je testais à ce moment-là pour me motiver à écrire.

Il y a eu des pauses, quelques trous dans mon planning, du retard, etc., mais j'ai continué même après que ce projet aie été un peu mis en pause, avec la documentation d'autres projets. Le projet Wi-Fi n'a jamais été officiellement arrêté et j'y repasserai peut-être un jour pour au moins reprendre toutes nos données et finir de compléter OpenStreetMap autant que possible, mais comme j'ai publié au moins une douzaine d'articles dessus, je ne culpabilise pas du tout. Je n'ai pas non plus de charge mentale quelconque puisque je sais que je peux tout reprendre depuis mes notes à tout moment.

C'est dans cette période que j'ai commencé à expérimenter avec Windows XP, ce qui m'a donné encore plus d'articles à écrire, et je suis loin d'avoir terminé avec. Même lorsque je n'ai pas la motivation d'écrire des milliers de mots sur un projet pendant que je le réalise, je garde un fichier texte ouvert avec des notes basiques, des liens, etc. pour m'aider plus tard dans la rédaction, et je garde un document rempli de dizaines d'idées d'articles à publier. Ça me donne une vision sur ce que je veux publier, sur ce que je devrais terminer.

Quand je me lance dans une série d'articles particulière, j'essaie de m'y focaliser et de la finir, notamment parce que publier sur plein de projets simultanément mettrait beaucoup de confusion sur le blog. Même en restant éternellement sur le même sujet, je me rends compte que je suis démotivé beaucoup moins rapidement, puisque les articles ne sont pas interminables et que je peux y voir du progrès. Je peux aussi alterner entre l'écriture et la réalisation du projet, deux activités bien différentes.

Conclusion

J'ai écrit cet article pour deux raisons : d'une part, j'ai déjà discuté de ma façon de procéder sur IRC, et je sais qu'il y a des personnes intéressées par tous ces détails. D'autre part, en rationalisant toute cette façon de structurer mes projets, je la rends un peu plus concrète. Je la documente, un peu comme un projet en elle-même, et je peux retrouver toutes les réflexions qui m'y ont conduit, pour me rappeler de pourquoi je fais ces choses, de la même manière que je peux me référer à un article précédent pour obtenir des conseils adressés à moi-même pour me redonner envie d'écrire si besoin est. J'applique ma méthode à elle-même.

C'est peut-être finalement parce que je me mets à écrire sur mon blog pour moi-même plus qu'en imaginant ce que pourrait en penser un lecteur que j'arrive aussi bien à publier maintenant. Encore une autre ligne de réflexion à approfondir dans mon journal peut-être.


Commentaires

lucidiot, 2022-08-17

Oui le but ici était beaucoup plus d'avancer sur mes propres projets que de bloguer, mais du coup ça m'a fait réaliser que bloguer pour quelque chose et pas juste pour le fait de bloguer est beaucoup plus facile. Tu peux peut-être essayer de reprendre le concept de blog littéralement (vu que ça vient de web log), et juste l'utiliser comme un log continu pour les diverses choses que tu es en train de faire. Si je me retrouve à court de projets séparés à montrer et que je me disperse beaucoup, c'est dans cette direction que je compte aller.

fluffy, 2022-08-16

Je trouve cette réflexion assez intéressante. Il faudrait que j'y revienne. J'ai passé un certain temps avec un blog sur Wordpress (puis un moteur perso pour convertir du Markdown en HTML) que je ne mettais pas à jour très fréquemment, alors que j'avais envie de partager des choses... Mais je crois que je fonctionne un peu moins en projets, ou au moins différemment.