<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>produit - Tag - Jordan Chapuy - Blog d'un développeur passionné ❤️</title><link>https://jordanchapuy.com/tags/produit/</link><description>produit - Tag - Jordan Chapuy - Blog d'un développeur passionné ❤️</description><generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Wed, 29 Jul 2026 15:45:48 +0200</lastBuildDate><atom:link href="https://jordanchapuy.com/tags/produit/" rel="self" type="application/rss+xml"/><item><title>Quand l'usage de l'IA fait (re)découvrir les pratiques tech et produit</title><link>https://jordanchapuy.com/posts/2026/07/quand-l-usage-de-l-ia-fait-re-decouvrir-les-pratiques-tech-et-produit/</link><pubDate>Wed, 29 Jul 2026 15:45:48 +0200</pubDate><author>Auteur</author><guid>https://jordanchapuy.com/posts/2026/07/quand-l-usage-de-l-ia-fait-re-decouvrir-les-pratiques-tech-et-produit/</guid><description><![CDATA[<p>J&rsquo;ai remarqué quelque chose d&rsquo;assez marrant ces dernières semaines. En tout cas, quelque chose qui me fait sourire.</p>
<p>Je suis pas mal les nouveautés autour de l&rsquo;IA et des agents. Parfois via le canal <em>créateurs de contenu</em> qui expérimentent beaucoup avec les agents. Ils testent les outils, partagent ce qui fonctionne, leurs use case, et ils inventent parfois de nouveaux mots pour décrire leurs façons de faire.</p>
<p>Et puis je suis tombé sur ce tweet de Peter Steinberger, le créateur d&rsquo;OpenClaw :</p>
<blockquote>
<p>Are we still talking loops or did we shift to graphs yet?</p>
</blockquote>
<p>Peu de temps avant, je voyais du <em>loop engineering</em> partout. Maintenant, c&rsquo;est le <em>graph engineering</em> qui commence à faire son apparition.</p>
<p>J&rsquo;ai voulu comprendre un peu mieux ce qui se cachait derrière. Et je me suis dit : « Ah oui. On est en train de remettre des noms sur des choses que l&rsquo;on connaît déjà assez bien. »</p>
<p>Pas exactement les mêmes choses, évidemment. Le contexte est nouveau, les outils aussi. Mais il y a comme un air de famille avec pas mal de <strong>pratiques tech et produit</strong> qui elles sont déjà ancrés depuis bien longtemps.</p>
<h2 id="avancer-par-petites-étapes-encore-et-toujours">Avancer par petites étapes, encore et toujours</h2>
<p>Le <em>loop engineering</em>, on pourrait dire que ça consiste à donner un objectif et des critères de réussite à un agent plutôt que de lui expliquer comment faire tout son travail. On lui donne <strong>un but à atteindre</strong>, pas une liste d&rsquo;étape version notice IKEA. L&rsquo;agent essaye, observe le résultat, corrige et recommence.</p>
<p>La première chose qui me vient, ce sont les <strong>tests d&rsquo;acceptances</strong>. Forcément, il faut donner de bons critères de succès pour que l&rsquo;agent sache de lui-même quand c&rsquo;est est-ce qu&rsquo;il a bien atteint son objectif.</p>
<p>Ça me fait penser aux <strong>boucles de feedback</strong> que l&rsquo;on recherche partout quand on fabrique un produit ou du logiciel. On fait une petite chose, on vérifie si elle répond au besoin, on ajuste. Un test automatisé, une démo, un retour utilisateur, une revue de code, autant de façons d&rsquo;apprendre avant d&rsquo;avoir construit un gigantesque truc impossible à déplacer.</p>
<p>Ça me fait penser au <strong>quoi versus comment</strong>. Un PO ne va pas expliquer aux développeurs comment fabriquer la page de connexion. On explique autrement vers où on veut arriver, les collaborateurs ne sont <strong>pas de simples exécutants</strong>. On va donner de l&rsquo;<strong>autonomie</strong> pour que l&rsquo;équipe décide comment faire. Tiens, on pourrait penser aux <strong>OKR</strong> aussi.</p>
<p>Même idée avec le <em>graph engineering</em>. Au lieu de demander à un agent de réaliser une immense tâche dans son coin, on la découpe. On confie des responsabilités plus petites, on explicite ce qui dépend de quoi, on peut vérifier chaque morceau plus facilement.</p>
<p>Ça rappelle forcément le <strong>découpage</strong> d&rsquo;un problème, les <strong>responsabilités</strong> bien séparées, les <strong>incréments</strong> livrables, les petites pull requests, &hellip; Bref, tout ce que l&rsquo;on essaie de faire quand on veut garder un projet compréhensible et qui peut facilement évoluer.</p>
<p>On dirait que les agents aussi préfèrent qu&rsquo;on évite de leur donner une mission du type : « Refais-moi toute l&rsquo;application, et si tu as le temps pense aussi à la stratégie marketing. » Qui aurait pu prédire ? :)</p>
<h2 id="donner-le-bon-contexte">Donner le bon contexte</h2>
<p>Autre sujet que je vois revenir en permanence : le <strong>contexte</strong>.</p>
<p>Pour qu&rsquo;un agent fasse correctement son travail, il faut lui donner les bonnes informations. Les objectifs, les contraintes, les exemples et contre-exemples, les fichiers utiles, la façon dont le projet est organisé, ce qui est acceptable ou non, des critères de succès, etc. Sinon, il devra deviner. Et quand une IA devine, elle le fait souvent avec une confiance assez impressionnante (les fameuses halucinations).</p>
<p>Là encore, ça me semble plutôt familier, et peut-être vous aussi.</p>
<p>Un nouveau développeur qui arrive dans une équipe, un collègue qui reprend un sujet, une personne à qui l&rsquo;on délègue une tâche : tout le monde a besoin de contexte. Les décisions passées, le vocabulaire métier, les contraintes implicites, la définition de « c&rsquo;est terminé ». Plus on <strong>explicite</strong>, plus on <strong>s&rsquo;aligne</strong>, plus on travaillera efficacement ensemble.</p>
<p>Les fichiers d&rsquo;instructions pour agents, les dossiers de contexte et les exemples de livrables sont peut-être de nouvelles façons de faire, mais le besoin qu&rsquo;ils adressent est bien plus vieux : permettre à quelqu&rsquo;un — ou quelque chose — de comprendre avant d&rsquo;agir.</p>
<h2 id="rien-de-très-neuf-au-final">Rien de très neuf au final</h2>
<p>Mon propos n&rsquo;est pas de critiquer les personnes qui parlent de ces sujets, ou dire qu&rsquo;elles n&rsquo;inventent rien. Personne n&rsquo;a la même histoire, le même&hellip; contexte. Je trouvais juste cette observation amusante, et j&rsquo;avais envie de la partager.</p>
<p>Notre usage de l&rsquo;IA et des agents nous faire (re)découvrir des partiques tech et produit, déjà existante. Sous une forme légèrement différente. Est-ce que l&rsquo;IA remplacera nos jobs ? J&rsquo;en sais rien. Mais on dirait que pour le moment, certaines façons de faire reste utile même si l&rsquo;outil change. Et ça, c&rsquo;est intéressant.</p>
<p>La culture tech et produit n&rsquo;a pas pris un coup de vieux. Et c&rsquo;est peut-être pour ça qu&rsquo;elle était (et est toujours) pertinente.</p>
]]></description></item><item><title>Créer des fonctionnalités augmentées par l'IA dans une application mobile</title><link>https://jordanchapuy.com/posts/2025/02/creer-des-fonctionnalites-augmentees-par-ia-dans-une-application-mobile-llm-intelligence-artificielle/</link><pubDate>Tue, 04 Feb 2025 15:23:00 +0100</pubDate><author>Auteur</author><guid>https://jordanchapuy.com/posts/2025/02/creer-des-fonctionnalites-augmentees-par-ia-dans-une-application-mobile-llm-intelligence-artificielle/</guid><description><![CDATA[<p>Bienvenue en 2025. L&rsquo;IA est toujours à la mode et elle s&rsquo;intègre de plus en plus dans notre quotidien. Mais qu&rsquo;en est-il de notre poche ? Oui, vous savez, on y glisse nos smartphones - un autre truc qui a eu son moment de gloire il y a quelques années, et avec lequel on est maintenant inséparable.</p>
<p>On a envie d&rsquo;associer les deux, d&rsquo;avoir notre IA de poche. En tant que créateur d&rsquo;applications mobiles (Product Owner, Développeur, Designer), on peut y participer !</p>
<p>J&rsquo;en profite pour expliciter les différentes interactions qu&rsquo;il peut y avoir avec l&rsquo;IA sur un smartphone :</p>
<ul>
<li>Un utilisateur peut jouer avec l&rsquo;IA du système qui est intégré dans divers composants pour par exemple reformuler une phrase, générer une image, faire une action, etc. Le développeur n&rsquo;a pas la main dessus, c&rsquo;est le système qui gère.</li>
<li>Le développeur peut apprendre à l&rsquo;IA du système comment interagir avec son application, en exposant certaines données et intentions. L&rsquo;utilisateur pourra par exemple lancer une action réalisée par l&rsquo;application via Siri.</li>
<li>Le développeur peut créer des fonctionnalités boostées à l&rsquo;IA au sein de son application. L&rsquo;utilisateur pourra s&rsquo;en servir depuis l&rsquo;application.</li>
</ul>
<p>Aujourd&rsquo;hui, on va se concentrer sur le dernier cas : créer des fonctionnalités augmentées par l&rsquo;IA. On va se donner un aperçu de ce que l&rsquo;on pourrait faire dans nos applications et des options pour y arriver.</p>
<h1 id="quelques-exemples-dusages">Quelques exemples d&rsquo;usages</h1>
<p>Ce que l&rsquo;on voit le plus souvent, ce sont des fonctionnalités qui <strong>manipulent un contenu textuel</strong> déjà présent. On propose de résumer l&rsquo;article actuellement affiché dans une application de news, par exemple. On pourrait aussi sélectionner un paragraphe et demander plus d&rsquo;explications. Ou même traduire. On peut également proposer à l&rsquo;utilisateur d&rsquo;améliorer le contenu qu&rsquo;il a créé - il pourrait reformuler, corriger, compléter.</p>
<p><strong>Générer du contenu</strong> grâce aux données personnalisées est un autre usage intéressant. Une application de liste de courses pourrait par exemple proposer des idées de recette en fonction des aliments ajoutés par l&rsquo;utilisateur. Peut-être même que des recommandations pourraient apparaître autour de la nutrition.</p>
<p>Et pourquoi pas un champ de texte voire un chat pour <strong>trouver et utiliser des fonctionnalités existantes</strong> dans l&rsquo;application ? Sur une application complexe avec beaucoup de pages et de profondeur, ce pourrait être pratique. L&rsquo;utilisateur pourrait demander de &ldquo;réserver un aller-retour à Valence pour demain&rdquo; ou &ldquo;envoyer 100€ à ma mère&rdquo; avec ses propres mots.</p>
<p>De nombreuses possibilités existent aussi du côté des jeux. En faisant varier des dialogues, ou en les créant pleinement. En <strong>générant des niveaux</strong>, des parties, des quiz. Peut-être même que l&rsquo;utilisateur pourrait <strong>indiquer un thème</strong>, non prévu initialement, et le modèle d&rsquo;IA ferait le reste. On commence tout juste à gratter la surface, à imaginer de nouveaux usages.</p>
<h1 id="état-des-lieux">État des lieux</h1>
<p>Les innovations et les possibilités qui tournent autour de l&rsquo;IA vont vite (sauf chez Apple, qui a à la fois du retard et un cycle de release long - petite balle perdue gratuite :)). Où en est-on aujourd&rsquo;hui ?</p>
<p>Commençons du côté de la pomme. Le flagship actuel est l&rsquo;iPhone 16 Pro. iOS est en version 18.2.1. Apple Intelligence est disponible à partir de iOS 18.1 sur l&rsquo;ensemble des modèles d&rsquo;iPhone 16, ainsi que le 15 Pro et le 15 Pro Max. En Europe, on doit cependant attendre le mois d&rsquo;avril pour accéder au système Apple Intelligence.</p>
<p>Sur Android, la dernière version est actuellement la 15 (API 35). Gemini est l&rsquo;actuel modèle d&rsquo;IA de Google, et d&rsquo;autres constructeurs comme Samsung ajoutent aussi leur propre couche d&rsquo;<em>intelligence</em> (Galaxy IA). Certains smartphones récents ont le droit à <a href="https://ai.google.dev/gemini-api/docs/get-started/android_aicore" target="_blank" rel="noopener noreffer">Gemini nano</a> pour une exécution locale : c&rsquo;est à partir du Google Pixel 8 Pro et Samsung S24, et d&rsquo;autres appareils s&rsquo;ajoutent progressivement.</p>
<p>Les deux systèmes proposent bien aux utilisateurs des fonctionnalités augmentées par l&rsquo;IA. Mais côté développement, <strong>on est très limité pour créer</strong>. iOS ne propose que les <a href="https://developer.apple.com/documentation/appintents" target="_blank" rel="noopener noreffer">App Intents</a> pour faire découvrir nos applications à Siri et Spotlight. Et sur Android, Gemini nano est au stade expérimental. Il y a <strong>très peu d&rsquo;appareils compatibles</strong> et <a href="https://developer.android.com/ai/gemini-nano#supported-functionality" target="_blank" rel="noopener noreffer">les possibilités sont <strong>limitées</strong></a>.</p>
<p>À côté de cela, on voit d&rsquo;autres solutions légères qui émergent pour être <strong>exécutées sur un smartphone</strong>. On trouve par exemple les ensembles de modèles <a href="https://ai.google.dev/gemma" target="_blank" rel="noopener noreffer">Gemma</a> de Google, <a href="https://azure.microsoft.com/en-us/products/phi" target="_blank" rel="noopener noreffer">Phi</a> de Microsoft ou encore <a href="https://www.llama.com/" target="_blank" rel="noopener noreffer">Llama</a> de Meta. Ces trois familles de modèles sont d&rsquo;ailleurs <strong>open-source</strong>. Plus étonnant, on trouve également des outils comme <a href="https://picovoice.ai/picollm/" target="_blank" rel="noopener noreffer">PicoLLM</a> qui permettent de compresser les modèles !</p>
<p>Évidemment, tout ce que je raconte au-dessus changera avec le temps. Il y aura de nouveaux appareils, des nouvelles versions d&rsquo;OS, des LLMs, etc. Un prochain rendez-vous que l&rsquo;on peut prévoir : mai et juin pour les keynotes d&rsquo;Apple et de Google, puis quelques temps après la sortie des nouvelles majeures d&rsquo;OS.</p>
<h1 id="comment-avoir-accès-à-un-modèle-">Comment avoir accès à un modèle ?</h1>
<p>Actuellement, pour créer des fonctionnalités augmentées par l&rsquo;IA dans une application mobile, il faut interagir avec un modèle. On va créer des prompts adaptés à nos cas d&rsquo;utilisations puis interpréter la réponse. Une réponse que l&rsquo;on aura forcée dans un standard (du JSON par exemple).</p>
<p>Pour que notre application communique avec un modèle, nous avons plusieurs options.</p>
<h2 id="via-notre-serveur-et-une-api-tierce">Via notre serveur et une API tierce</h2>
<p>C&rsquo;est actuellement un des choix <strong>les plus répandus et les plus efficaces</strong>. Les applications mobiles ont déjà l&rsquo;habitude de discuter avec des serveurs - on aura simplement de nouvelles routes pour obtenir des inférences. Notre serveur fait la passerelle vers OpenAI par exemple, et ce sont ces derniers qui hébergent le modèle.</p>
<p>Les intérêts sont multiples. On peut <strong>cibler tous les appareils</strong> (puissant ou entrée de gamme, récent ou vieux) et tous les systèmes (Android, iOS) peu importe la version (la toute dernière comme la plus vieille). Eh oui, il ne s&rsquo;agit là que de requêtes HTTP et de stream de données.</p>
<p>On s&rsquo;assure au passage d&rsquo;avoir le même comportement entre les différents appareils et systèmes, puisque c&rsquo;est <strong>le même modèle</strong> qui est utilisé en bout de chaîne. Les règles métiers et prompts sont aussi partagées. On pourra facilement et rapidement les <a href="https://jordanchapuy.com/posts/2023/08/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-1-pourquoi" rel="">modifier à distance sans mettre à jour les applications mobiles</a>.</p>
<p>D’ailleurs, on peut aussi changer le modèle utilisé par un autre (une nouvelle version ou un concurrent) sans devoir redéployer notre application. Tout comme on pourrait utiliser plusieurs modèles en parallèle.</p>
<p>Le <strong>coût</strong> sera cependant <strong>élevé</strong>. La charge principale viendra de l&rsquo;utilisation d&rsquo;un service tiers comme OpenAI. Le coût augmentera selon deux vecteurs : le nombre d&rsquo;utilisateurs et le nombre d&rsquo;usages. En effet, les API tiers facturent au nombre de token généré pour l&rsquo;utilisation de leurs LLMs.</p>
<p>C&rsquo;est d&rsquo;autant plus important que notre serveur agisse en tant qu&rsquo;intermédiaire : une communication directe entre les applications et le service tiers impliquerait d&rsquo;<strong>exposer en public nos clés d&rsquo;APIs</strong>. Il serait alors très facile pour une personne d&rsquo;utiliser nos clés, augmentant ainsi notre facture.</p>
<p><strong>Quelques solutions :</strong> <a href="https://platform.openai.com/docs/overview" target="_blank" rel="noopener noreffer">OpenAI</a>, <a href="https://www.anthropic.com/api" target="_blank" rel="noopener noreffer">Anthropic</a>, <a href="https://ai.google.dev/api" target="_blank" rel="noopener noreffer">Gemini</a>. On peut ajouter <a href="https://firebase.google.com/docs/vertex-ai" target="_blank" rel="noopener noreffer">Firebase</a> qui est une rare solution à proposer un accès direct (sans serveur) sécurisé à une LLM (Gemini en l&rsquo;occurrence).</p>
<h2 id="via-notre-serveur-qui-héberge-un-modèle">Via notre serveur qui héberge un modèle</h2>
<p>Le second choix qui est également très répandu est celui d’héberger soi-même un modèle sur nos serveurs. On garde ainsi <strong>les avantages de passer par notre serveur</strong> (compatibilités avec tous les appareils, facilité de changement du modèle, utilisation de plusieurs modèles, …) tout en ayant <strong>plus de contrôle</strong>.</p>
<p>Un des aspects les plus intéressant concerne les données. En hébergeant un modèle open-source, on s&rsquo;assure <strong>un meilleur contrôle sur nos données</strong> et la manière dont elles sont utilisées, et surtout par <strong>qui</strong>.</p>
<p>Le coût sera aussi maîtrisé différemment. Exit un prix au token via une API tierce, cette fois on paie l&rsquo;hébergement du modèle.</p>
<p>Maintenant, comment choisir entre utiliser une API tierce et héberger un modèle ? Quelques insight possibles pour décider :</p>
<ul>
<li>passer par une API tierce pour prototyper rapidement, quand on est une petite entreprise, qu&rsquo;il n&rsquo;y a pas de données confidentielles.</li>
<li>héberger un modèle quand on est une plus grande entreprise, quand on veut mieux contrôler l’usage des données.</li>
</ul>
<p><strong>Quelques solutions :</strong> <a href="https://mistral.ai/" target="_blank" rel="noopener noreffer">Mistral</a> qui est open-source et français, se balader sur le <a href="https://huggingface.co/" target="_blank" rel="noopener noreffer">marketplace de Hugging Face</a>.</p>
<h2 id="en-local-avec-les-solutions-natives">En local avec les solutions natives</h2>
<p>Il existe aujourd&rsquo;hui des modèles plus légers qui peuvent fonctionner sur nos ordinateurs et nos téléphones, et certains appareils les intègrent par défaut. On peut donc les utiliser directement pour faire des inférences « <em><strong>on-device</strong></em> ».</p>
<p>Il y a plusieurs avantages à cette exécution locale. Premièrement, le coût. Il n&rsquo;y en a tout simplement pas. <strong>Pas besoin de payer</strong> un service tiers ou d&rsquo;héberger une solution existante, le modèle est déjà présent sur le téléphone. En fait, c&rsquo;est l&rsquo;utilisateur qui porte le coût : c&rsquo;est la puissance de son smartphone, via sa puce et sa batterie, qui réalisera toutes les opérations. On pensera alors à ménager sa batterie.</p>
<p>Deuxièmement, la <strong>confidentialité</strong>. Le modèle étant sur l&rsquo;appareil, les données sensibles n&rsquo;ont pas besoin de transiter sur internet ou d&rsquo;être lues par un serveur tiers. C&rsquo;est une des promesses phares de ces modèles. On restera méfiant tout de même s&rsquo;il faut utiliser des données très sensibles - l&rsquo;inférence est peut-être locale, mais des logs et données pourraient très bien remonter à des serveurs.</p>
<p>La rapidité est un potentiel troisième avantage. L&rsquo;inférence locale s&rsquo;oppose à une inférence sur un serveur distant qui nécessite des aller-retour sur internet. La communication réseau prenant du temps, on tient là un gain intéressant. Je parlerais d&rsquo;ailleurs plutôt de <strong>meilleure latence de réponse</strong>. D&rsquo;une certaine manière, les serveurs d&rsquo;OpenAI (par exemple) sont bien plus puissants que les puces de nos smartphones. Ce n&rsquo;est pas l&rsquo;inférence qui est plus rapide, mais plutôt le délai pour obtenir les réponses (grâce à des étapes en moins). À condition bien sûr d&rsquo;avoir un smartphone haut de gamme.</p>
<p>Tient-on alors la solution parfaite ? Aujourd&rsquo;hui en tout cas, on en est loin. On est très limité en termes de cibles compatibles. Il n&rsquo;y a rien sur iOS, Apple ne permet pas de prompter avec son Apple Intelligence. C&rsquo;est réalisable seulement sur Android, et même là, les smartphones disposant d&rsquo;une solution intégrée (Gemini Nano) sont peu nombreux, récents, et chers. Le pourcentage d&rsquo;utilisateurs que l&rsquo;on pourrait atteindre est <strong>faible</strong>.</p>
<p>C&rsquo;est également toujours marqué par Google comme <strong>expérimental</strong>, et selon les smartphones, le modèle n&rsquo;est pas pleinement intégré par défaut, il faut effectuer quelques actions.</p>
<p>Un point d&rsquo;attention qu&rsquo;il faudra garder en tête le jour où les modèles embarqués seront plus répandus : leurs différences. Apple et Google proposeront chacun leurs solutions, et il sera difficile (impossible ?) de reproduire avec certitude les mêmes comportements.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-kotlin" data-lang="kotlin"><span class="line"><span class="cl"><span class="n">scope</span><span class="p">.</span><span class="n">launch</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Single string input prompt
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="k">val</span> <span class="py">input</span> <span class="p">=</span> <span class="s2">&#34;I want you to act as an English proofreader. I will provide you</span>
</span></span><span class="line"><span class="cl">    <span class="n">texts</span><span class="p">,</span> <span class="n">and</span> <span class="n">I</span> <span class="n">would</span> <span class="n">like</span> <span class="n">you</span> <span class="n">to</span> <span class="n">review</span> <span class="n">them</span> <span class="k">for</span> <span class="n">any</span> <span class="n">spelling</span><span class="p">,</span> <span class="n">grammar</span><span class="p">,</span> <span class="n">or</span>
</span></span><span class="line"><span class="cl">    <span class="n">punctuation</span> <span class="n">errors</span><span class="p">.</span> <span class="n">Once</span> <span class="n">you</span> <span class="n">have</span> <span class="n">finished</span> <span class="n">reviewing</span> <span class="n">the</span> <span class="n">text</span><span class="p">,</span> <span class="n">provide</span> <span class="n">me</span>
</span></span><span class="line"><span class="cl">    <span class="n">with</span> <span class="n">any</span> <span class="n">necessary</span> <span class="n">corrections</span> <span class="n">or</span> <span class="n">suggestions</span> <span class="k">for</span> <span class="n">improving</span> <span class="n">the</span> <span class="n">text</span><span class="p">:</span> <span class="n">These</span>
</span></span><span class="line"><span class="cl">    <span class="n">arent</span> <span class="n">the</span> <span class="n">droids</span> <span class="n">your</span> <span class="n">looking</span> <span class="k">for</span><span class="p">.</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="k">val</span> <span class="py">response</span> <span class="p">=</span> <span class="n">generativeModel</span><span class="p">.</span><span class="n">generateContent</span><span class="p">(</span><span class="n">input</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">print</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="n">text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">// Or multiple strings as input
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="k">val</span> <span class="py">response</span> <span class="p">=</span> <span class="n">generativeModel</span><span class="p">.</span><span class="n">generateContent</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">  <span class="n">content</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">text</span><span class="p">(</span><span class="s2">&#34;I want you to act as an English proofreader. I will provide you texts</span>
</span></span><span class="line"><span class="cl">      <span class="n">and</span> <span class="n">I</span> <span class="n">would</span> <span class="n">like</span> <span class="n">you</span> <span class="n">to</span> <span class="n">review</span> <span class="n">them</span> <span class="k">for</span> <span class="n">any</span> <span class="n">spelling</span><span class="p">,</span> <span class="n">grammar</span><span class="p">,</span> <span class="n">or</span>
</span></span><span class="line"><span class="cl">      <span class="n">punctuation</span> <span class="n">errors</span><span class="p">.</span><span class="s2">&#34;)</span>
</span></span><span class="line"><span class="cl">    <span class="n">text</span><span class="p">(</span><span class="s2">&#34;Once you have finished reviewing the text, provide me with any</span>
</span></span><span class="line"><span class="cl">      <span class="n">necessary</span> <span class="n">corrections</span> <span class="n">or</span> <span class="n">suggestions</span> <span class="k">for</span> <span class="n">improving</span> <span class="n">the</span> <span class="n">text</span><span class="p">:</span><span class="s2">&#34;)</span>
</span></span><span class="line"><span class="cl">    <span class="n">text</span><span class="p">(</span><span class="s2">&#34;These arent the droids your looking for.&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">print</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="n">text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="en-local-avec-un-modèle-à-intégrer">En local avec un modèle à intégrer</h2>
<p>En attendant qu&rsquo;une grande majorité des appareils Android et iOS embarquent au sein de leurs systèmes des modèles accessibles aux développeurs, une solution pour avoir une exécution locale serait d&rsquo;intégrer soi-même un modèle existant dans l&rsquo;application.</p>
<p>Ainsi, on peut théoriquement cibler bien plus d&rsquo;appareils et de systèmes / versions ; tant que ceux-ci sont assez puissants. On garderait alors la plupart des avantages d&rsquo;une inférence locale : la rapidité sur les bons appareils, la confidentialité, et le coût réduit.</p>
<p>Réduit, mais pas inexistant. Le modèle n&rsquo;étant pas embarqué dans le système de l&rsquo;appareil, <strong>il faut le rendre téléchargeable</strong>&hellip; et donc l&rsquo;héberger. On aura un coût de stockage et de bande passante. La bonne nouvelle, c&rsquo;est que le téléchargement ne doit se faire qu&rsquo;une seule fois par l&rsquo;utilisateur au moment où l&rsquo;application en aura besoin. Chaque usage sera ensuite totalement local et n&rsquo;aura pas d&rsquo;impact sur les coûts.</p>
<p>Cette contrainte a un second désavantage : elle requiert <strong>un effort pour l&rsquo;utilisateur</strong>. Il devra télécharger un modèle. Même si l&rsquo;application fait tout le travail, l&rsquo;utilisateur va devoir patienter - un modèle étant lourd. Il devra aussi réserver de la place sur son appareil pour stocker ce modèle. Modèle qui ne fonctionnera que sur cette application.</p>
<p>Imaginons que plusieurs applications optent pour cette solution, cela représenterait des gigaoctets de téléchargement et de stockage. Ce n&rsquo;est pas viable.</p>
<p><strong>Quelques solutions :</strong> <a href="https://ai.google.dev/gemma" target="_blank" rel="noopener noreffer">Gemma</a> de Google, <a href="https://azure.microsoft.com/en-us/products/phi" target="_blank" rel="noopener noreffer">Phi</a> de Microsoft, <a href="https://www.llama.com/" target="_blank" rel="noopener noreffer">Llama</a> de Meta.  <a href="https://picovoice.ai/picollm/" target="_blank" rel="noopener noreffer">PicoLLM</a> pour la compression.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-dart" data-lang="dart"><span class="line"><span class="cl"><span class="kd">final</span> <span class="n">gemma</span> <span class="o">=</span> <span class="n">FlutterGemmaPlugin</span><span class="p">.</span><span class="n">instance</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Async response
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">String</span> <span class="n">response</span> <span class="o">=</span> <span class="kd">await</span> <span class="n">gemma</span><span class="p">.</span><span class="n">getResponse</span><span class="p">(</span><span class="nl">prompt:</span> <span class="s1">&#39;Tell me something interesting&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">print</span><span class="p">(</span><span class="n">response</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Stream response
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">gemma</span><span class="p">.</span><span class="n">getAsyncResponse</span><span class="p">(</span><span class="nl">prompt:</span> <span class="s1">&#39;Tell me something interesting&#39;</span><span class="p">).</span><span class="n">listen</span><span class="p">((</span><span class="kt">String</span><span class="o">?</span> <span class="n">token</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="n">print</span><span class="p">(</span><span class="n">token</span><span class="p">));</span>
</span></span></code></pre></div><h1 id="en-bref">En bref</h1>
<p>Les LLMs ne sont plus seulement utilisés à travers des applications de chat où l&rsquo;utilisateur écrit des prompts. On est dans une phase d&rsquo;exploration où beaucoup de possibilités restent à être imaginée et testée, mais des premiers usages existent déjà au sein d&rsquo;applications mobiles.</p>
<p>Et cela va très vite. Les idées fusent, les PoC se multiplient, et les appareils avec des modèles on-device vont se répandre. Les fonctionnalités augmentées par l&rsquo;IA pourraient devenir un incontournable. Il nous est déjà possible d&rsquo;en créer, il ne tient qu&rsquo;à nous d&rsquo;explorer.</p>
]]></description></item><item><title>Cynefin x User Story - Et si on adaptait le flow à la complexité ?</title><link>https://jordanchapuy.com/posts/2023/08/cynefin-x-user-story-et-si-on-adaptait-le-flow-a-la-complexite/</link><pubDate>Mon, 28 Aug 2023 19:45:00 +0200</pubDate><author>Auteur</author><guid>https://jordanchapuy.com/posts/2023/08/cynefin-x-user-story-et-si-on-adaptait-le-flow-a-la-complexite/</guid><description><![CDATA[<p>Simple, compliqué, complexe, chaos. Et si on déterminait dans lequel de ces lieux se situe une user story, une epic, une idée ? Ça ouvrirait des discussions et des questions très intéressantes <strong>pour que l’équipe s’adapte</strong> - <strong>elle n’a pas besoin de traiter les stories tout le temps de la même manière</strong>.</p>
<p>Je pense par exemple au flux que la story doit traverser, aux process, aux pratiques tech et produit, à la façon de communiquer et de collaborer, etc. On n’a peut-être pas besoin de faire constamment du discovery, des cadrages, des Event Storming. Peut-être que parfois les experts ont besoin de travailler tous ensemble alors que d’autres moments non.</p>
<p>C’est une idée qui m’est venu spontanément en route vers Reims pour visiter la cave aux coquillages - il n’y a aucun rapport, mais mon cerveau en avait décidé ainsi. J’ai divagué une partie du trajet dessus, j’aimais bien le cheminement que je faisais dans ma tête et les possibilités qui s’ouvraient. J’ai envie de partager ces réflexions pour continuer à les faire mûrir. Merci Nils pour nos premiers échanges ;)</p>
<p><em>Note : je parle de « user story » tout le long de l’article, par simplicité pour l’écriture, mais l’idée peut s’appliquer à d’autres unités ou éléments de travail comme une epic par exemple.</em></p>
<h1 id="un-mot-sur-cynefin">Un mot sur Cynefin</h1>
<p>Derrière les 4 lieux que je citais (simple, compliqué, complexe, chaos) se cache Cynefin. C’est un modèle qui permet <strong>d’adapter la manière d’aborder un problème selon sa complexité pour mieux y répondre</strong>. Pour chacun des lieux, le modèle propose différentes manières de réagir, de décider, de communiquer.  En se posant quelques questions « Est-ce qu’il y a une réponse ? Est-ce qu’on va réussir ? », en regardant où sont les inconnues, on peut situer la problématique dans un de ces lieux.</p>
<p>Je me souviens de la première fois que j’ai vu Cynefin en action. C’était lors d’un point sur la stratégie de notre communauté tech à BENEXT, il y a plusieurs années. Nils lança soudainement : « OK, on est en train de se dire qu’on ne sait pas si on y arrivera. Je pense qu’on est dans le domaine du complexe. Donc ça veut dire qu’il faut qu’on teste. On va arrêter de réfléchir et on va essayer des choses. ». J’ai trouvé ça génial.</p>
<figure><figcaption>
            <p><em>Représentation des lieux du modèle Cynefin, par Nils.</em></p>
        </figcaption>
</figure>

<h1 id="adapter-sa-manière-de-traiter-les-stories">Adapter sa manière de traiter les stories</h1>
<p>Maintenant, regardons ce que ça pourrait donner avec la fabrication de logiciels, au moment où l’équipe se retrouve devant des user stories de différentes complexités - ce que veulent dire ces complexités, les comportements que l’équipe pourrait adopter, les pratiques.</p>
<h2 id="simple">Simple</h2>
<p>Est-ce qu’il y a une réponse à ce problème ? Oui. Est-ce que nous la connaissons ? Oui. Dans le simple, on n’a pas d’inconnue. <strong>On sait</strong> comment on va faire cette story, techniquement et fonctionnellement. <strong>Faisons</strong>.</p>
<p>J’imagine une story qui a peu de règles métier, peu de particularités de design. Donnez-moi une story avec <strong>seulement un titre</strong> et une phrase en description, ça me suffit. Pas besoin d’un long cahier des charges, peut-être pas besoin de créer des maquettes non plus ; je privilégierai <strong>les discussions</strong> et <strong>l’instant présent</strong>.</p>
<p>Il y a principalement une collaboration entre le demandeur et le faiseur. PO et dev, par exemple. On communique beaucoup ensemble. Peut-être que le PO pourrait s&rsquo;asseoir à côté de moi pour développer en direct ce morceau. On n’a pas besoin d’impliquer tous les autres devs, ou tout le produit, ou tous les designers.</p>
<p>Le &ldquo;comment&rdquo;, on sait faire. Il n’est pas nécessaire de réunir tous les experts (techniques, design, …) pour faire de la conception en amont, ou de multiples relectures et validations en aval. Je pourrais partir seul sur ce sujet, et il pourrait y avoir plusieurs sujets simples qui avancent en parallèle dans l’équipe sans problème.</p>
<p>Ça ne nécessite donc que peu de process et de pratiques en place. On est sur du <strong>léger</strong>. Après tout, <strong>c’est simple alors faisons simple aussi</strong>.</p>
<h2 id="compliqué">Compliqué</h2>
<p>Est-ce qu’il y a une réponse ? Oui. Est-ce que nous la connaissons ? Non. Cette fois, il y aura <strong>besoin d’analyser et de chercher des réponses</strong> pour réaliser cette user story. On a des inconnues mais on trouvera.</p>
<p>Là, peut-être que les règles sont compliquées, nombreuses. Peut-être que j’ai besoin d’un jeu de données plus fourni, d’un environnement dédié, de maquettes. Peut-être que l’<strong>on peut découper</strong> ; sûrement même ! On va regarder. L’Example Mapping pourrait être une bonne pratique à intégrer pour à la fois bien comprendre les règles et découper.</p>
<p>Si la technique est compliquée, j’aurai davantage envie de <strong>travailler en groupe</strong>. Du pair-programming voire mob-programming. Peut-être qu’on fera une phase de conception technique ensemble, qu’on dessinera sur un tableau, qu’on déterminera des contrats d’interface.</p>
<p><strong>Toute l’équipe se parle, on a besoin de beaucoup d’échanges</strong> et il faut que le cadre, l’organisation le permette. Je pense au passage à l’Event Storming, pour réunir toutes les bonnes personnes, pour s’aligner, pour comprendre notre système.</p>
<p>On va peut-être trouver plusieurs solutions. Et si on faisait de l’A/B testing ou du Feature Flagging ? Ça permettrait au passage d’éviter de se paralyser dans l’analyse - c’est le risque quand on est dans le compliqué, <strong>il faut en sortir à un moment et répondre au problème</strong>, livrer de la valeur. On pourrait aussi se timeboxer.</p>
<h2 id="complexe">Complexe</h2>
<p>Est-ce que c’est faisable ? Est-ce qu’on va réussir ? <strong>Probablement</strong>. Dans le complexe, l’incertitude est présente. Il y a des inconnues et <strong>on ne sait pas si on trouvera</strong>. C’est différent du compliqué où l’on sait qu’il y a une réponse - là, on a <strong>besoin d’explorer et de tester</strong>.</p>
<p>Peut-être qu’il y a trop de choses qui s’entremêlent, fonctionnellement ou techniquement, chez nous et/ou avec une autre équipe, un partenaire externe. <strong>On ne peut pas prédire les choses</strong>. <strong>On ne peut pas analyser ou découper non plus</strong>. Chercher à estimer le temps que prendrait cette story serait un non-sens. On est dans le complexe ! Les incertitudes et les inconnues nous entourent. Ici, il n’y a pas de liens de cause à effet clairs.</p>
<p>On veut <strong>explorer</strong>. Je pense à une phase de product discovery, des ateliers avec des utilisateurs, des user journeys. À l’Event Storming pour découvrir des domaines métiers.</p>
<p>On veut <strong>tester</strong>. Je pense à un Design Sprint. Je pense à toutes les techniques de développement pour tester en production également - A/B Testing pour essayer des variantes, Canary Release pour avoir un petit groupe d’early adopters, Feature Flag pour activer/désactiver facilement et rapidement. Une équipe capable de faire du déploiement en continu (CD) sera plus à l’aise pour lancer des expérimentations et s’adapter aux changements.</p>
<p>On va découvrir une partie des éléments seulement en faisant. On ne peut pas tout prévoir, <strong>il y a des choses qui n&rsquo;apparaîtront que lorsque l’on fabriquera</strong>, qu’on aura les mains dedans. On peut se poser la question de ce que l’on peut essayer de faire maintenant, pour se mettre en marche. On a des dépendances externes et des inconnues ? On ne pourra pas tout planifier parfaitement, découvrons en chemin. C’est quoi les petites choses que l’on peut démarrer maintenant ?</p>
<p>Il faut de l’<strong>émergence</strong>. On va multiplier les expérimentations et on va se détacher du donneur d’ordre (on veut faire émerger !). Peut-être qu’on pète l’équipe, peut-être qu’on fait trois trios par exemple. On est lundi matin, mercredi on regarde ce que chaque trio a fait, ce qu’on a appris, ce qu’on teste ou met en prod.</p>
<h2 id="chaos">Chaos</h2>
<p>Un événement critique survient. Il surprend l’équipe, il déstabilise. Il était imprévisible. On est dans l’inconnu et on a peu de temps pour répondre, on a <strong>besoin d’agir maintenant</strong>.</p>
<p>Ce pourrait être le crash des applications, le serveur qui tombe, une fuite de données, une intrusion. Ça devient la priorité et on ne veut pas perdre de temps. On ne part pas en exploration ou en analyse.</p>
<p>D’abord, on règle le problème. <strong>On cherche une réponse rapide, pas parfaite</strong>. Quelques exemples d’options : on désactive la fonctionnalité grâce aux Feature Flags que l’on a mis en place. On redéploie la dernière release stable, on rollback. On corrige et on déploie un patch.</p>
<p>Après, <strong>une fois que le problème est réglé</strong>, on peut améliorer. Selon l’action que l’on a prise. Le correctif nécessite peut-être du refactoring, il nous faut peut-être une solution moins bricolée. Ou il faut réparer la release / la fonctionnalité, parce qu’on a juste rollback / désactivé via le feature flag.</p>
<p>On peut également analyser. Je pense à une rétrospective, un post-mortem. Qu’est-ce qu’on a appris ? Quelles pratiques sont apparues ? Qu’est-ce qu’il nous manquait ? Comment s&rsquo;améliore-t-on pour la prochaine fois ?</p>
<p>On est plutôt sur un canal directif à l’apparition du problème. La personne qui fait le plus sens va donner la direction, l’action. « On fait <em>ça</em> maintenant et on fonce ». Mais on ne reste pas éternellement dans le command &amp; control - le chaos se termine, on y sort.</p>
<p>Pour se préparer au chaos, on peut ajouter des pratiques pour réagir rapidement (pouvoir déployer une précédente release, désactiver les nouvelles fonctionnalités à distance, …) et pour mieux voir venir (monitoring, alerting, …). Et on peut aussi se plonger soi-même dans le chaos.</p>
<p>Je fais référence au Chaos Engineering. <strong>On provoque un chaos contrôlé pour s’immuniser</strong> (une notion dans Cynefin d’ailleurs !). L’équipe va apprendre à réagir en étant dans ce chaos et des pratiques émergeront pour mieux y faire face les prochaines fois. Un exemple connu est Netflix qui a testé sa résilience en faisant tomber volontairement ses serveurs. Le Chaos Monkey est né.</p>
<p>Pour autant, il reste <strong>difficile de prévoir le chaos</strong>. Il peut avoir plusieurs formes, il peut venir de partout. Je peux tester la résilience de mon infrastructure face aux serveurs de streaming qui tombent, mais, et si c’était les bases de données qui lâchaient ? Ou si le chaos était la fuite des utilisateurs, comment s’immuniser ? Quand est-ce que ça va arriver ? On ne sait pas.</p>
<h1 id="réflexions-générales">Réflexions générales</h1>
<p>Ce que j’aime beaucoup, c’est que ça aide l’équipe à réfléchir à comment elle va traiter les choses. Elle prend du recul et se pose des questions. Ça la <strong>pousse à s’adapter et à adapter ses processus</strong> - aucune raison de suivre toujours le même chemin, de sortir le bazooka pour tuer une mouche ou l’inverse d’aller en tong à la guerre.</p>
<p>Je parlais de user stories, mais on pourrait aussi bien faire l’exercice avec une granularité plus grande, comme une epic. On s’enlèverait des douleurs encore plus tôt. On pourrait voir qu’on a besoin d’explorer ce gros morceau par exemple, donc ne perdons pas de temps à spécifier maintenant. Ou quelque chose de plus vague comme une idée. Ah, c’est du simple, fonçons et testons en prod !</p>
<p>J’ai en tête des situations antérieures où l’équipe apportait une réponse inadaptée.</p>
<ul>
<li>Faire du compliqué et du complexe sur des sujets qui relevaient du simple. Ce qui donnait un mois de préparation (avec une longue discovery et beaucoup d’analyse, de prévision, de synchro) pour au final une après-midi de développement. Des frustrations sont nées de ce <strong>décalage</strong> entre le temps en amont et le temps utile à fabriquer.</li>
<li>Faire du compliqué sur un sujet complexe. Malgré beaucoup d’analyses et de réunions techniques, il y a eu surprise sur surprise (ou découverte sur découverte ;)) à mesure que l’équipe avançait. De nouveaux imprévus chaque semaine qui remettaient en cause les prévisions. L’estimation de temps a explosé, le découpage ne convenait pas puisque c’était trop entremêlé, les spécifications tech changeaient. Beaucoup de douleurs à cause de choses <strong>virtuellement figées</strong> par l’équipe alors que dans le complexe, <strong>on découvre pendant qu’on fait</strong>. On ne peut pas être parfait et tout prévoir.</li>
</ul>
<p>Je me dis que ça peut aider des équipes à essayer d’autres choses.</p>
<ul>
<li>Une équipe où tout le monde travaille toujours dans son coin pourrait repérer des sujets où il serait intéressant de se grouper, de faire du pair, de dessiner, de montrer, de partager, etc.</li>
<li>Une équipe qui a un long flux de conception, beaucoup de travail de préparation et d’analyse, pourrait repérer progressivement des sujets simples pour alléger ses processus.</li>
<li>Une équipe qui passe beaucoup d’énergie à estimer, seulement pour avoir le bon chiffre, pourrait se ramener à des questions plus utiles - est-ce qu’on peut découper ? Comment ? Faut-il explorer ?</li>
</ul>
<p>J’aime bien toutes ces <strong>questions</strong> que le modèle peut ouvrir, les <strong>discussions</strong> et les <strong>changements</strong> qui peuvent en découler. L’étiquette au final, on s’en fout. C’est ce qu’on fera qui sera intéressant.</p>
<hr>
<p>Je suis très preneur d’avoir des retours si vous l’essayez ou le challengez, pour savoir comment vous vous l’approprierez, ce que vous adapteriez, ce que ça provoque dans l’équipe, etc.</p>
<p>Je remercie à nouveau <a href="https://www.nilslesieur.fr/" target="_blank" rel="noopener noreffer">Nils</a> pour nos discussions et j’en profite pour recommander <a href="https://www.nilslesieur.fr/2022/01/les-grilles-de-lecture-2/7-cynefin.-les-contextes./" target="_blank" rel="noopener noreffer">son article et son meetup</a> à ceux qui voudraient creuser le modèle Cynefin.</p>
]]></description></item><item><title>Les pratiques tech qui peuvent aider votre équipe</title><link>https://jordanchapuy.com/posts/2022/02/les-pratiques-tech-qui-peuvent-aider-votre-equipe/</link><pubDate>Tue, 01 Feb 2022 09:33:00 +0100</pubDate><author>Auteur</author><guid>https://jordanchapuy.com/posts/2022/02/les-pratiques-tech-qui-peuvent-aider-votre-equipe/</guid><description><![CDATA[<p>Nul besoin d&rsquo;avoir un passé de développeur, ou de savoir coder. Mon intention ici est de faire découvrir des pratiques tech reconnues dans l&rsquo;industrie. C&rsquo;est un sujet que je souhaite rendre accessible à tous, que l&rsquo;on soit tech ou non, pour améliorer le quotidien des équipes, devenir meilleur dans la technique et dans le business.</p>
<p>J&rsquo;ai été invité par Fleur Saillofest à speaker dans le <a href="https://www.meetup.com/fr-FR/Beyond-Scrum-Mastering/events/282839931/" target="_blank" rel="noopener noreffer">meetup Beyond Scrum Mastering</a>. Très rapidement, une trame intéressante a émergé lors de nos échanges : celle de reconnaître des problèmes au sein de l&rsquo;équipe et y associer certaines pratiques tech qui pourraient aider.</p>
<p>Observer ce qu&rsquo;il se passe dans l&rsquo;équipe, entendre les râlements, les plaintes, noter les douleurs, c&rsquo;est à la portée de tout le monde. J&rsquo;ai pris un fil rouge avec des problèmes qu&rsquo;une équipe peut rencontrer à diverses étapes de la conception du produit pour introduire certaines pratiques techs. Autour du besoin, du code, des tests, de la livraison, de l&rsquo;existant, etc.</p>
<p>Est-ce que ce sont les seules possibilités ? Non. Mon but n&rsquo;est pas d&rsquo;être exhaustif ni sur les problèmes ni sur les solutions et les pratiques. Mais plutôt d&rsquo;entrevoir des possibilités, de donner des billes pour ensuite aller creuser plus en profondeur avec l&rsquo;équipe. Je dépose quelques brides de réflexion dans cet article qui m&rsquo;ont permis de créer mon talk (<a href="https://github.com/chapuyj/materials/blob/main/2022-01_Pratiques_tech_qui_peuvent_aider_votre_equipe/slides.pdf" target="_blank" rel="noopener noreffer">slides ici</a>).</p>
<h1 id="collaborer-sur-le-besoin">Collaborer sur le besoin</h1>
<blockquote>
<ul>
<li><em>Les refinements sont chiants.</em></li>
<li><em>On se rend compte pendant le sprint que les besoins ne sont pas clairs. Les développeurs demandent au PO des spécifications hyper détaillées avant de commencer.</em></li>
<li><em>Le PO change d’avis, on fait ce qu&rsquo;il y a écrit dans la story mais il dit que ce n&rsquo;était pas ça qu’il voulait.</em></li>
</ul>
</blockquote>
<p>Les premiers problèmes peuvent arriver très tôt, dès l&rsquo;expression du besoin, avant même d&rsquo;être purement dans la tech, dans le code. On peut noter qu&rsquo;il semble y avoir de l&rsquo;incompréhension, qu&rsquo;il y a probablement des choses implicites, des modèles mentaux différents. Que tous les membres de l&rsquo;équipe ne sont pas vraiment impliqués.</p>
<h2 id="example-mapping">Example Mapping</h2>
<p>Une piste d&rsquo;amélioration serait de faire collaborer toute l&rsquo;équipe, ensemble, sur la rédaction du besoin. Je pense naturellement à l&rsquo;Example Mapping. C&rsquo;est un atelier qui réunit l&rsquo;ensemble de l&rsquo;équipe (PO, QA, Dev front/back). Le PO vient avec ses règles métiers et toute l&rsquo;équipe œuvrera à créer des exemples précis pour chaque règle.</p>
<p>Tout le monde est impliqué, participe, et s&rsquo;approprie le besoin. Les règles sont éclaircies, les exemples sont concrets et parlent à tous. L&rsquo;implicite est rendu explicite, on sort ce qu&rsquo;il y a de la tête du PO. Des questions peuvent émerger, avec des points à éclaircir avant de commencer le développement. On peut aussi trouver un découpage plus fin de la story.</p>
<p>Ce n&rsquo;est plus à la seule charge du PO d&rsquo;écrire un immense cahier des charges qui sera de toute façon probablement imparfait et jamais satisfaisant. Les développeurs ne restent pas passifs avec des pavés à avaler. On fait jouer l&rsquo;intelligence collective en amont pour co-créer quelque chose de meilleur.</p>
<h1 id="collaborer-sur-le-code--git">Collaborer sur le code / Git</h1>
<blockquote>
<ul>
<li><em>J’entends parler de branches, merge, commit, conflits, … Je suis perdu.</em></li>
<li><em>C’est quoi ce git machin chose ?</em></li>
</ul>
</blockquote>
<p>Je dédierais un article pour vulgariser l&rsquo;utilisation de git qu&rsquo;en ont les développeurs. Je me limiterais à quelques lignes ici pour comprendre l&rsquo;origine de certains problèmes. Git est un outil pour gérer les versions du code source.</p>
<p>Un développeur va créer un <em>commit</em> avec des changements ; c&rsquo;est une copie à un instant T du code. Il va travailler sur une <em>branche</em> ; c&rsquo;est un espace indépendant, avec ses propres copies.</p>
<p>Au bout d&rsquo;un moment, lorsqu&rsquo;il aura terminé, il va vouloir <em>merge</em> ; il veut réunir son travail réalisé sur sa branche (dans son espace indépendant) vers la branche principale (l&rsquo;espace commun). Pour cela, il va ouvrir une <em>Pull/Merge Request</em> et demander à quelqu&rsquo;un de faire de la <em>revue de code</em> ; une personne va relire toutes les modifications, pour approuver ou faire des retours.</p>
<p>Au moment de réunir, il peut y avoir des <em>conflits</em> ; dans son espace, il a modifié des zones qui ont aussi été modifiées sur l&rsquo;espace commun. Il faudra résoudre ces problèmes afin de pouvoir rassembler les travaux. Qu&rsquo;est-ce qu&rsquo;on garde ? Qu&rsquo;est-ce qui n&rsquo;a plus de sens ? Qu&rsquo;est-ce qu&rsquo;il faut adapter ?</p>
<p>Plus longtemps on travaille sur une <em>branche</em> (dans son coin) et plus on attend pour réunir avec la <em>branche principale</em> (avec les autres), plus on augmente les problèmes. Par exemple, la quantité de changements et le temps qui s&rsquo;allonge augmentent le risque de <em>conflits</em> et demandent une plus longue <em>revue de code</em>.</p>
<h1 id="collaborer-sur-le-code--revue-de-code">Collaborer sur le code / Revue de code</h1>
<blockquote>
<ul>
<li><em>J’en ai marre de devoir refaire plusieurs fois mon code après des aller-retours sur la code review.</em></li>
<li><em>Les développeurs se plaignent que les revues de codes sont longues à faire et pas intéressantes.</em></li>
<li><em>On attends longtemps avant qu’un autre développeur fasse la revue de code.</em></li>
</ul>
</blockquote>
<p>Ahhh, la revue de code, serait-ce le mal du siècle des développeurs après le mal de dos ? J&rsquo;exagère un peu - j&rsquo;avais envie d&rsquo;écrire cette tournure humoristique - mais j&rsquo;ai tout de même souvent observé des symptômes autour de la revue de code. Il faut dire aussi que c&rsquo;est une pratique qui s&rsquo;est très largement répandue dans les équipes. Pour autant, elle n&rsquo;est pas toujours bien appliquée et elle vient avec son lot de contraintes.</p>
<p>Par nature, <a href="https://jordanchapuy.com/posts/2021/02/et-si-on-arretait-les-revues-de-code/" rel="">la revue de code via une Pull/Merge Request est asynchrone</a> - la relecture arrivera un temps après la demande, qui nécessitera des changements qui seront faits un autre temps après, et ainsi de suite. Il y aura des changements de contexte, de la part du relecteur et de l&rsquo;auteur. Et on sait que les changements de contexte nuisent à la productivité. On est interrompu, on sort constamment du flow (qui est long à trouver).</p>
<p><a href="https://jordanchapuy.com/posts/2021/02/et-si-on-arretait-les-revues-de-code/" rel="">Le feedback est tardif</a>. La revue est très souvent ouverte lorsque la story est entièrement terminée (rappel git : quand on veut réunir nos changements avec la branche principale). Les changements seront plus coûteux. La revue est parfois bâclée. Certains lisent rapidement en diagonal parce qu&rsquo;ils n&rsquo;ont pas le temps ou que ça ne les intéressent pas. D&rsquo;autres vont pinailler, mais seulement sur des points insignifiants.</p>
<p>Ce peut être un goulot d&rsquo;étranglement qui allonge la durée nécessaire pour livrer une fonctionnalité. C&rsquo;est marquant lorsqu&rsquo;il y a beaucoup de développeurs ou lorsque la responsabilité de la revue n&rsquo;est donnée qu&rsquo;à une poignée de personnes (par exemple, seul le lead/référent/manager).</p>
<p>Bien sûr, ce n&rsquo;est pas tout noir. La revue de code peut être bien faite et a pour sa défense deux principaux bénéfices : c&rsquo;est une occasion de donner du feedback pour améliorer le code et réduire les bugs, et c&rsquo;est une façon de partager de la connaissance en lisant le code d&rsquo;un autre.</p>
<p>Ok, on parle de feedback et d&rsquo;apprentissage, comment pourrait-on faire mieux ? Avec un échange direct, temps réel. Avec de la mise en pratique plutôt que de la lecture passive. Avec du Pair Programming et du Mob Programming. On forme une équipe, on est ensemble, on peut faire mieux sur la collaboration. Les process de Pull/Merge Request ont davantage de sens dans le monde de l&rsquo;open-source où les personnes ne se connaissent pas, ne travaillent pas ensemble, où il faut contrôler.</p>
<h2 id="pair-programming">Pair Programming</h2>
<p>Le Pair Programming est une pratique qui va permettre une réelle collaboration de deux personnes. On se met ensemble, sur un même problème, avec un seul ordinateur, en même temps. On échange pour trouver la solution et écrire du code. On échange pour s&rsquo;améliorer en continu. Il y a une réflexion commune, deux cerveaux qui vont se challenger.</p>
<p>Ici, <a href="https://jordanchapuy.com/posts/2021/02/et-si-on-arretait-les-revues-de-code/" rel="">le feedback est immédiat</a>. Je propose au plus tôt une autre approche de conception à mon pair. Je découvre une fonction plus performante au moment où j&rsquo;écris ma ligne de code grâce au conseil de mon pair. On repère ce bug pendant qu&rsquo;on développe la fonctionnalité ensemble. Maintenant tout de suite, pas après 5 jours de travail.</p>
<p>La transmission de connaissances, autant technique que fonctionnelle, est forte. Les deux développeurs travaillent ensemble au même moment. Ce meilleur pattern pour faire le traitement, je le découvre en direct voire je le mets en place moi-même. On donne en effet le clavier au non-sachant, afin de le faire pratiquer tout en le guidant. Ce scope fonctionnel, on l&rsquo;aura co-créée, je le comprendrais, mon pair n&rsquo;est plus le seul de l&rsquo;équipe à pouvoir y travailler. C&rsquo;est très efficace pour onboarder un nouvel arrivant aussi.</p>
<p>C&rsquo;est en ça que la pair programming est puissant et ne divise pas l&rsquo;efficacité par deux, il faut voir au-delà de &ldquo;deux ressources qui travaillent sur un seul problème&rdquo;.</p>
<h2 id="mob-programming">Mob Programming</h2>
<p>Le Mob Programming se trouve un cran après le Pair Programming : c&rsquo;est tout un groupe qui va collaborer, en même temps, sur un seul et même problème, avec un seul ordinateur. L&rsquo;intelligence collective va mener à une meilleure compréhension du problème et à une meilleure conception de la solution. Encore une fois, ce n&rsquo;est pas simplement grouper un tas de personnes pour qu&rsquo;elles regardent un seul développeur tout faire.</p>
<p>Le problème et les solutions sont discutés et challengés. Le groupe entier s&rsquo;approprie le code et la fonctionnalité, tout le monde avance ensemble. On peut arriver à tacler des problèmes très complexes. Il y a une très forte transmission de connaissances et de compétences. C&rsquo;est tout un groupe qui apprendra, en pratiquant, cette nouvelle technique ou cette fonctionnalité.</p>
<p>Note : on parle d&rsquo;avoir un seul ordinateur, un seul clavier en pair et mob programming. C&rsquo;est parfaitement compatible à distance avec des solutions de partage d&rsquo;écran, de contrôle du clavier, de code collaboratif.</p>
<h1 id="collaborer-sur-le-code--conflits">Collaborer sur le code / Conflits</h1>
<blockquote>
<ul>
<li><em>Le dev est terminé localement mais ça met beaucoup de temps à être livré car on a plein de conflits.</em></li>
<li><em>La fonctionnalité marche sur ma branche mais maintenant que c’est mergé c’est cassé.</em></li>
</ul>
</blockquote>
<h2 id="intégration-continue">Intégration Continue</h2>
<p>Parfois, quand on parle d&rsquo;Intégration Continue, on entends Jenkins, gitlab-ci, pipelines, machine de builds, etc. Ce n&rsquo;est pas ça, l&rsquo;Intégration Continue. Tout ça, ce sont des outils. C&rsquo;est du comment.</p>
<p>L&rsquo;Intégration Continue, c&rsquo;est d&rsquo;abord un principe, une attitude. C&rsquo;est rassembler très souvent les changements sur la branche principale (intégrer continuellement). On partage à tous nos changements plusieurs fois par jour ; plutôt que d&rsquo;attendre de tout finir et de rassembler après 8 jours de travail intense.</p>
<p>Qu&rsquo;est-ce que ça apporte ? Un cercle vertueux. On va faire de plus petites étapes pour rassembler plus souvent. On va faire de meilleurs tests automatisés pour s&rsquo;assurer que tout est bon. Naturellement, on aura moins de conflits et de problèmes avec de petites modifications ayant une durée de vie courte.</p>
<h2 id="pairmob-programming">Pair/Mob Programming</h2>
<p>On l&rsquo;a vu précédemment, le Pair et le Mob Programming permettent une réelle collaboration de plusieurs personnes. La communication est meilleure, puisqu&rsquo;elle est immédiate et continue. Il y a moins de travaux simultanés en cours, puisque les développeurs se réunissent pour travailler sur le même sujet. Tout ça contribue à diminuer les risques de conflits et de problèmes de merge.</p>
<h1 id="écrire-le-code">Écrire le code</h1>
<blockquote>
<ul>
<li><em>On a fait évolué l’écran recherche, et on a vu plus tard en prod que la logique métier du compte est complètement KO.</em></li>
<li><em>On planifie de passer une après midi sur l’écriture de tests, on fait comment pour le prendre en compte dans la vélocité ?</em></li>
</ul>
</blockquote>
<h2 id="tests-unitaires">Tests Unitaires</h2>
<p>Il est important de clarifier ce que sont les tests unitaires et pourquoi on en écrit. Très simplement, un test unitaire est un test automatisé d&rsquo;un scénario fonctionnel. C&rsquo;est quelque chose qui vérifie que du code se comporte comme prévu, automatiquement, sans intervention humaine. C&rsquo;est un programme qui lance un autre programme pour vérifier ce qu&rsquo;il se passe dans différentes conditions.</p>
<p>On parle de comportement, de scénario fonctionnel : quand on écrit un test unitaire, on veut s&rsquo;assurer de bien retranscrire le métier. C&rsquo;est en ça qu&rsquo;il est très important et utile pour le business, et que ce n&rsquo;est pas seulement un élément technique.</p>
<p>Progressivement, on créé un filet de sécurité pour éviter certaines régressions. On diminue le risque d&rsquo;avoir des bugs en production : on aura un feedback immédiat, pendant le développement, si une règle métier est cassée après un changement dans le code.</p>
<p>C&rsquo;est au moment où l&rsquo;on change le code que l&rsquo;on sait si on altère involontairement le comportement, pas plusieurs jours après. Ce qui fait que les tests unitaires jouent un rôle essentiel au <a href="https://jordanchapuy.com/posts/2021/06/le-refactoring/" rel="">Refactoring</a>, pour améliorer le code sereinement.</p>
<h2 id="test-driven-development">Test-Driven Development</h2>
<p>Quand on écrit un test, une bonne pratique est de le faire au plus près du moment où l&rsquo;on a écrit le code, et non pas bien après une fois que tout est terminé. Pourquoi ? Parce que c&rsquo;est plus coûteux et difficile de le faire après ; le code n&rsquo;ayant pas forcément été conçu pour être testable. Et parce qu&rsquo;on passe à côté d&rsquo;un bénéfice important : se faire guider par le test.</p>
<p>Et c&rsquo;est la philosophie du Test-Driven Development. Ce n&rsquo;est pas &ldquo;écrire le test en premier&rdquo; (c&rsquo;est du comment). C&rsquo;est se faire guider par les tests et par le métier. On définit le comportement que l&rsquo;on veut obtenir (le test) puis on fait émerger la solution et on l&rsquo;améliore.</p>
<p>On a une boucle de feedback extrêmement rapide. Quand on développe la solution, le test nous indique en quelques millisecondes si le comportement voulu est bien retranscrit.</p>
<p>À noter que <a href="https://jordanchapuy.com/posts/2022/01/permis-de-developper/" rel="">l&rsquo;écriture des tests unitaires et la pratique du TDD font partie intégrante du job de développeur</a> et que <a href="https://jordanchapuy.com/posts/2021/12/ce-nest-pas-plus-long-de-pratiquer-le-tdd/" rel="">ce n&rsquo;est pas forcément plus long de tester</a>. Au contraire, ça nous aide. C&rsquo;est à faire dès qu&rsquo;il y en a le besoin, en continu, il n&rsquo;y a pas de permission à demander, de journées à dédier.</p>
<h1 id="livrer">Livrer</h1>
<blockquote>
<ul>
<li><em>C’est douloureux de livrer, c’est long, il y a un tas de process et d’actions à faire…</em></li>
<li><em>On va s’assurer d’avoir suffisamment de choses dans la release pour livrer. C’est long alors il faut que ça vaille le coup.</em></li>
<li><em>On ne livre pas le vendredi. On ne peut rien modifier en août et fin décembre. On a un code freeze pendant les périodes avec beaucoup de vacances.</em></li>
</ul>
</blockquote>
<h2 id="automatisation">Automatisation</h2>
<p>Créer une archive de l&rsquo;application et l&rsquo;envoyer sur un serveur, générer le fichier de traduction à partir d&rsquo;une feuille Excel, remplacer toutes les majuscules d&rsquo;un fichier brut par des minuscules et le transformer en JSON, &hellip; Ce sont des exemples de tâches manuelles qui gagneraient à être automatisées.</p>
<p>La bonne nouvelle ? Un développeur est bien placé pour automatiser, il est capable d&rsquo;écrire du code pour créer un programme qui va effectuer ces tâches. Une fois créé, il n&rsquo;y a plus qu&rsquo;à exécuter ce programme et la tâche sera réalisée (souvent) immédiatement plutôt que de prendre trop de temps à une personne. On s&rsquo;enlève au passage le risque d&rsquo;erreur humaine : le programme fera toujours la même chose, il ne va pas oublier une ligne, il ne va pas se tromper de caractère, etc.</p>
<p>Outre l&rsquo;efficacité, je trouve que c&rsquo;est bien plus intéressant à faire. On conçoit un programme, on réfléchit plutôt que de répéter des tâches rébarbatives.</p>
<h2 id="livraison-continue">Livraison Continue</h2>
<p>Le principe est simple, chaque changement sur la branche principale est livré. C&rsquo;est livré dans un environnement de staging/test/preprod, ou même de production, mais ce n&rsquo;est pas déployé. Ce n&rsquo;est pas encore dans les mains des utilisateurs.</p>
<p>Autrement dit, avec la Livraison Continue, il suffit d&rsquo;un simple bouton pour déployer aux utilisateurs, il n&rsquo;y a pas besoin d&rsquo;autres interventions. Tout est déjà prêt, on est capable de déployer sur demande. Plusieurs fois par semaine, jour, heure, etc.</p>
<p>Ça ne veut pas dire qu’on va forcément livrer chaque heure. Si on est capable de livrer toutes les heures, on est capable de livrer quand on veut. Et c&rsquo;est ça que l&rsquo;on recherche. Le déploiement devient un non-sujet. On pourra bénéficier des avantages de livrer souvent et rapidement de petits incréments, dès que cela fait sens.</p>
<p>Pour livrer en continu, on va mettre en place certains outils, on va automatiser des tâches, et on va s&rsquo;atteler à toujours avoir un code dans un état déployable.</p>
<h2 id="déploiement-continu">Déploiement Continu</h2>
<p>Ici, on va un cran plus loin : tout est automatisé, il n&rsquo;y a plus aucune intervention humaine. Chaque modification sur la branche principale est déployée en production et arrive directement dans les mains des utilisateurs.</p>
<p>En mettant en place la Livraison Continue ou le Déploiement Continu, on entre dans un cercle vertueux de pratiques. On se concentrera davantage sur la qualité, sur les tests automatisés, sur la création de petits incréments, sur l&rsquo;activation à distance de fonctionnalités, &hellip; plutôt que sur des pratiques contraignantes comme mettre un freeze de code, avoir une semaine de tests de non-régression, avoir 4 niveaux de validations de chefferie, etc. Ce qui fera livrer moins souvent, donc il faudra faire encore plus attention, donc livrer moins donc faire plus attention, et ainsi de suite, un cercle vicieux de peur et de contrôle.</p>
<h1 id="améliorer-un-existant">Améliorer un existant</h1>
<blockquote>
<ul>
<li>*On a des problèmes de qualité dont on n’a jamais le temps de s’occuper. *</li>
<li><em>Mon équipe veut négocier un sprint ou deux de refactoring mais je ne sais pas quelle valeur ça va apporter.</em></li>
<li><em>J’ai un développeur qui fait du refactoring depuis 3 mois, c’est pas encore fini mais il avance.</em></li>
</ul>
</blockquote>
<h2 id="refactoring">Refactoring</h2>
<p>Faire du <a href="https://jordanchapuy.com/posts/2021/06/le-refactoring/" rel="">Refactoring</a>, c&rsquo;est changer le code sans casser son comportement observable. On améliore le code dans le but de mieux le comprendre ou de faciliter le changement, par exemple. Le code fera toujours la même chose. Si je fais du refactoring sur une fonctionnalité de recherche, elle fera toujours de la recherche, ni plus, ni moins.</p>
<p>Autre aspect très important du refactoring : on avance par petites étapes. On enchaîne une série d’améliorations, de petites étapes que l’on peut partager régulièrement. Le projet est toujours dans un bon état, on peut s&rsquo;arrêter à tout moment.</p>
<p>C&rsquo;est différent de &ldquo;tout refaire&rdquo;, à ne pas confondre avec la réécriture. Ce n&rsquo;est pas ce fameux chantier de 3 mois en tunnel où rien ne fonctionne entre temps. Le refactoring demande de la discipline et des compétences.</p>
<h3 id="refactoring-opportuniste">Refactoring opportuniste</h3>
<p>On fait du refactoring quotidiennement, <a href="https://jordanchapuy.com/posts/2020/09/profiter-de-chaque-occasion-pour-ameliorer-le-code-legacy/" rel="">toutes les occasions sont bonnes</a>. J&rsquo;ouvre un fichier où je vais devoir travailler, mais le changement est difficile ? Le code est legacy ? J&rsquo;en profite pour faire un petit refactoring en amont plutôt que d&rsquo;empirer. On peut évoquer la règle de Boy Scout :</p>
<p><code>Toujours laisser le code dans un meilleur état que celui dans lequel vous l'avez trouvé.</code></p>
<p>On préférera agir régulièrement et de manière opportuniste plutôt que de bloquer des jours/semaines dédiés au refactoring. Tout comme les tests, <a href="https://jordanchapuy.com/posts/2022/01/permis-de-developper/" rel="">ça fait partie intégrante du job de développeur</a>. Il est important de faire du refactoring régulièrement et de se former. D&rsquo;ailleurs, au lieu de bloquer des jours pour faire du refactoring, peut-être le transformer en un temps pour se former et s&rsquo;améliorer dans les techniques de refactoring ?</p>
<h3 id="théorie-de-la-vitre-brisée">Théorie de la vitre brisée</h3>
<p>On veut faire du refactoring régulièrement pour améliorer le code continuellement. On veut éviter que la situation ne s&rsquo;empire, on veut y remédier au plus tôt. La théorie de la vitre brisée est intéressante pour expliquer pourquoi on veut agir vite et régulièrement.</p>
<p>Prenons par exemple une maison avec une fenêtre brisée. La théorie nous indique que si on ne fait rien, on laisse penser que la maison est à l&rsquo;abandon. On va alors attirer et cumuler d&rsquo;autres problèmes, des graffitis, de nouvelles fenêtres brisées, etc. Un cercle vicieux démarre et qui ira au-delà de la maison, apportant plus de criminalités dans le quartier.</p>
<p>Il faut remédier aux problèmes au plus vite, avant qu&rsquo;ils ne soient trop nombreux. Un quartier où les maisons sont constamment bien entretenues attirera moins les problèmes. C&rsquo;est la même chose avec le code, on va vouloir rester dans un état d&rsquo;esprit de qualité.</p>
<h3 id="méthode-mikado">Méthode Mikado</h3>
<p><a href="https://jordanchapuy.com/posts/2021/07/la-methode-mikado-de-grands-changements-avec-de-petites-etapes/" rel="">La méthode mikado</a> est très utile pour faire du refactoring. C&rsquo;est une méthode pour effectuer de grands changements avec de petites étapes. On veut atteindre un objectif, qui peut être ambitieux, on ne sait pas encore comment y aller, mais on va construire ce chemin progressivement.</p>
<p>On va effectuer une suite de petites expérimentations. Quand une expérimentation réussie, on a avancé vers notre objectif, avec une petite étape. Quand une expérimentation échoue, on revient en arrière, on a appris quelque chose, et on découvre qu&rsquo;il faut effectuer une autre petite étape nécessaire en amont. On dessine d&rsquo;ailleurs un graphe pour visualiser notre progression et nos pré-requis.</p>
<p>De fait, on est toujours dans un état fonctionnel, on peut s&rsquo;arrêter à tout moment. On n&rsquo;aura peut-être pas atteint l&rsquo;objectif, mais ce sera mieux, on sera plus proche de la fin, on aura réalisé quelques petites étapes, et ça fonctionnera toujours.</p>
<h1 id="bref">Bref</h1>
<p>On a vu un ensemble de pratiques tech reconnues dans l&rsquo;industrie. On a vu comment elles peuvent aider dans certains problèmes. Et même au-delà. Ce sont des pratiques pour améliorer le quotidien de l’équipe et devenir meilleur dans la technique et dans le business.</p>
<p>On a aujourd&rsquo;hui le recul nécessaire et les études pour voir la corrélation entre la performance technique et business. Pour répondre rapidement aux besoins de l&rsquo;utilisateur, on a besoin de pouvoir livrer rapidement. Changer facilement le code permet de changer facilement de direction fonctionnelle.</p>
]]></description></item><item><title>Les éléments d'un Event Storming et leurs interactions</title><link>https://jordanchapuy.com/posts/2021/11/les-ingredients-d-un-event-storming-et-leurs-interactions/</link><pubDate>Sun, 21 Nov 2021 17:18:00 +0100</pubDate><author>Auteur</author><guid>https://jordanchapuy.com/posts/2021/11/les-ingredients-d-un-event-storming-et-leurs-interactions/</guid><description><![CDATA[<p>Suite à mon <a href="https://jordanchapuy.com/posts/2021/10/une-introduction-a-levent-storming/" rel="">introduction sur l&rsquo;Event Storming</a>, j&rsquo;ai envie de compléter un peu en revenant sur les différents ingrédients à notre disposition pour composer un Event Storming. Je trouve qu&rsquo;on a une grande richesse. On a une large boîte à outils pour modéliser notre système et harmoniser les modèles mentaux, tout en restant simple d&rsquo;usage.</p>
<p>J&rsquo;ai présenté certains éléments dans mon précédent article, ici je ferais une liste plus complète afin d&rsquo;avoir une vision globale et rapide de ce qu&rsquo;on peut utiliser. On pourra ensuite voir les interactions entre les éléments. Individuellement, chaque ingrédient apporte un type d&rsquo;information, mais ensemble, ils forment un tout et agissent sur les autres.</p>
<figure><a href="https://jordanchapuy.com/posts/2021/10/une-introduction-a-levent-storming/images/template.jpeg"></a>
</figure>

<h1 id="les-différents-éléments">Les différents éléments</h1>
<h2 id="domain-event--événement">Domain Event / Événement</h2>
<p>Avec les événements, on construit la colonne vertébrale. C’est ce qu’il se passe dans notre système. Les événements sont décrits par un verbe au participe passé. « Facture générée », « Commande livrée ». C’est quelque chose qui a eu lieu. C’est très important. On veut forcer les participants à penser avec des actions achevées, des changements d’état, des choses qui peuvent agir comme un déclencheur pour une autre action.</p>
<p>Les événements forment la base de l&rsquo;Event Storming, tout tourne autour des événements. C&rsquo;est compréhensible par le métier, par tout le monde. On peut raconter une histoire avec. On aura forcément les événements dans cet atelier, et on commence d&rsquo;ailleurs par cette étape.</p>
<h2 id="actor--acteur">Actor / Acteur</h2>
<p>Les acteurs interagissent avec le système, ils déclenchent des commandes. Ils initient une action qui va produire un événement. Ce peut être un utilisateur ou une partie d’un logiciel, un système. On essaie d&rsquo;être assez précis avec la dénomination de l’acteur, de représenter ce qu&rsquo;il est vraiment, son nom, son rôle. « Le client », « Le livreur », « Le système Y ». On utilise très souvent les acteurs car on veut visualiser qui fait quoi.</p>
<h2 id="external-system--système-externe">External System / Système Externe</h2>
<p>Ce sont les dépendances. On veut visualiser ce qui est à l&rsquo;extérieur de notre système, ce qu&rsquo;on ne gère pas. On veut aussi voir apparaître les adhérences auxquels est soumis le système, ce qui le contraint, les goulots d&rsquo;étranglement. « Le fournisseur », « Service Z ». Tout comme les acteurs, on veut voir qui fait quoi, et cette fois-ci, on a une information supplémentaire - c&rsquo;est quelque chose d&rsquo;extérieur.</p>
<h2 id="command--commande">Command / Commande</h2>
<p>La commande est le déclencheur d&rsquo;un événement, souvent une conséquence d’une action utilisateur, une prise de décision d&rsquo;un acteur ou d’un système externe. On parle de l’action réalisée qui sera le déclencheur d’un ou plusieurs événements avec un verbe à l&rsquo;infinitif. « Ajouter au panier ». Il n’y a pas forcément une commande sur chaque événement.</p>
<p>Avec les commandes, on commence à être plus précis sur le processus et on se projette également un peu dans le code.</p>
<h2 id="policy--règle">Policy / Règle</h2>
<p>Une <em>Policy</em> permet de rendre explicite une règle métier. C&rsquo;est la glu qui lie un événement et une commande. Avec une <em>Policy</em>, on représente des commandes qui sont exécutées suite à un événement et selon une condition précise. En général, on décrit une <em>Policy</em> avec <code>Lorsque ... alors ...</code> : « Lorsque le paiement dépasse 500 €, alors il faut envoyer un SMS à l&rsquo;utilisateur ».</p>
<p>Les <em>Policies</em> peuvent être présentent dans un système, qui gère cette règle lorsque l&rsquo;événement correspondant se produit. Ce peut également être un humain qui agit lorsqu&rsquo;un événement se passe. Par exemple, « Lorsqu&rsquo;une fraude est détectée, alors il faut appeler le client ». C&rsquo;est un processus humain. Dans ce cas-là, on peut ajouter un post-it acteur sur la <em>Policy</em> pour représenter la personne.</p>
<h2 id="read-model--données">Read Model / Données</h2>
<p>Il y a une nuance importante dans le nom anglais, <em>Read Model</em>. On va parler des données que l’on affiche et qui vont aider les acteurs à prendre des décisions. On ne parle pas des données que l’on écrit (écriture dans une base, un registre…), ces informations sont déjà indiquées dans les commandes comme « Ajouter (l’article) au panier ».</p>
<p>On y écrit les données principales. « Nom, Prénom, Email ». On se limite pour mettre en valeur ce qui compte réellement.</p>
<h2 id="aggregate--agrégat">Aggregate / Agrégat</h2>
<p>Les agrégats vont apporter une vision bien plus micro et être très proche du code. Pour paraphraser Martin Fowler, un agrégat est un regroupement d&rsquo;objets du domaine qui peuvent être manipulés comme un seul objet. C&rsquo;est un pattern qui vient du Domain-Driven Design.</p>
<p>Ce regroupement a du sens pour le métier. On préfèrera manipuler l&rsquo;agrégat plutôt que chaque objets individuellement - ces objets sont cohérents s&rsquo;ils sont manipulés ensemble. Dans l&rsquo;exemple du e-commerce, on peut imaginer un agrégat « Panier » qui contiendrait plusieurs objets « Article » et un objet « Promotion ».</p>
<p>L&rsquo;intérêt en faisant émerger les agrégats avant de se plonger dans le code va être de visualiser où ils se retrouvent, s&rsquo;il n&rsquo;y a pas trop d&rsquo;événements ou commandes autour d&rsquo;un même agrégat.</p>
<h2 id="hot-spot--point-dattention">Hot Spot / Point d&rsquo;attention</h2>
<p>Tout au long de l&rsquo;atelier, on peut marquer les désaccords, les questions, les risques, etc. Ça fait partie du modèle. On peut marquer tout ce qui s’éloigne du scénario nominal pour rester concentré. Ce seront des éléments à creuser plus tard. « Attention RGPD », « Que fait X ? », « Risque de fraude de paiement ». On veut également les visualiser pour mettre en lumière les zones d&rsquo;ombres, les questions, les problèmes. On agira peut-être là-dessus suite à l&rsquo;atelier.</p>
<figure><a href="images/global.jpeg"></a>
</figure>

<h2 id="déclencheur-temporel">Déclencheur temporel</h2>
<p>Le temps est parfois aussi un déclencheur d&rsquo;action. Par exemple, une sauvegarde qui doit être réalisée toutes les heures. On marquera alors simplement « Toutes les heures » sur le post-it. Ce sera le déclencheur d&rsquo;une commande ou d&rsquo;un événement visant à créer une sauvegarde.</p>
<h2 id="bounded-context--contexte-borné">Bounded Context / Contexte borné</h2>
<p>Une fois la modélisation du système bien avancé, dessiner les Bounded Context va permettre de définir les contours des domaines et sous-domaines métiers. En les identifiant, en les explicitant, on veut faire émerger des périmètres métier cohérent, des services, des ensembles de fonctionnalités, des contextes à l&rsquo;intérieur desquels les objets, les mots, le vocabulaire auront un sens important. On peut aussi visualiser comment ils interagissent entre eux.</p>
<p>Dans une plateforme d&rsquo;e-commerce, on pourrait imaginer plusieurs contextes : le service client, le service achats, le service livraison. Le terme « client » n&rsquo;a peut-être pas la même signification au sein des trois services. Peut-être même que le terme est différent, le service livraison pourrait parler de « destinataire ».</p>
<h1 id="les-interactions-entre-les-éléments">Les interactions entre les éléments</h1>
<p>Individuellement, tous ces éléments sont simples et apportent un niveau de compréhension différent. L&rsquo;acteur informe sur qui prends la décision, l&rsquo;événement indique ce qu&rsquo;il s&rsquo;est passé.</p>
<p>Ensemble, ils forment un tout. Ils se complètent, et certains ont une interaction directe entre eux. Quand un acteur agit, il déclenche une commande. Quand une commande est exécutée dans un système, un événement se produit.</p>
<p>Je trouve intéressant de voir comment chaque élément se comporte avec les autres et ce schéma (venant d&rsquo;Alberto Brandolini, le créateur), le représente bien. C&rsquo;est intéressant pour la compréhension de l&rsquo;Event Storming, pour modéliser, et aussi pour concevoir plus tard le logiciel.</p>
<figure><a href="images/interactions.png"></a>
</figure>

<p>Une commande est exécutée. « Ajouter l&rsquo;article au panier ». Une décision a été prise, il y a une action, quelque chose doit se passer. Cette commande se produit dans un système. Ce peut être le nôtre, auquel cas elle agira sur un agrégat. « On ajoute un Article au Panier, on applique éventuellement une Promotion, on recalcule un prix total ». Ou ce peut être dans un système externe.</p>
<p>Par l&rsquo;action de cette commande, le système en question génère un événement. « Article ajouté ». Cette fois-ci, ça a eu lieu, l&rsquo;histoire a évolué. Il s&rsquo;est passé quelque chose dans le système.</p>
<p>Avec cet événement, un état a changé. On peut projeter de nouvelles données « il y a 5 articles dans le panier, le nouveau prix total est de 343 euros » et les afficher dans une nouvelle interface graphique.</p>
<p>L&rsquo;événement peut déclencher une règle, une <em>Policy</em>. Le système réagit à cet événement si une condition particulière est rencontrée. « Lorsque le panier contient 5 articles, alors une réduction de 20% est appliquée sur l&rsquo;article le moins cher ». Une commande est alors exécutée. « Appliquer la promotion ».</p>
<p>Qui d&rsquo;autre peut être à l&rsquo;origine d&rsquo;une commande ? Un acteur. « Le client » a lancé la commande « Ajouter l&rsquo;article au panier ». C&rsquo;est lui qui a pris la décision, qui a agi.</p>
<p>Une commande est donc exécutée par un acteur ou par une règle provenant d&rsquo;un système. Qui produira un événement. Et ainsi de suite. La boucle est bouclée.</p>
]]></description></item><item><title>Une introduction à l'Event Storming</title><link>https://jordanchapuy.com/posts/2021/10/une-introduction-a-levent-storming/</link><pubDate>Wed, 27 Oct 2021 16:45:00 +0200</pubDate><author>Auteur</author><guid>https://jordanchapuy.com/posts/2021/10/une-introduction-a-levent-storming/</guid><description><![CDATA[<p>L&rsquo;Event Storming est un moyen d&rsquo;harmoniser les modèles mentaux de différents acteurs en modélisant un métier, un processus, un existant. On veut cartographier de la connaissance. On veut mettre en lumière des zones d&rsquo;ombre, des points de douleurs, des problèmes. Et on veut le faire tous ensemble pour s&rsquo;aligner. On va créer des discussions et confronter des visions avec toutes les personnes impliquées.</p>
<p>C&rsquo;est un atelier qui peut s&rsquo;utiliser dans n&rsquo;importe quel domaine et pas seulement dans le monde du logiciel (même si son créateur, Alberto Brandolini, est un développeur). On pourrait modéliser le fonctionnement d&rsquo;une équipe de RHs tout comme le parcours d&rsquo;achat d&rsquo;une application.</p>
<p>Les événements forment la colonne vertébrale de L&rsquo;Event Storming. On parle de ce qu&rsquo;il se passe dans le processus, dans le système, sur une ligne de temps. On peut le raconter, c&rsquo;est une histoire. Le storytelling est un aspect très puissant de cet atelier.</p>
<p>C&rsquo;est en plus modulable : on peut ajouter différentes étapes qui feront naître de nouvelles conversations selon le besoin. On pourrait par exemple introduire les acteurs qui agissent sur le système ou les dépendances externes. On peut s&rsquo;adapter en fonction du niveau d&rsquo;abstraction que l&rsquo;on souhaite avoir, d&rsquo;une vision très macro à une vision très micro sur un bout de logiciel.</p>
<p>Pour autant, l&rsquo;Event Storming reste simple, ce qui le rend d&rsquo;autant plus efficace - on va en retirer quelque chose à la fin. Le cadre est léger. C&rsquo;est très libre, voire parfois chaotique. Et c&rsquo;est très bien. Ça donne de l&rsquo;espace aux participants pour faire émerger une compréhension commune.</p>
<figure><a href="images/workshop.jpg"></a>
</figure>

<h2 id="quand-déclencher-un-event-storming-">Quand déclencher un Event Storming ?</h2>
<p>Dès lors qu&rsquo;il y a de l&rsquo;incompréhension ou un besoin de s&rsquo;accorder. La force de l&rsquo;Event Storming est de rassembler de nombreuses personnes et de tout mettre à plat sur un mur. On va rendre l&rsquo;implicite explicite et harmoniser les modèles mentaux de chacun.</p>
<p>Quelques autres signaux intéressants pour déclencher : on a trop de bugs, on a des zones de floues, on veut s&rsquo;aligner avec un existant, on veut cartographier de la connaissance.</p>
<p>Plus axé conception logiciel, l&rsquo;Event Storming aura également son utilité associé au Domain-Driven Design lorsque l&rsquo;on souhaite découvrir des <em>Bounded Contexts</em> ou des agrégats, ou associé à de l&rsquo;Event Sourcing pour identifier les événements.</p>
<h2 id="une-animation-devent-storming">Une animation d&rsquo;Event Storming</h2>
<p>Il y a plusieurs recettes pour animer un Event Storming. Alberto compare l&rsquo;atelier à une pizza. Il y a une base avec de la tomate et de la mozza (notre ligne de temps avec nos événements). Et ensuite, on y ajoute différents ingrédients au choix (des acteurs, des commandes, des données, des règles, &hellip;), sauf quelques exceptions (ni ananas, ni table de base de données :p). Je parle de tous ces éléments et leurs interactions dans <a href="https://jordanchapuy.com/posts/2021/11/les-ingredients-d-un-event-storming-et-leurs-interactions/" rel="">cet article</a>.</p>
<p>Selon le besoin, on va donc ajouter des étapes supplémentaires. En général, on veut au moins voir qui fait quoi. On veut identifier les acteurs et les systèmes externes qui nous ajoutent des contraintes, ainsi que les problèmes.</p>
<p>Pour cette introduction, on composera avec les événements ainsi que les commandes, acteurs, données et dépendances. C&rsquo;est une bonne entrée en la matière que j&rsquo;ai vu avec Marion Lecerf et Pablo Pernot lors d&rsquo;un atelier pendant la conférence School of PO ; on obtient rapidement une cartographie intéressante du système.</p>
<p>Libre à vous d&rsquo;adapter comme vous le souhaitez. On peut ajouter ou supprimer des étapes, en rassembler certaines en une seule étape, être plus macro ou plus micro. C&rsquo;est très modulable. J&rsquo;y reviendrais dans un second temps.</p>
<h3 id="préparation">Préparation</h3>
<p>En amont de l&rsquo;atelier, on prendra soin d&rsquo;inviter toutes les personnes qui ont un lien avec ce que l&rsquo;on veut faire. Si on prend l&rsquo;exemple d&rsquo;un logiciel, on pourrait y inviter des développeurs, des POs, des experts du métier, des collaborateurs d&rsquo;une équipe externe, etc. Toute personne qui peut contribuer est la bienvenue - on veut voir l&rsquo;image dans son ensemble, on veut éclaircir des zones d&rsquo;ombre, il faut qu&rsquo;il y ait tous les acteurs.</p>
<p>Second point, la salle et le matériel. Il faut réserver un grand espace, avec de grands murs. On éloignera le mobilier qui peut gêner, et on mettra à disposition une infinité de stylos et de post-its avec les bonnes couleurs. Prévoir plusieurs mètres de papier craft idéalement pour permettre d&rsquo;écrire et dessiner directement dessus. Possiblement du scotch ou des ficelles. Ça fonctionne aussi à distance sur un outil comme Miro.</p>
<h3 id="les-événements">Les événements</h3>
<p>Sur une ligne de temps que l&rsquo;on aura tracé, les participants vont s&rsquo;atteler à positionner ensemble tous les événements qui composent le processus. On construit la colonne vertébrale. C&rsquo;est ce qu&rsquo;il se passe dans notre système. On peut commencer par délimiter le début et la fin en plaçant le premier événement et le dernier événement du processus pour borner.</p>
<p>On utilise des post-its oranges. Les événements sont décrits par un verbe au participe passé. « Facture générée », « Commande livrée ». C’est quelque chose qui a eu lieu. C&rsquo;est très important. On veut forcer les participants à penser avec des actions achevées, des changements d&rsquo;état, des choses qui peuvent agir comme un déclencheur pour une autre action. Les événements doivent être parlant pour les experts métiers et ça tombe bien, ils sont censés être dans la pièce avec nous.</p>
<figure><a href="images/1-event.jpeg"></a>
</figure>

<p>Si on a du conditionnel, on peut faire deux branches. Et si on a trop de branches, on se dit qu’il faut les mettre de côté et faire un atelier dédié afin de se concentrer sur notre branche principale. On veut se concentrer sur notre cas nominal.</p>
<p>On veillera à exprimer tout ce qui vient via des post-its. On veut voir émerger l&rsquo;ensemble du modèle. On discutera après. Ça peut sembler chaotique mais c&rsquo;est ce que l&rsquo;on veut. Lors de l&rsquo;atelier avec Pablo, il indiquait qu&rsquo;il poussait au chaos : si ce n&rsquo;est pas assez bordélique, c&rsquo;est peut-être qu&rsquo;il n&rsquo;y a pas les bonnes personnes ou qu&rsquo;il y a trop de limites.</p>
<p>On peut marquer les désaccords, les questions, les risques, ça fait partie du modèle. On utilise des post-its roses foncés / rouges pour ces points d&rsquo;attention (les <em>Hot Spots</em>). Alberto n&rsquo;hésite pas à marquer tout ce qui s&rsquo;éloigne du scénario nominal pour rester concentré. Ce seront des éléments à creuser plus tard. « Attention RGPD », « Que fait X ? », « Risque de fraude de paiement ». On peut les positionner en hauteur pour surplomber, ou directement à l&rsquo;endroit où ça fait sens, au choix.</p>
<p>Cette première étape peut prendre du temps, c&rsquo;est normal. Les événements forment le cœur du processus. Lorsqu&rsquo;on arrive à la fin, on demande à une personne de raconter l&rsquo;histoire qui est modélisée. Le storytelling fait son apparition, les gens aiment écouter des histoires. On en profite pour peaufiner et clarifier le modèle si besoin. Peut-être qu&rsquo;il manque une précision à un moment. Peut-être qu&rsquo;il reste une zone de flou.</p>
<h3 id="les-commandes">Les commandes</h3>
<p>Dans notre seconde étape, on va positionner les commandes. C&rsquo;est ce qui déclenche un événement, souvent une conséquence d&rsquo;une action utilisateur, une prise de décision, ou d&rsquo;un système externe.</p>
<p>On utilise des post-its bleus. La commande est décrite avec un verbe à l&rsquo;infinitif. « Ajouter au panier ». Elle est placée devant l&rsquo;événement sur la ligne de temps.</p>
<figure><a href="images/2-command.jpeg"></a>
</figure>

<p>Les commandes peuvent être utiles pour faire émerger du bordel, surtout sur un système existant, pour aligner les connaissances. On peut trouver que la commande et l&rsquo;événement sont redondants. Avec la commande, on parle de l&rsquo;action réalisée par un acteur, qui sera le déclencheur d&rsquo;un ou plusieurs événements. Il n&rsquo;y a pas forcément une commande sur chaque événement. Avec les commandes, on se projette également un peu dans le code.</p>
<h3 id="les-acteurs">Les acteurs</h3>
<p>Troisième étape, on positionne les acteurs. Ce sont eux qui déclenchent les commandes. Ce peut être un utilisateur ou une partie d&rsquo;un logiciel. On utilise des post-its jaunes et on y marque le nom de l&rsquo;acteur. « Le client », « Le livreur », « Le système Y ». L&rsquo;acteur est placé sur la commande, légèrement sur la gauche.</p>
<figure><a href="images/3-actor.jpeg"></a>
</figure>

<h3 id="les-données">Les données</h3>
<p>On arrive à la quatrième étape où l&rsquo;on positionne les données. En anglais <em>Read Model</em>. Il y a une nuance importante ici. On va parler des données que l&rsquo;on affiche et qui vont aider les acteurs à prendre des décisions. On ne parle pas des données que l&rsquo;on écrit (écriture dans une base, un registre&hellip;), ces informations sont déjà indiquées dans les commandes comme « Ajouter (l&rsquo;article) au panier ».</p>
<p>On utilise des post-its verts. On y écrit les données principales. « Nom, Prénom, Email ». On se limite pour mettre en valeur ce qui compte réellement. Le post-it est placé avant l&rsquo;acteur.</p>
<figure><a href="images/4-read-model.jpeg"></a>
</figure>

<p>Ne pas hésiter à se faire une session de storytelling pour s&rsquo;assurer que tout va bien, et qu&rsquo;on est aligné. On peut faire des sous-groupes. Est-ce qu&rsquo;on est tous d&rsquo;accord ? Est-ce clair pour tout le monde ? On peut commencer à préciser. Précis mais pas exhaustif, sinon on n&rsquo;en fini pas. On met davantage au propre.</p>
<h3 id="les-systèmes-externes">Les systèmes externes</h3>
<p>Pour notre cinquième étape, on positionnera les systèmes externes. Ce sont les dépendances. On veut voir apparaître les adhérences auxquels est soumis le système, ce qui le contraint. On utilise des post-its rose clair. « Le fournisseur », « Service Z ».</p>
<figure><a href="images/5-external-system.jpeg"></a>
</figure>

<p>On peut à nouveau reprendre le storytelling et raconter les événements afin de s’assurer que tout est représenté comme dans la vraie vie.</p>
<h2 id="quelques-détails-et-astuces">Quelques détails et astuces</h2>
<p>Ici comme ailleurs, vous verrez qu&rsquo;on associe une couleur à chaque élément de l&rsquo;Event Storming. Respecter ce code couleur a son importance. On veut faciliter la lecture et la compréhension lors de l&rsquo;atelier, et on veut s&rsquo;y retrouver facilement si ce n&rsquo;est pas notre premier Event Storming (on s&rsquo;enlève la charge mentale de devoir réapprendre un autre code couleur). En voici un rappel :</p>
<ul>
<li>Acteur en jaune,</li>
<li>Agrégat en jaune clair,</li>
<li>Commande en bleu,</li>
<li>Données en vert,</li>
<li>Événement en orange,</li>
<li>Point d&rsquo;attention en rose foncé / rouge,</li>
<li>Règle métier en violet,</li>
<li>Système externe en rose clair.</li>
</ul>
<p>On pourrait dire la même chose de la mise en page. Si tout le monde adopte une façon unique de présenter les post-its, on améliore la lisibilité. Une bonne pratique est d&rsquo;afficher le modèle des différents post-its sur le mur.</p>
<figure><a href="images/template.jpeg"></a>
</figure>

<p>Veillez à bien espacer les post-its entre eux pour faciliter l&rsquo;ajout de nouveaux post-its au fil des étapes. D&rsquo;ailleurs, un classique quand on joue avec des post-its, écrivez en majuscules, en gros, et soyez concis.</p>
<p>Dernière précision. On peut toujours mettre un événement, un acteur ou tout autre type de post-it même si on est passé à l&rsquo;étape suivante. C&rsquo;est toujours le bon moment d&rsquo;ajouter de l&rsquo;information.</p>
<h2 id="avec-quoi-on-repart-">Avec quoi on repart ?</h2>
<p>On obtient de la visibilité. L&rsquo;ensemble du processus, du système est rendu visible. Il n&rsquo;y a plus de zones d&rsquo;ombre - ou s&rsquo;il y en a, elles sont explicitement révélées. Les problèmes et les questions sont identifiés. On va pouvoir avancer sur ces sujets.</p>
<p>On obtient de la compréhension. On peut avoir des prises de conscience comme &ldquo;je ne pensais pas que je te créais des problèmes là-bas en faisant ça&rdquo; ou &ldquo;je ne savais pas que tu faisais ceci&rdquo;. Les participants comprennent ce qu&rsquo;il se passe chez eux et chez les autres, on casse les silos. On va améliorer la collaboration.</p>
<p>On obtient de l&rsquo;alignement. On s&rsquo;est mis d&rsquo;accord tous ensemble sur le modèle, sur les problèmes. Continuons d&rsquo;avancer ensemble.</p>
<p>La suite est très modulable, tout comme l&rsquo;est l&rsquo;atelier. On peut imaginer un tas de choses pour travailler sur le processus :</p>
<ul>
<li>Voter pour le problème principal, qui pourrait devenir la priorité numéro une.</li>
<li>Mettre en lumière les zones à améliorer, et travailler dessus avec le temps.</li>
<li>Identifier où il peut manquer des compétences.</li>
<li>Regarder le niveau de qualité dans les zones les plus importantes pour le métier.</li>
<li>Travailler sur les dépendances et goulots d&rsquo;étranglement.</li>
<li>Simplifier le processus.</li>
<li>Etc.</li>
</ul>
<p>Pour aller plus loin, <a href="https://jordanchapuy.com/posts/2021/11/les-ingredients-d-un-event-storming-et-leurs-interactions/" rel="">Les éléments d&rsquo;un Event Storming et leurs interactions</a>.</p>
<hr>
<p><em>Merci Marion Lecerf et Pablo Pernot pour les divers échanges, et Yannick Grenzinger qui avait initié mon équipe l&rsquo;année dernière :)</em></p>
]]></description></item></channel></rss>