<?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: Karkael</title>
    <description>The latest articles on DEV Community by Karkael (@karkael).</description>
    <link>https://dev.to/karkael</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1638374%2F959c6db2-224b-48e5-a993-ae2e5ef4570e.jpg</url>
      <title>DEV Community: Karkael</title>
      <link>https://dev.to/karkael</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karkael"/>
    <language>en</language>
    <item>
      <title>Arrêtez de choisir une méthode Agile. Choisissez une taille de promesse.</title>
      <dc:creator>Karkael</dc:creator>
      <pubDate>Mon, 31 Aug 2026 14:05:51 +0000</pubDate>
      <link>https://dev.to/karkael/arretez-de-choisir-une-methode-agile-choisissez-une-taille-de-promesse-195g</link>
      <guid>https://dev.to/karkael/arretez-de-choisir-une-methode-agile-choisissez-une-taille-de-promesse-195g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Version originale en anglais : &lt;a href="https://dev.to/karkael/stop-picking-a-method-pick-a-promise-size-3956"&gt;https://dev.to/karkael/stop-picking-a-method-pick-a-promise-size-3956&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Commençons par le débat auquel je ne crois plus : &lt;strong&gt;Scrum contre Kanban.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;C'est un débat de vitrine, qui vend des certifications, remplit des conférences, permet de mettre une tribu dans sa bio. Et il masque quelque chose de bien plus utile : ces méthodes sont &lt;em&gt;sœurs&lt;/em&gt;. Sur notre projet, nous en avons pratiqué trois en dix mois, et voici ce qui a réellement changé entre elles...&lt;/p&gt;

&lt;p&gt;Rien ! Ni les cérémonies, ni l'outillage, ni la forme du projet, ni son périmètre fonctionnel, ni sa méthodologie au sens sérieux du terme. Nous avons tenu un daily, un weekly, un refinement et une rétro de la première semaine au dernier jour, dans les trois phases. (Scrum n'a ajouté que deux événements à cette liste : le planning et la démo — &lt;a href="https://scrumguides.org/scrum-guide.html" rel="noopener noreferrer"&gt;Guide Scrum 2020&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Une variable a bougé. Une seule.&lt;/strong&gt; La taille de la promesse — l'engagement d'une personne.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;La question d'estimation posée&lt;/th&gt;
&lt;th&gt;Unité de responsabilité&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kanban&lt;/td&gt;
&lt;td&gt;« Combien de &lt;em&gt;jours&lt;/em&gt; pour ce composant ? »&lt;/td&gt;
&lt;td&gt;une micro-tâche&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strong ownership&lt;/td&gt;
&lt;td&gt;« Combien de &lt;em&gt;semaines&lt;/em&gt; pour cette page ? »&lt;/td&gt;
&lt;td&gt;une tâche longue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scrum&lt;/td&gt;
&lt;td&gt;« Combien de &lt;em&gt;storypoints&lt;/em&gt; ? »&lt;/td&gt;
&lt;td&gt;un découpage prévisible&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;C'est tout. C'est tout l'article. Ce qui suit explique pourquoi ce curseur a bougé, et ce qui a fixé sa position : &lt;strong&gt;notre niveau de certitude à cet instant.&lt;/strong&gt; Pas notre maturité, pas le conseil d'un coach, pas la promesse d'un framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le décor
&lt;/h2&gt;

&lt;p&gt;Anonymisé, mais la configuration est banale :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;4 personnes&lt;/strong&gt;, dont le lead-architecte — qui codait aussi&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js / React&lt;/strong&gt;, bibliothèque de composants dans Storybook, CI/CD conteneurisée&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Une équipe UX en parallèle dès le premier jour&lt;/strong&gt;, encore en maquettage Figma quand nous livrions déjà&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dix mois jusqu'à la fin des évolutions, et notez que les phases ci-dessous se chevauchent. Ça compte plus que la séquence.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    subgraph P1["Mois 1-3 · certitude = les composants"]
        direction TB
        K["KANBAN&amp;lt;br/&amp;gt;3 développeurs&amp;lt;br/&amp;gt;unité : un composant&amp;lt;br/&amp;gt;« combien de jours ? »"]
    end
    subgraph P2["Mois 4-6 · certitude = les pages"]
        direction TB
        S2["STRONG OWNERSHIP&amp;lt;br/&amp;gt;1 dev = 1 page&amp;lt;br/&amp;gt;unité : une page&amp;lt;br/&amp;gt;« combien de semaines ? »"]
    end
    subgraph P3["Mois 7-10 · certitude = tout le périmètre"]
        direction TB
        SC1["SCRUM · sprints de 2 semaines&amp;lt;br/&amp;gt;avant la MEP&amp;lt;br/&amp;gt;fonctionnel + qualité + sécurité&amp;lt;br/&amp;gt;« combien de storypoints ? »"]
        SC2["SCRUM · même cadence&amp;lt;br/&amp;gt;après la MEP&amp;lt;br/&amp;gt;évolutions post-lancement&amp;lt;br/&amp;gt;« combien de storypoints ? »"]
    end
    subgraph P4["Mois 11+ · plus d'évolution majeure"]
        direction TB
        K2["KANBAN À NOUVEAU&amp;lt;br/&amp;gt;TMA&amp;lt;br/&amp;gt;unité : un ticket&amp;lt;br/&amp;gt;« combien de jours ? »"]
    end
    K --&amp;gt; S2
    S1 --&amp;gt; S2
    S2 --&amp;gt; SC1
    SC2 --&amp;gt; K2&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Relisez ce diagramme : &lt;strong&gt;pendant les trois premiers mois, nous faisions tourner deux méthodes en même temps.&lt;/strong&gt; Les trois développeurs tiraient des composants sur un board Kanban tandis que l'architecte était déjà en strong ownership sur le socle et le pipeline de déploiement. Personne n'a trouvé ça bizarre, parce que personne ne « respectait un framework strict ». Chacun répondait à la question d'estimation qui correspondait à ce qu'il savait.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mois 1 à 3 : Kanban, parce que nous avons copié Figma
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;« Nous avons construit la codebase dans l'ordre où l'UX la dessinait. »&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pas par hasard — par décision. Un design system ne se dessine pas page d'abord. Il commence par Typography, puis les couleurs et les espacements, puis les atomes, puis les Inputs, les Cards, la Table. Les pages viennent en dernier, parce qu'une page est un assemblage. Le front a donc suivi la même montée : Typography, les atomes, la Table, puis — seulement là — l'assemblage.&lt;/p&gt;

&lt;p&gt;Le gain était calendaire, pas esthétique. Design et développement ont cessé de faire la queue l'un derrière l'autre pour avancer côte à côte : &lt;strong&gt;le Gantt s'est compressé au lieu de s'étirer.&lt;/strong&gt; Attendre des maquettes de pages finies avant la première ligne de code nous aurait coûté ces trois mois, simplement.&lt;/p&gt;

&lt;p&gt;Kanban convient à ce moment pour une raison précise : il demande de rendre le flux explicite et de limiter le travail en cours (&lt;a href="https://kanbanguides.org/open-guide-to-kanban/" rel="noopener noreferrer"&gt;The Kanban Guide&lt;/a&gt;) — il ne demande jamais de s'engager sur un périmètre. Nous n'avions aucun périmètre à engager. Nous avions une certitude sur les &lt;em&gt;composants&lt;/em&gt; et rien d'autre : nous promettions donc en jours, et uniquement sur des composants.&lt;/p&gt;

&lt;p&gt;Effet de bord qui justifie à lui seul le billet d'entrée : ces composants sont devenus un vocabulaire commun. Quand une spec a dit plus tard « un tableau filtrable à en-tête collant », personne n'a eu à deviner et personne n'a eu à le construire.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mois 4 à 6 : un dev, une page. Et non, ce n'est pas de l'Extreme Programming.
&lt;/h2&gt;

&lt;p&gt;Puis les maquettes sont devenues des pages entières, puis des parcours. Un ticket a cessé d'être « développer Pagination » pour devenir « développer la page de résultats » : des jours de travail sur une douzaine de fichiers. Quatre personnes dans un dépôt Next.js, et le curseur devait bouger : promettre en jours ne correspondait plus au travail.&lt;/p&gt;

&lt;p&gt;Chaque développeur a donc possédé une page, de bout en bout. Route, récupération des données, composition, tests. L'architecte a continué de posséder le socle, et relisait tout. Même board, mêmes dailies, même rétro — promesse plus grande.&lt;/p&gt;

&lt;p&gt;J'ai entendu appeler ça de l'Extreme Programming. C'est l'inverse.&lt;/p&gt;

&lt;p&gt;XP prescrit explicitement la &lt;strong&gt;propriété collective du code&lt;/strong&gt; : « la convention explicite que chaque membre de l'équipe est non seulement autorisé, mais a le devoir positif, de modifier n'importe quel fichier si nécessaire » (&lt;a href="https://agilealliance.org/glossary/collective-ownership/" rel="noopener noreferrer"&gt;Agile Alliance&lt;/a&gt;) — pratique renommée « Shared Code » dans la seconde édition du livre de Beck. Ce que nous faisions se range dans une autre case de la taxonomie de Martin Fowler sur la &lt;a href="https://martinfowler.com/bliki/CodeOwnership.html" rel="noopener noreferrer"&gt;propriété du code&lt;/a&gt; : le &lt;strong&gt;strong ownership&lt;/strong&gt; (seul le propriétaire modifie le module), adouci en &lt;strong&gt;weak ownership&lt;/strong&gt; (les autres peuvent, mais consultent). Fowler dit ouvertement son aversion pour le strong ownership, et sa raison est solide : un changement trivial qui traverse une frontière devient une négociation.&lt;/p&gt;

&lt;p&gt;Deux choses ont rendu le nôtre bon marché :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La couche partagée est restée collective.&lt;/strong&gt; Composants, tokens, utilitaires — n'importe qui, n'importe quand. La propriété portait sur les pages, qui partageaient des composants mais pas de logique.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La phase 1 a payé la phase 2.&lt;/strong&gt; Les pages étaient indépendantes &lt;em&gt;parce que&lt;/em&gt; trois mois de Kanban avaient déjà extrait tout le partageable. Tentez le strong ownership sur des pages qui partagent de la logique métier, et ça vous fera mal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si vous y allez, rendez la propriété exécutable plutôt que sociale : un fichier &lt;code&gt;CODEOWNERS&lt;/code&gt; fait demander automatiquement par GitHub la relecture du propriétaire des chemins touchés (&lt;a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners" rel="noopener noreferrer"&gt;GitHub Docs&lt;/a&gt;). Et traitez-la comme une rotation, pas comme un titre.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mois 7 à 10 : Scrum, parce que « terminé » voulait enfin dire quelque chose
&lt;/h2&gt;

&lt;p&gt;Deux mois avant la MEP, le travail restant a changé de &lt;em&gt;nature&lt;/em&gt;, pas de taille : trous fonctionnels transverses, accessibilité, états d'erreur, performance, revue de sécurité. Les 20 % ennuyeux qui font 80 % de la qualité perçue.&lt;/p&gt;

&lt;p&gt;Ce travail a une propriété que le précédent n'avait pas : &lt;strong&gt;il est finissable.&lt;/strong&gt; Un Sprint est un conteneur de durée fixe avec un Sprint Goal et une Definition of Done (&lt;a href="https://scrumguides.org/scrum-guide.html" rel="noopener noreferrer"&gt;Guide Scrum&lt;/a&gt;) : un dispositif d'écoulement de stock, pas un dispositif de productivité. En Kanban, nous aurions tiré des améliorations indéfiniment, parce qu'il y en a toujours une de plus.&lt;/p&gt;

&lt;p&gt;Nous avons fait des &lt;strong&gt;Sprints de 2 semaines&lt;/strong&gt;. Volontairement plus longs que les deux habituelles : les sujets de sécurité et de qualité se découpent mal en quinzaines sans produire des fonctionnalités à moitié durcies, et à quatre, la charge de cérémonie d'une cadence bimensuelle était disproportionnée. C'est là que notre Definition of Done a pris des dents — les items de sécurité sont devenus des critères de sortie explicites plutôt que de bonnes intentions, ce qui est la version pratique de ce que l'OWASP appelle intégrer la sécurité dans le pipeline au lieu de la greffer à la fin (&lt;a href="https://owasp.org/www-project-devsecops-guideline/" rel="noopener noreferrer"&gt;OWASP DevSecOps Guideline&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Un ajustement au passage : nous avons commencé à répondre en &lt;strong&gt;storypoints&lt;/strong&gt;, même si les storypoints n'apparaissent nulle part dans le Guide Scrum. Le framework demande que les éléments soient &lt;em&gt;dimensionnés&lt;/em&gt; ; nous avons ajouté ce concept pour se mesurer. Ce qui confirme plutôt le propos — ce que nous avons adopté est une unité de promesse, pas une religion.&lt;/p&gt;

&lt;p&gt;Puis nous sommes passés en production — et nous avons continué à sprinter deux mois de plus. Le backlog post-lancement était fait de vraies évolutions : des fonctionnalités repoussées pour tenir la date, et la première salve de demandes venues des utilisateurs réels. Même cadence, même Definition of Done, mêmes promesses de trois semaines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Les objections honnêtes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;« Le strong ownership crée des silos de connaissance. »&lt;/strong&gt; C'est la critique standard et c'est la bonne à soulever — mais sur notre projet, elle n'a pas mordu. Les congés sont arrivés, les uns ont couvert les autres, rien ne s'est bloqué. La raison : la codebase était correctement déclarée et documentée, le code était lisible, et tout passait en relecture par les pairs. Les silos sont un &lt;em&gt;symptôme&lt;/em&gt; de code illisible plus merges non relus. Corrigez ces deux-là et la propriété cesse d'être un fief.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;« Changer trois fois de méthode a dû vous coûter cher. »&lt;/strong&gt; Moins qu'on ne croit, et voici le mécanisme : la catégorisation en épiques JIRA et un rituel de refinement pour les storypoints existaient très tôt dans le projet — bien avant Scrum, et à la lettre ils n'appartiennent ni au Kanban ni au strong ownership. Le travail était déjà catégorisé et déjà discuté collectivement. Chaque transition a donc changé un nombre, pas un système. C'est l'argument pratique en faveur de cérémonies stables dont on ne laisse bouger que la promesse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Là où les tenants de XP gardent raison :&lt;/strong&gt; le pair programming, le trunk-based development et l'intégration continue attaquent les collisions de merge de face, sans tracer aucune frontière organisationnelle, et distribuent la connaissance comme effet de bord plutôt que comme discipline à entretenir. Si votre équipe binôme déjà bien, essayez cette voie d'abord — vous n'aurez peut-être jamais besoin de faire quitter « les jours » au curseur.&lt;/p&gt;

&lt;h2&gt;
  
  
  Une dernière chose : la MEP n'est pas un événement méthodologique
&lt;/h2&gt;

&lt;p&gt;Regardez à nouveau la chronologie. La date la plus scrutée de tout le projet — le lancement — est le seul moment où &lt;strong&gt;rien n'a changé dans notre façon de travailler.&lt;/strong&gt; Même Scrum, mêmes Sprints de trois semaines, même board, tout droit à travers. Nous étions en production, et la taille de la promesse est restée exactement où elle était.&lt;/p&gt;

&lt;p&gt;Le curseur est redescendu deux mois plus tard, et pour une raison complètement différente : &lt;strong&gt;les évolutions se sont épuisées.&lt;/strong&gt; Ce qui restait était petit, indépendant, imprévisible et sans aucun périmètre à engager — un bug, une correction de contenu, une montée de version. Dimensionner ça en storypoints et l'enfermer dans des promesses de trois semaines ajoute de la cérémonie à un travail qui n'a aucun stock à écouler. La TMA est donc redevenue un &lt;strong&gt;Kanban&lt;/strong&gt;, et nous avons recommencé à répondre en jours.&lt;/p&gt;

&lt;p&gt;C'est le signe que c'est la certitude qui commande, et pas le calendrier. Les deadlines, les lancements et les comités de pilotage donnent l'impression qu'ils devraient déplacer votre méthode. Ils ne le font pas. Ce qui la déplace, c'est ce que vous savez — et après le lancement, sur un produit stable, vous en savez &lt;em&gt;moins&lt;/em&gt; sur la semaine prochaine que pendant le Sprint. Le curseur est un &lt;strong&gt;potentiomètre, pas une échelle.&lt;/strong&gt; Le nôtre est monté dix mois puis redescendu, et ce n'est pas une régression.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ce que je dirais à mon moi passé
&lt;/h2&gt;

&lt;p&gt;Arrêtez de demander « quelle méthode Agile convient à ce projet ». Demandez &lt;strong&gt;« quelle taille de promesse pouvons-nous honnêtement tenir ce mois-ci »&lt;/strong&gt; — le nom du framework découle de la réponse, et ce sera le débat de quelqu'un d'autre.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Avez-vous déjà déplacé ce curseur en cours de projet ? Qu'est-ce qui vous a dit qu'il était temps ?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources : &lt;a href="https://agilemanifesto.org/iso/fr/manifesto.html" rel="noopener noreferrer"&gt;Manifeste Agile&lt;/a&gt; · &lt;a href="https://kanbanguides.org/open-guide-to-kanban/" rel="noopener noreferrer"&gt;Open Guide to Kanban&lt;/a&gt; · &lt;a href="https://agilealliance.org/glossary/collective-ownership/" rel="noopener noreferrer"&gt;Agile Alliance — Collective Code Ownership&lt;/a&gt; · &lt;a href="https://martinfowler.com/bliki/CodeOwnership.html" rel="noopener noreferrer"&gt;Martin Fowler — Code Ownership&lt;/a&gt; · &lt;a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners" rel="noopener noreferrer"&gt;GitHub Docs — About code owners&lt;/a&gt; · &lt;a href="https://scrumguides.org/scrum-guide.html" rel="noopener noreferrer"&gt;Guide Scrum 2020&lt;/a&gt; · &lt;a href="https://owasp.org/www-project-devsecops-guideline/" rel="noopener noreferrer"&gt;OWASP DevSecOps Guideline&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agile</category>
      <category>webdev</category>
      <category>architecture</category>
      <category>french</category>
    </item>
    <item>
      <title>Stop picking an Agile method. Pick a promise size.</title>
      <dc:creator>Karkael</dc:creator>
      <pubDate>Mon, 31 Aug 2026 14:00:47 +0000</pubDate>
      <link>https://dev.to/karkael/stop-picking-a-method-pick-a-promise-size-3956</link>
      <guid>https://dev.to/karkael/stop-picking-a-method-pick-a-promise-size-3956</guid>
      <description>&lt;p&gt;Let me start with the argument I no longer believe in: &lt;strong&gt;Scrum vs Kanban.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is a shop-front argument. It sells certifications, it fills conference tracks, it lets people put a tribe in their bio. And it hides something much more useful: these methods are &lt;em&gt;neighbours&lt;/em&gt;. On our project we ran three of them across ten months, and here is what actually changed between them —&lt;/p&gt;

&lt;p&gt;Nothing. Not the ceremonies. Not the tooling. Not the shape of the project, not its functional scope, not its methodology in any meaningful sense. We ran a daily, a weekly, refinement and a retro from week one to the last day, in all three phases. (Scrum only added two events to that list: planning and the demo — &lt;a href="https://scrumguides.org/scrum-guide.html" rel="noopener noreferrer"&gt;2020 Scrum Guide&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One variable moved. One.&lt;/strong&gt; The size of the promise — how big a thing a single person put their name on.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;The estimation question we asked&lt;/th&gt;
&lt;th&gt;Unit of responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kanban&lt;/td&gt;
&lt;td&gt;"How many &lt;em&gt;days&lt;/em&gt; for this component?"&lt;/td&gt;
&lt;td&gt;a micro-task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strong ownership&lt;/td&gt;
&lt;td&gt;"How many &lt;em&gt;weeks&lt;/em&gt; for this page?"&lt;/td&gt;
&lt;td&gt;a long task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scrum&lt;/td&gt;
&lt;td&gt;"How many &lt;em&gt;story points&lt;/em&gt;?"&lt;/td&gt;
&lt;td&gt;a predictable slice&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That's it. That's the whole article. Everything below is why that cursor moved, and what set its position: &lt;strong&gt;our level of certainty at that moment.&lt;/strong&gt; Not our maturity, not a coach's advice, not a framework's promise.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Anonymised, but the shape is banal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;4 people&lt;/strong&gt;, including the lead architect — who was also writing code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js / React&lt;/strong&gt;, component library in Storybook, containerised CI/CD&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A UX team working in parallel from day one&lt;/strong&gt;, still designing in Figma while we were already shipping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ten months to the end of the evolution phase, and note that the phases below overlap. That matters more than the sequence.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    subgraph P1["Months 1-3 · certainty = the components"]
        direction TB
        K["KANBAN&amp;lt;br/&amp;gt;3 developers&amp;lt;br/&amp;gt;unit: a component&amp;lt;br/&amp;gt;“how many days?”"]
        S1["STRONG OWNERSHIP&amp;lt;br/&amp;gt;lead architect&amp;lt;br/&amp;gt;unit: the foundations&amp;lt;br/&amp;gt;“how many weeks?”"]
    end
    subgraph P2["Months 4-6 · certainty = the pages"]
        direction TB
        S2["STRONG OWNERSHIP&amp;lt;br/&amp;gt;1 dev = 1 page&amp;lt;br/&amp;gt;unit: a page&amp;lt;br/&amp;gt;“how many weeks?”"]
    end
    subgraph P3["Months 7-10 · certainty = the whole scope"]
        direction TB
        SC1["SCRUM · 3-week sprints&amp;lt;br/&amp;gt;before go-live&amp;lt;br/&amp;gt;functional + quality + security&amp;lt;br/&amp;gt;“how many story points?”"]
        SC2["SCRUM · same cadence&amp;lt;br/&amp;gt;after go-live&amp;lt;br/&amp;gt;post-launch evolutions&amp;lt;br/&amp;gt;“how many story points?”"]
        SC1 --&amp;gt; SC2
    end
    subgraph P4["Month 11+ · no major evolution left"]
        direction TB
        K2["KANBAN AGAIN&amp;lt;br/&amp;gt;maintenance&amp;lt;br/&amp;gt;unit: a ticket&amp;lt;br/&amp;gt;“how many days?”"]
    end
    K --&amp;gt; S2
    S1 --&amp;gt; S2
    S2 --&amp;gt; SC1
    SC2 --&amp;gt; K2&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Read that chart again: &lt;strong&gt;for the first three months we were running two methods at once.&lt;/strong&gt; The three developers were pulling components through a Kanban board while the architect was already in strong ownership on the foundations and the deployment pipeline. Nobody found that strange, because nobody was doing "a framework". Each of them was answering the estimation question that fit what they knew.&lt;/p&gt;

&lt;h2&gt;
  
  
  Months 1–3: Kanban, because we copied Figma
&lt;/h2&gt;

&lt;p&gt;Here is the part I would tattoo on a project charter: &lt;strong&gt;we built the code base in the same order UX designed it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not by coincidence — by decision. A design system is not drawn page-first. It starts at Typography, then colour and spacing, then the atoms, then Inputs, then Cards, then Table. Pages come last, because a page is an assembly. So the front end followed the same climb: Typography, then the atoms, then Table, then — only then — assembly.&lt;/p&gt;

&lt;p&gt;The payoff was scheduling, not elegance. Design and development stopped queuing behind each other and started running side by side; &lt;strong&gt;the Gantt compressed instead of stretching.&lt;/strong&gt; Waiting for finished page designs before writing the first line would have cost us those three months outright.&lt;/p&gt;

&lt;p&gt;Kanban fits this moment for a precise reason: it asks you to make your workflow explicit and to limit work in progress (&lt;a href="https://kanbanguides.org/open-guide-to-kanban/" rel="noopener noreferrer"&gt;The Kanban Guide&lt;/a&gt;) — it never asks you to commit to a scope. We had no scope to commit to. We had certainty about &lt;em&gt;components&lt;/em&gt; and nothing else, so we promised in days, and only about components.&lt;/p&gt;

&lt;p&gt;Side effect worth the price of admission: those components became a shared vocabulary. When a spec later said "a filterable table with a sticky header", nobody had to guess and nobody had to build it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Months 4–6: one dev, one page. And no, this is not Extreme Programming.
&lt;/h2&gt;

&lt;p&gt;Then the designs grew into full pages and flows. A ticket stopped being "build Pagination" and became "build the search results page" — days of work across a dozen files. Four people in one Next.js repo, and the cursor had to move: promises in days no longer matched the work.&lt;/p&gt;

&lt;p&gt;So each developer owned a page, end to end. Route, data fetching, composition, tests. The architect kept owning the foundations, and reviewed everything. Same board, same dailies, same retro — bigger promise.&lt;/p&gt;

&lt;p&gt;I have heard this called Extreme Programming. It is the opposite.&lt;/p&gt;

&lt;p&gt;XP explicitly prescribes &lt;strong&gt;collective code ownership&lt;/strong&gt;: "the explicit convention that every team member is not only allowed, but in fact has a positive duty, to make changes to any code file as necessary" (&lt;a href="https://agilealliance.org/glossary/collective-ownership/" rel="noopener noreferrer"&gt;Agile Alliance&lt;/a&gt;) — renamed "Shared Code" in the second edition of Beck's book. What we did sits in a different box in Martin Fowler's taxonomy of &lt;a href="https://martinfowler.com/bliki/CodeOwnership.html" rel="noopener noreferrer"&gt;code ownership&lt;/a&gt;: &lt;strong&gt;strong ownership&lt;/strong&gt; (only the owner changes the module), softened into &lt;strong&gt;weak ownership&lt;/strong&gt; (others may, but consult the owner). Fowler openly dislikes strong ownership, and his reason is sound: a trivial change crossing a boundary becomes a negotiation.&lt;/p&gt;

&lt;p&gt;Two things made ours cheap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The shared layer stayed collective.&lt;/strong&gt; Components, tokens, utilities — anyone, anytime. Ownership applied to pages, which shared components but not logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phase 1 paid for phase 2.&lt;/strong&gt; Pages were independent &lt;em&gt;because&lt;/em&gt; three months of Kanban had already extracted everything shareable. Try strong ownership over pages that share business logic and it will hurt you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you go there, make ownership executable rather than social: a &lt;code&gt;CODEOWNERS&lt;/code&gt; file has GitHub auto-request review from the owner of the touched paths (&lt;a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners" rel="noopener noreferrer"&gt;GitHub Docs&lt;/a&gt;). And treat it as a rotation, not a title.&lt;/p&gt;

&lt;h2&gt;
  
  
  Months 7–10: Scrum, because "done" finally meant something
&lt;/h2&gt;

&lt;p&gt;Two months before go-live, the remaining work changed &lt;em&gt;nature&lt;/em&gt;, not size: cross-page functional gaps, accessibility, error states, performance, security review. The boring 20% that is 80% of perceived quality.&lt;/p&gt;

&lt;p&gt;That work has a property the earlier work lacked: &lt;strong&gt;it is finishable.&lt;/strong&gt; A Sprint is a fixed-length container with a Sprint Goal and a Definition of Done (&lt;a href="https://scrumguides.org/scrum-guide.html" rel="noopener noreferrer"&gt;Scrum Guide&lt;/a&gt;) — an inventory-clearing device, not a productivity device. In Kanban we would have kept pulling improvements forever, because there is always one more.&lt;/p&gt;

&lt;p&gt;We ran &lt;strong&gt;3-week Sprints&lt;/strong&gt;. Deliberately longer than the usual two: security and quality items slice badly into fortnights without producing half-hardened features, and at four people the ceremony overhead of a 2-week cadence was disproportionate. Our Definition of Done grew teeth here — security items became explicit exit criteria rather than good intentions, which is the practical version of what OWASP means by embedding security in the pipeline instead of bolting it on (&lt;a href="https://owasp.org/www-project-devsecops-guideline/" rel="noopener noreferrer"&gt;OWASP DevSecOps Guideline&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;One provocation while we are here: we started answering in &lt;strong&gt;story points&lt;/strong&gt;, and story points appear nowhere in the Scrum Guide. The framework asks that items be &lt;em&gt;sized&lt;/em&gt;; the currency is our invention. Which rather makes the point — what we adopted was a unit of promise, not a religion.&lt;/p&gt;

&lt;p&gt;Then we went live — and kept Sprinting for two more months. The post-launch backlog was made of real evolutions: features deferred to get the launch out, and the first round of changes asked for by actual users. Same cadence, same Definition of Done, same three-week promises.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest objections
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;"Strong ownership created knowledge silos."&lt;/strong&gt; It is the standard critique and it is the right one to raise — but on our project it did not bite. Holidays came, people covered for each other, and nothing stalled. The reason is unglamorous: the code base was properly declared and documented, the code was readable, and everything went through peer review. Silos are a &lt;em&gt;symptom&lt;/em&gt; of unreadable code plus unreviewed merges. Fix those and ownership stops being a fiefdom.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Switching methods three times must have cost you."&lt;/strong&gt; Less than you would think, and here is the mechanism: JIRA epics and a refinement ritual for story points existed very early in the project — long before Scrum, and strictly speaking they belong to neither Kanban nor strong ownership. The work was already categorised and already discussed collectively. So each transition changed one number, not a system. That is the practical argument for keeping ceremonies stable and letting only the promise move.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where the XP crowd still has a point:&lt;/strong&gt; pair programming, trunk-based development and continuous integration attack merge collisions head-on without drawing organisational boundaries at all, and they distribute knowledge as a side effect rather than as a discipline you must maintain. If your team already pairs well, try that first — you may never need the cursor to leave "days".&lt;/p&gt;

&lt;h2&gt;
  
  
  One last thing: go-live is not a methodological event
&lt;/h2&gt;

&lt;p&gt;Look at the timeline again. The most-watched date of the whole project — the launch — is the one moment where &lt;strong&gt;nothing about our way of working changed.&lt;/strong&gt; Same Scrum, same three-week Sprints, same board, straight through it. We had shipped to production, and the promise size stayed exactly where it was.&lt;/p&gt;

&lt;p&gt;The cursor came back down two months later, and for a completely different reason: &lt;strong&gt;the evolutions ran out.&lt;/strong&gt; What was left was small, independent, unpredictable and free of any scope to commit to — a bug, a content fix, a dependency bump. Sizing that in story points and boxing it into three-week promises adds ceremony to work that has no batch to clear. So maintenance went back to &lt;strong&gt;Kanban&lt;/strong&gt;, and answering in days again.&lt;/p&gt;

&lt;p&gt;That is the tell that the certainty rules and the calendar does not. Deadlines, launches and steering committees feel like they should move your method. They don't. What moves it is how much you know — and after launch, on a stable product, you know &lt;em&gt;less&lt;/em&gt; about what next week holds than you did during the Sprint. The cursor is a &lt;strong&gt;dial, not a ladder.&lt;/strong&gt; Ours went up for ten months and came back down, and that is not a regression.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would tell my past self
&lt;/h2&gt;

&lt;p&gt;Stop asking "which Agile method is right for this project". Ask &lt;strong&gt;"how big a promise can we honestly make this month"&lt;/strong&gt; — the framework name falls out of the answer, and it will be someone else's argument.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you moved that cursor mid-project? What told you it was time?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://agilemanifesto.org/" rel="noopener noreferrer"&gt;Agile Manifesto&lt;/a&gt; · &lt;a href="https://kanbanguides.org/open-guide-to-kanban/" rel="noopener noreferrer"&gt;Open Guide to Kanban&lt;/a&gt; · &lt;a href="https://agilealliance.org/glossary/collective-ownership/" rel="noopener noreferrer"&gt;Agile Alliance — Collective Code Ownership&lt;/a&gt; · &lt;a href="https://martinfowler.com/bliki/CodeOwnership.html" rel="noopener noreferrer"&gt;Martin Fowler — Code Ownership&lt;/a&gt; · &lt;a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners" rel="noopener noreferrer"&gt;GitHub Docs — About code owners&lt;/a&gt; · &lt;a href="https://scrumguides.org/scrum-guide.html" rel="noopener noreferrer"&gt;2020 Scrum Guide&lt;/a&gt; · &lt;a href="https://owasp.org/www-project-devsecops-guideline/" rel="noopener noreferrer"&gt;OWASP DevSecOps Guideline&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agile</category>
      <category>webdev</category>
      <category>architecture</category>
      <category>teamwork</category>
    </item>
    <item>
      <title>When the cloud isn't enough (triple modular redundancy)</title>
      <dc:creator>Karkael</dc:creator>
      <pubDate>Mon, 28 Oct 2024 18:42:27 +0000</pubDate>
      <link>https://dev.to/karkael/when-the-cloud-isnt-enough-triple-modular-redundancy-1lk1</link>
      <guid>https://dev.to/karkael/when-the-cloud-isnt-enough-triple-modular-redundancy-1lk1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;You're using a single source for your applications, and you're wrong.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Dear administrator, I'm humbled to make this appeal to you, after yet another failure by our team to ensure the availability of our application. I'm going back to my engineering classes, taking the opportunity to optimize, cut costs and harmonize.&lt;/p&gt;

&lt;p&gt;This article is aimed at all applications that require a high level of availability or whose data is sensitive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Triple modular redundancy, engineering curriculum
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Triple_modular_redundancy" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Triple_modular_redundancy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During your engineering courses, you must have studied processes for reinforcing your product: emergency stops, mistake-proofing, monitoring tools. Today, remember triple modular redundancy: a critical service must be available from at least 3 sources.&lt;/p&gt;

&lt;p&gt;For your application, this means you need to think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;provide a service from 3 sources,&lt;/li&gt;
&lt;li&gt;duplicate the data in 3 sources,&lt;/li&gt;
&lt;li&gt;allow a balance from one to the other.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnf4stoicynydzox2wsgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnf4stoicynydzox2wsgy.png" alt="Triple modular redundancy schema" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Standards, ISO-27001
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/ISO/IEC_27001" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/ISO/IEC_27001&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you're working with large entities or internationally, you need to ensure your customers' your ability to follow standards such as ISO-27001, which will enable you to work with industries in particular. These standards were introduced in 2005 and are regularly revised. &lt;/p&gt;

&lt;p&gt;ISO-27001 is based on 3 pillars:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confidentiality of information,&lt;/li&gt;
&lt;li&gt;Information integrity,&lt;/li&gt;
&lt;li&gt;Information availability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To obtain this certification, having a single data source and a single application source won't be enough: you'll have to apply triple modular redundancy. You can't depend solely on the server running on your premises, nor can you depend solely on a cloud. &lt;/p&gt;

&lt;h2&gt;
  
  
  The benefits of Clouds and internal servers
&lt;/h2&gt;

&lt;p&gt;The advantages of a cloud:&lt;/p&gt;

&lt;p&gt;✅ faster start-up,&lt;br&gt;
✅ no hardware management,&lt;br&gt;
✅ outsourced hardware technical skills (fewer employees),&lt;br&gt;
✅ standards already applied (e.g. redundancy),&lt;br&gt;
✅ flexibility and on-demand dimensions,&lt;br&gt;
✅ service close to the customer.&lt;/p&gt;

&lt;p&gt;The advantages of an in-house server:&lt;/p&gt;

&lt;p&gt;✅ complete, self-supervised management,&lt;br&gt;
✅ fixed costs,&lt;br&gt;
✅ information security assured,&lt;br&gt;
✅ easy migrations,&lt;br&gt;
✅ self-managed breakdowns,&lt;br&gt;
✅ controlled liability,&lt;br&gt;
✅ evolutions as needed,&lt;br&gt;
✅ servers developed to suit the customer, with no superfluous extras.&lt;/p&gt;

&lt;p&gt;In this tangle of benefits, it's important to understand:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;that a cloud will help you get started and take good practices early in your application development ⭐, &lt;/li&gt;
&lt;li&gt;that it's in your interest to favor an in-house application and data service (as soon as possible) ⭐⭐, &lt;/li&gt;
&lt;li&gt;that you will need to switch to cloud in case of in-house problems and program a balance ⭐⭐⭐, &lt;/li&gt;
&lt;li&gt;that you'll need to enable service redundancy on the cloud ⭐⭐⭐⭐. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By choosing a triple redundancy of your service (by having at least 3 internal servers and clouds), you'll even be able to determine the qualitative data in case of conflict between two services: the two servers that give the same answer are right, the server that answers differently must correct its corrupted data ⭐⭐⭐⭐⭐.&lt;/p&gt;

&lt;h2&gt;
  
  
  Successfully balancing
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Encourage in-house use of the application: its fixed cost means you can budget correctly, while the cloud can take over in the event of overload or breakdown. Cloud costs are harder to predict. When only your in-house server is running, you save a lot of money on the cloud.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5zwoarkmviueog2ikbe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5zwoarkmviueog2ikbe.png" alt="Cloud type" width="800" height="744"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you've decided how to disperse your services (how many internal servers and cloud servers) and once you've defined the type of service you need (FaaS, SaaS, PaaS, IaaS, On-Premise), then you can determine the cloud closest to your needs, start development with it, try to get the same level of service internally, and finally look for another cloud with the same level of service to get triple redundancy. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Consider working with at least one cloud that can provide services as close to the customer as possible, particularly to avoid additional download costs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Available tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Containers and management
&lt;/h3&gt;

&lt;p&gt;For simple development, I'd recommend pairs like Kubernetes and Docker, which can easily export a similar configuration between the local work environment, the internal server and all the clouds that enable this kind of IaaS. &lt;/p&gt;

&lt;p&gt;Developing with Kubernetes ensures that all servers are the same, and reduces the risk of getting different results (such as corruption).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbd2ux55rlo19p8ldouc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbd2ux55rlo19p8ldouc.png" alt="Kubernetes &amp;amp; Docker" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Software-as-a-Service
&lt;/h3&gt;

&lt;p&gt;For a simple, inexpensive web application, you'll need a domain name, HTTP server, file server and database, take your pick:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A registrar that allows balancing on its CNAME (OVH, Gandi, ...).&lt;/li&gt;
&lt;li&gt;AWS: lambda, S3, RDS&lt;/li&gt;
&lt;li&gt;Azure: Functions, Blob Storage, Database&lt;/li&gt;
&lt;li&gt;Google: Cloud Run, Cloud CDN, Cloud SQL&lt;/li&gt;
&lt;li&gt;A multitude of equivalents for in-house services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developing compatible SaaS is more difficult, but it does help to reduce runtime costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleaning, synchronization and security
&lt;/h2&gt;

&lt;p&gt;This redundancy calls for exceptional rigor and costly management. You'll also need to ensure that the perimeters are secure from one another, and that synchronization does not propagate attacks. You'll need to ensure 4 mandatory services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;determine the server closest to the client, to favor nearby downloads,&lt;/li&gt;
&lt;li&gt;always copy all data to other cloud and internal servers,&lt;/li&gt;
&lt;li&gt;check integrity regularly (e.g. daily at midnight UTC with hash keys) and deal with data corruption,&lt;/li&gt;
&lt;li&gt;produce synchronization reports. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Block-chain
&lt;/h2&gt;

&lt;p&gt;In the spirit of redundancy and data integrity, block-chain proposes a systemic approach to determining a secure, decentralized source. In reality, we're not far from a block-chain. &lt;/p&gt;

&lt;p&gt;Depending on your data format, you can use blockchain. My guess is that most applications will need services that handle data in very different formats (user, file, checkout, auth), and your CDN or PostgreSQL servers deserve synchronization services at their scale. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Make sure you're not dependent on a single data source. An in-house server and a cloud can work in a complementary way. You'll get a secure, robust application that's ready to work with global companies.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Quand le Cloud n'est pas suffisant (triple redondance modulaire)</title>
      <dc:creator>Karkael</dc:creator>
      <pubDate>Mon, 28 Oct 2024 18:30:54 +0000</pubDate>
      <link>https://dev.to/karkael/quand-le-cloud-nest-pas-suffisant-triple-redondance-modulaire-24pl</link>
      <guid>https://dev.to/karkael/quand-le-cloud-nest-pas-suffisant-triple-redondance-modulaire-24pl</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Vous utilisez une seule source pour vos applications, et vous avez tort.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Très cher administrateur, c'est avec humilité que je te fais cet appel, après un nouvel échec de notre équipe à assurer la disponibilité de notre application. Je reviens vers mes cours d'ingénieur, j'en profite pour optimiser, diminuer les coûts et harmoniser.&lt;/p&gt;

&lt;p&gt;Cet article s'adresse à toutes les applications qui ont besoin d'un fort taux de disponibilité ou dont les données sont sensibles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Triple redondance modulaire, cursus ingénieur
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Triple_modular_redundancy" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Triple_modular_redundancy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Durant vos cours d'ingénieur, vous avez forcément étudié des procédés pour renforcer votre produit: arrêts d'urgence, détrompeurs, outils surveillance. Aujourd'hui, rappelez-vous de la triple redondance modulaire: un service critique doit être disponible par au moins 3 sources. &lt;/p&gt;

&lt;p&gt;Pour votre application, cela signifie que vous devez penser à:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fournir un service par 3 sources,&lt;/li&gt;
&lt;li&gt;dupliquer la données en 3 sources,&lt;/li&gt;
&lt;li&gt;permettre une balance de l'un à l'autre.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnf4stoicynydzox2wsgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnf4stoicynydzox2wsgy.png" alt="Triple modular redundancy schema" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Normes, ISO-27001
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/ISO/IEC_27001" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/ISO/IEC_27001&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lorsque vous travaillez avec de grandes entités ou à l'international, vous devez assurer à vos clients la capacité à suivre des normes comme l'ISO-27001, qui vous permettra notamment de travailler avec les industries. Ce sont des normes qui sont apparues en 2005 et révisées régulièrement. &lt;/p&gt;

&lt;p&gt;L'ISO-27001 repose sur 3 pilliers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La confidentialité de l'information,&lt;/li&gt;
&lt;li&gt;L'intégrité de l'information,&lt;/li&gt;
&lt;li&gt;La disponibilité de l'information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour obtenir cette certification, avoir une seule source de donnée et une seule source applicative ne sera pas suffisante, vous allez devoir appliquer la triple redondance modulaire. Vous ne pouvez pas dépendre que du serveur qui tourne dans vos locaux, vous ne pouvez pas non plus dépendre que d'un cloud. &lt;/p&gt;

&lt;h2&gt;
  
  
  Les apports des Clouds et des Serveurs internes
&lt;/h2&gt;

&lt;p&gt;Les avantages d'un cloud:&lt;/p&gt;

&lt;p&gt;✅ démarrage plus rapide,&lt;br&gt;
✅ pas de gestion matérielle,&lt;br&gt;
✅ compétences techniques matérielles sous-traitées (moins de salariés),&lt;br&gt;
✅ des normes déjà appliquées (ex: redondance),&lt;br&gt;
✅ flexibilité et dimensions à la demande,&lt;br&gt;
✅ service au plus près du client.&lt;/p&gt;

&lt;p&gt;Les avantages d'un serveur interne:&lt;/p&gt;

&lt;p&gt;✅ gestion entière supervisée soi-même,&lt;br&gt;
✅ coûts fixes,&lt;br&gt;
✅ sécurité de l'information assurée,&lt;br&gt;
✅ migrations faciles,&lt;br&gt;
✅ pannes gérées soi-même,&lt;br&gt;
✅ responsabilité maîtrisée,&lt;br&gt;
✅ évolutions au besoin,&lt;br&gt;
✅ serveurs développé pour correspondre au client, sans superflus.&lt;/p&gt;

&lt;p&gt;Dans cet enchevêtrement d'avantages, il faut comprendre:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;qu'un cloud vous aidera à démarrer et prendre des bonnes pratiques tôt dans le développement de votre application ⭐, &lt;/li&gt;
&lt;li&gt;que (dès que possible) vous avez intérêt à favoriser un service interne de l'application et des données ⭐⭐, &lt;/li&gt;
&lt;li&gt;que vous aurez besoin de cloud en cas de problème en interne et programmer une balance ⭐⭐⭐, &lt;/li&gt;
&lt;li&gt;que vous devrez permettre une redondance du service sur le cloud ⭐⭐⭐⭐. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En choisissant une triple redondance de votre service (en ayant au moins 3 serveurs internes et clouds), vous allez même pouvoir déterminer la donnée qualitative en cas de conflit entre deux services: les deux serveurs qui donnent la même réponse ont raison, le serveur qui répond différemment doit corriger sa donnée corrompue ⭐⭐⭐⭐⭐.&lt;/p&gt;

&lt;h2&gt;
  
  
  Réussir la balance
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Favorisez l'utilisation de l'application en interne: son coût fixe vous permet de prévoir un budget correctement, tandis que le cloud peut prendre le relais en cas de surcharge ou de panne. Le coût d'un cloud est plus difficile à prévoir. Lorsque seul votre serveur interne tourne, vous faites de grosses économies sur le cloud.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5zwoarkmviueog2ikbe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5zwoarkmviueog2ikbe.png" alt="Type de cloud" width="800" height="744"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quand vous aurez choisi comment disperser vos services (combien de serveurs internes et serveurs clouds) et quand vous aurez défini le type de service nécessaire (FaaS, SaaS, PaaS, IaaS, On-Premise), alors vous pourrez déterminer le cloud le plus proche de vos besoins, démarrer le développement avec lui, tenter d'obtenir le même niveau de service en interne, et enfin chercher un autre cloud avec le même niveau de service pour obtenir la triple redondance. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pensez à travailler avec au moins un cloud qui peut mettre à disposition des services au plus proche du client, notamment pour éviter les surcoûts liés au téléchargement.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Les outils disponibles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Conteneur et gestion
&lt;/h3&gt;

&lt;p&gt;Dans le cadre d'un développement simple, je recommande plutôt des couples comme Kubernetes et Docker, qui peuvent facilement exporter une configuration similaire entre l'environnement de travail local, le serveur interne et tous les clouds qui permettent ce genre de IaaS. &lt;/p&gt;

&lt;p&gt;Développer avec Kubernetes permet d'assurer que tous les serveurs sont les mêmes, et diminue les risques d'obtenir des résultats différents (comme une corruption).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbd2ux55rlo19p8ldouc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbd2ux55rlo19p8ldouc.png" alt="Kubernetes et Docker" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Software-as-a-Service
&lt;/h3&gt;

&lt;p&gt;Dans le cadre d'une application web simple et peu coûteuse, vous avez besoin d'un nom de domaine, d'un serveur HTTP, d'un serveur de fichiers et d'une base de donnée, choisissez:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Un registar qui permet la balance sur ses CNAME (OVH, Gandi, ...).&lt;/li&gt;
&lt;li&gt;AWS: lambda, S3, RDS&lt;/li&gt;
&lt;li&gt;Azure: Functions, Blob Storage, Database&lt;/li&gt;
&lt;li&gt;Google: Cloud Run, Cloud CDN, Cloud SQL&lt;/li&gt;
&lt;li&gt;Une multitude d'équivalents pour les services internes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Développer des SaaS compatibles est plus difficile, mais ça permet de diminuer les coûts sur l'exécution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nettoyage, synchronisation et sécurité
&lt;/h2&gt;

&lt;p&gt;Cette redondance impose une rigueur exceptionnelle et avec un management coûteux. Vous allez aussi vous assurer que les périmètres sont sécurisés les uns par rapport aux autres et que les synchronisations ne propagent pas d'attaque. Vous devrez vous assurer de 4 services obligatoires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;déterminer le serveur le plus proche du client pour favoriser les téléchargements proches,&lt;/li&gt;
&lt;li&gt;toujours copier toutes les données dans les autres serveurs cloud et internes,&lt;/li&gt;
&lt;li&gt;s'assurer de l'intégrité régulièrement (ex: tous les jours à minuit UTC avec des clefs de hash) et régler les corruptions de données,&lt;/li&gt;
&lt;li&gt;produire des rapports de synchronisation. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Block-chain
&lt;/h2&gt;

&lt;p&gt;Dans l'esprit de la redondance et de l'intégrité des données, la block-chain propose une approche systémique pour déterminer une source sûre et décentralisée. En réalité, on n'est pas loin d'une block-chain. &lt;/p&gt;

&lt;p&gt;Selon votre format de donnée, vous pouvez faire appel à la block-chain. J'estime que la plupart des applications auront besoin de services qui gèrent des données dont les formats seront très différents les uns des autres (user, file, checkout, auth), et vos serveurs CDN ou PostgreSQL méritent des services de synchronisation à leur échelle. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Assurez-vous rapidement que vous n'êtes pas dépendant d'une seule source de données. Un serveur interne et un cloud peuvent travailler de façon complémentaire. Vous obtiendrez une application sécurisée, robuste et prête pour travailler avec les entreprises internationales.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>devops</category>
      <category>productivity</category>
      <category>french</category>
    </item>
    <item>
      <title>When the cost of quality (COQ) overwhelms the project</title>
      <dc:creator>Karkael</dc:creator>
      <pubDate>Mon, 23 Sep 2024 14:16:24 +0000</pubDate>
      <link>https://dev.to/karkael/when-the-cost-of-quality-coq-overwhelms-the-project-33do</link>
      <guid>https://dev.to/karkael/when-the-cost-of-quality-coq-overwhelms-the-project-33do</guid>
      <description>&lt;p&gt;As I'm looking for a new job as a web developer, I'm looking at my reasons for leaving a wonderful company with a senior position to join another project. Let me tell you how the extra cost of quality made me lose my footing. &lt;/p&gt;

&lt;h1&gt;
  
  
  Companies naturally evolves from feature-oriented to quality-oriented
&lt;/h1&gt;

&lt;p&gt;Software development is successful when the customer is satisfied and the company has sufficient revenue. There is a break in the life of the project: it's &lt;strong&gt;when there are enough customers to provide support services&lt;/strong&gt;. In this case, the company chooses to focus on the quality of the most lucrative functions, and to redistribute expenses towards building customer loyalty. Congratulations, you're part of a sustainable company!&lt;/p&gt;

&lt;p&gt;Here is an exhaustive list of practices to focus on quality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The basics: hire skilled employees, use ticketing &amp;amp; versionning flow, follow standard practices of your choosen tools.&lt;/li&gt;
&lt;li&gt;Contribute for continuous improvment (plan, try, measure, standardize).&lt;/li&gt;
&lt;li&gt;Add or switch for some better tools (read benchmarks).&lt;/li&gt;
&lt;li&gt;Add automated tests (unit tests, end-to-end tests, non-regression testing).&lt;/li&gt;
&lt;li&gt;Add automated workers (linters, code-analysers, automated code-reviewers).&lt;/li&gt;
&lt;li&gt;Delegate checks to machines (CI/CD).&lt;/li&gt;
&lt;li&gt;Forcing more manual tests or hire manual-testers.&lt;/li&gt;
&lt;li&gt;Dedicated teams (release, cybersecurity, compliance), audits, formations.&lt;/li&gt;
&lt;li&gt;Run AI in your project. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's a big difference in quality rules between a business-to-business software with 150 users and thousands of functions, and a retail application for 100k simultaneous customers and only one purchase function. &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%2Fja193wlvf6oqdvv66pc0.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%2Fja193wlvf6oqdvv66pc0.png" alt="Cost of quality is sum of cost good quality and cost of bad quality where both extremes are exceeding any budget" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your company will add more quality rules, sometimes after a critical problem, sometimes in anticipation of problems. The more rules you add, the more expensive quality becomes. You can then calculate the cost to obtain quality (COQ):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cost of bad code =
  Human time for resolving issues + Bad reputation

Cost of good code =
  Human time for quality + Cost of dedicated machines

Cost to obtain quality =
  Cost of bad code + Cost of good code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Why the hell any company would choose bad-quality?
&lt;/h1&gt;

&lt;p&gt;They don't! No company would allow crappy code with security issues. No, they wouldn't. But you have to recognize that quality is clearly not the priority when you have no customer, no budget and the concept is still evolving. &lt;/p&gt;

&lt;p&gt;You then need to hire people who are quick to develop a saleable product, you need to focus on highly anticipated features that will set you apart from the competition or improve your public image. &lt;/p&gt;

&lt;h1&gt;
  
  
  Force developer have good practices
&lt;/h1&gt;

&lt;p&gt;A company that is making progress and maintaining good relations with its customers will evolve its profile to match those customers. The company will also evolve the profile of its developers in this direction, by imposing rules that are of interest. Developers take on board the new rules, change their habits and acquire reflexes for their working day.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Customers expectations -&amp;gt; developers new reflexes&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  But don't lock the development
&lt;/h1&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%2Fbyf8ehbztj9ueqmerq9c.jpg" 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%2Fbyf8ehbztj9ueqmerq9c.jpg" alt="Old train with coal motor" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, companies can become over-costly on quality and forget to develop new products. As a result, marketing-commercial-product plans dilate and new products are delayed. &lt;/p&gt;

&lt;p&gt;A company with quality overruns can be identified by a decrease in technical work time, a lengthening plan, rules that prevent novelty, difficulty with change, long processes, interminable meetings with little added value.&lt;/p&gt;

&lt;p&gt;A good practice is following continuous improvement.&lt;/p&gt;

&lt;p&gt;To get started, define your actual status: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;by listing what matter for current customers, &lt;/li&gt;
&lt;li&gt;by listing opportunities,&lt;/li&gt;
&lt;li&gt;by measuring time to market, &lt;/li&gt;
&lt;li&gt;by measuring quality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next steps are to plan numerous improvements, select and implement a few at a time, then check that they're working for you. An improvement could be adding good-practices or reducing processus. &lt;/p&gt;

&lt;h1&gt;
  
  
  Example of quality surcharge on web-development
&lt;/h1&gt;

&lt;p&gt;It's time to share my personal experience with you. Several companies have followed this path and ended up, in spite of myself, being unable to develop new functions in their applications, as a result of an accumulation of rules, which often took them out of Agile good practice, in order to have over-control, or to protect themselves from a non-existent risk, or finally because the company was no more expecting new features.&lt;/p&gt;

&lt;p&gt;The company I work for started with a CI/CD and unit tests on main features. Now we changed for a custom CI/CD with AWS, running unit tests for 75% coverage, running non-regression tests for 40% user journeys, with 20% employees dedicated for QA, 1/3 week for release production with 90% employees of the company (product, quality, developers, infra). The cost of quality is actually 80% of the budget (employees and AWS CI/CD) and there is no more time for new feature here. Actually, the customers are satisfied by product, but are awaiting for some expected features, and quality issues are from product (no more technical issues).&lt;/p&gt;

&lt;p&gt;It's time to change company mind and find a better fit for customer expectations.&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%2Fnh5jeajhhgxqiarp3rcb.jpg" 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%2Fnh5jeajhhgxqiarp3rcb.jpg" alt="The shinkansen train, the fastest train in world" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;In order to control the cost of obtaining quality, we need to ensure customer loyalty and develop our customer base, and adapt quality, costs and time to market. It's not uncommon to fall into the trap of over-quality. In IT, however, you have to keep inventing new things to ensure the longevity of your business, and controlled risk-taking remains the best strategy. &lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>development</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
