Patrik
Mots de sagesse de la semaine
- La rareté crée la clarté: avoir peu de temps aide à prioriser le travail (et la vie).
- Écris du code comme si tu devais le publier dans un article scientifique (conseil de N. Wirth).
Journal
J’ai passé la semaine à ajouter le support pour d’autres cantons. En général, je n’aime pas trop ce travail, c’est toujours frustrant parce que même si je comprends le calcul à haut niveau, le diable est dans les détails: un canton a un processus complètement différent (VS je te regarde!) ou décide simplement d’utiliser des fonctions d’arrondi différentes à chaque étape du calcul. C’est pas énorme pour les petits montants, mais les erreurs augmentent avec les grands chiffres. Et ça casse les tests unitaires de toute façon. Ces détails sont difficiles à bien gérer.
J’ai peut-être eu de la chance, le canton AG s’est bien passé et vite, donc j’ai ajouté TI aussi. Ils utilisent un calcul standard, en réutilisant, généralisant et ajustant le même code. Après ce refactoring, plus de la moitié des cantons nécessitent simplement une configuration de 6 lignes pour sélectionner les bonnes fonctions d’arrondi. Ça me prend plus de temps d’ajouter les tests unitaires pour me convaincre que le code est correct.
J’adore cette partie du processus de développement. Au début, le code est très large: tout est custom et spécialisé, ne s’appliquant qu’à un cas d’utilisation très précis et créant pas mal de duplication de code. Avec le temps, je commence à voir les points communs, ce qui me permet de refactorer et généraliser le code. Ça crée généralement du code plus simple et plus propre. Généraliser et supprimer du code est probablement la partie la plus gratifiante du travail. Il est important d’allouer assez de temps pendant le développement pour cette phase, parce que la sauter laisse derrière du code bordélique, difficile à maintenir, et crée de la dette technique.
Du coup, je me suis senti audacieux et j’ai commencé à ajouter le canton BE aussi. C’était censé être facile, mais évidemment ça a lamentablement échoué. Le code était là, mais il ne fonctionnait pas comme prévu. Après quelques heures de recherche, j’ai fini par découvrir que le code était correct, mais les données sous-jacentes d’un fournisseur externe avaient une erreur (un tableau était mal étiqueté). Une bonne leçon d’humilité.
Comment j’ai utilisé l’IA cette semaine?
- J’ai une grosse suite de tests de régression avec des résultats de référence. Il y a environ 100 tests pour vérifier que la simulation retourne le bon résultat. Comme j’ai changé le moteur de base pour utiliser l’arithmétique en virgule fixe, j’ai évidemment cassé tous les tests. Pas de beaucoup, en général juste quelques centimes de différence. Maintenant je peux simplement dire à Cursor d’utiliser l’output pour mettre à jour mon jeu de tests de référence.
- J’ai complètement arrêté d’utiliser l’autocomplétion: le bénéfice ne vaut pas les inconvénients. Souvent, Cursor suggère du code pendant que je tape, et je finis par ajouter du code non voulu et buggé (souvent sans même m’en rendre compte). Dans la barre en bas de la fenêtre, clique sur ‘Cursor’ et sélectionne “Disable”. Tu peux évidemment toujours utiliser l’agent. Mais au moins c’est intentionnel, pas accidentel.
- Un peu hors sujet, mais j’aime vraiment utiliser Gemini quand je cuisine. Je peux commencer avec une liste d’ingrédients pour une salade, demander quelle sauce irait bien avec, et suggérer quelque chose pour compléter le plat. Pour l’instant ça ne m’a pas déçu et ça a rendu mes salades encore meilleures.
Marc
Côté produit
Cette semaine était un peu hectique niveau temps, avec les vacances de Pâques.
Malgré tout, j’ai réussi à relancer des utilisateurs qui hésitaient à rejoindre FI Planner à cause du manque d’infos sur notre site actuellement. J’ai commencé à créer notre page “Features” sous forme de captures d’écran et de bullet points pour donner plus de clarté aux gens sur la liste d’attente.
Dans l’ensemble, c’étaient des échanges très précieux pour améliorer encore notre onboarding, notre marketing et l’expérience utilisateur. Pour ceux que ça intéresse: j’utilise le framework JTBD (Jobs-To-Be-Done) pour ça.
Ce qui tiraille
Il y a deux choses qui me mettent mal à l’aise en ce moment:
- Je dois mettre à jour notre site avec une vidéo de démo (ou au moins des captures d’écran). En fait, je connais par coeur ce qui se cache derrière le rideau vu que je bosse dessus depuis des mois voire des années. Mais je ne suis pas du tout l’utilisateur type.
- Je dois implémenter notre nouveau système de documentation au bon moment au bon endroit dans la web app. Le truc cool, c’est que j’ai déjà rassemblé l’essentiel du contenu. Maintenant, je dois l’implémenter ou bien… demander à notre frontender Claude ;)
Ces deux améliorations vont nous aider à faire moins de support direct, et à avoir plus de temps pour itérer sur le produit lui-même.
Cela dit, comme on aime le dire: on est une “Calm company”. Et je sais qu’avril/mai est une période où les semaines sont plus courtes à cause des jours fériés. Donc je veux aussi en profiter ;)
Note à un ami
Si mon amie imaginaire était au même stade que nous maintenant, je lui dirais: priorise ton backlog sans pitié.
Tu auras toujours l’impression de manquer de temps, alors garde un focus laser sur la chose la plus importante à faire en premier.
Comment j’ai utilisé l’IA cette semaine?
Côté développement (frontend), j’utilise la GenAI de cette manière en ce moment:
- Codex 5.3 / GPT-5.4: je planifie ce que je veux faire, avec une liste de requirements en output
- Claude Opus 4.6: je donne à Claude la liste de requirements pour qu’il écrive le nouveau code
Jusqu’ici, ça a très bien fonctionné, y compris pour notre plus gros redesign à ce jour.
Sauf la semaine dernière pour notre nouveau module “Inline Documentation”: Codex a mis le bazar dans notre Design System (comprendre: il a créé plus que de simples éléments de design), ce qui a faussé les requirements, ce qui a faussé l’output de Claude… Je sais ce que je dois corriger, et j’essaie d’avoir fini d’ici la semaine prochaine. À suivre!
