<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Captain Contrat Tech - Medium]]></title>
        <description><![CDATA[Blog technique de Captain Contrat - Medium]]></description>
        <link>https://medium.com/captain-contrat-tech?source=rss----838fc16b722a---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Captain Contrat Tech - Medium</title>
            <link>https://medium.com/captain-contrat-tech?source=rss----838fc16b722a---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 15 May 2026 15:51:46 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/captain-contrat-tech" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Utiliser une convention de nommage pour clarifier la collecte de données]]></title>
            <link>https://medium.com/captain-contrat-tech/utiliser-une-convention-de-nommage-pour-clarifier-la-collecte-de-donn%C3%A9es-d224011fe476?source=rss----838fc16b722a---4</link>
            <guid isPermaLink="false">https://medium.com/p/d224011fe476</guid>
            <category><![CDATA[tracking]]></category>
            <category><![CDATA[web]]></category>
            <category><![CDATA[events]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Martin Salles]]></dc:creator>
            <pubDate>Wed, 06 May 2020 09:37:43 GMT</pubDate>
            <atom:updated>2020-05-06T09:40:17.912Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<p>Une célèbre citation attribuée à <a href="https://martinfowler.com/bliki/TwoHardThings.html">Martin Fowler</a> rappelle que le nommage est une des tâches les plus difficiles :</p><blockquote>There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.</blockquote><p>Je crois qu’elle s’applique particulièrement bien aux événements émis par une application pour être stockés puis analysés ultérieurement.</p><h3>Pourquoi choisir avec soin les noms, dès le début ?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*xTivtr_IS3sPwEF9" /><figcaption>Photo by <a href="https://unsplash.com/@sctgrhm?utm_source=medium&amp;utm_medium=referral">Scott Graham</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Quand on commence à implémenter du suivi d’événements dans une application, on crée souvent rapidement les premiers événements, sans se poser trop de questions. D’une part, on souhaite accéder rapidement à la donnée, et d’autre part, s’il n’y a que 2 ou 3 événements suivis, ils sont en général très clairs !</p><p>On fait donc souvent l’impasse sur la définition d’une <strong>convention de nommage</strong>. Puis on finit par le payer le jour où l’on se retrouve avec des événements que l’on n’est plus capables de différencier sans lire le code pour comprendre leur déclenchement.</p><p>Et le <strong>coût du changement</strong> quand on a une grosse base d’événements suivis est assez lourd : ces événements sont générés par une application, puis stockés quelque part et utilisés par d’autres application. Il faut <strong>repenser le nommage</strong> de tous les événements, puis <strong>modifier le code</strong> qui les déclenche, <strong>migrer toutes les données</strong> existantes et <strong>réécrire les requêtes</strong> qui les utilisent.</p><p>C’est exactement la situation dans laquelle nous nous trouvons actuellement, donc prenons le temps de réfléchir un peu : qu’aurions-nous gagné à avoir une convention de nommage ?</p><p>Voilà les 3 principaux avantages qui remontent de nos discussions :</p><ul><li>produire des données claires, <strong>compréhensibles</strong> à la fois par les développeurs et par les équipes qui traitent les données (data analyst, équipes marketing, équipes produit…) ;</li><li>écrire du <strong>code propre</strong> et <strong>sans surprise</strong> : les événements sont souvent des variables ou des paramètres de fonctions dans notre code, si leur nom est plus clair, le code est plus clair, on aime ;</li><li>se poser <strong>moins de questions</strong> : si l’on souhaite mesurer un nouveau phénomène, on a déjà des règles simples pour nommer le nouvel événement à suivre.</li></ul><h3>Mais comment trouver des noms qui ont du sens ?</h3><p>Avant de décider d’une convention de nommage, il faut prendre le temps de décrire ce qui constitue un <strong>événement</strong>.</p><p>Chacun se construit un <strong>modèle mental</strong> qui représente ce qu’est un événement. On n’y réfléchit en général pas trop, mais clarifier le modèle permet de s’accorder, en équipe, sur ce qu’on entend par événement, et ensuite de faire émerger une convention qui convienne à tous.</p><p>Chacun pourra adapter ce travail à son équipe et sa situation, mais voici ce qui constitue un événement selon nous :</p><ul><li>un acteur</li><li>une action</li><li>un objet</li><li>un lieu</li><li>un instant</li><li>toutes sortes d’informations complémentaires, éphémères ou non</li></ul><h4>L’acteur</h4><p>C’est l’<strong>entité qui réalise l’action</strong> représentée par l’événement.</p><p>Il peut s’agir d’un utilisateur (exemple : un visiteur s’inscrit), d’un programme (prélèvement automatique d’un abonnement mensuel), d’un phénomène naturel (le vent a fait pivoter la girouette), d’un animal (le chien mange) et bien d’autres, en fonction de l’univers de notre application.</p><p>En principe, il doit s’agir d’un <strong>nom commun</strong>.</p><h4>L’action</h4><p>C’est la <strong>nature de l’événement</strong> qui a eu lieu. On l’exprime par un <strong>verbe au passé</strong> ou <strong>participe passé</strong>. En général, le verbe représente une action ponctuelle et discrète (<a href="https://fr.wikipedia.org/wiki/Topologie_discr%C3%A8te">au sens mathématique</a>).</p><p>Par exemple, “le visiteur <strong>s’est inscrit</strong>” : on peut considérer qu’il y a un avant et un après l’inscription, et qu’il y a un instant où l’inscription a lieu.</p><p>En revanche, “le client <strong>choisit</strong> un pack” manque de précision car le verbe ne représente pas une action ponctuelle. On ne sait pas trop si l’événement est déclenché quand le client a commencé à choisir ou à la fin : est-il déclenché quand il arrive sur la page ou quand il a sélectionné un pack ? L’événement n’est pas “discret”. Rien que “le client <strong>a choisi </strong>un pack” est plus précis, et donc plus compréhensible.</p><h4>L’objet</h4><p>L’<strong>entité à propos de laquelle</strong> l’action est réalisée. ça peut être par exemple un objet physique (le vent a activé <strong>la girouette</strong>), ou un élément visuel (le client a terminé <strong>son onboarding</strong>)</p><p>C’est souvent un nom commun. Il joue le rôle du <strong>complément d’objet </strong>(ou complément du verbe) dans la phrase en français. Un peu de grammaire ne fait pas de mal.</p><h4>Le lieu</h4><p><strong>Où</strong> l’action a-t-elle eu lieu ? Si notre système s’étale sur plusieurs applications ou plusieurs espaces dans une seule application, il est intéressant de savoir sur laquelle l’événement est survenu.</p><p>C’est en général un nom.</p><h4>L’instant</h4><p>C’est la <strong>seconde</strong> ou la <strong>milliseconde</strong> à laquelle un événement survient. Elle est capitale pour extraire de l’information utile à partir de la liste des événements survenus.</p><p>Il est évidemment possible de ne stocker que la date ou l’heure, mais on perd alors de la précision, notamment si l’on veut étudier par la suite des événements qui se déclenchent séquentiellement, à quelques secondes d’intervalle.</p><h4>Autres informations</h4><p>On peut imaginer d’autres informations complémentaire, utiles pour caractériser l’événement, mais elles nous paraissent souvent <strong>optionnelles</strong>. Nous les renseignons souvent dans des propriétés optionnelles à attacher à un événement, plutôt que de les faire figurer dans son nom.</p><h4>En bref</h4><p>J’y ai fait allusion en parlant de l’objet, mais on remarque que les 6 éléments listés ci-dessus pour décrire un événement correspondent à des éléments de la <strong>grammaire française</strong> qu’on a tous étudiés.</p><ul><li>acteur = sujet</li><li>action = verbe</li><li>objet = complément du verbe</li><li>lieu = complément circonstanciel de lieu</li><li>instant = complément circonstanciel de temps</li><li>informations complémentaires = autres compléments</li></ul><p>Cela peut nous aider à définir la condition de nommage qu’on veut adopter : <strong>qu’est-ce qui est vraiment nécessaire, et qu’est-ce qui est du ressort de l’information complémentaire ?</strong></p><p>On peut se dire par exemple que les compléments sont des informations complémentaires, et donc facultatives. 😮</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U3CwsKhE55XT56V3Lc8_3g.jpeg" /><figcaption>La <a href="https://fr.wikipedia.org/wiki/Nouvelle_syntaxe_(grammaire_fran%C3%A7aise)">nouvelle syntaxe</a> de la langue française : qu’est-ce qui nous intéresse pour nommer l’événement ?</figcaption></figure><h3>Notre convention</h3><p>Chez Captain Contrat, nous nous sommes mis d’accord sur la convention suivante :</p><p>Nomenclature : <em>sujet_verbeaupassé_complémentdobjet</em></p><p>Le <strong>sujet</strong> peut prendre l’un des valeurs suivantes :</p><ul><li>“<em>lawyer</em>” si l’événement est toujours déclenché par une action d’un avocat</li><li>“<em>client</em>” s’il est toujours déclenché par une action d’un client</li><li>“<em>admin</em>” s’il est toujours déclenché par un équipier Captain</li><li>“<em>human</em>” si ça peut être n’importe quel humain : avocat, client ou équipier</li><li>“<em>app</em>” si c’est une action déclenchée automatiquement par notre application</li></ul><p>Le <strong>verbe</strong> au passé peut être n’importe quel verbe, avec quelques “verbes réservés” :</p><ul><li><em>visited</em> : s’il s’agit d’une visite de page</li><li><em>clicked</em> : s’il s’agit d’un clic sur un élément visuel sans conséquence importante sur les données, comme cliquer sur un tooltip d’aide</li></ul><p>Le <strong>complément du verbe</strong> est un groupe nominal précis.</p><p>L’ensemble doit respecter la <strong>casse</strong> : <a href="https://fr.wikipedia.org/wiki/Snake_case">snake_case</a>.</p><p>Nos noms sont systématiquement définis en <strong>anglais</strong>, qui est la langue de travail de toutes nos applications.</p><h3>Obsolescence</h3><p>Au delà du problème initial, qui est de nommer correctement les événements quand on les implémente, nous nous posons aussi la question de leur obsolescence.</p><p>Ce problème n’est pas spécifique aux événements puisqu’il s’applique à l’ensemble du code, mais il se pose tout de même. Petit à petit, en fonction des évolutions du produit et du code, le nommage peut devenir obsolète.</p><h4>Un événement trop vague devenu confus : question_asked</h4><p>Quand cet événement a été implémenté, il était très clair qu’il correspondait à une <strong>question posée par un utilisateur</strong> qui possède un abonnement juridique chez nous et qui demande des renseignements <strong>à un juriste</strong>.</p><p>Les évolutions successives du produit ont ajouté de la confusion.</p><ul><li>Actuellement, une question peut aussi être posée <strong>par un juriste</strong> à un abonné, mais l’événement n’a pas changé. Il faut lire le code pour comprendre qu’il n’est déclenché que par les questions de l’abonné et pas par celles du juriste. Ou le contraire, je ne sais plus, il faudrait que je retourne lire le code 🤔</li><li>Nous avons aussi dans l’application des questionnaires qui permettent aux utilisateurs (abonnés ou non) de générer des documents juridiques. On pourrait facilement croire que l’événement est déclenché lorsqu’un utilisateur doit <strong>répondre à une question</strong>, mais ce n’est pas le cas. Ce coup-ci, j’en suis sûr. Mais c’est parce que j’étais présent quand il a été développé et que j’ai accès au code.</li></ul><p>Si cet événement n’est pas clair pour moi, qui l’ai implémenté et qui ai accès au code, j’imagine qu’il doit être frustrant pour les autres équipes.</p><h4>Un événement trop précis : client_opened_payment_modal</h4><p>Cet événement sert à mesurer le nombre de clients qui se retrouvent devant le formulaire de paiement. Cela nous permet ensuite de savoir quel pourcentage de clients laissent tomber au moment de payer.</p><p>Le jour où le paiement ne se fera plus dans une modale mais sur une page dédiée, le nom de l’événement deviendra obsolète.</p><p>Son nom est trop précis. Il est <strong>couplé à l’élément UX</strong> permettant de payer alors qu’ils n’est <strong>pas lié directement à cet élément dans l’intention</strong>. On aurait pu choisir <em>client_displayed_payment_form</em> qui est plus générique.</p><h4>Comment lutter ?</h4><p>Il est <strong>difficile de lutter contre l’obsolescence</strong> : un produit qui évolue crée nécessairement de la nouveauté et de l’obsolescence. En revanche, il me paraît important d’avoir quelques réflexes.</p><p>La première chose est de <strong>détecter</strong> <strong>l’obsolescence</strong> du nom de nos événements pour éviter les quiproquos. Pour cela, quelques pistes :</p><ul><li>quand je vais <strong>consulter le code</strong> pour savoir à quoi correspond un événement, c’est qu’il n’est pas clair, au moins pour moi</li><li>quand les autres équipes <strong>nous demandent </strong>ce que représente un événement, c’est qu’il n’est pas clair pour eux</li><li>si un événement <strong>n’est pas utilisé</strong>, peut-être que c’est parce que personne ne le comprend</li></ul><p>Par la suite, pour limiter les conséquences des noms inappropriés, il est possible de mettre en place quelques actions :</p><ol><li><strong>documenter</strong> les événements pour que tout le monde puisse les comprendre</li><li><strong>éviter</strong> de développer des fonctionnalités qui ont des <strong>noms proches</strong> (facile à dire)</li><li>être prêts à <strong>renommer</strong> un événement si c’est nécessaire. Si ça se produit souvent, semi-automatiser ?</li><li><strong>assumer</strong> cette confusion et miser sur la connaissance accumulée par les équipiers pour s’y retrouver. Cette solution a l’avantage d’être peu coûteuse à court terme, mais bon…</li></ol><h3>Pour résumer</h3><p>La difficulté de nommage des événements suivis vient de leur utilisation : ils sont <strong>émis par notre application</strong>, puis <strong>stockés ailleurs</strong> pour être <strong>utilisés par d’autres applications</strong>. Il est donc difficile de les modifier. Les nommer correctement est donc important.</p><p>Se mettre d’accord avec toutes les parties prenantes sur ce qui définit un événement ouvre la voie à une convention de nommage qui convienne à tous. Les noms des événements créés par la suite sont alors <strong>plus clairs</strong> et <strong>plus simples</strong> à utiliser par tous.</p><p>Enfin, pour revenir à la citation initiale, n’oublions pas non plus les bonnes pratiques de base pour le nommage :</p><ul><li><strong>éviter l’ambiguïté</strong> : ne pas utiliser le même mot pour deux choses différentes</li><li><strong>éviter les abréviations</strong> (<em>user_SU</em> pour <em>user_signed_up</em>)</li><li><strong>éviter les mots réservés</strong> (“event” par exemple…)</li><li>respecter les conventions de casse (snake_case, camelCase, kebab-case…)</li></ul><p>Une fois que l’on parvient à suivre des événements dont le nom est à peu près clair, une nouvelle question se pose : comment clarifier les propriétés qui accompagnent chaque événement ?</p><p>Mais c’est une autre histoire…</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d224011fe476" width="1" height="1" alt=""><hr><p><a href="https://medium.com/captain-contrat-tech/utiliser-une-convention-de-nommage-pour-clarifier-la-collecte-de-donn%C3%A9es-d224011fe476">Utiliser une convention de nommage pour clarifier la collecte de données</a> was originally published in <a href="https://medium.com/captain-contrat-tech">Captain Contrat Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Implémenter un design system dans une application existante]]></title>
            <link>https://medium.com/captain-contrat-tech/impl%C3%A9menter-un-design-system-dans-une-application-existante-23e4d71b239e?source=rss----838fc16b722a---4</link>
            <guid isPermaLink="false">https://medium.com/p/23e4d71b239e</guid>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[implementation]]></category>
            <category><![CDATA[project-management]]></category>
            <category><![CDATA[design-systems]]></category>
            <dc:creator><![CDATA[Paul-Yves Lucas]]></dc:creator>
            <pubDate>Thu, 13 Feb 2020 11:19:04 GMT</pubDate>
            <atom:updated>2020-02-18T11:23:34.341Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-nc-sa/4.0/</cc:license>
            <content:encoded><![CDATA[<p>Captain Contrat est une application aux nombreuses facettes : avec des interfaces pour les dirigeants d’entreprise, les avocats, les juristes internes et de nombreux types d’offres (allant de la marketplace à l’abonnement). Jusqu’ici, nous avions surtout avancé sur la partie fonctionnelle sans nous soucier de la cohérence de design. Chaque nouvelle page ajoutait une nouvelle couleur pour deux utilisées, les espacements entre les composants étaient désordonnés et les icônes étaient visuellement incohérentes entre celles qui venaient de font-awesome et les nôtres.</p><p>Avec la croissance de l’entreprise, la volonté d’avoir quelque chose de plus cohérent s’est renforcée. L’équipe design a décidé de mettre en place un design system pour unifier l’aspect de l’application, nous avons précédemment expliqué <a href="https://medium.com/captain-contrat-tech/gagner-en-coh%C3%A9rence-et-en-productivit%C3%A9-avec-un-design-system-3ab955beaa56">pourquoi cette décision a été prise</a> et <a href="https://medium.com/captain-contrat-tech/comment-avons-nous-mis-en-place-shipyard-notre-design-system-d7ac482ad607">comment ce design system a été conçu</a>. Nous allons ici nous concentrer sur l’implémentation de ce design system, en expliquant comment nous avons procédé pour le mettre en place de façon progressive, en essayant de ralentir le moins possible le reste des travaux.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1002/1*UbmIfQluLv9T493QIRdcMQ.png" /><figcaption>Le design system de Captain Contrat ne pouvait que s’appeler shipyard</figcaption></figure><h3>Le design system</h3><p>Nos designers l’ont expliqué mieux que moi dans <a href="https://medium.com/captain-contrat-tech/comment-avons-nous-mis-en-place-shipyard-notre-design-system-d7ac482ad607">leur article dédié</a>, mais pour résumer, en terme d’éléments à implémenter, ils ont défini :</p><ul><li>une liste officielle des couleurs, avec leurs cas d’usages</li><li>une police officielle, avec sa taille recommandée</li><li>des tailles et couleurs par défaut pour les titres et les paragraphes</li><li>une librairie d’icônes</li><li>des tailles, couleurs et formes standardisées pour nos formulaires</li><li>de nombreux composants comme les boutons, modales et autre champs de texte à appliquer aux différents espaces de notre application</li></ul><p>L’implémentation de tous ces éléments est chronophage et nous ne souhaitions pas ralentir tous les développements.</p><p>Afin d’avoir un plan de migration solide, nous avons pris un peu de recul et analysé les différents éléments de ce design system. On peut différencier des éléments qui vont se retrouver sur la quasi totalité des pages, et ceux qui vont être plus épars dans l’application. Pour nous, il s’agit presque de la différence entre variables et composants.</p><h3>Les variables</h3><p>Toute règle qui traite de couleur, taille et famille de police est omniprésente dans l’application. Nous nommons ces éléments des variables étant donné que dans notre code, nous stockons ceci dans des variables scss (qui pour l’instant sont désordonnées et sans grande cohérence entre elles, mais ont le mérite d’exister). Pour ces variables, un changement progressif est assez illusoire et compliquerait vraiment notre code. Nous avons donc réalisé un fichier de correspondance entre les anciennes variables et celles du design system avec l’aide de l’équipe design, puis refactoré le code pour ne plus utiliser que les nouvelles variables (réunies dans un seul fichier). Quelques jours en staging nous ont permis de détecter les éventuels ratés (du doré sur fond doré à un endroit, une taille trop grosse à un autre…) mais dans l’ensemble le travail préparatif n’avait pas trop de trous dans la raquette. Une mise en production nous as permis de passer de 5 variations de notre couleur principale à une seule, apportant déjà un semblant d’homogénéité à l’application.</p><h3>Les composants</h3><p>Le reste des éléments du design system sont ce qu’on peut nommer des composants : des briques unitaires représentant des éléments réutilisables dans notre application. Ils sont beaucoup trop nombreux pour qu’on s’y attaque d’un coup, donc nous avons décidé d’appliquer une règle proche du <a href="https://medium.com/@biratkirat/step-8-the-boy-scout-rule-robert-c-martin-uncle-bob-9ac839778385">boy scout</a> sous stéroïdes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/869/1*jrqSIITwtiVXsHJJjrdzIA.png" /><figcaption>Un bout de documentation composant de notre design-system</figcaption></figure><p>Dans chaque user story qui traite un peu du front, nous avons un design associé, et dans ce design on retrouve évidemment des composants du design system. La règle est simplement qu’au moment où on implémente ce design, on en profite pour faire un composant réutilisable (si ce n’est pas déjà fait) et on essaie de remplacer toutes les anciennes versions de ce composant par la nouvelle. Les premières user stories qui utilisent des composants très fréquents (barre de navigation, boutons, modales) sont évidemment plus coûteuses, mais c’est rapidement amorti quand on a juste à appeler un composant ou ajouter une classe pour avoir directement le bon design. Comme l’a dit notre équipier le moins enthousiasmé par le front-end :</p><blockquote>C’est cool, j’ai plus besoin d’écrire du css, j’ajoute juste une classe et c’est ok pour les designers.</blockquote><h3>Gérer plusieurs applications</h3><p>Captain Contrat possède deux applications (une pour le front de notre espace client, une pour le reste comprenant notamment le funnel d’achat), donc nous devons implémenter nos changements sur deux applications différentes. Des questions émergent :</p><ul><li>Que faire quand un composant est ajouté dans une application mais pas dans l’autre ?</li><li>Que faire quand le design system a changé un peu et qu’on intègre ce changement ?</li></ul><p>Si un composant est ajouté dans une application, notre approche progressive nous encourage à ne pas l’intégrer dans l’autre application tant qu’on n’en a pas besoin. En revanche, le fait d’implémenter des composants à des moments différents par des personnes différentes peut mener à du code assez différent, ce qui peut provoquer des mauvaises surprises. En effet si le composant modale s’appelle <em>captain-modal</em> sur une application et <em>modal</em> sur l’autre, nous n’allons pas nous en sortir. Pour résoudre ce problème, nous utilisons tout simplement la documentation du design-system fournie par les designers qui, en plus de détailler le css des différents composants, comporte nos propres contributions détaillant quelles applications implémentent le composant et quels sont les noms à utiliser.</p><p>Quand un élément du design-système change, on veut rester cohérent, il faut donc apporter les changements dans les deux applications en même temps. C’est obligatoire pour tous les éléments que nous qualifions de variables, nous avons en effet eu à changer des icônes à une occasion. Pour des composants, nous n’avons pas encore eu à le faire et il serait plus sûr de tout changer, mais des contraintes business fortes face à un petit changement nous feront potentiellement prendre le choix de mettre en production un premier changement et de faire attendre la seconde application.</p><h3>Conclusion</h3><p>Pour implémenter le design system de façon progressive, nous l’avons divisé entre les parties vitales, à implémenter au plus vite et ce qui pouvait être fait au fur et à mesure. En acceptant de ne pas être dans un état parfait dès le début et avec quelques jours de tests pour repérer les incohérences majeures, nous avons pu nous lancer très vite. Une fois ce lancement fait, il s’agit surtout de bien distinguer les User Stories où il y aura besoin d’implémenter des morceaux du design system de celles où au contraire, beaucoup d’éléments seront réutilisables.</p><p>Cette approche nous a assez bien réussi, le site est vite devenu plus cohérent grâce à l’unification des couleurs et polices et une identité visuelle se constitue petit à petit, sans trop gêner le développement de nouvelles fonctionnalités. De plus, délivrer quelque chose qui apporte de la valeur au client tout en augmentant notre productivité a permis de faire adhérer le reste de l’entreprise à ce design system.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=23e4d71b239e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/captain-contrat-tech/impl%C3%A9menter-un-design-system-dans-une-application-existante-23e4d71b239e">Implémenter un design system dans une application existante</a> was originally published in <a href="https://medium.com/captain-contrat-tech">Captain Contrat Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Comment avons-nous conçu Shipyard, notre Design System]]></title>
            <link>https://medium.com/captain-contrat-tech/comment-avons-nous-mis-en-place-shipyard-notre-design-system-d7ac482ad607?source=rss----838fc16b722a---4</link>
            <guid isPermaLink="false">https://medium.com/p/d7ac482ad607</guid>
            <category><![CDATA[product-design]]></category>
            <category><![CDATA[captain-contrat]]></category>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[france]]></category>
            <category><![CDATA[design]]></category>
            <dc:creator><![CDATA[Gautier Zimmermann]]></dc:creator>
            <pubDate>Tue, 28 Jan 2020 14:01:02 GMT</pubDate>
            <atom:updated>2020-01-28T14:27:18.819Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-nc-sa/4.0/</cc:license>
            <content:encoded><![CDATA[<h3>Comment avons-nous conçu Shipyard, notre Design System ?</h3><h4>Votre produit est fonctionnel mais vous ne le trouvez pas très séduisant ? Alors, nous nous sommes sans doute posé les mêmes questions ! Pourquoi chercher à rendre beau un produit qui fonctionne très bien tel qu’il est ? Comment garantir la meilleure expérience à nos utilisateurs tout en simplifiant la conception produit ? Chez Captain Contrat, designers et développeurs se sont alliés pour mettre en place <a href="https://zeroheight.com/0ed766268">Shipyard</a>, notre Design System.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*47Hukxz--LybHGT4DD8inQ.jpeg" /><figcaption>Voici Shipyard !</figcaption></figure><p><em>Dans cet article, je reviens sur la façon dont l’équipe Design de Captain Contrat a créé son Design System.</em></p><p><em>Si vous vous demandez pourquoi nous en avons créé un, Martin, développeur chez Captain Contrat, vous explique </em><a href="https://medium.com/captain-contrat-tech/gagner-en-coh%C3%A9rence-et-en-productivit%C3%A9-avec-un-design-system-3ab955beaa56"><em>les raisons qui nous ont poussé à créer notre Design System</em></a><em>.</em></p><p><em>Si vous êtes intéressé.e par l’implémentation du Design System du côté de l’équipe tech, il va falloir patienter, l’article arrive bientôt </em>😉</p><h3>Vous n’avez pas les bases</h3><p>Quand je suis arrivé chez Captain Contrat, la première chose qui m’a frappé, c’était le manque d’homogénéité entre les interfaces. L’expérience était relativement la même entre chaque écran, mais les polices d’écriture pouvaient varier d’un écran à l’autre, tout comme le rouge qui symbolise notre marque. Il en était de même dans nos outils : à chaque nouvelle maquette, les couleurs, les espaces ou les typographies étaient nouvelles.</p><p>Il étaient donc temps de repartir sur des bases simples.</p><h4>Les couleurs</h4><p>La décision fut radicale sur ce point : nous avons décidé de nous séparer de toutes nos couleurs existantes à l’exception de 2, le rouge et le doré de notre marque.</p><p>Puis, nous avons décidé de créer 7 palettes de couleurs de 10 nuances chacune :</p><ul><li>Neutre</li><li>Rouge</li><li>Doré</li><li>Bleu</li><li>Vert</li><li>Orange</li><li>Violet</li></ul><p>Si vous avez bien suivi, nous avons parlé de créer des bases simples et nous nous retrouvons avec 70 couleurs différentes. On a connu plus clair !</p><p>Pourtant, c’était le meilleur choix pour nous : il nous permet d’avoir dès le début l’ensemble des couleurs que nous utiliserons pour nos interfaces, mais également les couleurs pour l’aspect “marketing” (illustrations, code couleurs pour nos offres, etc.).</p><p>D’un point de vue purement produit, nous n’utilisons que 9 de ces couleurs pour nos interfaces.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/908/1*vDwntdNQhzw3-0o1B01FDQ.jpeg" /></figure><p><strong>Ce que nous avons retenu de la création de nos couleurs :</strong></p><ul><li>Le naming est <strong>TRÈS IMPORTANT</strong>.<br>Il servira à vous comprendre entre designers, mais il vous permettra surtout de parler la même langue avec les développeurs. Nous avons très vite abandonné le système “darker-red &gt; dark-red &gt; red &gt;…” qui était incompréhensible (et très peu scalable), pour nommer nos couleurs comme la <a href="https://fr.wikipedia.org/wiki/Graisse_(typographie)">graisse</a> des polices d’écriture : Red900 &gt; Red800 &gt; Red700… <strong>Ce choix n’est pas sorti de notre chapeau, il a été le fruit de longues discussions avec les développeurs pour aligner tout le monde en amont.</strong></li><li>Pour chaque couleur, choisissez une couleur principale (par exemple Red500). A partir de cette couleur vous pourrez trouver vos variantes plus claires et plus sombres facilement.</li><li><strong>N’oubliez pas l’accessibilité</strong>. Chez Captain Contrat, plusieurs équipiers sont daltoniens. Vous imaginez donc bien qu’avez le rouge comme couleur principale, nous devons faire attention à ce que chacun puisse lire notre interface facilement.</li></ul><p>Pour vous aider dans votre travail, je vous recommande l’outil <a href="https://leonardocolor.io/">Leonardo</a>.</p><h4>Les polices</h4><p>Nous avons été encore plus radicaux en ce qui concerne les polices d’écriture. Nous les avons toutes remplacées au profit d’une unique : <a href="https://fonts.google.com/specimen/Nunito">Nunito</a>. Nous avons limité le nombre de graisse à 3 : Regular, Semibold &amp; Bold.</p><p>Puis nous avons posé 3 règles :</p><ul><li>La police de base a une taille de 16px — pour être facilement lisible sur desktop et mobile — et les autres tailles varient de 2 à 4px en fonction de cette taille de base</li><li>La hauteur entre chaque ligne a un ratio de 1:1.5, afin de faciliter la lecture des personnes atteintes de déficience visuelle ou de troubles de la lecture comme la dyslexie. Pour les titres, ce ratio est de 1:1.25.</li><li>Une ligne de texte doit faire de 80 à 100 caractères maximum, là encore pour simplifier la lecture.</li></ul><p>Grâce à ces règles, nous avons pu déterminer la taille de nos titres sur mobile et desktop.</p><p><strong>Ce que nous avons retenu de la création de nos polices :</strong></p><ul><li>Réfléchissez bien à la taille de votre police de base et aux hauteurs de ligne. Ces points peuvent sembler anodins, mais ils vous feront gagner un temps précieux par la suite. Tout en rendant votre interface plus lisible !</li></ul><h4>Les espacements</h4><p>Les espacements sont un enfer. Surtout pour les développeurs. Il suffit d’un décalage, même insignifiant, sur une maquette pour créer une multitude de questions. C’est aussi un enfer pour les designers pour créer une régularité et une facilité de lecture sur les interfaces.</p><p>Pour cela, nous avons décidé de partir sur une grid de 8px. Je ne vais pas m’étendre sur ce choix, la littérature est déjà largement suffisante là dessus.</p><ul><li><a href="https://builttoadapt.io/intro-to-the-8-point-grid-system-d2573cde8632">Intro to The 8-Point Grid System</a></li><li><a href="https://spec.fm/specifics/8-pt-grid">8-Point Grid</a></li></ul><p>Maintenant, il faut déterminer les espacements que l’on va intégrer dans nos designs. Nous en avons choisi 5:</p><ul><li>4px</li><li>8px</li><li>16px</li><li>32px</li><li>64px</li></ul><p>Nous avons opté pour une progression exponentielle des espacements, plutôt que linéaire pour une bonne raison : ne pas nous prendre la tête entre 16, 24 et 32 px lorsque l’on fait une maquette. Ces espacements sont très proches et ne permettent pas de faire un choix facilement. En supprimant 24px de la liste, tout devient plus simple.</p><p>Pour en savoir plus sur notre choix :</p><p><a href="https://medium.com/eightshapes-llc/space-in-design-systems-188bcbae0d62">Space in Design Systems</a></p><p><strong>Ce que nous avons retenu de la création de nos espacements :</strong></p><ul><li><strong>Les espacements sont probablement la chose la plus essentielle pour vos interfaces et pourtant ils sont souvent négligés.</strong> Ce sont eux qui vont rendre vos interfaces lisibles et respirables ou au contraire illisibles et compactes.</li><li>Prenez le temps de faire des tests et de vous renseigner. C’est ce que nous avons fait et nous n’avons désormais plus de questions entre designers et développeurs sur les espacements voulus.</li></ul><ul><li><a href="https://blog.prototypr.io/a-framework-for-creating-a-predictable-and-harmonious-spacing-system-8eee8aaf773c">A framework for creating a predictable &amp; harmonious spacing system for faster design-dev handoff</a></li><li><a href="https://medium.com/@ethersystem/generating-design-system-spacing-aa69714160bc">Generating Design System Spacing</a></li></ul><h4>Les ombres et les icônes</h4><p>Passons rapidement sur les deux dernières bases de notre design system.</p><p>Pour gagner du temps nous avons décidé de suivre les recommandations du livre <a href="https://refactoringui.com/">Refactoring UI</a> pour l’implémentation des ombres.</p><p>En ce qui concerne les icônes, nous avons décidé de créer les nôtres afin d̶’̶e̶n̶ ̶f̶i̶n̶i̶r̶ ̶a̶v̶e̶c̶ ̶F̶o̶n̶t̶ ̶A̶w̶e̶s̶o̶m̶e̶ renforcer la personnalité de Captain Contrat sur notre interface. Pour faire comme nous, je vous recommande l’article suivant :</p><p><a href="https://blog.nucleoapp.com/nucleo-icon-guidelines-introduction-70092f8b4697">Nucleo Icon Guidelines - Introduction</a></p><h3>Et maintenant ?</h3><p>Maintenant que nous avons les bases, il est temps de créer des composants ! Rassurez-vous, je ne vais pas rentrer dans le détail de la création de chaque composant. Je vais plutôt vous expliquer, dans les grandes lignes, la méthode que nous avons suivi :</p><ul><li>Nous avons appliqué la méthode de EightShapes pour choisir les composants que nous devions réaliser en priorité, ceux qu’il faudrait que l’on ait à terme et ceux qui ne nous serviront jamais.</li></ul><p><a href="https://medium.com/eightshapes-llc/picking-parts-products-people-a06721e81742">Picking Parts, Products &amp; People</a></p><ul><li>Nous nous sommes enfermés dans une salle avec <a href="https://www.linkedin.com/in/girouxguillaume/">Guillaume</a>, également Product Designer chez Captain Contrat, et nous avons créé ensemble chaque composant sur Figma.</li><li>Nous avons ensuite documenté l’ensemble des composants pour expliquer à quoi ils servent, quand et comment les utiliser, et comment les intégrer côté devs. <strong>Ne négligez pas cette partie</strong>, elle vous évitera par la suite des casse-têtes du type “Ah mais on ne devait pas utiliser ce composant comme ça ?” → Non c’est expliqué dans la documentation.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/860/1*9sVyFjlYTGdJ_C_6yG-HCw.png" /><figcaption>Exemple de documentation dans Shipyard</figcaption></figure><ul><li>Pour l’intégration, nous avons décidé de la faire progressivement. A chaque fois qu’un écran évolue, nous en profitons pour intégrer les nouveaux composants créés. Mais ça nous en parlerons dans un autre article 😉</li></ul><p>Au moment où j’écris ces lignes, cela fait 5 mois que nous avons mis en place notre Design System. Ce dernier nous a déjà permis de<strong> gagner un temps précieux lors de la conception et l’implémentation de nouvelles fonctionnalités</strong>. Il nous a également permis de <strong>réduire drastiquement nos débats</strong> sur des détails insignifiants d’interface <strong>pour nous focaliser sur l’amélioration de l’expérience de nos utilisateurs</strong>.</p><p>Bien sûr, tout n’est pas encore parfait et nous aimerions aller plus loin : ajouter les illustrations à notre Design System, le tone of voice et bien plus encore. Mais cela arrivera et on écrira un nouvel article à cette occasion !</p><p>Cet article vous a plu ? N’hésitez pas à 👏👏👏</p><p>Découvrez également pourquoi nous avons mis en place notre Design System :</p><p><a href="https://medium.com/captain-contrat-tech/gagner-en-coh%C3%A9rence-et-en-productivit%C3%A9-avec-un-design-system-3ab955beaa56">Gagner en cohérence et en productivité avec un design system</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d7ac482ad607" width="1" height="1" alt=""><hr><p><a href="https://medium.com/captain-contrat-tech/comment-avons-nous-mis-en-place-shipyard-notre-design-system-d7ac482ad607">Comment avons-nous conçu Shipyard, notre Design System</a> was originally published in <a href="https://medium.com/captain-contrat-tech">Captain Contrat Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Gagner en cohérence et en productivité avec un design system]]></title>
            <link>https://medium.com/captain-contrat-tech/gagner-en-coh%C3%A9rence-et-en-productivit%C3%A9-avec-un-design-system-3ab955beaa56?source=rss----838fc16b722a---4</link>
            <guid isPermaLink="false">https://medium.com/p/3ab955beaa56</guid>
            <category><![CDATA[ui]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[ux]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[design]]></category>
            <dc:creator><![CDATA[Martin Salles]]></dc:creator>
            <pubDate>Thu, 02 Jan 2020 09:08:20 GMT</pubDate>
            <atom:updated>2020-01-28T14:25:49.954Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<p>Quand Gautier, l’un de nos UX/UI designer, est venu nous parler de design system il y a 2 mois, <strong>j’étais un peu dubitatif</strong>. Nous avions à ce moment là d’autres sujets prioritaires et il en ajoutait un nouveau qui s’annonçait compliqué à mettre en place.</p><p>Devant notre moue hésitante, Gautier a décidé de faire preuve de pédagogie. Il nous a présenté les opportunités qu’aurait le design system à la fois pour les développeurs et les designers : <strong>travailler ensemble plus efficacement et donc in fine apporter de la satisfaction à nos utilisateurs</strong>. Puis il a pris le temps de détailler la démarche que l’on pourrait adopter pour mettre en place ce design system sans perdre en productivité. Convaincus par ses arguments, nous nous sommes lancés.</p><p>En prenant un peu de recul après 2 mois de travail, je crois que Gautier a bien fait d’insister un peu.</p><h3>C’est quoi un design system ?</h3><p><strong>Un design system est une bibliothèque de styles et de composants réutilisables, documentée et soumise à des normes claires et détaillées</strong>. Il sert aussi bien aux designers qu’aux développeurs ou au marketing pour construire une expérience utilisateur cohérente plus rapidement.</p><p>Il comprend plusieurs briques, dont les 3 principales sont :</p><ul><li>une <strong>charte graphique</strong>, qui définit des éléments de style (couleurs, typographies, icônes…) et leur utilisation</li><li>un <strong>kit UI</strong> qui rassemble les composants réutilisables (boutons, inputs…) en se basant sur la charte graphique afin de garder un style uniforme entre les composants</li><li>une <strong>documentation</strong> qui explique la façon dont chaque composant doit être utilisé</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*9JZKadvL6utCYndK" /><figcaption><em>Le design system en image</em></figcaption></figure><p>Si vous voulez en lire plus sur le sujet, cet <a href="https://medium.com/ideas-by-idean/everything-you-need-to-know-about-design-systems-f6e82982be27">article</a> écrit (en anglais) par Audrey Hacq définit plus précisément ce qu’est un design system.</p><h3>Quels avantages à mettre en place un design system chez Captain Contrat ?</h3><h4>Un gain de clarté pour nos utilisateurs</h4><p>Notre application a maintenant 7 ans, un âge tout à fait respectable pour une application web. Avec plusieurs lignes produits (place de marché, abonnement) et plusieurs types d’utilisateurs (créateurs d’entreprises, dirigeants d’entreprises, experts comptables, avocats…) elle est devenue <strong>relativement complexe d’un point de vue graphiqu</strong>e.</p><p>Jusqu’à présent nous avons conçu chaque page au moment où nous avons eu besoin de l’implémenter, sans nous soucier de la cohérence avec celles déjà existantes. Nouvelle couleur, nouveaux boutons, nouvelle taille de texte, etc. <strong>La diversité graphique de nos interfaces utilisateurs était très pénalisante.</strong></p><p>Quand Gautier a posé sur la table la question du design system, il est devenu évident pour nous que cette situation était problématique pour nos utilisateurs, qui avaient parfois du mal à utiliser notre application.</p><p>En rassemblant au sein du design system nos règles de conception, nous évitons que les différentes pages proposent des interfaces obéissant à des règles qui sortent de la norme. <strong>Elles restent cohérentes entre elles et nos utilisateurs se sentent à l’aise pour naviguer sur toute notre application sans mauvaises surprises.</strong></p><h4>Un gain d’efficacité pour les designers</h4><p>Une autre conséquence directe du désordre graphique de notre application était le coût de conception de nouvelles pages. A chaque nouvelle conception, <strong>le designer s’interrogeait pour finalement prendre des décisions semblables à celles prises pour d’autres pages</strong>. Nous ne prenions pas en compte les enseignements tirés du passé. On aurait pu réutiliser l’existant, mais quelle couleur choisir parmi les 8 qui existent déjà ?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*2Nb_nRODPlknYt7w" /><figcaption><em>Les incohérences relevées par Gautier dans nos interfaces : tous ces textes ont des tailles, polices, couleurs et espacements différents…</em></figcaption></figure><p>Avec une bibliothèque de composants et une charte graphiques documentées, <strong>les designers peuvent s’appuyer directement sur les éléments définis par le passé pour gagner du temps</strong> dans la conception : “Je veux un texte d’aide pour accompagner l’utilisateur, donc je vais utiliser directement le texte d’aide par défaut de notre design system”</p><p>Au delà de la conception d’une nouvelle page, nous avions aussi du mal à faire évoluer nos interfaces existantes car il était difficile de décliner une modification partout sur le site d’un coup. <strong>On peut parler de dette graphique, par analogie à la dette technique</strong>.</p><p>Avec un design system unifié, on peut facilement modifier un élément sans avoir de surprises sur l’impact pour toutes les vues dans lesquelles il est utilisé.</p><h4>Un gain de temps pour les développeurs</h4><p>Du point de vue des développeurs, l’utilisation d’un design system est également venue apporter de l’efficacité dans notre travail.</p><p>Toutes les maquettes étant différentes auparavant, <strong>nous devions systématiquement implémenter de nouveaux composants</strong>, ou des versions modifiées de composants existants. Ce temps de développement était mal utilisé et nécessitait par ailleurs beaucoup d’aller-retours avec les designers pour valider le travail réalisé.</p><p>Maintenant que nos designers utilisent notre design system, les interfaces sont proches. Une fois les composants définis et documentés, et dès lors qu’ils ont été utilisés et implémentés une fois, <strong>nous pouvons les réutiliser sur les différentes pages sans avoir besoin de les réimplémenter</strong>. Nous avons déjà constaté un gain de temps conséquent.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iBiq8-yYUNtGJhwG" /><figcaption><em>La liste des boutons relevée par Gautier pour nous convaincre : autant de composants CSS implémentés par les développeurs…</em></figcaption></figure><h3>Conclusion</h3><p>Vous l’aurez compris, après deux mois de mise en place et d’utilisation de notre design system, je considère qu’il s’agit d’une bouffée d’air frais, à la fois pour nos utilisateurs et pour nos équipes de conception et de développement. <strong>Il nous a aidé à résoudre un problème structurel et douloureux : notre application n’avait pas d’unité graphique</strong>.</p><p>Nous avons progressé sur les deux axes que nous avions identifiés :</p><ul><li>côté utilisateur : <strong>nos interfaces ont gagné en cohérence</strong> et donc en <strong>clarté</strong>.</li><li>côté designer et développeur : <strong>nous avons gagné en productivité</strong> car la réutilisabilité des éléments qui composent nos interfaces utilisateurs se traduit par un gain de temps sur la conception et l’implémentation.</li></ul><p>La décision de mettre de place ce design system correspond aussi à l’arrivée d’un deuxième designer dans l’équipe. Cette arrivée aurait pu augmenter l’entropie graphique de notre application. En nous forçant à documenter l’existant et les décisions prises, nous avons probablement gagné un temps fou.</p><p>Un chouette projet !</p><p><em>Article co-écrit avec </em><a href="https://medium.com/@zimroux"><em>Gautier</em></a><em>.</em></p><p>Pour les curieux, notre design system est documenté <a href="http://design.captaincontrat.com/">ici</a>.</p><p>Vous êtes convaincus de l’utilité d’un design system, mais vous ne savez pas comment le concevoir, ou gérer la transition ? Cet <a href="https://medium.com/captain-contrat-tech/comment-avons-nous-mis-en-place-shipyard-notre-design-system-d7ac482ad607">article de Gautier</a> précise comment notre design system a été conçu.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3ab955beaa56" width="1" height="1" alt=""><hr><p><a href="https://medium.com/captain-contrat-tech/gagner-en-coh%C3%A9rence-et-en-productivit%C3%A9-avec-un-design-system-3ab955beaa56">Gagner en cohérence et en productivité avec un design system</a> was originally published in <a href="https://medium.com/captain-contrat-tech">Captain Contrat Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cinq façons de concevoir le pair programming]]></title>
            <link>https://medium.com/captain-contrat-tech/cinq-types-de-pair-programming-4e4cc149ce28?source=rss----838fc16b722a---4</link>
            <guid isPermaLink="false">https://medium.com/p/4e4cc149ce28</guid>
            <category><![CDATA[methodology]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[pair-programming]]></category>
            <dc:creator><![CDATA[Paul-Yves Lucas]]></dc:creator>
            <pubDate>Tue, 02 Jul 2019 15:02:32 GMT</pubDate>
            <atom:updated>2020-01-20T17:16:26.999Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-nc-sa/4.0/</cc:license>
            <content:encoded><![CDATA[<p>Le pair programming est souvent cité comme un avantage. On le présente comme <strong>un bon moyen de progresser en équipe</strong>. Mais qu’est-ce que cette organisation implique réellement ?</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2Foddripegoshawk&amp;url=https%3A%2F%2Fgfycat.com%2Foddripegoshawk-comedycemetery-keyboard-ncis&amp;image=https%3A%2F%2Fthumbs.gfycat.com%2FOddRipeGoshawk-size_restricted.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=gfycat" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/de9c0874e5df6040e4a3430a02616133/href">https://medium.com/media/de9c0874e5df6040e4a3430a02616133/href</a></iframe><p>De toute évidence, il ne s’agit pas d’une session de piano, d’un duo jouant simultanément sur le même clavier. Le pair programming peut être abordé de différentes façons, chacune avec ses avantages et ses défauts. Faisons le point ensemble dans cet article.</p><h3>La dictée</h3><p>Lorsque l’un des deux participants se révèle d’avantage expert sur la technologie utilisée ou le programme en lui-même, c’est à lui que revient naturellement le rôle <strong>d’énoncer les différentes étapes à effectuer</strong>. Il donne ses directives, un peu comme une dictée (ou une recette de cuisine).</p><p>Cette méthode s’avère utile pour présenter à l’intéressé une partie du code qu’il ne connaît pas, et plus généralement pour enseigner des méthodes aux profils plus juniors.</p><p><strong>Le niveau de détail dicté peut évidemment varier</strong>. D’une simple explication des fonctions à implémenter au détail du code ligne par ligne, la dictée ne sera pas la même.</p><p>Pour accompagner ces instructions, il est recommandé d’en profiter pour faire une <strong>visite guidée du code</strong>. Par exemple en ouvrant différents fichiers, le mentor pourra expliquer les tenants et aboutissants des différentes méthodes. En particulier à l’occasion des premiers jours d’un nouveau junior, la session peut aller jusqu’à faire les commits et la pull request.</p><h3>Le superviseur</h3><p>Dans la même veine, mais avec une approche plus “<strong>apprentissage par la pratique</strong>”, le mentor peut prendre du recul en donnant juste les grandes lignes de la fonctionnalité. C’est alors au junior, qui écrit le code, de commenter son travail en expliquant ses choix. Le mentor pourra répondre aux questions, donner des conseils et éventuellement les solutions pour les problèmes les plus ardus.</p><p>Cette approche perd le côté visite guidée de la précédente, mais les leçons apprises seront probablement <strong>mieux retenues</strong>, au prix d’un rythme moins soutenu et peut-être d’un peu plus de stress chez certains. Elle a aussi pour autre bénéfice de mieux appréhender la façon dont un nouveau venu construit son image mentale du code et cherche des solutions.</p><p>Bien entendu, cette méthode peut se cumuler avec la précédente ou s’alterner selon le niveau de fatigue des participants. Il suffit seulement de bien garder en tête leurs bénéfices respectifs.</p><h3>Le clavier tournant</h3><p>Au premier abord, cette méthode peut sembler similaire aux précédentes. La distinction ? <strong>Toutes les 10 minutes, le clavier change de mains</strong> et les rôles tournent.</p><p>Cette méthode peut être utilisée lorsque les deux participants ont suffisamment confiance en la capacité de l’autre à résoudre un problème, ou qu’au moins tout le monde a les idées claires sur la façon dont un problème va être résolu.</p><p>La force de cette méthode ? Les deux participants remplissent deux rôles. On se retrouve avec virtuellement quatre paires d’yeux sur le code, ce qui devrait augmenter les chances de repérer les passages délicats et les résoudres plus aisément, tout en évitant la frustration de bloquer seul face à un problème.</p><h3>La fonctionnalité en parallèle</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ux5PUF7N5Rpbv0Zw" /><figcaption>Travail en parallèle</figcaption></figure><p>Quand on implémente une fonctionnalité qui peut être <strong>découpée facilement</strong> (back et front, modèle et service, deux classes filles différentes…), on peut parfois s’assoir à côté de son collègue, diviser le travail en deux et travailler en parallèle sur la même branche. Une bonne communication est alors la clé du succès, pour savoir qui fait quoi. <strong>Des commits réguliers</strong> assureront que tout le monde est à jour sur les parties communes dès que possible. Le but de cette méthode est plus d’augmenter la vitesse de développement que de partager des connaissances.</p><p>Mon avis sur cette méthode ? Je trouve qu’elle fonctionne mieux lorsque la différence de niveaux entre les participants n’est pas trop grande, mais surtout lorsque la fonctionnalité est claire et divisée proprement. Mon conseil : discutez longuement avant de commencer à procéder de cette façon, puis continuez à communiquer très régulièrement sur les avancées de chacun.</p><h3>Le debug en tandem</h3><p>Comme pour la méthode précédente mais avec un côté exploratoire, le debugging peut se faire en paire. Chacun a son environnement de développement opérationnel et va explorer indépendamment les différentes parties de l’application à la recherche de la cause exacte du bug. Cette méthode a l’avantage de permettre d’<strong>avancer plus rapidement sur plusieurs fronts en même temps</strong>, augmentant les chances de trouver la source du bug plus vite. L’implémentation du correctif pourra alors se faire avec une des méthodes précédentes si la situation s’y prête, sinon à vous de trouver qui va se charger de corriger le bug.</p><h3>Conclusion</h3><p>Il y a plusieurs façons d’aborder le pair programming, chacune avec ses propres bénéfices. <strong>On ne devrait pas se mettre à faire du pair programming par effet de mode</strong>, mais bien prendre en compte la situation pour choisir la méthode la plus adaptée.</p><p><em>Envie de tester ça avec nous ? On recrute !</em></p><p><a href="https://jobs.captaincontrat.com/">Captain Contrat recrute !</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4e4cc149ce28" width="1" height="1" alt=""><hr><p><a href="https://medium.com/captain-contrat-tech/cinq-types-de-pair-programming-4e4cc149ce28">Cinq façons de concevoir le pair programming</a> was originally published in <a href="https://medium.com/captain-contrat-tech">Captain Contrat Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Un développeur efficace est un développeur en bonne santé]]></title>
            <link>https://medium.com/captain-contrat-tech/un-d%C3%A9veloppeur-efficace-est-un-d%C3%A9veloppeur-en-bonne-sant%C3%A9-1f0eedb837ee?source=rss----838fc16b722a---4</link>
            <guid isPermaLink="false">https://medium.com/p/1f0eedb837ee</guid>
            <category><![CDATA[stress]]></category>
            <category><![CDATA[développeur]]></category>
            <category><![CDATA[bien-être]]></category>
            <category><![CDATA[développement]]></category>
            <category><![CDATA[santé]]></category>
            <dc:creator><![CDATA[Gaëtan Masson]]></dc:creator>
            <pubDate>Tue, 07 May 2019 08:38:23 GMT</pubDate>
            <atom:updated>2019-05-07T08:40:47.715Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<p>Le métier de développeur a le vent en poupe ces dernières années. En effet, la demande pour ce type de poste évolue de manière exponentielle, ce qui engendre par la même occasion une augmentation du nombre de développeurs.</p><p>Pourtant, bien que ce métier soit reconnu comme l’un <a href="https://money.usnews.com/careers/best-jobs/rankings/the-100-best-jobs">des meilleurs métiers</a>, il n’est pas exempt de “risques” sur la santé (aussi bien sur le plan physique que psychologique) si l’on ne prend pas quelques mesures.</p><p>Cet article propose quelques pistes permettant à la fois de préserver votre santé (voir de l’améliorer pour certains) et d’être plus efficace dans votre travail. Des principes que notre équipe de dev appliquent et en lesquels nous croyons à 100%.</p><h3>Bien choisir sa boîte</h3><p>Ce conseil peut paraître évident, mais beaucoup de jeunes diplômés choisissent leur première entreprise en ayant comme critère principal la rémunération.</p><p><strong>Un bon salaire permet un certain confort de vie, mais ce n’est pas ce qui va le plus peser dans votre confort mental à terme.</strong></p><p>Ce qui va le plus impacter votre moral et votre humeur du jour sera votre cadre de travail, vos collègues ainsi que vos tâches quotidiennes.</p><p>En effet, pourquoi intégrer une SSII qui vous envoie chez un nouveau client tous les 2 mois pour faire du Java si vous adorez coder en Ruby et améliorer un produit sur du long terme avec une équipe soudée ?</p><p>Prenez donc le temps de bien vous renseigner sur le descriptif du poste, l’organisation de la boîte, ainsi que ses valeurs.</p><p>Permettez-vous d’être exigeant, ce ne sont pas les offres qui manquent.</p><h3>Savoir s’équiper</h3><h4>Le combo chaise et écran</h4><p>La première image qui nous vient à l’esprit lorsque l’on parle de bons outils pour développeur, est sûrement celle d’un MacBook dernier cri avec un clavier mécanique. Une bonne machine est certes agréable, mais ce n’est pas le plus important pour votre bien-être. Une chaise réglable et un écran externe est en effet le combo indispensable pour préserver votre santé.</p><p>Lorsque l’on reste assis une bonne partie de la journée, une chaise entrée de gamme (“confort en option”) peut vite devenir handicapante. En effet, si cette dernière n’est pas réglable et qu’en plus vous ne disposez pas d’écran externe, il y a de forte chance que vous finissiez dans cette position :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/1*urzlQIZtWh4Ih6zNnOTJaw.jpeg" /><figcaption>Douleurs au dos assurées en fin de journée.</figcaption></figure><p>Voir celle là :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/425/1*xQjuPr9OQTFsTu4H7U6Zjw.jpeg" /></figure><p>Si vous avez ce genre de position sur votre chaise, il y a fort à parier que c’est parce que votre setup chaise/écran n’est pas optimal.</p><p><strong>Pour votre santé physique, une chaise réglable ainsi qu’un écran externe (ou un support permettant de mettre en hauteur votre PC portable) est donc primordial, afin d’avoir un bon alignement tête écran, comme ci-dessous.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vGmf4Xl6reigeMqBkO4V3A.jpeg" /><figcaption>Pas besoin d’être au centimètre près, mais vous voyez l’idée.</figcaption></figure><p>En cas d’urgence, si vous n’avez pas d’écran, pensez au carton !</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ADxXu6O_r6_9szZmRduCVw.jpeg" /></figure><h4>Le casque d’asocial</h4><p>Quel joie de travailler en open space ; on peut discuter avec un collègue qui est à l’autre bout de la salle, tirer au nerf sur un autre. On entend les discussions intéressante des autres pôles, le doux bruit de la machine à café toutes les 10 mins… Bref, pour une grande partie d’entre nous, cela peut rapidement devenir un enfer, surtout lorsque l’on a besoin de se concentrer sur un problème complexe.</p><p>Si vous n’avez pas la chance de pouvoir travailler au calme (et si vous ne pouvez pas vous isoler), <strong>la solution est d’investir dans un casque à réduction de bruit</strong>. Onéreux certes, mais c’est le prix de la tranquillité.</p><p>Notez que la réduction de bruit, en plus de pouvoir vous isoler des bruits ambiants, vous permettra d’écouter votre musique avec un volume inférieur à celui d’un casque normal, ce qui est plus sain pour votre santé auditive.</p><h4>Les lunettes</h4><p>Personnellement, j’ai toujours cru que j’avais une bonne vision. Une visite chez l’ophtalmo m’avait confirmé que tout allait bien… en 2001.</p><p>Plus tard, je me suis amusé à essayer les lunettes d’un ami qui avait une légère correction. J’ai été surpris car j’avais l’impression d’avoir une meilleure vision. Curieux, j’ai à nouveau pris rendez-vous chez l’ophtalmo. Résultat, j’ai maintenant des lunettes de travail dont je ne peux plus me passer.</p><p>Pour comparer, c’est comme de passer du Full HD au Retina ; tant que vous n’avez pas testé le Retina, le Full HD vous semble correct, mais une fois que vous avez testé le Retina, vous prenez conscience que le Full HD n’est pas si détaillé que ça.</p><p>Un grand nombre de personnes pensent ne pas être concernés par les problèmes de vision, et pourtant… <strong>Ce n’est pas parce que vous avez la sensation de bien voir que votre vision est parfaite.</strong></p><h3>Optimiser son espace de travail</h3><h4>La distance chaise-écran</h4><p>Même avec vos lunettes fraîchement acquises vous avez les yeux qui brûlent en fin de journée ? Il y a de grande chance que vous soyez trop loin de votre écran.</p><p>La distance parfaite est compliquée à estimer car elle dépend de plusieurs facteurs (taille de l’écran, DPI…). Mais une bonne règle base est d’<strong>avoir une distance d’environ la longueur de votre bras à partir de votre position assise.</strong></p><p>Le plus important est que vous n’ayez pas le sensation de devoir vous concentrer lorsque vous lisez les caractères sur votre écran, car plus vous devez vous concentrer pour déchiffrer les caractères, moins vous allez cligner des yeux et plus vos yeux s’assècheront.</p><h4>Le spot idéal</h4><p>Sans pour autant partir dans du Feng Shui, sachez que l’emplacement de votre poste de travail peut fortement influencer votre bien-être.</p><p><strong>L’emplacement idéal se trouve non loin d’une fenêtre et loin d’un collègue aigri.</strong></p><p><strong>Se trouver proche d’une fenêtre permet de regarder de temps en temps au loin pour relâcher vos muscles oculaires</strong> qui ont tendance à rester tendus si vous fixez votre écran pendant une longue période.</p><p><strong>Être loin d’un collègue aigri permet de ne pas élever votre niveau de cortisol</strong> (<a href="https://fr.wikipedia.org/wiki/Cortisol">l’hormone du stress</a>). Cela peut sembler surprenant, mais être proche de quelqu’un qui a tendance à trop râler va affecter votre concentration, votre humeur (vous serez irritable à votre tour) et votre santé (<a href="https://www.sciencedaily.com/releases/2017/03/170328083113.htm">conséquence d’un niveau élevé de cortisol</a>).</p><h3>Savoir être raisonnable</h3><p>En tant que développeur, nous restons souvent de longs moments sur des problèmes et finissons même parfois par en être obnubilés : qui n’est pas resté avec un bug non résolu en tête sur son temps libre ? Durant ces moments, on ne voit pas le temps passer. C’est ce que l’on appelle être “In the zone”.</p><p>Bien que l’on se sente plein d’énergie durant cet état, ce n’est pas sans conséquence pour notre corps et notre mental. La fatigue peut s’accumuler sans que l’on ne s’en aperçoive.</p><p>Profitez de ces moments d’énergie (c’est durant ces moments que nous sommes le plus productif) mais n’en abusez pas ; <strong>ne restez pas jusqu’à 22h au boulot, encore moins de manière répétitive, car vous le paierez tôt ou tard et cher.</strong></p><p><strong>Même si vous adorez coder, lâchez le clavier et pratiquez d’autres activités pour vous aérer l’esprit</strong> ; jouez à la PS4, allez au cinéma avec votre copine ou faites des bébés, buvez des bières avec vos amis…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oote0qPQ-2x6hQvhHP55ZA.jpeg" /><figcaption>Moi et Matz, le créateur de Ruby.</figcaption></figure><p>En codant moins souvent, vous allez encore plus apprécier les moments où vous reprenez le clavier, et ainsi devenir plus efficace.</p><p>Si un bug vous obsède, rappelez-vous que votre cerveau continue de travailler de manière inconsciente. Ça ne vous est jamais arrivé de vous réveiller le matin en ayant la solution au problème de la veille ?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/488/1*XOzs-nBee1R1tf5nDF93_Q.png" /></figure><h3>Avoir une bonne hygiène de vie</h3><h4>Bouger</h4><p>La vie moderne nous rend de plus en plus sédentaires ; nous passons plus de temps enfermés, assis devant nos écrans, même sur notre temps libre. Ce n’est pas sans conséquences pour le corps et l’esprit.</p><blockquote>Un esprit sain dans un corps sain.</blockquote><p>Rester en position assise trop longtemps n’est pas sain, voir carrément dangereux (<a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3404815">risque de développer des problème cardiaques, du diabète… etc</a>).</p><p>Vous l’aurez compris, <strong>pratiquer une activité physique est primordial pour votre santé.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U4tw9HqRm7yGiDUZytqfXA.jpeg" /><figcaption>Martin en plein action durant un match d’<a href="https://fr.wikipedia.org/wiki/Ultimate_(sport)">ultimate</a>.</figcaption></figure><p>Adopter de bonnes habitudes comme :</p><ul><li>Prendre les escaliers plutôt que l’ascenseur ;</li><li>Vous déplacer à pieds et en vélo plutôt qu’en trottinette électrique ou en voiture ;</li><li>Rester debout dans les transports en commun ;</li><li>Aller voir un collègue plutôt que lui envoyer un message sur Slack .</li></ul><h4>Manger</h4><p>Saviez-vous que <a href="https://neuro.hms.harvard.edu/harvard-mahoney-neuroscience-institute/brain-newsletter/and-brain-series/sugar-and-brain">le principal carburant du cerveau est le sucre</a> ?</p><p><strong>Troquez vos tasses de café de 10h et 16h par un fruit,</strong> et ce pour 2 raisons :</p><ul><li>Vous buvez sûrement déjà trop de café dans la journée ;</li><li>Le fruit, en plus de vous apporter un coup de boost, vous apportera des vitamines et minéraux dont vous avez sûrement besoin.</li></ul><p>Cependant, même si le sucre est bon pour votre cerveau, ce n’est pas une raison pour vous enfiler un paquet de M&amp;M’s. Le sucre contenu dans ce genre de produits à index glycémique (IG) bien trop élevé produira l’effet inverse : vous endormir.</p><p>En effet, lorsque vous consommez un aliment à IG élevé, le glucose (sucre) présent dans ce dernier va brutalement entrer dans le sang en grande quantité, déclenchant une réponse insulinique du corps, qui, en plus d’avoir d’autres effets néfastes, va vous rendre somnolent. Ce n’est pas le cas avec un fruit car les fibres présentes dans ce dernier permettent de diffuser le glucose de manière plus douce.</p><h4>S’hydrater</h4><p>Sachez également que <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4207053">la deuxième chose dont raffole votre cerveau après le sucre est l’eau</a>. C’est d’ailleurs l’organe du corps le plus sensible à la déshydratation. Prenez l’habitude de bien vous hydrater tout au long de la journée (la bière ne compte pas, car l’alcool déshydrate).</p><p>Un autre avantage à boire fréquemment : l’envie fréquente d’aller aux toilettes, ce qui vous obligera à vous lever et à dégourdir vos jambes plusieurs fois dans la journée. En plus, c’est l’endroit idéal pour une épiphanie.</p><h4>Se supplémenter</h4><p>Souvent malade ? Le moral dans les chaussettes ? Il y a de fortes chances que vous soyez carencé en Zinc et en vitamine D, surtout si vous vivez dans une région qui manque de soleil.</p><p>Vous avez remarqué qu’en été vous êtes généralement de meilleure humeur et moins malade ? C’est en grande parti dû au fait que votre corps synthétise naturellement de la vitamine D grâce aux rayons du soleil, <a href="https://www.sciencedaily.com/releases/2014/12/141202111148.htm">vitamine qui a un impact sur le système immunitaire et l’humeur</a>.</p><p>Combiné à la vitamine D, le Zinc va donner un coup de boost à votre système immunitaire et permettra également de <a href="http://(https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3273967">guérir plus vite d’un rhume</a>, voir de ne pas en attraper du tout.</p><p>Oubliez les multi-vitamines, <a href="https://www.sciencealert.com/are-vitamin-pills-good-or-bad-some-you-should-take-folic-acid-zinc">vous n’avez pas besoin des autres vitamines si vous mangez correctement</a>.</p><h4>Dormir</h4><p>On vous dit souvent qu’il faut dormir entre 7 et 8 h par jour, ce qui est vrai. Mais ce que l’on vous dit moins, qui est pourtant le plus important, c’est d’avoir un rythme de sommeil régulier. Cela permettra de respecter votre cycle <a href="https://fr.wikipedia.org/wiki/Rythme_circadien">circadien</a>, entraînant entre autre une amélioration de la qualité de votre sommeil (en facilitant l’endormissement) et un réveil plus aisé.</p><p>Pour ceux qui souhaitent perdre du poids, sachez qu’<a href="https://www.ncbi.nlm.nih.gov/pubmed/20921542?utm_source=ActiveCampaign&amp;utm_medium=email&amp;utm_content=Lesson+1%3A+How+to+optimize+your+sleep+quality+%5BFree+guide%5D&amp;utm_campaign=Lesson+1">une étude</a> récente a trouvé que les personnes au régime avec un cycle régulier de sommeil perdaient plus de gras que les personnes au sommeil irrégulier. Pourtant, les 2 groupes avaient la même quantité de sommeil.</p><h4>N’oubliez pas la sieste</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/768/1*kH-1cdCG7w3ANAQWO9zKEw.jpeg" /></figure><p>Contrairement au Japon où c’est très bien vu et même encouragé, la sieste en France est mal perçue, ce qui est bien dommage.</p><p>Vous avez remarqué que vous vous sentez fatigué en début d’après midi, même si vous avez mangé léger ? C’est normal ! <a href="https://www.health24.com/Medical/Sleep/About-sleep/heres-why-you-want-to-take-a-nap-after-lunch-20180208">Votre corps est fait pour se reposer en début d’après-midi</a>. Plutôt que de lutter contre vos paupières lourdes, optez pour la sieste éclair ; dormez au moins 10 min mais ne dépassez pas 20 min. <a href="https://buffer.com/resources/how-naps-affect-your-brain-and-why-you-should-have-one-every-day">Cela sera plus efficace qu’un café</a>.</p><h4>Bonus : avoir un (ou plusieurs) chat(s)</h4><p>Pour ceux qui ont la chance d’être en télétravail, sachez que le chat peut être votre meilleur allié bien-être durant la journée. En plus d’être mignon et doux, avoir <a href="https://www.goodnet.org/articles/7-scientifically-proven-health-benefits-being-cat-owner">un chat vous aidera à vous sentir plus détendu et à mieux dormir</a>.</p><p>Quoi de mieux qu’une petite boule de poils chaude sur les jambes en hiver ?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_SwdHd7dEOaZx4l2HYq9XQ.jpeg" /><figcaption>Ryuk, l’un de mes deux chats.</figcaption></figure><p>Pour ceux qui n’ont pas la chance d’en avoir un, <a href="http://archive.news.indiana.edu/releases/iu/2015/06/internet-cat-video-research.shtml">regarder des vidéos de chats est aussi bénéfique</a> !</p><p><em>Si vous voulez rejoindre une équipe en pleine santé, rejoignez-nous !</em></p><p><a href="https://jobs.captaincontrat.com/">Captain Contrat recrute !</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1f0eedb837ee" width="1" height="1" alt=""><hr><p><a href="https://medium.com/captain-contrat-tech/un-d%C3%A9veloppeur-efficace-est-un-d%C3%A9veloppeur-en-bonne-sant%C3%A9-1f0eedb837ee">Un développeur efficace est un développeur en bonne santé</a> was originally published in <a href="https://medium.com/captain-contrat-tech">Captain Contrat Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Le bon moment pour transférer un state dans Redux]]></title>
            <link>https://medium.com/captain-contrat-tech/when-to-transfer-redux-state-be9b7c9813b4?source=rss----838fc16b722a---4</link>
            <guid isPermaLink="false">https://medium.com/p/be9b7c9813b4</guid>
            <category><![CDATA[react]]></category>
            <category><![CDATA[redux]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Paul-Yves Lucas]]></dc:creator>
            <pubDate>Thu, 02 May 2019 16:21:30 GMT</pubDate>
            <atom:updated>2019-05-02T16:21:30.547Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-sa/4.0/</cc:license>
            <content:encoded><![CDATA[<p>“Quand dois-je créer un reducer dans mon store Redux pour exposer un état partagé ?”. Si vous vous êtes déjà posé cette question, cet article est fait pour vous.</p><p>Tout d’abord, une compréhension basique de <a href="https://reactjs.org/">React</a> et <a href="https://redux.js.org/">Redux</a> est nécessaire. Je considère qu’on en est au point où on se demande si l’état d’un composant devrait être exposé par le store ou non.</p><h3>Redux en deux mots : état partagé</h3><p>Les bénéfices de Redux sont multiples, mais là n’est pas notre propos. Rappelons seulement ce qui nous intéresse : le fait que Redux fournisse <strong>un état (state) partagé</strong> dans lequel tous les composants qui le souhaitent peuvent extraire des informations à connecter à leur propres propriétés (props).</p><p>Cet état est le store. Il est composé par des reducers qui vont le modifier en fonction des actions diffusées par les composants.</p><h3>Quand utiliser le store ?</h3><p>Les personnes ayant travaillé sur des applications de taille moyenne avec React nous comprendront. Regrouper tous les états de tous les composants dans un store commun s’avère rapidement être une mauvaise idée (même si ce store est correctement divisé entre plusieurs fichiers). En effet, certains composants sont suffisamment indépendants, si bien qu’il n’y a finalement aucun bénéfice à partager leur état au regard de tous, ça ne rendrait les choses que plus complexes.</p><p>Mais alors, quand doit-on partager un état dans le store ?</p><p>Mon avis est le suivant : ce partage doit avoir lieu <strong>dès qu’un état est transmis comme props à d’autres composants de façon trop complexe</strong>, que ce soit pour des raisons de <strong>profondeur</strong> (on veut transmettre l’état à ses petits-enfants) ou de <strong>largeur</strong> (on utilise une prop et un callback pour la modifier afin de la partager aux composants frères). Un reducer peut aussi servir dans des cas particuliers tel qu’un besoin de contrôle externe, ce qui arrive quand on utilise des librairies externes non adaptées à React par exemple.</p><h3>L’exemple de la barre de navigation</h3><p>Prenons un exemple concret pour illustrer et clarifier mon propos : nous sommes en train d’ajouter une barre de navigation (navbar) dépliable à notre application.</p><p>Nous disposons donc d’un composant NavBar, avec un état qui contient le booléen displayed. La barre de navigation contient elle-même un bouton pour se replier mais au sein même du composant. On peut donc garder tout dans le composant NavBar sans soucis.</p><p>Pour pouvoir déplier la barre de navigation, il faut ajouter un bouton (OpenNavButton) à l’extérieur de celle-ci, mais qui va pouvoir agir sur son état. Nos deux composants ont heureusement un parent direct en commun. C’est donc ce parent qui va stocker un état displayNav (booléen) et le transmettre à ses enfants avec en prime une méthode de modification :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/536/1*wQYVsBM9_ok9dc18bP9rlg.png" /><figcaption>Jusqu’ici ça reste encore clair, la complexité est non nulle mais reste acceptable.</figcaption></figure><p>Mais que se passe-t-il si OpenNavButton n’est pas directement appelé par AppLayout, mais par un de ses enfants ?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/582/1*heG1ywSq1KvMeZOMpCHNQA.png" /></figure><p>Nous avons désormais de nombreux composants qui transmettent la fonction toggleNav dans leurs props pour leurs enfants, et ce dans l’unique finalité de la transmettre à OpenNavButton. Non seulement la complexité est assez grande, mais AppRouter et BusinessComponent n’ont pas du tout l’usage de toogleNav. Ils se contentent seulement de le transmettre sans vraiment savoir pourquoi. Travailler sur ces composants de façon indépendante (pour une autre raison que notre barre de navigation) va poser beaucoup d’interrogations sur ce sujet.</p><p>C’est alors le moment idéal de changer le code et y ajouter un reducer Redux afin d’exposer l’état de la barre de navigation ainsi qu’une action pour changer cet état. Lorsqu’au moins deux composants se contentent de <strong>transmettre des propriétés qu’on leur donne, sans en avoir un quelconque usage</strong>, il est alors temps de déplacer l’état à l’origine de ces props dans le store Redux.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/531/1*Y_0Vi3OkzrEjihjgmRqsMA.png" /><figcaption>Un retour à la simplicité 🎉</figcaption></figure><h3>Migration progressive vers Redux</h3><p>Pour finir, il ne faut pas oublier que cette méthode de décision n’est sûrement pas la seule et l’unique. Cependant, elle brille particulièrement à mes yeux comme stratégie de migration. En effet, quand on part d’une grosse application qui devient de plus en plus complexe à maintenir en terme de props à transmettre, on en revient à la situation pré-Redux. Pour une transition progressive, nous avons d’abord listé tous les composants ayant des props uniquement transmises à leurs enfants. En comptant le nombre de composant par propriété, nous avons pu <strong>prioriser les state et props à extraire vers notre store Redux</strong>. Cette façon de faire est très efficace pour maximiser l’impact des premières étapes de migration. Idéal dans un premier temps quand on sent qu’on ne va pas avoir le temps de tout migrer que se prévenir de futures difficultés est primordial.</p><p><em>Envie de faire du React avec nous, on recrute !</em></p><p><a href="https://jobs.captaincontrat.com/">https://jobs.captaincontrat.com/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=be9b7c9813b4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/captain-contrat-tech/when-to-transfer-redux-state-be9b7c9813b4">Le bon moment pour transférer un state dans Redux</a> was originally published in <a href="https://medium.com/captain-contrat-tech">Captain Contrat Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Quelques astuces simples pour créer une super ambiance dans votre équipe dev]]></title>
            <link>https://medium.com/captain-contrat-tech/quelques-astuces-simples-pour-cr%C3%A9er-une-super-ambiance-dans-votre-%C3%A9quipe-dev-5c5b644116d0?source=rss----838fc16b722a---4</link>
            <guid isPermaLink="false">https://medium.com/p/5c5b644116d0</guid>
            <category><![CDATA[responsibility]]></category>
            <category><![CDATA[happiness-at-work]]></category>
            <category><![CDATA[team]]></category>
            <category><![CDATA[rubber-ducking]]></category>
            <category><![CDATA[onboarding]]></category>
            <dc:creator><![CDATA[Amélie Certin]]></dc:creator>
            <pubDate>Fri, 15 Mar 2019 15:15:00 GMT</pubDate>
            <atom:updated>2019-03-15T18:34:51.675Z</atom:updated>
            <content:encoded><![CDATA[<p>Un dev ruby, c’est compliqué à recruter. Quand on le trouve, on a envie qu’il reste. On a aussi envie qu’il se donne à fond, qu’il s’investisse pour son équipe et pour la boîte. On veut pouvoir lui faire confiance, et qu’il ait confiance en nous. Et nous, on a envie d’arriver tous les matins sans craindre la journée à venir.</p><p>Toutes ces raisons incitent à instaurer une ambiance saine dans une équipe. De bonnes conditions de travail qui donnent envie de s’investir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bKje5m9B0U1MamVqRCBniQ.jpeg" /><figcaption>Des devs, plein de devs</figcaption></figure><h4>On attaque le code, pas le développeur</h4><p>La <a href="https://medium.com/captain-contrat-tech/code-review-best-practices-et-checklist-ba18c697ab21"><strong>code review</strong></a> est une étape importante et nécessaire de notre git flow durant laquelle notre code est relu par deux autres développeurs. Elle permet notamment de ne pas faire passer n’importe quoi en production.<em> </em>Après tout, Martin est tellement tête en l’air qu’il a forcément oublié de retirer des instructions de debug dans son code !</p><p>Non. Ce n’est définitivement pas le bon état d’esprit.</p><p>L’erreur est humaine comme on dit, et tout le monde peut faire des étourderies. La force de l’équipe c’est justement de pouvoir s’appuyer sur chaque membre, consulter les différents points de vue et augmenter ainsi la pertinence d’un bout de code. Ce n’est pas le développeur que nous jugeons, mais ce qu’il écrit et ce qui existe déjà dans la base de code. Nous pouvons toujours faire mieux, et il vaut mieux donner des pistes pour aller en ce sens plutôt que de se lamenter des compétences de son équipier.</p><p>Nous appliquons une autre règle en interne sur Github. Il faut deux validations pour pouvoir fusionner son code, donc il n’est pas utile d’être trop prohibitif. Plutôt que d’interdire une fusion après la relecture, nous laissons des <strong>commentaires</strong> pour demander des évolutions. Cela évite de voir apparaître une grosse icône rouge après chaque passage d’un relecteur, ce qui pourrait jouer sur le moral. Il n’y a rien de plus déprimant que d’essuyer une série de refus.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/771/0*vora6f-6A6MyvO8D" /><figcaption>Un petit commentaire encourageant</figcaption></figure><p>Nous appliquons l’interdiction seulement si le code s’apprête à être fusionné, et qu’une erreur vient d’être remarquée.</p><p>Il revient à l’auteur de la Pull Request l’honneur et le privilège de merger lui-même sa branche un fois que tous les voyants sont au vert.</p><h4>Une responsabilité partagée</h4><p>Il est trop simple de remettre la faute sur une seule et même personne. Alors que la porter à plusieurs épaules la rendrait moins lourde mais tout aussi importante.</p><p>L’étape de la code review nous permet de <strong>partager la responsabilité</strong> entre les développeurs. Si un problème survient sur la plateforme suite à la fusion d’une branche, alors ce n’est pas seulement la faute de celui qui l’a écrite ou celui qui a cliqué sur le bouton pour la merger. Deux autres développeurs sont passés par là, donc ils ne sont pas moins fautifs.</p><p>Il en va de même pour les mises en production. Si une action particulière doit être effectuée lors de la procédure, ça ne se devine pas ! Il faut que l’information soit renseignée quelque part. Et cela doit être fait par celui qui envoie sa branche sur le serveur de staging. Les relecteurs aussi peuvent le rappeler au développeur.</p><p>Chercher un fautif est une perte de temps et d’énergie et cela peut créer de la frustration dans l’équipe. Ce qui importe, ce sont les leçons que nous en tirons pour ne pas répéter l’erreur une seconde fois. Réaliser un <strong>post-mortem</strong> est une solution pour historiser l’incident et creuser le contexte du problème : <strong>pourquoi</strong> est ce que c’est arrivé (personne ne doit être visé), et qu’aurions nous pu faire pour l’éviter.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*w9_7ZaFiJhB_5Sac" /><figcaption>“C’est lui ! Il a tout cassé :O”</figcaption></figure><p>La responsabilité se manifeste encore d’une autre manière chez Captain. Notre particularité ? Nous sommes 10 développeurs et 1 QA, mais <strong>nous n’avons pas de CTO</strong>. Pas de manager technique ; notre supérieur direct est l’un des co-fondateurs qui joue principalement un rôle de coach. Notre équipe <strong>s’auto-gère</strong>, et la parole de chacun vaut autant que la parole des autres car nous prenons les décisions tous ensemble. Les tâches habituellement traitées par un CTO sont réparties entre les membres de l’équipe selon leur bon vouloir : participer à la définition des objectifs trimestriels, recruter, réaliser les perf reviews, formaliser un de nos process…</p><p>Au delà de responsabiliser un équipier, cela permet de <strong>l’engager </strong>et de le<strong> valoriser </strong>par une<strong> participation active à la vie d’équipe</strong>.</p><h4>Accompagner les nouveaux</h4><p>Accueillir un nouvel équipier prend du temps, qui s’étire en fonction de ses expériences passées. Il est en effet plus coûteux <a href="https://medium.com/captain-contrat-tech/accueillir-un-junior-3b64111367aa">d’onboarder un junior</a> qu’une personne plus expérimentée car elle aura besoin d’être plus encadrée.</p><p>La tolérance et la patience sont de mise à cette étape. Il y a des éléments à prendre en compte lors de son arrivée :</p><ol><li>Il ne produira pas de valeur tout de suite ;</li><li>La bande passante des autres sera en partie allouée à son onboarding ;</li><li>Il va devoir s’adapter à une nouvelle base de code, une nouvelle organisation, de nouveaux objectifs, potentiellement de nouveaux outils.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iai0D3oLpIWN80md" /></figure><p>L’arrivée d’un nouveau s’accompagne donc d’une baisse de productivité qu’il faudra anticiper. <strong>En abaissant l’engagement du prochain sprint</strong> notamment, dans le cas d’une méthodologie Scrum.</p><p>Mais il apporte avec lui un <strong>regard neuf</strong>, de quoi recycler l’air au sein de l’équipe. Certaines des briques de codes lui évoqueront une assiette de spaghettis sauce béchamel, quelques process lui sembleront bancals, ou il trouvera sans doute à la documentation un style très épuré.</p><p>C’est l’occasion de <strong>remettre les choses en question</strong>. Que faisait il dans son ancienne boîte ? Est ce que ça fonctionnerait mieux que ce notre méthodologie actuelle ? Comment pourrait-on transformer, adapter nos méthodes pour que tout le monde soit à l’aise, et donc augmenter notre productivité ?</p><h4>Ne pas avoir honte de demander de l’aide</h4><p>Il y a ces nouveaux tout timides qui n’osent pas déranger les développeurs plus anciens ou plus expérimentés pour demander de l’aide. Il y a aussi ces développeurs seniors qui coincent mais qui ressentent le besoin de justifier leur légitimité.</p><p>Ils vont bloquer sur un problème plus longtemps que nécessaire, alors que <strong>demander de l’aide </strong>et / ou<strong> faire du pair programming </strong>aurait pu les dé-coin-cer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ZelPnPQeZCpzThHs" /><figcaption>“Raconte-moi tout”</figcaption></figure><p>Oui, ça arrive à tout le monde de faire des erreurs d’inattention, et il n’y a pas de honte à ne pas comprendre quelque chose du premier coup. Le fait <a href="https://fr.wikipedia.org/wiki/M%C3%A9thode_du_canard_en_plastique">d’exposer son problème à quelqu’un</a>, en reprenant depuis le début, nous permet de voir les choses sous un <strong>nouvel angle</strong>. Très souvent, la solution arrive d’elle même avant même que le deuxième développeur n’ait eu le temps de dire quoi que ce soit.</p><p>Et au delà de n’importe quel étourderie, ce blocage, si ça se trouve, c’est une bizarrerie de l’application qui est connue de tous, mais qui n’a été documenté nulle part ! Et ça, ça ne se devine pas.</p><p>Alors sors de ta bulle, ravale ton amour propre, et sollicite les autres. Ils hésiteront moins eux aussi à te demander de l’aide en retour.</p><h4>Le mot de la fin</h4><p>Des petites choses simples peuvent être mises en place dans une équipe. Quelques défis rigolos, comme réussir à aligner 100 build verts sur notre outil d’Intégration Continue avec la promesse d’une bière à la clé. Des 1–1 entre équipiers, en sortant se balader une demie-heure régulièrement.</p><p>Dans une méthodologie Scrum, il ne faut pas oublier que l’équipe ne se limite pas aux développeurs. La team Scrum est la fusion entre cette équipe, et celle du Produit. S’il y a des bienfaits à maintenir une ambiance saine entre devs, il y en a d’autant plus à travailler sur cette symbiose Produit / Dev.</p><p><em>Si vous cherchez une équipe avec des process vertueux, rejoignez-nous !</em></p><p><a href="https://jobs.captaincontrat.com/">Captain Contrat recrute !</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5c5b644116d0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/captain-contrat-tech/quelques-astuces-simples-pour-cr%C3%A9er-une-super-ambiance-dans-votre-%C3%A9quipe-dev-5c5b644116d0">Quelques astuces simples pour créer une super ambiance dans votre équipe dev</a> was originally published in <a href="https://medium.com/captain-contrat-tech">Captain Contrat Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Réussir son premier job de développeur après un bootcamp]]></title>
            <link>https://medium.com/captain-contrat-tech/r%C3%A9ussir-son-premier-job-de-d%C3%A9veloppeur-apr%C3%A8s-un-bootcamp-c5547de647b7?source=rss----838fc16b722a---4</link>
            <guid isPermaLink="false">https://medium.com/p/c5547de647b7</guid>
            <category><![CDATA[le-wagon]]></category>
            <category><![CDATA[reconversion]]></category>
            <category><![CDATA[bootcamp]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[developer]]></category>
            <dc:creator><![CDATA[Thibaud Marcé]]></dc:creator>
            <pubDate>Wed, 13 Feb 2019 14:24:17 GMT</pubDate>
            <atom:updated>2019-03-18T14:16:48.290Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*29p_7ebC07uAf4ZojTddQA.jpeg" /><figcaption>Quand tu finis ta première Story — Charlie Chaplin ‘Modern Times’</figcaption></figure><p>Il y a deux ans, <strong>je ne savais pas coder</strong>, pourtant j’ai décroché un job de développeur il y a un an, en rejoignant Captain Contrat.</p><p>Comme de plus en plus de monde, j’ai découvert le plaisir de coder en faisant un <strong>bootcamp</strong>; c’est à ce moment là que mon <a href="https://medium.com/captain-contrat-tech/comment-jai-chang%C3%A9-de-carri%C3%A8re-pour-devenir-d%C3%A9veloppeur-5cacbf6275c6">projet de <strong>devenir développeur</strong></a> s’est dessiné.<br>Seulement voilà, lorsqu’on sort d’un bootcamp, l’écart peut être grand entre l’envie de devenir développeur et le fait d’en faire son métier.</p><p>Voici donc mon retour d’expérience et mes conseils afin de <strong>maximiser vos chances de réussir</strong> à trouver le job de développeur qui vous correspond et <strong>prendre du plaisir</strong> dans votre nouveau métier.</p><h3>Bien choisir son entreprise</h3><p>Il y a une pénurie de développeurs en France et dans le monde en général, c’est un fait, et si c’est une super <strong>opportunité</strong> pour trouver du travail malgré une faible expérience, cela peut également être un <strong>piège</strong>.</p><p>En effet qui dit peu d’expérience dit nécessité de <strong>monter en compétences</strong>, il est donc extrêmement important de trouver l’environnement de travail qui vous permettra d’y parvenir.<br>Trouver un job est facile, mais trouver un travail en accord avec <strong>ce dont vous avez réellement besoin et envie</strong> l’est beaucoup moins.<br>Il est donc essentiel de se poser la question de ce que vous recherchez et de vous donner les moyens de l’obtenir.</p><p>Lorsque j’ai commencé à chercher du travail après <a href="https://medium.com/captain-contrat-tech/comment-jai-chang%C3%A9-de-carri%C3%A8re-pour-devenir-d%C3%A9veloppeur-5cacbf6275c6">le Wagon</a>, mon <strong>cahier des charges</strong> était le suivant :</p><ul><li>Intégrer une équipe suffisamment grande pour qu’elle ait de la bande passante me permettant de <strong>progresser</strong></li><li>Rester sur la techno que j’ai apprise pour avoir des <strong>bases plus solides</strong> (en l’occurrence Ruby on Rails)</li><li>Éviter les agences pour travailler sur un seul produit et l’améliorer en suivant de <strong>bonnes pratiques</strong></li><li>Intégrer une <strong>boite en laquelle je crois</strong> grâce au produit qu’elle offre mais également grâce à sa <strong>vision d’entreprise</strong></li></ul><p>J’ai finalement décidé de rejoindre <strong>Captain Contrat</strong> car ce qui m’a été présenté correspondait parfaitement à ce que je cherchais :</p><ul><li>Une équipe de 6 devs avec 2 expérimentés pour 1 junior <a href="https://medium.com/captain-contrat-tech/accueillir-un-junior-3b64111367aa"><strong>qui restent à l’écoute</strong></a> pour nous aider et nous permettre de monter en compétences rapidement.</li><li>Une stack Rails pour ne pas être dépaysé et une partie React que je voulais apprendre</li><li>Un workflow avec de la <a href="https://medium.com/captain-contrat-tech/code-review-best-practices-et-checklist-ba18c697ab21">code review</a> pour shipper du <strong>code propre</strong> et toujours meilleur</li><li>Une boîte qui aide les entrepreneurs français avec une <strong>vraie culture d’entreprise</strong> et des <strong>valeurs</strong> que je partage</li></ul><h3>Bien s’intégrer à l’équipe</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*k8vKDoiugf1YVIIJHnCkzA.jpeg" /><figcaption>Quand tu n’est pas dans une team qui te correspond — Charlie Chaplin ‘Modern Times’</figcaption></figure><p>Une fois l’entreprise trouvée, <strong>le plus difficile commence</strong>.</p><p>Quand on arrive au sein d’une équipe de développeurs expérimentés en sortant d’un bootcamp, le <strong>syndrome de l’imposteur</strong> peut vite arriver, mais il faut relativiser : quand on fait une formation en <strong>trois mois</strong> il y a beaucoup de choses que l’on ne peut pas apprendre.<br>On maîtrise l’essentiel pour réussir à coder une app qui tienne la route à la fin, mais lorsque l’on devient développeur il y a <strong>beaucoup plus de choses à découvrir </strong>comme écrire des tests, maîtriser son terminal, coder dans une app bien plus complexe que ce qu’on a connu etc…</p><p>Tout cela fait qu’on peut se prendre une petite claque et <strong>se sentir assez nul au début</strong>, c’est une étape normale qu’il faut savoir accepter surtout lorsqu’on se reconvertit.<br>On peut alors avoir l’impression de <strong>repartir à la case départ</strong> et cela demande de faire preuve d’humilité et d’avoir très <strong>envie de progresser</strong>, et c’est là que le choix de l’entreprise et de l’équipe jouera un rôle essentiel.</p><p>Personnellement, j’ai eu la chance d’intégrer une équipe qui a été extrêmement <strong>bienveillante</strong> et qui a pris le temps de m’accompagner, de me former et dont <strong>l’organisation m’a permis de progresser vite</strong>.<br>Aujourd’hui j’ai encore plein de choses à apprendre mais si je regarde en arrière, Captain Contrat m’a permis d’atteindre un niveau qui n’a plus rien à voir avec celui que j’avais en sortant du Wagon.</p><h3>Derniers conseils</h3><h4>Ne surtout pas hésiter à appeler à l’aide</h4><p>Quand on arrive dans une équipe, on veut faire ses preuves et <strong>se prouver qu’on peut y arriver seul</strong>, seulement cela peut prendre beaucoup de temps et donc en faire perdre à l’équipe. Il vaut mieux demander de l’aide <strong>rapidement</strong> pour éviter de rester bloqué trop longtemps.<br>En plus cela permet de <strong>progresser plus vite</strong> et le pair programming est une super occasion d’avoir des tips pour être plus efficace.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DtT7Hv1fJtoSAg6zWBt42g.jpeg" /><figcaption>Quand tu n’as pas demandé d’aide — Charlie Chaplin ‘Modern Times’</figcaption></figure><h4>Lever le nez de son code</h4><p>Quand on fait partie d’une équipe de devs, on est intégré dans un process où on ne se contente <strong>pas uniquement de coder</strong>. Souvent il faut aussi faire de la <a href="https://medium.com/captain-contrat-tech/code-review-best-practices-et-checklist-ba18c697ab21">code review</a> par exemple et cela veut dire <strong>prendre le temps nécessaire</strong> pour ne pas ralentir les autres en ne se préoccupant que de son travail. En plus faire de la code review est un super moyen de progresser en lisant le code de devs plus expérimentés. <strong>Restez donc attentifs</strong> à ce qui se passe à côté !</p><h4>Prendre du plaisir</h4><p>C’est essentiel car on a la chance de faire un métier où l’on apprend chaque jour de nouvelles choses et où les <strong>challenges</strong> ne manquent pas, il est donc difficile de progresser si on ne s’amuse pas !</p><p><em>Si ça vous tente de rejoindre une entreprise où on apprend chaque jour avec plaisir, rejoignez nous !</em></p><p><a href="https://jobs.captaincontrat.com/">Captain Contrat recrute !</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c5547de647b7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/captain-contrat-tech/r%C3%A9ussir-son-premier-job-de-d%C3%A9veloppeur-apr%C3%A8s-un-bootcamp-c5547de647b7">Réussir son premier job de développeur après un bootcamp</a> was originally published in <a href="https://medium.com/captain-contrat-tech">Captain Contrat Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Comment exécuter des requêtes Arel]]></title>
            <link>https://medium.com/captain-contrat-tech/comment-executer-des-requetes-arel-4c31b7c9d2e?source=rss----838fc16b722a---4</link>
            <guid isPermaLink="false">https://medium.com/p/4c31b7c9d2e</guid>
            <category><![CDATA[ruby-on-rails]]></category>
            <category><![CDATA[arel]]></category>
            <category><![CDATA[sql]]></category>
            <dc:creator><![CDATA[Paul-Yves Lucas]]></dc:creator>
            <pubDate>Fri, 25 Jan 2019 10:15:07 GMT</pubDate>
            <atom:updated>2019-01-25T11:12:24.033Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<p>Parfois, Active Record ne permet pas d’exprimer ce qu’on veut. De nombreuses sources (comme <a href="https://blog.codeship.com/creating-advanced-active-record-db-queries-arel/">cet article</a> ou <a href="https://www.youtube.com/watch?v=ShPAxNcLm3o">cette conférence</a>) conseillent alors d’utiliser <a href="https://github.com/rails/arel">Arel</a>, mais en m’y mettant, <strong>je n’ai trouvé aucun guide explicitant comment exécuter les requêtes construites avec Arel</strong>. Ce petit article va détailler deux façons d’exécuter des requêtes construites avec Arel. Il présuppose une lecture préalable de l’utilisation d’Arel.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*H2TdhGbkf7jV5zHc6s5n0Q.jpeg" /><figcaption>Mon chat en train de tester Arel</figcaption></figure><h3>Avec Active Record</h3><p>Active Record se repose en interne sur Arel, et la façon la plus classique d’<strong>utiliser Arel est au sein d’Active Record</strong>. Pour des requêtes simples dont le résultat se traduit en liste d’instances de models, on obtiendra ainsi directement les mêmes type de résultats qu’avec Active Record.</p><p>Ainsi, si on a un model Cat, on peut faire :</p><pre>cat_arel = Cat.arel_table<br>soft_fur = Cat.where(cat_arel[fur_quality].gt(5))</pre><p>La plupart du temps, on utilise ça quand la requête Arel se résume à une (ou plusieurs) conditions de type where.</p><h3>Par l’exécution d’une requête SQL</h3><p>Parfois, on souhaite optimiser nos requêtes de façon à ce que le résultat ne corresponde à aucun model. Dans ce genre de cas, il faut se rabattre sur l’<strong>exécution directe de la requête sql</strong>. Pour ce faire, il suffit de convertir la requête Arel en sql avec la méthode to_sql et l’exécuter.</p><p>ActiveRecord::Base.connection.exec_query(my_query.to_sql)</p><p>Les tuples issus de la requête sont présentés sous forme d’itérables de hashes, avec pour clé les colonnes nommées dans la requêtes SQL. Il est donc conseillé d’<strong>utiliser des alias pour ces colonnes</strong> de façon à faciliter la manipulation future du résultat.</p><p>Si on veut avoir par exemple à la fois le minimum et le maximum d’une colonne au sein d’une même requête, cela ressemble à :</p><pre>cat_arel = Cat.arel_table<br>query = cat_arel.project(cat_arel[:price].minimum.as(‘min’), cat_arel[:price].maximum.as(‘max’)).to_sql</pre><pre>records = ActiveRecord::Base.connection.exec_query query</pre><pre>puts records.first</pre><pre>&gt;&gt;&gt; {“min”=&gt;0.0, “max”=&gt;72.0}</pre><p>Si je n’avais pas mis d’alias min et max, le hash aurait valu {“MIN(`cats`.`price`)”=&gt;0.0, “MAX(`cats`.`price`)”=&gt;72.0}, ce qui n’est vraiment pas pratique. Si la requête renvoie plusieurs lignes, il suffit d’itérer sur le résultat d’exec_query.</p><h3>Conclusion</h3><p>Arel permet de réaliser des requêtes plus complexes qu’Active Record. Si le résultat reste traitable en tant que model, c’est votre jour de chance et il suffit d’<strong>insérer des expressions Arel au sein d’une requête Active Record classique</strong>. Si on fait quelque chose de plus complexe qui ne renvoie pas de models, il faut alors<strong> exécuter directement la requête sql préparée par Arel</strong>.</p><p><em>Envie de travailler avec nous, on recrute?</em></p><p><a href="https://jobs.captaincontrat.com/">https://jobs.captaincontrat.com/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4c31b7c9d2e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/captain-contrat-tech/comment-executer-des-requetes-arel-4c31b7c9d2e">Comment exécuter des requêtes Arel</a> was originally published in <a href="https://medium.com/captain-contrat-tech">Captain Contrat Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>