<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Olivier Maléa</title>
    <description>The latest articles on DEV Community by Olivier Maléa (@oliviermalea).</description>
    <link>https://dev.to/oliviermalea</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F678924%2F6f464ab8-6cb3-41c1-89cb-2522a2758ddf.png</url>
      <title>DEV Community: Olivier Maléa</title>
      <link>https://dev.to/oliviermalea</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oliviermalea"/>
    <language>en</language>
    <item>
      <title>🏆Quick-win : Fix erreur NETSDK1045 avec .net 7 preview</title>
      <dc:creator>Olivier Maléa</dc:creator>
      <pubDate>Tue, 30 Aug 2022 11:15:00 +0000</pubDate>
      <link>https://dev.to/oliviermalea/quick-win-fix-erreur-netsdk1045-avec-net-7-preview-55j8</link>
      <guid>https://dev.to/oliviermalea/quick-win-fix-erreur-netsdk1045-avec-net-7-preview-55j8</guid>
      <description>&lt;h2&gt;
  
  
  Comment résoudre l'erreur : &lt;em&gt;error NETSDK1045 The current .NET SDK does not support targeting .NET 7.0.&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Dans un pipeline Azure DevOps, en utilisant le sdk .net6 dans une task de CI, aucun problème, tout fonctionne sans accroc, jusque là rien d'anormal.&lt;br&gt;
L'extrait ci-dessous présente une task simple, issue d'un fichier yaml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;UseDotNet@2&lt;/span&gt;
  &lt;span class="na"&gt;displayName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;.NET&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Core&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sdk'&lt;/span&gt;
  &lt;span class="na"&gt;inputs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;packageType&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sdk&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;6.x&lt;/span&gt;
    &lt;span class="na"&gt;installationPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$(Agent.ToolsDirectory)/dotnet&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lorsque vous utilisez le &lt;strong&gt;sdk .net7&lt;/strong&gt; (à l'heure actuelle en état de &lt;strong&gt;preview&lt;/strong&gt;), celui-ci causera une belle erreur :&lt;br&gt;
&lt;em&gt;error NETSDK1045: The current .NET SDK does not support targeting .NET 7.0.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pour résoudre ce problème, &lt;strong&gt;c'est très simple&lt;/strong&gt;: ajoutez le paramètre &lt;em&gt;includePreviewVersions: true&lt;/em&gt;, comme détaillé ci-dessous:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;UseDotNet@2&lt;/span&gt;
  &lt;span class="na"&gt;displayName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;.NET&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Core&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sdk'&lt;/span&gt;
  &lt;span class="na"&gt;inputs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;packageType&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sdk&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;7.x&lt;/span&gt;
    &lt;span class="na"&gt;includePreviewVersions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;installationPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$(Agent.ToolsDirectory)/dotnet&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;C'est gagné !&lt;/p&gt;

</description>
      <category>net</category>
      <category>devops</category>
      <category>errors</category>
      <category>preview</category>
    </item>
    <item>
      <title>Pensez produit, pensez Vertical !</title>
      <dc:creator>Olivier Maléa</dc:creator>
      <pubDate>Wed, 24 Aug 2022 09:06:00 +0000</pubDate>
      <link>https://dev.to/oliviermalea/pensez-produit-pensez-vertical-4dda</link>
      <guid>https://dev.to/oliviermalea/pensez-produit-pensez-vertical-4dda</guid>
      <description>&lt;p&gt;L'informatique, dans une entreprise ou une structure d'activité(s) dont le cœur de métier n'est, justement, pas l'informatique, joue traditionnellement un rôle de support.&lt;br&gt;
Bien qu'en constante augmentation, la place de l'IT dans l'entreprise se limite souvent à la réalisation de projets, ceux-ci n’affectant pas l’organisation en place puisqu'étant par essence ponctuels.&lt;br&gt;
Cependant, les méthodes de gestion de projet, la culture projet, n'ont cessés d'évoluer, à tel point qu'il devient stratégique d'avoir une entité dédiée au sein de l'entreprise, et donc un fonctionnement plus adéquat.&lt;/p&gt;

&lt;p&gt;Dans cet article, je vais présenter les principes verticaux permettant de fluidifier l'activité d'un SI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Projet? Produit? On fait quoi chef ?
&lt;/h2&gt;

&lt;p&gt;Bon déjà, commençons par définir ces 2 notions, cela permettra d'y voir un peu plus clair et d'avoir une base solide.&lt;/p&gt;

&lt;h3&gt;
  
  
  A ma gauche : le projet…
&lt;/h3&gt;

&lt;p&gt;Un projet est un ensemble finalisé d’activités et d’actions, réalisées par une équipe dédiée sur une plage de temps définie, se traduisant par un ou des livrables.&lt;br&gt;
ITIL4 définit les projets comme &lt;strong&gt;&lt;em&gt;l’un des moyens d’introduire des changements significatifs au sein de l’organisation. Ils peuvent être définis comme structures temporaires créées dans le but de livrer un ou plusieurs livrables (ou produits) selon le dossier business convenu&lt;/em&gt;.&lt;/strong&gt;&lt;br&gt;
Un projet se caractérise donc par un début et une fin, est par essence unique et doit aboutir à un résultat tangible, mesurable et appréciable.&lt;br&gt;
Je ne m'attarde pas sur la constitution des équipes, la nécessité d'avoir une équipe dédiée (parfois plusieurs) à chaque projet et l'organisation autour d'un chef de projet, ce n'est pas le propos de cet article.&lt;/p&gt;

&lt;h3&gt;
  
  
  … Et tout autour, le produit
&lt;/h3&gt;

&lt;p&gt;Sur le plan marketing, un produit est un bien ou un service vendu par une organisation afin de satisfaire un besoin. Un produit peut être physique ou immatériel.&lt;br&gt;
ITIL4 définit un produit comme la &lt;strong&gt;&lt;em&gt;configuration des ressources d'une organisation conçue pour offrir de la valeur à un consommateur.&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Un produit ne possède ainsi pas de notion de temporalité mais repose sur la notion de valeur ajoutée, son utilité est sa raison d'être.&lt;/p&gt;

&lt;h2&gt;
  
  
  Et où tout cela nous mène ?
&lt;/h2&gt;

&lt;p&gt;En gros, le monde de l'IT est assez traditionnellement orienté projets, c'en est presque devenu un gros mot.&lt;br&gt;
Le développement logiciel est souvent un acte ponctuel, avec un début et une fin ainsi qu'un livrable.&lt;br&gt;
Ok ! Cela colle avec les caractéristiques précédemment définies d'un projet, sauf que … &lt;br&gt;
Une fois livré on arrête tout ? On fait quoi des équipes ? On laisse notre code vivre sa vie tout seul dans son espace dédié, un genre de retour à la nature en somme ?&lt;br&gt;
Ah ça y est je l'ai : on lance un projet pour le maintenir et le faire évoluer ou - attendez c'est génial ! - plusieurs projets  chainés pour le faire évoluer et le maintenir entre 2 - on tient un truc c'est sûr -.&lt;br&gt;
En fait, c'est plus simple.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Attends, toi là bas, qui a dit d'un air narquois mais très confiant, on laisse le support et les opérationnels se débrouiller, tu sors.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A la base, les organisations développent des softs dans un but précis il me semble : satisfaire un besoin, et accessoirement en tirer un usufruit (gagner de l'argent plus trivialement).&lt;br&gt;
On y arrive, un logiciel &lt;strong&gt;PEUT&lt;/strong&gt; donc être considéré comme un produit à part entière, il possède certes un cycle de vie mais peut aussi être considéré comme un élément intemporel puisque sa durée d'exploitation est très difficilement appréciable.&lt;/p&gt;

&lt;p&gt;Ceci étant dit, on arrive doucement vers le principal problème induit par une organisation projet : le cas par cas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Horizontal Limit
&lt;/h2&gt;

&lt;p&gt;En effet, nous avons précédemment vu qu'un projet suppose une équipe dédiée, comme il s'agit d'un processus ponctuel, il est logique de monter une équipe pour ce besoin. &lt;br&gt;
Cette équipe sera d'ailleurs présente durant toute la phase de création de la solution et sera reventilée la plupart du temps une fois la solution livrée.&lt;br&gt;
Au cours d'une étude publiée sur &lt;a href="https://www.researchgate.net/publication/298902672_Microservices_Architecture_Enables_DevOps_an_Experience_Report_on_Migration_to_a_Cloud-Native_Architecture#pf7"&gt;researchgate&lt;/a&gt;, l'&lt;strong&gt;IEEE Computer Society&lt;/strong&gt; précise que &lt;em&gt;les méthodes logicielles traditionnelles encouragent la division horizontale des membres du projet en équipes fonctionnellement séparées. &lt;br&gt;
Cette division engendre la création d'équipes de développement, d'assurance qualité et d'opérationnels, parfois d'équipes prenant en charge les spécifications.&lt;br&gt;
Cette séparation augmente la durée du cycle de développement en raison des transitions nécessaires entre les différentes équipes.&lt;/em&gt; &lt;br&gt;
&lt;strong&gt;Le bon vieux principe de silotage.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En résumé : on va monter une équipe pour concevoir et confectionner une solution technique répondant à un besoin, on peut donc parler de &lt;strong&gt;produit&lt;/strong&gt;. On va sûrement devoir monter d'autres équipes pour valider les livrables et gérer l'exploitation. Pour que le projet réussisse, toutes les étapes doivent être complémentaires et apporter une valeur ajoutée.&lt;/p&gt;

&lt;p&gt;Plusieurs problèmes apparaissent d'emblée : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chaque équipe aura forcément son mode de fonctionnement, spécifique à son cadre de compétences, et donc ses outils et processus dédiés;&lt;/li&gt;
&lt;li&gt;Chaque équipe limite sa responsabilité et réalise ses tâches en fonction de son cadre technique;&lt;/li&gt;
&lt;li&gt;La communication entre les équipes devient complexe;&lt;/li&gt;
&lt;li&gt;Il devient difficile de gérer le transfert de connaissances fonctionnelles et la montée en compétences techniques.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bref, il va falloir fournir beaucoup d'efforts pour assurer une coordination efficace et cela aura forcément un coût, en plus du fait qu'on aura tendance à se couper d'une forme de fluidité.&lt;/p&gt;

&lt;p&gt;Levons un doute : je ne prétends pas que l'organisation projet est à jeter à la poubelle, elle s'avère toujours efficace et pertinente lorsque le sujet répond aux critères précédemment énoncés d'un projet.&lt;/p&gt;

&lt;p&gt;Il est temps de voir quels seraient les avantages d'une organisation orientée produit, ou même catalogue de produits.&lt;/p&gt;

&lt;h2&gt;
  
  
  C'est là que tout se produit
&lt;/h2&gt;

&lt;p&gt;Commençons par une maxime de l'armée US, les 6 p : &lt;strong&gt;&lt;em&gt;Une Préparation &lt;del&gt;Parfaite&lt;/del&gt; Préalable Permet de Parer aux Piètres Performances&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En adoptant une approche orientée produit, notre organisation va mettre en place et coordonner plusieurs choses afin de préparer un lancement réussi : la qualité du produit, l'écosystème technique, les outils favorisant la vélocité, préparer le delivery et l'intégrer dans le cycle de développement, définir la norme technique, et au final, rentrer dans un cercle vertueux permettant de s'améliorer continuellement.&lt;br&gt;
L'équipe projet devient une équipe organisée verticalement: terminée la succession de rôles, en reposant sur les principes de &lt;strong&gt;DevOps&lt;/strong&gt;, permettant justement de casser les frontières, notre équipe produit va couvrir de multiples compétences, on parle de &lt;strong&gt;Crossfunctional Team&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy08ue3aiy7jlz1nwatgc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy08ue3aiy7jlz1nwatgc.png" alt="Image description" width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Stream-aligned teams
&lt;/h3&gt;

&lt;p&gt;Dans leur ouvrage intitulé &lt;a href="https://www.amazon.fr/Team-Topologies-Organizing-Business-Technology/dp/1942788819/ref=tmm_pap_swatch_0?_encoding=UTF8&amp;amp;qid=1659786511&amp;amp;sr=8-5"&gt;Team Topologies&lt;/a&gt;, Matthew Skelton et Manuel Pais définissent ce type d'équipe en tant que &lt;strong&gt;&lt;em&gt;Stream-Aligned Teams&lt;/em&gt;&lt;/strong&gt; et l'expliquent comme suit :&lt;br&gt;
Il s'agit d'&lt;em&gt;une équipe alignée sur un flux de travail unique et précieux ; il peut s'agir d'un seul produit ou service, d'un seul ensemble de fonctionnalités, d'un seul parcours utilisateur ou d'un seul utilisateur. De plus, l'équipe est habilitée à créer et à fournir une valeur client ou utilisateur aussi rapidement, en toute sécurité et de manière indépendante que possible, sans nécessiter de transfert à d'autres équipes pour effectuer certaines parties du travail.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgbj8tyxeayuajw03lfdi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgbj8tyxeayuajw03lfdi.png" alt="Image description" width="800" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture en continue et construction d'équipes
&lt;/h3&gt;

&lt;p&gt;Pour aller plus loin, le 1er principe de l'&lt;a href="https://www.amazon.fr/Continuous-Architecture-Practice-Software-Agility/dp/0136523560/ref=sr_1_3"&gt;architecture en continue&lt;/a&gt; est explicite : &lt;strong&gt;Architecturer des produits&lt;/strong&gt; : &lt;em&gt;l'architecture des produits est plus efficace que la simple conception de solutions ponctuelles aux projets et concentre l'équipe sur ses clients.&lt;/em&gt; &lt;br&gt;
Il s'agit donc d'évoluer depuis une gestion de projets vers une gestion de produits.&lt;br&gt;
D'ailleurs, cela va paraitre contre intuitif, mais le 6ème principe de l'&lt;a href="https://www.amazon.fr/Continuous-Architecture-Practice-Software-Agility/dp/0136523560/ref=sr_1_3"&gt;architecture en continue&lt;/a&gt; suppose de &lt;strong&gt;modéliser l'organisation des équipes après la conception du système à mettre en place&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0cqiduzgnckguy774dsz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0cqiduzgnckguy774dsz.png" alt="Image description" width="800" height="488"&gt;&lt;/a&gt;&lt;br&gt;
En effet, une fois la phase d'idéation du produit finie, c'est à dire le moment où on réfléchit et conçoit l'idée même du produit, la phase de définition du produit va permettre de déterminer les exigences fonctionnelles et les exigences non fonctionnelles, en architecture continue on parle de &lt;strong&gt;&lt;em&gt;Quality attributes&lt;/em&gt;&lt;/strong&gt;.&lt;br&gt;
Les attributs de qualité sont : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adéquation fonctionnelle;&lt;/li&gt;
&lt;li&gt;Efficacité des performances;&lt;/li&gt;
&lt;li&gt;Compatibilité;&lt;/li&gt;
&lt;li&gt;Fiabilité;&lt;/li&gt;
&lt;li&gt;Convivialité;&lt;/li&gt;
&lt;li&gt;Sécurité;&lt;/li&gt;
&lt;li&gt;Maintenabilité;&lt;/li&gt;
&lt;li&gt;Portabilité;&lt;/li&gt;
&lt;li&gt;Robustesse;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;J'en oublie forcément …&lt;/p&gt;

&lt;p&gt;Ces derniers, une fois triés et priorisés vont driver la conception du système, c'est à partir de là qu'on pourra définir les équipes puisqu'on sera désormais capable de cartographier le spectre de compétences nécessaires à la confection de notre produit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Valeur ajoutée d'une équipe produit
&lt;/h2&gt;

&lt;p&gt;De fait, on va avoir tendance à créer des synergies dans l'équipe, avoir une méthode de travail fluide et sans à coups.&lt;br&gt;
Cela aura pour effet de concentrer les efforts vers un but commun, compris de la même manière par tous les membres de l'équipe, et non pas orienté compétences et objectifs individuels.&lt;br&gt;
Plus pragmatiquement, ce changement de paradigme va permettre de nous rapprocher de ce qui produit la valeur, de considérer les éléments à construire dans leur intégralité et non pas simplement comme des features ou des fonctions à développer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq685xpz7vyx5xit8gmvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq685xpz7vyx5xit8gmvy.png" alt="Image description" width="311" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On intègre ainsi le concept de &lt;a href="https://fr.wikipedia.org/wiki/Value_stream_mapping"&gt;Value Stream Mapping&lt;/a&gt; provenant de Lean, permettant d'effectuer une cartographie de &lt;em&gt;toutes les étapes à valeur ajoutée et sans valeur ajoutée qui amènent un produit d'un état initial à un état final&lt;/em&gt;, et donc de prioriser l'effort.&lt;/p&gt;

&lt;p&gt;De même, on a tendance à mettre en place des outils prenant en charge le fonctionnement de manière plus globale et permettant d'éviter la dispersion.&lt;br&gt;
En termes de résultat, cette organisation favorise la vélocité car la livraison et la validation de contenu se font au plus tôt et en continue, les boucles de rétroaction sont plus efficaces et l'automatisation des process (build, test, provisioning d'environnement, configuration, déploiement, monitoring, ...)  est rendue possible car intégrée directement dans la conception du produit.&lt;/p&gt;

&lt;p&gt;Une précision pour ce dernier point : les environnements mis en place font partie intégrante du produit et doivent être pensés, développés et mis à disposition par l'équipe elle-même le plus tôt possible. &lt;/p&gt;

&lt;p&gt;Sur le long terme, on pourra même orienter notre organisation vers des pratiques type &lt;strong&gt;ProductOps&lt;/strong&gt;, mettant le client au cœur des débats et permettant de collecter des informations utiles au plus tôt et de manière continue.&lt;/p&gt;

&lt;p&gt;Finalement, ce qui nous intéresse est &lt;strong&gt;la mise en place de processus concrets&lt;/strong&gt; favorisant :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;la détermination, la priorisation et le développement des "flux de valeur" fournissant &lt;strong&gt;un service maximisé à l'utilisateur&lt;/strong&gt;, et donc &lt;strong&gt;une augmentation de la qualité perçue&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;la &lt;strong&gt;diminution de la charge cognitive&lt;/strong&gt; pour l'équipe en place car les spécifications ont tendance à être exprimées de manière plus claire et plus directe et sont englobées dans un tout cohérent;&lt;/li&gt;
&lt;li&gt;un gain en modularité, flexibilité et indépendance, en effet &lt;strong&gt;l'équipe se concentre sur la production de valeurs et l'architecture est totalement tournée vers le produit&lt;/strong&gt; plutôt que le reflet d'une organisation, comme prédit par la &lt;a href="https://fr.wikipedia.org/wiki/Loi_de_Conway#cite_note-8"&gt;loi de Conway&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;une forte capacité à revenir sur les éléments pauvres en valeur ajoutée ou sur les erreurs (principe de &lt;em&gt;fail fast&lt;/em&gt;), ou intégrer au plus tôt les retours utilisateurs;&lt;/li&gt;
&lt;li&gt;la suppression des silos de compétences et &lt;strong&gt;la promotion d'un travail plus collaboratif&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;une &lt;strong&gt;accélération du Time-To-Market&lt;/strong&gt; significative.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  J'ai glissé chef
&lt;/h2&gt;

&lt;p&gt;Comme il faut bien conclure, je dirais simplement que le sujet est loin d'être nouveau,  &lt;a href="https://www.linkedin.com/in/cagan/"&gt;Marty Cagan&lt;/a&gt; en parle d'ailleurs dans ses deux livres Inspired et Empowered.&lt;br&gt;
Evidemment, ces principes ne sont pas applicables systématiquement, il est important de bien comprendre les enjeux et les apports sous-jacents ainsi que les modifications structurelles qu'ils supposent, autant que le changement de culture induit.&lt;br&gt;
Vu l'intérêt stratégique que peuvent avoir les principes de verticalité, des articles plus spécifiques pourraient bien suivre celui-ci, très généraliste, alors &lt;strong&gt;stay tuned !&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>french</category>
      <category>architecture</category>
      <category>devops</category>
      <category>it</category>
    </item>
    <item>
      <title>Retour d'expérience : 🚀comment j'ai "révolutionné" un SI</title>
      <dc:creator>Olivier Maléa</dc:creator>
      <pubDate>Sun, 21 Nov 2021 14:30:00 +0000</pubDate>
      <link>https://dev.to/oliviermalea/retour-dexperience-comment-jai-revolutionne-un-si-3ela</link>
      <guid>https://dev.to/oliviermalea/retour-dexperience-comment-jai-revolutionne-un-si-3ela</guid>
      <description>&lt;p&gt;Sous ce titre quelque peu accrocheur se cache en réalité un projet ambitieux de longue haleine et complexe assorti de beaucoup de décisions stratégiques !&lt;/p&gt;

&lt;p&gt;Cet article est l'occasion de décrire une situation, qui à mon sens, n'est pas unique ou isolée, ainsi que les solutions possibles et les transformations à prévoir.&lt;/p&gt;

&lt;p&gt;Je vais m'efforcer d'être le moins technique possible, d'autres articles suivront pour ceux qui en sont friands 😊.&lt;/p&gt;

&lt;h2&gt;
  
  
  Au début il y avait le contexte
&lt;/h2&gt;

&lt;p&gt;J'ai été sollicité par une entreprise dont l'activité n'est pas l'informatique, sur mon expérience d'architecte logiciel, pour mettre en place un nouveau socle technique afin de moderniser plusieurs éléments de son écosystème logiciel.&lt;/p&gt;

&lt;p&gt;J'ai dû appréhender un passif de plus de 10 ans, beaucoup de petites applications fonctionnant de manière isolée, plusieurs outils web dédiés à la gestion de l'activité métier. &lt;br&gt;
L'entreprise avait la culture du &lt;strong&gt;PGI&lt;/strong&gt; (&lt;em&gt;Progiciel de Gestion Intégré&lt;/em&gt; ou &lt;strong&gt;ERP&lt;/strong&gt; en Anglais) de ce fait, tout l'applicatif en place était lié par un tronc commun: &lt;strong&gt;une base de données monolithique&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Les différentes applications, des sites web, avaient un autre tronc commun: les langages tournaient tous autour du &lt;strong&gt;.net&lt;/strong&gt;, ce qui m'a immédiatement intéressé puisqu'il s'agit de ma spécialité, surtout le .Net Core.&lt;/p&gt;

&lt;h2&gt;
  
  
  Puis vinrent les problèmes
&lt;/h2&gt;

&lt;p&gt;Et quels étaient les problèmes ?&lt;/p&gt;

&lt;p&gt;Beaucoup !&lt;/p&gt;

&lt;p&gt;Mais encore ?&lt;/p&gt;

&lt;p&gt;Eh bien puisqu'il faut commencer par quelque chose, je dirais en premier le facteur humain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Le facteur humain
&lt;/h3&gt;

&lt;p&gt;L'équipe était très (trop !) petite: une &lt;a href="https://www.theguardian.com/technology/2018/apr/24/the-two-pizza-rule-and-the-secret-of-amazons-success"&gt;&lt;strong&gt;2-pizza team&lt;/strong&gt;&lt;/a&gt; 🍕🍕 … pour l'ensemble de l'écosystème.&lt;/p&gt;

&lt;p&gt;Pour rappel, le concept de &lt;strong&gt;2-pizza team&lt;/strong&gt; est l'émanation de &lt;strong&gt;Jeff Bezos&lt;/strong&gt;, CEO d'Amazon, affirmant que &lt;em&gt;la taille idéale d'une équipe correspond au nombre de personnes que l'on peut nourrir avec 2 pizzas&lt;/em&gt;, soit entre 5 et 10 personnes.&lt;/p&gt;

&lt;p&gt;Bon, cette donnée est relative et dépend tout de même de l'appétit des protagonistes mais passons …&lt;/p&gt;

&lt;p&gt;L'équipe était organisée en silos techniques:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Les techniciens IT, en charge des infrastructures et du réseau ;&lt;/li&gt;
&lt;li&gt;Les développeurs en charge de … dois-je vraiment préciser ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sur le plan opérationnel, l'&lt;strong&gt;empirisme&lt;/strong&gt; était la règle: tout se faisait en réaction plutôt qu'en prévision.&lt;/p&gt;

&lt;p&gt;En effet, les demandes provenant des utilisateurs étaient captées par des experts métiers officiant en tant que support, externes aux équipes informatiques, ce qui induisait une forme d'urgence systémique puisque la majorité de la valeur produite ne consistait qu'au règlement des problèmes rencontrés.&lt;/p&gt;

&lt;p&gt;Le fait que chaque &lt;em&gt;pôle de compétences&lt;/em&gt; travaillait en &lt;strong&gt;silo&lt;/strong&gt; ne facilitait d'ailleurs pas la communication et l'organisation était analogue: fermée, compliquée et incapable d'évoluer.&lt;/p&gt;

&lt;h3&gt;
  
  
  L'organisation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Le fonctionnement en silo&lt;/strong&gt; est le fait que chaque équipe (ou département, ou même service) exerce son activité, relative à sa spécialité, sans se soucier de l'activité des autres.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FcIChBPL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8z4l6gjh2nzjxosv3a52.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FcIChBPL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8z4l6gjh2nzjxosv3a52.jpg" alt="silos" width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pour aller à l'essentiel, le principe de silos, s'il permet de bien délimiter les &lt;strong&gt;compétences&lt;/strong&gt; et donc (logiquement ?) les &lt;strong&gt;responsabilités&lt;/strong&gt; de chacun, n'est pas réputé pour ses forces en matière de communication, de synergies entre les équipes et de capacité d'adaptation sur le long terme.&lt;/p&gt;

&lt;p&gt;Sur le plan de la méthodologie en place, Il n'y en avait pas forcément: la production était simplement portée par &lt;strong&gt;le besoin «le plus pressant»&lt;/strong&gt; et quelques projets sporadiques visant à ajouter des fonctionnalités nouvelles ou des évolutions nécessaires.&lt;/p&gt;

&lt;p&gt;Pour accompagner cette activité et donner du liant, des outils étaient bien évidement en place: ticketing, actitivity-tracker et pour le reste … échanges de mails.&lt;/p&gt;

&lt;p&gt;En termes de &lt;strong&gt;sociologie d'équipes&lt;/strong&gt;, le fait d'être isolé rend les gens méfiants, suspicieux de la qualité et du travail des autres, peu impliqués dans un effort collectif et tout cela se ressentait, une forme de tension existait entre chaque service et l'activité peinait à atteindre un optimum.&lt;/p&gt;

&lt;p&gt;De même, il était compliqué de déterminer le niveau d'implication et de responsabilité de chacun puisque l'activité était plutôt répétitive et monotone, bref &lt;strong&gt;plus contrainte que stimulante&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Le &lt;strong&gt;manque de méthodologie&lt;/strong&gt; clairement définie générait également un &lt;strong&gt;manque de traçabilité&lt;/strong&gt;, tant dans les éléments de travail que dans l'activité de chacun.&lt;/p&gt;

&lt;h3&gt;
  
  
  La technique
&lt;/h3&gt;

&lt;p&gt;Sur ce point, l'écosystème présent était très … plurale.&lt;/p&gt;

&lt;p&gt;Effectivement, beaucoup de langages issus du .Net pour la plupart ont été employés à différents moments de l'histoire de l'entreprise, citons tout de même de manière non exhaustive et non ordonnée: &lt;strong&gt;ASP classic, ASP.NET MVC 5, ASP.NET WebForms&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Une multitude d'applications consoles en .Net framework 4.0 à 4.8 revêtant la forme de services Windows, quelques modules PHP, et quelques WinForms venaient compléter ce panel.&lt;/p&gt;

&lt;p&gt;Pour ajouter un peu de complexité à cette diversité de langages, les développements ont été, dans le passé, confiés à des équipes qui n'existent plus, il n'y avait bien entendu que le strict minimum en termes de documentation et certains applicatifs n'étaient même pas publiés dans un dépôt de code.&lt;/p&gt;

&lt;p&gt;Pour ce qui est des dépôts de code, des partis pris radicaux quant aux bonnes pratiques d'ingénierie logicielle et des principes d'industrialisation ne rendaient pas forcément le code disponible exploitable.&lt;/p&gt;

&lt;p&gt;En ce qui concerne le code en lui-même, plusieurs éléments m'ont sautés aux yeux immédiatement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Absence totale de tests techniques (unitaires, intégration, …), de même que pas de tests de qualification ni de protocole de non-régression mais cela est hors scope si on se place sur le plan technique (&lt;em&gt;dis donc ! tu ne serais pas en train de reproduire un silo idéologique là ?&lt;/em&gt;) ;&lt;/li&gt;
&lt;li&gt;Niveau de maturité du code très hétérogène ;&lt;/li&gt;
&lt;li&gt;Aucune règle de confection de code (organisation des éléments au sein des classes, règles de nommage, nomenclatures) ;&lt;/li&gt;
&lt;li&gt;Aucun patron de conception guidant les développements ;&lt;/li&gt;
&lt;li&gt;Une complexité cyclomatique, c'est-à-dire le nombre de chemins « linéairement indépendants » empruntable au sein d'une fonction, proche de l'incroyable ;&lt;/li&gt;
&lt;li&gt;Une interdépendance élevée entre les différents blocs de code ;&lt;/li&gt;
&lt;li&gt;Des couches organisationnelles peu ou pas du tout déterminées ;&lt;/li&gt;
&lt;li&gt;Non-respect des principes d'ingénierie logicielle (&lt;a href="https://en.wikipedia.org/wiki/SOLID"&gt;&lt;strong&gt;SOLID&lt;/strong&gt;&lt;/a&gt;), redondance, code et fonctions dupliqués ;&lt;/li&gt;
&lt;li&gt;Des solutions trouvées à des problématiques spécifiques plus proches du bricolage (&lt;em&gt;tiens, c'est à la mode ça en ce moment …&lt;/em&gt;), voir du POC (&lt;em&gt;Proof of Concept&lt;/em&gt;), que de vrais éléments techniques robustes et maintenables;&lt;/li&gt;
&lt;li&gt;Sur le principe de l'ERP: recours à une &lt;em&gt;super&lt;/em&gt; base de données, un monolithe persistant sur lequel TOUS les applicatifs venaient se raccorder, ainsi qu'un couplage fort avec celle-ci (&lt;em&gt;c'est mal !&lt;/em&gt;) ;&lt;/li&gt;
&lt;li&gt;Une utilisation très limitée des possibilités relationnelles de cette base de donnée SQL, beaucoup d'ambiguïté dans les noms de table / colonne ;&lt;/li&gt;
&lt;li&gt;Last but not least: &lt;strong&gt;pas d'Api's&lt;/strong&gt;  !!!!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La somme de ces éléments rendait les applicatifs très difficiles à maintenir, faire évoluer, et tout reposait sur la connaissance de l'homme du métier puisqu'aucune documentation ne venait assortir le code.&lt;/p&gt;

&lt;p&gt;Pour parachever cet instantané de la situation technique, le système de mise en production était très artisanal, basé sur des outils dépassés et le recours systématique à une intervention humaine sur les serveurs plutôt qu'une judicieuse et millimétrique automatisation…&lt;/p&gt;

&lt;h2&gt;
  
  
  Et au milieu … l'analyse
&lt;/h2&gt;

&lt;p&gt;Tout d'abord, je souhaite rappeler et mettre en avant le fait que cette entreprise n'est pas spécialisée dans le domaine informatique, ce dernier ne jouait jusque-là qu'un rôle de support d'activité, comme dans bien des entreprises d'ailleurs.&lt;/p&gt;

&lt;p&gt;Le problème avec cette approche est relativement simple: la croissance et le développement de l'entreprise ont rendu ce rôle de support inadéquat. La DSI n'a jamais pris la pleine mesure de l'évolution et n'a jamais adapté son organe à la réalité de la situation qui imposait un nouveau champ d'action: grandir et devenir une vraie entité produisant de la valeur et du business, et non plus un simple support.&lt;/p&gt;

&lt;h3&gt;
  
  
  First Principle
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KJPZYd5N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bz784ksh2zyfoo7f4c2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJPZYd5N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bz784ksh2zyfoo7f4c2r.png" alt="first-principle" width="800" height="379"&gt;&lt;/a&gt;&lt;br&gt;
Mes premières conclusions ont été dans ce sens et en se référant au «&lt;em&gt;First Principles Thinking&lt;/em&gt;» - basiquement en me limitant à poser la question &lt;strong&gt;Pourquoi ?&lt;/strong&gt; - j'ai pu réduire le problème à quelques questions, que voici, livrées avec leurs réponses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pourquoi cette faiblesse technique ?

&lt;ul&gt;
&lt;li&gt;Manque de connaissance architecturale et lacunes en ingénierie logicielle;&lt;/li&gt;
&lt;li&gt;Manque d'ambition et d'engagement pour changer les choses;&lt;/li&gt;
&lt;li&gt;Manque de confiance en la perspective d'un socle technique moderne, cloisonné à quelques technos mais fortement maîtrisé ;&lt;/li&gt;
&lt;li&gt;Manque de qualité dans le code permettant de déceler et d'anticiper les anomalies ;&lt;/li&gt;
&lt;li&gt;Une technique vieillissante incapable d'accompagner la croissance de l'entreprise et de répondre à de nouveaux défis, ou tout simplement de traiter l'information de manière optimale.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Pourquoi ce fonctionnement en silos et ce manque de communication ?

&lt;ul&gt;
&lt;li&gt;Pas de méthodologie clairement établie ;&lt;/li&gt;
&lt;li&gt;Pas assez d'interactions entre les équipes et donc une méconnaissance de l'«Autre»;&lt;/li&gt;
&lt;li&gt;Des outils peu adaptés et peu claires dans leur fonctionnement;&lt;/li&gt;
&lt;li&gt;Des ambiguïtés sur les rôles de chacun;&lt;/li&gt;
&lt;li&gt;Un manque de confiance de la direction générale envers la technique ainsi qu'une culture du service opérationnel quelque peu dépassée.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Pourquoi ces difficultés à produire et publier du code ?

&lt;ul&gt;
&lt;li&gt;Pas de process de livraison clairement détaillé ;&lt;/li&gt;
&lt;li&gt;Pas ou très peu de processus de validation des livrables, de même qu'un manque de clarté pour ces derniers ;&lt;/li&gt;
&lt;li&gt;Pas d'automatisation (CI / CD) et recours bien trop prononcé à l'humain (donc à ses faiblesses et limites !) ;&lt;/li&gt;
&lt;li&gt;Équipe créant de la valeur totalement sous dimensionnée, dépassée par les événements et travaillant la plupart du temps en mode «pompier».&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Une dernière question subsistait, éloignée du pourquoi mais tellement centrale: &lt;strong&gt;qu'en est-il de l'utilisateur final ?&lt;/strong&gt; Tous ces problèmes entachent-ils l'utilisation des différents outils et ces derniers répondent-ils aux attentes des utilisateurs (le personnel de l'entreprise en grande partie)?&lt;/p&gt;

&lt;p&gt;Fort de cette analyse, j'ai raisonnablement pu déterminer plusieurs axes d'amélioration, voire de rupture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Et suivirent les solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Organiser le changement technique et technologique
&lt;/h3&gt;

&lt;p&gt;L'évidence était là: il fallait &lt;strong&gt;augmenter le niveau de maîtrise&lt;/strong&gt; des technologies travaillées tout en &lt;strong&gt;capitalisant sur les compétences existantes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En essayant de rationnaliser au maximum, il fallait conserver le savoir-faire existant et donc rester sur les technologies afférentes au .Net.&lt;/p&gt;

&lt;p&gt;Il fallait, dans le même temps, &lt;strong&gt;s'inscrire dans la modernité&lt;/strong&gt; et mettre en place un &lt;strong&gt;nouveau socle technique, moderne&lt;/strong&gt; et qui serait également &lt;strong&gt;l'opportunité d'une architecture logicielle&lt;/strong&gt; répondant à certaines caractéristiques, notamment les principes du &lt;em&gt;&lt;strong&gt;Reactive Manifesto&lt;/strong&gt;&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bxvk6gJD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.reactivemanifesto.org/images/reactive-traits.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bxvk6gJD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.reactivemanifesto.org/images/reactive-traits.svg" alt="reactive-manifesto" width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source &lt;a href="https://www.reactivemanifesto.org"&gt;https://www.reactivemanifesto.org&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ceci pour plusieurs raisons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Le développement de l'entreprise induit d'avoir une solution technique scalable et extensible ;&lt;/li&gt;
&lt;li&gt;Plusieurs applications, avec chacune leur responsabilité et portée spécifique, vont émerger de cette analyse et il faudra les rendre inter-communicantes, quoi de mieux qu'une plateforme échangeant via un agent de messages pour assurer cette fonction !&lt;/li&gt;
&lt;li&gt;Il faut, à termes, être capable, de gérer au mieux les anomalies, idéalement les anticiper, à minima ne pas perdre d'activité et pouvoir débloquer des situations complexes ;&lt;/li&gt;
&lt;li&gt;Les différentes applications doivent être totalement &lt;em&gt;user-centric&lt;/em&gt;, c'est-à-dire basé sur l'analyse des comportements des utilisateurs, et favoriser l'expérience de la meilleure manière possible ;&lt;/li&gt;
&lt;li&gt;Apporter des briques rendant possibles l'innovation ;&lt;/li&gt;
&lt;li&gt;Enfin, la solution technique doit permettre des livraisons rapides, sans faille et à un rythme soutenu, sur une plateforme offrant souplesse et adaptabilité, probablement hébergé via un cloud …&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;J'avais dès le début en tête une approche basée sur la mise en place d'une nouvelle stack technique, simple mais maitrisée: .Net Core + Angular.&lt;/p&gt;

&lt;h3&gt;
  
  
  .Net Core
&lt;/h3&gt;

&lt;p&gt;Ce langage permet de développer des applications de haute qualité, modernes, rapides et en accord avec la philosophie des micro-services.&lt;/p&gt;

&lt;p&gt;Il met rapidement à disposition les dernières fonctionnalités développées, communautaires ou éditoriales, et permet une grande modularité, il est également totalement tourné vers l'open-source et le cloud.&lt;/p&gt;

&lt;p&gt;.Net Core permet de mettre en place relativement facilement une &lt;strong&gt;Architecture Orientée Services&lt;/strong&gt; (SOA) d'entreprise: les données seront désormais exposées via des Api's.&lt;/p&gt;

&lt;p&gt;Cela constitue donc l'opportunité de conceptualiser une batterie de micro-services, totalement orientés métier, propriétaires et responsables pour chacun de leur système de persistance (ce qui change radicalement du paradigme existant).&lt;/p&gt;

&lt;p&gt;Pour le volet inter-communicabilité, il a fallu mettre en place un &lt;em&gt;broker&lt;/em&gt; de messagerie (&lt;strong&gt;RabbitMq&lt;/strong&gt;) assorti d'un framework accélérant les développements (&lt;strong&gt;Mass-Transit&lt;/strong&gt;) et facilitant la concurrence car il repose sur TPL (&lt;strong&gt;Task Parallel Library&lt;/strong&gt;).&lt;/p&gt;

&lt;h4&gt;
  
  
  Angular
&lt;/h4&gt;

&lt;p&gt;Afin d'homogénéiser les pratiques sur le plan du web, l'expérience utilisateur et la captation des données, il fallait simplifier l'existant, apporter une forme d'unicité dans l'offre de l'entreprise.&lt;/p&gt;

&lt;p&gt;En l'état, les solutions traditionnelles proposées par la stack - vieillissante - .Net (asp.Net MVC assorti du moteur de vue Razor, WebForms ou encore ASP Classic) ne donnaient pas satisfaction et n'accompagneraient pas une montée en gamme et en technologie.&lt;/p&gt;

&lt;p&gt;D'autant plus que les langages employés imposaient un &lt;strong&gt;fort couplage avec le back-office&lt;/strong&gt;. Il fallait donc assurer un cycle de vie pour les applications front indépendant de celui du back, limiter autant que possible ce que j'appelle &lt;em&gt;l'hybridation&lt;/em&gt;, à savoir les langages responsables à la fois du back et du front.&lt;/p&gt;

&lt;p&gt;J'avais l'idée qu'il fallait idéalement partir sur une solution front mature, modulaire, évolutive et «&lt;em&gt;architecturable&lt;/em&gt;», cela dans une double optique: &lt;strong&gt;organiser la rupture technologique et unifier le processus de création web&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular&lt;/strong&gt; a pour particularité de reposer sur &lt;strong&gt;TypeScript&lt;/strong&gt;, un langage typé objet compilant du javascript, proche du C#, et d'être très modulaire puisque basé sur une architecture … en modules !&lt;/p&gt;

&lt;p&gt;Il dispose d'une très forte communauté et est très bien documenté, tout en proposant un niveau de maturité et de fonctionnalités très élevé et en plus de tout cela, &lt;strong&gt;NG&lt;/strong&gt; (son petit sobriquet) est mis à jour fréquemment, peut-être trop depuis 2 ans … mais je m'emballe.&lt;/p&gt;

&lt;p&gt;Le dernier atout d'Angular est qu'il peut être monté en &lt;a href="https://micro-frontends.org/"&gt;&lt;strong&gt;Micro-Front end&lt;/strong&gt;&lt;/a&gt; moyennant recours à quelques frameworks dédiés. Je pense que nous avons là une très bonne solution front modulaire et permettant de faire beaucoup de choses.&lt;/p&gt;

&lt;h4&gt;
  
  
  Et tu fais quoi de l'existant ?
&lt;/h4&gt;

&lt;p&gt;Une question est effectivement tout de suite apparue: que faire de l'existant ?&lt;/p&gt;

&lt;p&gt;Eh bien je me suis tout de suite fixé comme ligne de conduite de ne pas modifier cet existant, ou du moins le minimum possible, ce qui a rapidement induit une gouvernance claire:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Développement d'un site vitrine et du back office organisé en micro-services ;&lt;/li&gt;
&lt;li&gt;Étranglement applicatif pour une partie de l'existant ;&lt;/li&gt;
&lt;li&gt;Maintenance thérapeutique sur les éléments ne supposant ni reprise ni évolution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Je vais présenter rapidement les différents principes mis en place sans toutefois apporter trop de détails, cela fera l'objet de futurs articles (un peu de teasing ne fait jamais de mal !).&lt;/p&gt;

&lt;h5&gt;
  
  
  Site vitrine
&lt;/h5&gt;

&lt;p&gt;Le développement de l'application vitrine, un site web, a été l'occasion de mettre en place une architecture signature qui encadrerait les développements, a permis de développer un maximum de micro-services tout en intégrant des tests techniques ainsi que l'écosystème permettant de gérer le flux produit: des pipelines de CI / CD via Azure DevOps assorti d'une stratégie d'hébergement cloud (Azure).&lt;/p&gt;

&lt;p&gt;Ce chantier a été l'opportunité, à travers l'architecture que j'amenais et le mentoring, de faire monter les équipes en compétence sur des techniques que j'avais pris l'habitude d'utiliser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TDD (&lt;strong&gt;Test Driven Development&lt;/strong&gt;) ;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code First&lt;/strong&gt; en utilisant &lt;strong&gt;Entity Framework Core&lt;/strong&gt; ;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event Sourcing&lt;/strong&gt; et &lt;strong&gt;CQRS&lt;/strong&gt;, puis MDA (&lt;strong&gt;Message Driven Architecture&lt;/strong&gt;) ;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In-Memory testing&lt;/strong&gt; (In-memory Database, proxy http, Web-Application Factory).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mais également de nouvelles choses pour moi, comme BDD (&lt;strong&gt;Behavior Driven Development&lt;/strong&gt;) via &lt;a href="https://specflow.org/"&gt;SpecFlow&lt;/a&gt; (.Net Core) et &lt;a href="https://cucumber.io/"&gt;Cucumber&lt;/a&gt; (Angular) qui reposent tous 2 sur le langage &lt;strong&gt;Gherkin&lt;/strong&gt; 🥒 et permettent d'écrire et développer des tests typés « comportement » assez facilement.&lt;/p&gt;

&lt;p&gt;Dans cet esprit, une équipe a été créée afin de mettre en place le nouvel écosystème, nous pouvons qualifier celle-ci de &lt;em&gt;platform team&lt;/em&gt; pour faire référence aux &lt;a href="https://teamtopologies.com/key-concepts"&gt;&lt;strong&gt;Teams Topologies&lt;/strong&gt;&lt;/a&gt;, puisqu'elle a été en charge de toute la mise en place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilisation de l'architecture que j'avais définie et développée;&lt;/li&gt;
&lt;li&gt;Écosystème micro-services «&lt;em&gt;Cloud-ready&lt;/em&gt;» pour lequel il a fallu définir et créer les environnements, les pipelines d'intégration et déploiement continue;&lt;/li&gt;
&lt;li&gt;Création des «&lt;em&gt;Apis d'équipe&lt;/em&gt;»: pages &lt;strong&gt;Swagger&lt;/strong&gt; pour les micro-services, documentation via un &lt;strong&gt;wiki dédié dans Azure DevOps&lt;/strong&gt;;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Stratégie d'étranglement applicatif
&lt;/h5&gt;

&lt;p&gt;Si l'application vitrine visait à remplacer son pendant existant par une nouvelle application, un traitement différent a été choisi pour les autres éléments de l'écosystème (des sites web) nécessitant une reprise totale: l'étranglement applicatif.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FxEa54EN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ltbabe1zqkyrajoe6dp3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FxEa54EN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ltbabe1zqkyrajoe6dp3.jpg" alt="strangler-fig" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://martinfowler.com/bliki/StranglerFigApplication.html"&gt;&lt;strong&gt;L'étranglement applicatif&lt;/strong&gt;&lt;/a&gt; est un concept émanant de la démocratisation des micro-services, celui-ci repose sur un passage organisé et cadencé de pans entiers d'applications, systèmes de persistance vers une nouvelle solution technique, il permet de moderniser graduellement l'existant tout en ne dégradant pas l'activité.&lt;/p&gt;

&lt;p&gt;Bien évidemment, cette technique suppose de pouvoir échanger les données entre l'ancien et le nouveau paradigme, il a donc fallu conceptualiser et développer … un micro-service raccordé sur la base de données existante capable de détecter automatiquement toute modification de données et de recevoir les modifications provenant des autres services.&lt;/p&gt;

&lt;p&gt;Cette fonctionnalité repose sur l'usage massif de l'&lt;strong&gt;event-sourcing&lt;/strong&gt;, en gros de transmettre une information une fois qu'un événement est détecté, et l'échange de messages entre les différents micro-services présents.&lt;/p&gt;

&lt;p&gt;Du coup, la mise en place technique résultant des développements du site vitrine rendait possible beaucoup de choses.&lt;/p&gt;

&lt;p&gt;A termes, Il n'y a donc plus deux paradigmes distincts (le «&lt;em&gt;legacy&lt;/em&gt;» et le «&lt;em&gt;new&lt;/em&gt;») mais bel et bien un seul proposant une multitude d'éléments cohérents et inter connectés.&lt;/p&gt;

&lt;p&gt;Pour le reste, il fallait rapidement rendre l'existant industrialisable (sur le même plan que l'application vitrine) et une phase de migration vers des dépôts Git et une gestion de flux CI / CD via Azure DevOps a été planifiée et exécutée, ce qui a évidemment induit une refonte de l'équipe de développement.&lt;/p&gt;

&lt;p&gt;Très rapidement, pas mal de retour d'expériences sur ces éléments ont permis d'apporter des ajustements sur le site vitrine avant qu'il ne passe en production, ce qui est une forme de capitalisation relativement luxueuse: savoir à l'avance ce qui fonctionne mal et pouvoir l'ajuster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Organiser le changement organisationnel et méthodologique
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Refonte de l'équipe de développement
&lt;/h4&gt;

&lt;p&gt;Si l'on reprend le principe de «&lt;strong&gt;charge cognitive d'une équipe&lt;/strong&gt;» exposé par &lt;strong&gt;Matthew Skelton&lt;/strong&gt; et &lt;strong&gt;Manuel Pais&lt;/strong&gt; dans leur ouvrage &lt;strong&gt;Team Topologies&lt;/strong&gt;, avoir une seule équipe pour gérer et maintenir un pool d'applications parait totalement sous-dimensionné.&lt;/p&gt;

&lt;p&gt;Il a donc fallu redéfinir l'équipe en place et en créer une nouvelle, &lt;strong&gt;en adéquation avec le nouveau socle technique&lt;/strong&gt; mis en place, de manière à avoir une &lt;strong&gt;charge cognitive beaucoup plus raisonnable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Donc, comme exposé dans le paragraphe précédent, cette &lt;strong&gt;refonte du SI tourne autour de 2 équipes&lt;/strong&gt;: l'une (historique) gérant les applications existantes (le legacy) et l'autre dont l'activité tournait autour de la mise en place du nouveau socle technique et d'un site vitrine.&lt;/p&gt;

&lt;p&gt;Voyons maintenant comment celles-ci fonctionnent.&lt;/p&gt;

&lt;h5&gt;
  
  
  L'organisation
&lt;/h5&gt;

&lt;p&gt;Il a fallu mettre en place une organisation capable de supporter les nouvelles contraintes techniques.&lt;/p&gt;

&lt;p&gt;Un nouveau service en résulte, plus proche à la fois du besoin utilisateur, des développements et de l'opérationnel.&lt;/p&gt;

&lt;p&gt;Pour ce faire, &lt;strong&gt;l'approche DevOps&lt;/strong&gt; a été la ligne directrice, terminé donc le cycle de vie et place au flux continu, exit les silos, bienvenu la collaboration !&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GFf0ir9S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uk3r69k69bupg0wqa2tc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GFf0ir9S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uk3r69k69bupg0wqa2tc.png" alt="devops-toolchain" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Les équipes sont désormais constituées de développeurs, de l'AMOA (les fameux experts métiers) ainsi que de business-analysts et de nouvelles compétences propres à l'infrastructure et au réseau, applicables dans un domaine Cloud.&lt;/p&gt;

&lt;p&gt;Cela induit évidemment la &lt;strong&gt;destruction des silos par compétence&lt;/strong&gt; et laisse place à un fonctionnement où tout est plus simple, mieux huilé, tout le monde travaille dans un seul but: produire de la valeur et donner satisfaction aux utilisateurs.&lt;/p&gt;

&lt;p&gt;En termes d'outils, là aussi, une forme d'harmonisation apparait puisque les outils existants ont été remplacés par un seul outil, central, suffisamment puissant et modulaire pour être la colonne vertébrale de l'activité sans toutefois être chronophage dans sa gestion.&lt;/p&gt;

&lt;p&gt;J'ai opté pour &lt;strong&gt;Azure DevOps&lt;/strong&gt;, j'aurai pu utiliser autre chose mais il se trouve que je souhaitais capitaliser sur mes expériences, mon savoir, et c'est un outil que je maîtrisais déjà.&lt;/p&gt;

&lt;p&gt;Je savais qu'il nous permettrait de mener notre barque efficacement et qu'il nous accompagnerait dans nos évolutions.&lt;/p&gt;

&lt;p&gt;Il a fallu une période de mise en place puis de training et d'acquisition afin que tout le monde s'adapte et devienne autonome, efficace avec cet outil.&lt;/p&gt;

&lt;p&gt;Nous avions désormais les équipes (même si des recrutements étaient nécessaires pour acquérir les compétences manquantes), les outils et le fonctionnement drivant notre activité, ne restait plus qu'à définir quelle méthodologie allait rendre tout cela cohérent et efficient.&lt;/p&gt;

&lt;h5&gt;
  
  
  La méthodologie
&lt;/h5&gt;

&lt;p&gt;Il nous fallait être efficace, en capacité de produire vite … et beaucoup (un socle technique complet développé en moins de 3 mois avec une équipe réduite !), et gérer un rythme assez soutenu.&lt;/p&gt;

&lt;p&gt;Cela supposait &lt;strong&gt;une méthodologie adaptée&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;J'avais le pressentiment que &lt;strong&gt;Scrum&lt;/strong&gt; était le candidat idéal, sentiment partagé par mon Directeur de projet ainsi qu'une grande partie de l'équipe.&lt;/p&gt;

&lt;p&gt;Je ne m'attarderai pas sur Scrum, beaucoup d'articles le dépeignent déjà, mais son apport a été immédiat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gain en flexibilité dans les développements ;&lt;/li&gt;
&lt;li&gt;Meilleure gestion des ressources et ajustement des éléments à produire ;&lt;/li&gt;
&lt;li&gt;Retours d'expérience rapide ;&lt;/li&gt;
&lt;li&gt;Engagement de chacun.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce dernier point est important car, le &lt;strong&gt;niveau d'adhésion&lt;/strong&gt; avant cette refonte était très bas, il n'y avait aucun projet ambitieux et aucun challenge dans l'activité.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L'engagement de tous a permis&lt;/strong&gt; de se remobiliser, d'avoir un objectif tangible, complexe et difficile à atteindre mais finalement gratifiant pour tout le monde.&lt;/p&gt;

&lt;p&gt;De plus l'activité devenant beaucoup plus rationnelle, avec des objectifs et des temps forts, il était désormais possible de voir des résultats rapides, ce que l'on appelle des &lt;strong&gt;quick-wins&lt;/strong&gt; et de redonner une note positive à l'activité informatique.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le mot de la fin
&lt;/h2&gt;

&lt;p&gt;Pour finir, je citerais simplement &lt;strong&gt;Albert Einstein&lt;/strong&gt; pour qui «&lt;em&gt;La folie, c'est de faire toujours la même chose et de s'attendre à un résultat différent&lt;/em&gt; » ainsi que &lt;strong&gt;Bill Campbell&lt;/strong&gt; (The Trillion Dollar Coach): «&lt;em&gt;Le leadership consiste à reconnaitre qu'il y a de la grandeur en chacun et votre travail consiste à créer un environnement dans lequel cette grandeur peut émerger&lt;/em&gt;».&lt;/p&gt;

&lt;p&gt;J'ai eu à cœur d'appliquer ces 2 maximes et d'en faire une réalité tangible. &lt;/p&gt;

&lt;p&gt;J'espère que ce retour d'expérience, même s'il est très en surface pourra donner des pistes à toute personne se retrouvant dans une situation analogue.&lt;/p&gt;

&lt;p&gt;Je finirai en disant que rien n'est possible quand on essaye d'avancer seul et qu'il faut s'efforcer de créer des synergies entre les hommes et les outils disponibles.&lt;/p&gt;

</description>
      <category>french</category>
      <category>architecture</category>
      <category>agile</category>
      <category>career</category>
    </item>
  </channel>
</rss>
