[{"data":1,"prerenderedAt":653},["ShallowReactive",2],{"authors":3,"article-2026-06-05-reprendre-un-projet-delaisse":331},[4,23,35,48,61,73,85,98,111,124,136,148,161,173,185,197,209,221,233,245,258,270,282,295,307,319],{"id":5,"title":6,"body":7,"description":11,"extension":14,"meta":15,"name":16,"navigation":17,"path":18,"readingTime":19,"seo":20,"stem":21,"__hash__":22},"authors\u002Fauthors\u002Falexandre-guillon.md","Software Engineer",{"type":8,"value":9,"toc":10},"minimark",[],{"title":11,"searchDepth":12,"depth":12,"links":13},"",2,[],"md",{},"Alexandre Guillon",true,"\u002Fauthors\u002Falexandre-guillon",1,{"title":6,"description":11},"authors\u002Falexandre-guillon","4tf48mjyjFNqItOHaulICbrjeCyMag1o6801uHeTz98",{"id":24,"title":6,"body":25,"description":11,"extension":14,"meta":29,"name":30,"navigation":17,"path":31,"readingTime":19,"seo":32,"stem":33,"__hash__":34},"authors\u002Fauthors\u002Falexis-ablain.md",{"type":8,"value":26,"toc":27},[],{"title":11,"searchDepth":12,"depth":12,"links":28},[],{},"Alexis Ablain","\u002Fauthors\u002Falexis-ablain",{"title":6,"description":11},"authors\u002Falexis-ablain","_SIAtB7f-39e5t3GiJof81NP47s6MGo2n4gaHkTy1uQ",{"id":36,"title":37,"body":38,"description":11,"extension":14,"meta":42,"name":43,"navigation":17,"path":44,"readingTime":19,"seo":45,"stem":46,"__hash__":47},"authors\u002Fauthors\u002Faxel-shaita.md","Engineering Manager",{"type":8,"value":39,"toc":40},[],{"title":11,"searchDepth":12,"depth":12,"links":41},[],{},"Axel Shaïta","\u002Fauthors\u002Faxel-shaita",{"title":37,"description":11},"authors\u002Faxel-shaita","fK0argUhsBkWLjpTAhY13oYLVzQthcEYkCEdtHWmIgE",{"id":49,"title":50,"body":51,"description":11,"extension":14,"meta":55,"name":56,"navigation":17,"path":57,"readingTime":19,"seo":58,"stem":59,"__hash__":60},"authors\u002Fauthors\u002Fbaptiste-faure.md","Head of Talent Acquisition",{"type":8,"value":52,"toc":53},[],{"title":11,"searchDepth":12,"depth":12,"links":54},[],{},"Baptiste Faure","\u002Fauthors\u002Fbaptiste-faure",{"title":50,"description":11},"authors\u002Fbaptiste-faure","ELisToYtcgHmgdVWZkCclTPV6exZtfyXqhpx1jjbJHs",{"id":62,"title":6,"body":63,"description":11,"extension":14,"meta":67,"name":68,"navigation":17,"path":69,"readingTime":19,"seo":70,"stem":71,"__hash__":72},"authors\u002Fauthors\u002Fbenjamin-bouillot.md",{"type":8,"value":64,"toc":65},[],{"title":11,"searchDepth":12,"depth":12,"links":66},[],{},"Benjamin Bouillot","\u002Fauthors\u002Fbenjamin-bouillot",{"title":6,"description":11},"authors\u002Fbenjamin-bouillot","tbhCFZyfTt7ZM5b5YgqQ2nhgnSTl8BweaQQryc87fHo",{"id":74,"title":37,"body":75,"description":11,"extension":14,"meta":79,"name":80,"navigation":17,"path":81,"readingTime":19,"seo":82,"stem":83,"__hash__":84},"authors\u002Fauthors\u002Fcedric-nicoloso.md",{"type":8,"value":76,"toc":77},[],{"title":11,"searchDepth":12,"depth":12,"links":78},[],{},"Cédric Nicoloso","\u002Fauthors\u002Fcedric-nicoloso",{"title":37,"description":11},"authors\u002Fcedric-nicoloso","ibSoh4VZYiWYTuLOnZTedaAfcnvet1Q9H7ogW0LgorY",{"id":86,"title":87,"body":88,"description":11,"extension":14,"meta":92,"name":93,"navigation":17,"path":94,"readingTime":19,"seo":95,"stem":96,"__hash__":97},"authors\u002Fauthors\u002Fdavid-touzet.md","Staff Engineer",{"type":8,"value":89,"toc":90},[],{"title":11,"searchDepth":12,"depth":12,"links":91},[],{},"David Touzet","\u002Fauthors\u002Fdavid-touzet",{"title":87,"description":11},"authors\u002Fdavid-touzet","dHWwnQxb1Ubt-WwXWEODGEo9AFoq1cJUhfg3kdnYSBM",{"id":99,"title":100,"body":101,"description":11,"extension":14,"meta":105,"name":106,"navigation":17,"path":107,"readingTime":19,"seo":108,"stem":109,"__hash__":110},"authors\u002Fauthors\u002Feloise-chizat.md","Data Engineer",{"type":8,"value":102,"toc":103},[],{"title":11,"searchDepth":12,"depth":12,"links":104},[],{},"Eloïse Chizat","\u002Fauthors\u002Feloise-chizat",{"title":100,"description":11},"authors\u002Feloise-chizat","Utd72Vm9qT4hh2ZbFi6a2_nXw5Wb494Ed_HL1ra5yw8",{"id":112,"title":113,"body":114,"description":11,"extension":14,"meta":118,"name":119,"navigation":17,"path":120,"readingTime":19,"seo":121,"stem":122,"__hash__":123},"authors\u002Fauthors\u002Femmanuel-auclair.md","Staff engineer",{"type":8,"value":115,"toc":116},[],{"title":11,"searchDepth":12,"depth":12,"links":117},[],{},"Emmanuel Auclair","\u002Fauthors\u002Femmanuel-auclair",{"title":113,"description":11},"authors\u002Femmanuel-auclair","MtsA8THNLEn0dTtYEIQaGwDuf7MjQL55IOeei5gugEg",{"id":125,"title":6,"body":126,"description":11,"extension":14,"meta":130,"name":131,"navigation":17,"path":132,"readingTime":19,"seo":133,"stem":134,"__hash__":135},"authors\u002Fauthors\u002Fhoreb-parraud.md",{"type":8,"value":127,"toc":128},[],{"title":11,"searchDepth":12,"depth":12,"links":129},[],{},"Horeb Parraud","\u002Fauthors\u002Fhoreb-parraud",{"title":6,"description":11},"authors\u002Fhoreb-parraud","ajjsnUX4ohZI-ghMdbb92q_taWDkKXVZSLZXoAeLQtg",{"id":137,"title":37,"body":138,"description":11,"extension":14,"meta":142,"name":143,"navigation":17,"path":144,"readingTime":19,"seo":145,"stem":146,"__hash__":147},"authors\u002Fauthors\u002Fhugo-contreras.md",{"type":8,"value":139,"toc":140},[],{"title":11,"searchDepth":12,"depth":12,"links":141},[],{},"Hugo Contreras","\u002Fauthors\u002Fhugo-contreras",{"title":37,"description":11},"authors\u002Fhugo-contreras","2nc3VMu9ASq9Z6Pwx2-7-Ye991Pww4p-UEDBQFfjF-Q",{"id":149,"title":150,"body":151,"description":11,"extension":14,"meta":155,"name":156,"navigation":17,"path":157,"readingTime":19,"seo":158,"stem":159,"__hash__":160},"authors\u002Fauthors\u002Fjulien-tassin.md","Head of Engineering",{"type":8,"value":152,"toc":153},[],{"title":11,"searchDepth":12,"depth":12,"links":154},[],{},"Julien Tassin","\u002Fauthors\u002Fjulien-tassin",{"title":150,"description":11},"authors\u002Fjulien-tassin","iUIHI7SITje38Jh9X9uvYs4-VsHx4eCdt6hAlyLFG_o",{"id":162,"title":6,"body":163,"description":11,"extension":14,"meta":167,"name":168,"navigation":17,"path":169,"readingTime":19,"seo":170,"stem":171,"__hash__":172},"authors\u002Fauthors\u002Flaurent-renard.md",{"type":8,"value":164,"toc":165},[],{"title":11,"searchDepth":12,"depth":12,"links":166},[],{},"Laurent Renard","\u002Fauthors\u002Flaurent-renard",{"title":6,"description":11},"authors\u002Flaurent-renard","5BP7Ed-pt1SQHjh0UJ1XUrlLTcdlFaDoKBCP4deHq8A",{"id":174,"title":6,"body":175,"description":11,"extension":14,"meta":179,"name":180,"navigation":17,"path":181,"readingTime":19,"seo":182,"stem":183,"__hash__":184},"authors\u002Fauthors\u002Fleo-martin.md",{"type":8,"value":176,"toc":177},[],{"title":11,"searchDepth":12,"depth":12,"links":178},[],{},"Léo Martin","\u002Fauthors\u002Fleo-martin",{"title":6,"description":11},"authors\u002Fleo-martin","eYxCHkRgbGDV7shKdTA9s7Tu0zGV4yDGFoKR5MHQntY",{"id":186,"title":6,"body":187,"description":11,"extension":14,"meta":191,"name":192,"navigation":17,"path":193,"readingTime":19,"seo":194,"stem":195,"__hash__":196},"authors\u002Fauthors\u002Floic-bousquet.md",{"type":8,"value":188,"toc":189},[],{"title":11,"searchDepth":12,"depth":12,"links":190},[],{},"Loïc Bousquet","\u002Fauthors\u002Floic-bousquet",{"title":6,"description":11},"authors\u002Floic-bousquet","ko12qZwiGL8XNjAoy9oWypPkIjr29Pbq7vhdtgldqeQ",{"id":198,"title":6,"body":199,"description":11,"extension":14,"meta":203,"name":204,"navigation":17,"path":205,"readingTime":19,"seo":206,"stem":207,"__hash__":208},"authors\u002Fauthors\u002Floic-poullain.md",{"type":8,"value":200,"toc":201},[],{"title":11,"searchDepth":12,"depth":12,"links":202},[],{},"Loïc Poullain","\u002Fauthors\u002Floic-poullain",{"title":6,"description":11},"authors\u002Floic-poullain","oRIyJhFRTqxy5dLCYQ2OnYZ1DB-gLDUM-85vTSYuTF0",{"id":210,"title":100,"body":211,"description":11,"extension":14,"meta":215,"name":216,"navigation":17,"path":217,"readingTime":19,"seo":218,"stem":219,"__hash__":220},"authors\u002Fauthors\u002Fmaud-lelu.md",{"type":8,"value":212,"toc":213},[],{"title":11,"searchDepth":12,"depth":12,"links":214},[],{},"Maud Lélu","\u002Fauthors\u002Fmaud-lelu",{"title":100,"description":11},"authors\u002Fmaud-lelu","MMbsCKuE41OMHusrl12FIEsI-Trx7l8Nn_ANhvj2_y4",{"id":222,"title":37,"body":223,"description":11,"extension":14,"meta":227,"name":228,"navigation":17,"path":229,"readingTime":19,"seo":230,"stem":231,"__hash__":232},"authors\u002Fauthors\u002Fnicolas-poirier.md",{"type":8,"value":224,"toc":225},[],{"title":11,"searchDepth":12,"depth":12,"links":226},[],{},"Nicolas Poirier","\u002Fauthors\u002Fnicolas-poirier",{"title":37,"description":11},"authors\u002Fnicolas-poirier","dXrJkYo8az4SN_D23aYc3fQ7z8s1dR2a0lt1ogjAjJs",{"id":234,"title":37,"body":235,"description":11,"extension":14,"meta":239,"name":240,"navigation":17,"path":241,"readingTime":19,"seo":242,"stem":243,"__hash__":244},"authors\u002Fauthors\u002Fraphael-sauget.md",{"type":8,"value":236,"toc":237},[],{"title":11,"searchDepth":12,"depth":12,"links":238},[],{},"Raphaël Sauget","\u002Fauthors\u002Fraphael-sauget",{"title":37,"description":11},"authors\u002Fraphael-sauget","Uri9bcq0QDuxRA0PbBoNtu7p_5L3dALu4kzcXVW0xyM",{"id":246,"title":247,"body":248,"description":11,"extension":14,"meta":252,"name":253,"navigation":17,"path":254,"readingTime":19,"seo":255,"stem":256,"__hash__":257},"authors\u002Fauthors\u002Fromain-koenig.md","Co-funder & Head of innovation",{"type":8,"value":249,"toc":250},[],{"title":11,"searchDepth":12,"depth":12,"links":251},[],{},"Romain Koenig","\u002Fauthors\u002Fromain-koenig",{"title":247,"description":11},"authors\u002Fromain-koenig","uyS8--eG2_ezyqRABcJnMJmQKKuSArhPWd14aUvFeEw",{"id":259,"title":37,"body":260,"description":11,"extension":14,"meta":264,"name":265,"navigation":17,"path":266,"readingTime":19,"seo":267,"stem":268,"__hash__":269},"authors\u002Fauthors\u002Fromaric-juniet.md",{"type":8,"value":261,"toc":262},[],{"title":11,"searchDepth":12,"depth":12,"links":263},[],{},"Romaric Juniet","\u002Fauthors\u002Fromaric-juniet",{"title":37,"description":11},"authors\u002Fromaric-juniet","4Zb2artgT-eo-PHLXi3xi4d5t7s6PfhUxeSfXIikSUY",{"id":271,"title":6,"body":272,"description":11,"extension":14,"meta":276,"name":277,"navigation":17,"path":278,"readingTime":19,"seo":279,"stem":280,"__hash__":281},"authors\u002Fauthors\u002Fstanyslas-bres.md",{"type":8,"value":273,"toc":274},[],{"title":11,"searchDepth":12,"depth":12,"links":275},[],{},"Stanyslas Bres","\u002Fauthors\u002Fstanyslas-bres",{"title":6,"description":11},"authors\u002Fstanyslas-bres","Xa0SahETuiN4q1jrmR2ych3moAqcZ2LbU7vSfEt2RuU",{"id":283,"title":284,"body":285,"description":11,"extension":14,"meta":289,"name":290,"navigation":17,"path":291,"readingTime":19,"seo":292,"stem":293,"__hash__":294},"authors\u002Fauthors\u002Ftalent-acquisition.md","Talent Acquisition",{"type":8,"value":286,"toc":287},[],{"title":11,"searchDepth":12,"depth":12,"links":288},[],{},"Équipe Talent Acquisition","\u002Fauthors\u002Ftalent-acquisition",{"description":11},"authors\u002Ftalent-acquisition","doDfE76txftQ4wIiKjJoDmSpyzSKk0tzlgVAp6-opAY",{"id":296,"title":6,"body":297,"description":11,"extension":14,"meta":301,"name":302,"navigation":17,"path":303,"readingTime":19,"seo":304,"stem":305,"__hash__":306},"authors\u002Fauthors\u002Fvictor-borg.md",{"type":8,"value":298,"toc":299},[],{"title":11,"searchDepth":12,"depth":12,"links":300},[],{},"Victor Borg","\u002Fauthors\u002Fvictor-borg",{"title":6,"description":11},"authors\u002Fvictor-borg","-Za-JweoiP6hyclue_WkxMXdRUDTczPGlJf6AZckjUc",{"id":308,"title":6,"body":309,"description":11,"extension":14,"meta":313,"name":314,"navigation":17,"path":315,"readingTime":19,"seo":316,"stem":317,"__hash__":318},"authors\u002Fauthors\u002Fvirgil-roger.md",{"type":8,"value":310,"toc":311},[],{"title":11,"searchDepth":12,"depth":12,"links":312},[],{},"Virgil Roger","\u002Fauthors\u002Fvirgil-roger",{"title":6,"description":11},"authors\u002Fvirgil-roger","DfVFe5j0bCgXeEr381ZYOM5DP4m-pWb93J9-m_muKJ0",{"id":320,"title":6,"body":321,"description":11,"extension":14,"meta":325,"name":326,"navigation":17,"path":327,"readingTime":19,"seo":328,"stem":329,"__hash__":330},"authors\u002Fauthors\u002Fyukan-zhao.md",{"type":8,"value":322,"toc":323},[],{"title":11,"searchDepth":12,"depth":12,"links":324},[],{},"Yukan Zhao","\u002Fauthors\u002Fyukan-zhao",{"title":6,"description":11},"authors\u002Fyukan-zhao","LRPHugtAJnWHsmHxy9_SR5Zas_C5p-GR_uHEs1Fhk_E",{"id":332,"title":333,"author":334,"body":335,"date":640,"description":641,"extension":14,"lang":642,"meta":643,"navigation":17,"path":644,"published":17,"readingTime":645,"seo":646,"stem":647,"tags":648,"__hash__":652},"articles\u002Farticles\u002F2026-06-05-reprendre-un-projet-delaisse.md","Reprendre un projet délaissé, comment on s’y prend ?","benjamin-bouillot",{"type":8,"value":336,"toc":625},[337,342,346,349,355,359,367,370,373,378,384,387,390,395,399,405,410,413,416,419,422,435,440,444,447,450,455,459,462,465,468,473,477,485,488,494,497,500,503,508,511,514,517,519,523,526,529,532,536,539,542,547,550,554,557,560,565,569,585,589,592,595,598,612,615,619,622],[338,339,341],"h1",{"id":340},"introduction","Introduction",[343,344,345],"p",{},"Il arrive, dans un cadre perso ou pro, que l’on doive travailler sur un vieux projet toujours en\nfonctionnement mais qui n’est plus vraiment maintenu pour diverses raisons : manque de temps, manque\nde besoin, manque d’envie, etc.",[343,347,348],{},"Ainsi, sans historique ni connaissance, il n’est pas toujours facile de savoir par où attaquer. Ce\nguide, s’il en est un, permet d’évoquer les grandes étapes clés à mettre en place.",[350,351,352],"blockquote",{},[343,353,354],{},"Afin d’illustrer au mieux, je vais prendre un exemple concret : notre serveur principal est\nconsommateur d’un service de catégorisation de transaction. Malheureusement, ce service renvoyait\nde temps en temps des erreurs empêchant 10% des transactions d’être catégorisées. Ce service\nfaisait à la fois appel à une API d’un autre projet interne mais contenait aussi une logique\nmétier assez lourde non testée empêchant de comprendre précisément d’où vient le bug.",[338,356,358],{"id":357},"le-balisage","Le balisage",[360,361,363],"h2",{"id":362},"le-but",[364,365,366],"strong",{},"Le but",[343,368,369],{},"Première étape primordiale, qui est souvent mise de côté : “Définir un but”. Pour cela, on peut\nrépondre aux questions : Qu’est-ce qu’on fait là exactement ? Réparer un bug ? Ingérer de la\nconnaissance ? Migration ? Maintenance ? Ajouter une feature ?",[343,371,372],{},"Bref, les “pourquoi on est là” peuvent être nombreux, et cela aura un impact très différent sur les\nétapes à mettre en place par la suite.",[350,374,375],{},[343,376,377],{},"Le but était clair dès le début : comprendre pourquoi le service de catégorisation renvoyait des\nerreurs, avec potentiellement un refactoring si besoin.",[360,379,381],{"id":380},"le-temps",[364,382,383],{},"Le temps",[343,385,386],{},"On n'a jamais un temps infini et le but est souvent lié au temps. Si on est là pour un bug, c’est\nréaliste d’y passer quelques jours, mais peut-être pas 1 mois.",[343,388,389],{},"Par exemple, si on est là pour acquérir de la connaissance et faire évoluer le module, 3 à 4 jours\nde tests et d’analyse afin de comprendre le module semblent acceptables.",[350,391,392],{},[343,393,394],{},"Le code appelant était assez vieux, écrit en JS et trop complexe pour ce qu’il faisait. Au vu de\nnotre but, nous nous étions donné environ 1 semaine de compréhension et refacto JS vers TS, et 1\nsemaine d’amélioration pour corriger le bug. C’était une estimation assez haute, ne connaissant\npas du tout le projet, ni ce qu’on allait y découvrir.",[360,396,398],{"id":397},"chercher-demander-monitorer-et-plus","Chercher, demander, monitorer et plus",[343,400,401],{},[402,403,404],"em",{},"Ici, il n’y a pas d’ordre précis sur les étapes. Souvent, on fait toutes les étapes en même temps\nsans vraiment s’en rendre compte.",[406,407,409],"h3",{"id":408},"chercher","Chercher",[343,411,412],{},"On met les mains dedans, on essaie de comprendre les différents fichiers, les points d’entrée, les\nappels API entrants\u002Fsortants, on dépile la montagne de code progressivement.",[343,414,415],{},"On jette un coup d’œil par-ci par-là. Le but est de prendre un bout et d'essayer de tirer la pelote\nde code jusqu'à la base de données, en passant par les différentes couches de service.",[343,417,418],{},"S’il y a un ReadMe à la racine, on le lit. Il n’est pas toujours à jour, donc on prend ses infos\navec des pincettes.",[343,420,421],{},"Dès qu’on voit une ligne ou un algo qu’on ne comprend pas, il ne faut pas hésiter à aller chercher\nplus d’infos et cela par plusieurs moyens :",[423,424,425,429,432],"ul",{},[426,427,428],"li",{},"le message de commit (avec un peu de chances, on aura une petite ligne explicative)",[426,430,431],{},"En relisant la PR\u002FMR liée s’il y en a une (avec un peu plus de chances, elle existera avec une\nbelle description !)",[426,433,434],{},"En essayant de retrouver le ticket Jira (ou autre) lié à ce commit ou cette PR\u002FMR (uniquement si\non a beaucoup de chances, ça n’arrive pas toujours …)",[350,436,437],{},[343,438,439],{},"Pas de ReadMe disponible pour ce service, juste le code à lire, comprendre et exécuter. Les\nmessages de commits datant d’il y a 6 ans sont très simplistes et encore plus les descriptions de\nPR, donc impossible de se baser dessus.",[406,441,443],{"id":442},"demander","Demander",[343,445,446],{},"On récolte le plus d’infos venant d’une personne ayant travaillé de près ou de loin sur le sujet,\nelle pourra facilement nous aider que ça soit durant une conversation rapide ou plus longue. Toutes\nles infos ne seront peut-être pas utiles, ou des données seront peut-être dépassées, mais souvent\nc’est par ce biais qu’on apprend le plus de choses.",[343,448,449],{},"Par exemple, savoir que le projet a été fait par un seul développeur pendant 6 mois ne sera pas la\nmême chose que s’il a été fait par une équipe de 4 avec code review.",[350,451,452],{},[343,453,454],{},"Nous avons échangé avec les développeurs ayant créé ce service il y a quelques années, ce qui nous\na permis de récupérer des infos sur l’utilisation et son fonctionnement. Nous avons aussi appris\nque le code n’a pas vraiment évolué depuis sa création, et donc correspond aux standards d’il y a\nquelques années.",[406,456,458],{"id":457},"monitorer","Monitorer",[343,460,461],{},"Pour s’assurer de l’impact réel de ce que l’on va faire (négatif ou positif) et donc savoir si on\nest en train d’insérer un bug, ou si on en répare un autre.",[343,463,464],{},"On met des logs en entrée et sortie du service, que ça soit pour comprendre l’utilisation du service\nou connaître la volumétrie.",[343,466,467],{},"C’est toujours intéressant d’avoir la volumétrie d’utilisation d’une route ou d’un service, cela\npermet de s’assurer que tout reste fonctionnel durant nos changements par la suite.",[350,469,470],{},[343,471,472],{},"Jusqu'à ce moment-là, nous étions absolument aveugles car nous n'avions aucune métrique sur le\nfonctionnement du service. Nous avons donc rajouté des logs à l'entrée et à la sortie du service,\nainsi qu'avant et après l'appel à l'API interne. Le but est d'analyser la donnée en entrée et\ncelle en sortie et de s’assurer que durant le refactoring prévu par la suite, tout reste\nfonctionnel.",[406,474,476],{"id":475},"prendre-des-notes","Prendre des notes",[343,478,479,480,484],{},"Et oui, les ",[481,482,483],"del",{},"paroles"," idées s’envolent, mais les écrits restent. Il est primordial de prendre des\nnotes quand on explore quelque chose, que ça soit sur un cahier, sur Notion ou dans un fichier\nmarkdown. Le but est de garder une trace de ce qu’on a fait\u002Fvu\u002Fexploré, mais aussi de mettre au\nclair toutes nos pistes d’exploration ; de schématiser l’architecture du projet ou encore de mettre\nà plat le but du service.",[343,486,487],{},"Ces notes permettent juste de s’y retrouver et de mettre à plat nos recherches et nos idées. Le but\nest juste d’avoir un cahier de brouillon privé.",[406,489,491],{"id":490},"mettre-du-propre",[364,492,493],{},"Mettre du propre",[343,495,496],{},"À partir de là, on devrait avoir engrangé pas mal de connaissances pour mettre au propre et en faire\nprofiter tout le monde.",[343,498,499],{},"Il peut être très intéressant de compléter le ReadMe du projet avec les notes prises en amont.\nPermettant ainsi de rajouter de l’information fraiche grâce à nos découvertes, voire de rajouter des\ndiagrammes d’architectures, etc. Le but est cette fois de mettre au propre toutes ses informations\net de les partager publiquement avec le reste de l’équipe.",[343,501,502],{},"Une autre façon de mettre au propre est de pouvoir en sortir des tâches à faire : si on était là\npour améliorer une feature, on se dit qu’un refacto avant sera nécessaire par exemple et mettre ça\ndans un Jira permet d’y voir plus clair par exemple.",[350,504,505],{},[343,506,507],{},"Grâce aux notes prises tout au long de notre exploration du projet, nous avons pu créer un Notion\npermettant d’expliquer le cycle de vie du service que nous avons partagé au sein de l’équipe. Nous\nne voulions pas mettre un ReadMe au milieu du code que personne ne lira réellement.",[509,510],"hr",{},[343,512,513],{},"Pour le moment, on a surtout balisé la zone, en analysant le code, mais aussi en comprenant comment\nil est appelé, par qui, combien de fois, etc.",[343,515,516],{},"Le temps passé pour chaque étape est complexe à déterminer : selon la complexité du code et de\nl’architecture, mais aussi nos connaissances sur le métier ou sur le langage. On peut aussi bien\npasser 1 journée à rajouter du monitoring qu’une heure. Toute situation est différente, donc chacun\ndoit définir le temps à investir selon le bénéfice escompté.",[509,518],{},[338,520,522],{"id":521},"laction","L’action",[343,524,525],{},"Maintenant qu’on a balisé, on peut commencer à faire des changements. Cependant, il n’est pas rare\nque des changements aient déjà été faits en amont sans qu’on s’en rende vraiment compte.",[343,527,528],{},"Dans l’étape “Chercher”, des petits tests unitaires du type “boîte noire” ont sûrement été ajoutés.",[343,530,531],{},"Durant l’étape “Monitorer”, des logs ont certainement été ajoutés.",[406,533,535],{"id":534},"on-attend-et-on-analyse","On attend et on analyse",[343,537,538],{},"Maintenant qu’on a du monitoring en place, on va … monitorer ! On sort nos plus beaux dashboards\nDatadog ou autre, et on attend que les logs remontent.",[343,540,541],{},"Encore une fois, ça peut aller très vite comme être très lent. Selon la fréquence d’appel du\nservice.",[350,543,544],{},[343,545,546],{},"Le service de catégorisation de transactions est appelé uniquement le matin entre 4h et 9h, car\nles banques mettent à jour les transactions vers ces heures-là. Le reste du temps, le service\nn’est pas appelé, donc on doit attendre le lendemain matin pour avoir des infos exploitables.",[343,548,549],{},"En attendant, notre connaissance sur le sujet a commencé à évoluer. Et on fait le lien avec ce qu’on\na pu lire dans un vieux ReadMe incompréhensible ou encore le collègue qu’on a interviewé et qui nous\na baragouiné un truc sans qu’on le comprenne. En fait, tout commence à s’éclairer et on se dit “ok\nje ne comprends pas tout, mais je sais ce que ça fait à peu près.”",[406,551,553],{"id":552},"migration-bug-maintenance-pourquoi-on-est-là","Migration ? Bug ? Maintenance ? Pourquoi on est là ?",[343,555,556],{},"Très bizarrement, une fois à cette étape, on a une forte envie de tout brûler et de tout\nrecommencer.",[343,558,559],{},"Même si cela peut sembler légitime, il faut prendre un pas de recul et se poser la question :\n“Pourquoi on est là ?”. Exemple : Est-ce que tout passer en ESM au lieu de CommonJS a un réel impact\nfort ? Si mon but est de réparer un bug obscur, je ne pense pas. Si mon but est d’améliorer ce\nservice et de le maintenir réellement, passer 2 jours sur cette tâche peut être une bonne idée.",[350,561,562],{},[343,563,564],{},"On peut enfin faire ce pourquoi on est là : refactoring et correction du bug. Pour la petite\nhistoire, nous avons réussi à améliorer le code métier complexe récursif qui catégorisait\nplusieurs fois de suite les mêmes transactions, atteignant le rate limit de l’API de temps en\ntemps.",[338,566,568],{"id":567},"à-garder-en-tête-tout-du-long","À garder en tête tout du long",[423,570,571,574,582],{},[426,572,573],{},"Il est normal de ne pas tout comprendre immédiatement, ça peut demander du temps et peut être\ndécourageant. Mais il faut continuer de progresser, demander de l’aide, réfléchir, se tromper.",[426,575,576,577,581],{},"Un bon moyen de comprendre est de changer le code et de voir ce qu’il se passe. Passer une heure à\nécrire une méthode pour la supprimer à la fin avec ",[578,579,580],"code",{},"git reset"," peut être rageant, mais l’heure\npassée est en fait plus bénéfique qu’une seule méthode écrite. Cela a permis d’engranger de la\nconnaissance, d’explorer une piste inutile, de comprendre un langage ou un pattern. Bref, le\nnombre de lignes de code final a très peu d’importance.",[426,583,584],{},"Le temps est crucial, tout peut se faire en moins d’une demi-journée comme en 2 semaines ; ainsi\nil est important de souvent se poser la question : “Est-ce que cela a une réelle valeur ajoutée\npour la suite ?”.",[338,586,588],{"id":587},"conclusion","Conclusion",[343,590,591],{},"Il n’est pas aisé d’arriver sur ce genre de projet. Cela peut être fastidieux mais très gratifiant\nquand on commence à maîtriser le scope.",[343,593,594],{},"Ces étapes ne sont pas toujours utilisables dans toutes les situations, ce sont plus des idées à\ncreuser si besoin. Il est possible que le code soit totalement clair et testé, donc pas besoin de\nperdre du temps à interviewer un collègue par exemple.",[343,596,597],{},"Il n’est pas rare qu’une piste en engendre une autre et que toutes ses étapes se mélangent petit à\npetit :",[423,599,600,603,606,609],{},[426,601,602],{},"Une interview nous emmène sur un bout de code incompréhensible qui est le cœur du projet,",[426,604,605],{},"On écrit des tests pour mieux comprendre tout en prenant des notes à côté,",[426,607,608],{},"Finalement, on rajoute un log en prod pour comprendre l’entrée et la sortie de cette méthode,",[426,610,611],{},"Le temps que les logs apparaissent, on se concentre sur un appel API qui semble étrange,",[343,613,614],{},"Tout cela nous aura pris peut-être 2 heures et on aura exécuté plein d’étapes en même temps sans\ns’en rendre compte.",[406,616,618],{"id":617},"aparté-ia","Aparté IA",[343,620,621],{},"À l’heure de l’IA, on pourrait se dire “on le passe à Claude et on pose des questions dessus”. Cela\npeut être une solution, mais ce n’est pas toujours suffisant. Selon les personnes, il est préférable\nde creuser un problème pour mieux le comprendre et se l’accaparer que d’avoir l’explication\ndirectement. Mettre au propre un ReadMe à la main selon ses connaissances permet aussi de faire le\nvide dans sa tête et éventuellement de se poser plus de questions entraînant de nouvelles recherches\n; le but étant d’éliminer toutes les zones d’ombre et d'incompréhension. Alors que lire un ReadMe\nqui vient d’être généré peut contenir des zones d’ombre que personne ne verra directement et ne\nremettra en question.",[343,623,624],{},"Aussi, l’IA n’a pas plus de contexte que nous. Elle saura répondre au comment (le code) mais pas au\npourquoi (le métier) s’il n’est pas documenté.",{"title":11,"searchDepth":12,"depth":12,"links":626},[627,628,629],{"id":362,"depth":12,"text":366},{"id":380,"depth":12,"text":383},{"id":397,"depth":12,"text":398,"children":630},[631,633,634,635,636,637,638,639],{"id":408,"depth":632,"text":409},3,{"id":442,"depth":632,"text":443},{"id":457,"depth":632,"text":458},{"id":475,"depth":632,"text":476},{"id":490,"depth":632,"text":493},{"id":534,"depth":632,"text":535},{"id":552,"depth":632,"text":553},{"id":617,"depth":632,"text":618},"2026-06-05","Reprendre un vieux projet, ce n’est pas foncer dans le code : c’est d’abord comprendre pourquoi on y va, ce qu’il fait vraiment, et comment agir sans tout casser.","fr",{},"\u002Farticles\u002F2026-06-05-reprendre-un-projet-delaisse",13,{"title":333,"description":641},"articles\u002F2026-06-05-reprendre-un-projet-delaisse",[649,650,651],"Tech","Refacto","Historique","qv-ZoYlMOLCbPpPLm0b_0WbfkUfoHq9DC-XCEmNqAec",1780902539908]