<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Thomas Poignant on Medium]]></title>
        <description><![CDATA[Stories by Thomas Poignant on Medium]]></description>
        <link>https://medium.com/@thomaspoignant?source=rss-9a58464dd8e9------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*akZeL-W2OjlsiMTYNgb_Ig.jpeg</url>
            <title>Stories by Thomas Poignant on Medium</title>
            <link>https://medium.com/@thomaspoignant?source=rss-9a58464dd8e9------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 23 Jun 2026 18:45:18 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@thomaspoignant/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Implement Vendor Agnostic Feature Flags in your Node.js Application using OpenFeature ]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://faun.pub/implement-vendor-agnostic-feature-flags-in-your-node-js-application-using-openfeature-b89fde448f6c?source=rss-9a58464dd8e9------2"><img src="https://cdn-images-1.medium.com/max/1000/0*hL2jyUGoOrfoGEsA" width="1000"></a></p><p class="medium-feed-snippet">In this article we will explain how to use OpenFeature in your Node.js application using GO Feature Flag</p><p class="medium-feed-link"><a href="https://faun.pub/implement-vendor-agnostic-feature-flags-in-your-node-js-application-using-openfeature-b89fde448f6c?source=rss-9a58464dd8e9------2">Continue reading on FAUN.dev()  »</a></p></div>]]></description>
            <link>https://faun.pub/implement-vendor-agnostic-feature-flags-in-your-node-js-application-using-openfeature-b89fde448f6c?source=rss-9a58464dd8e9------2</link>
            <guid isPermaLink="false">https://medium.com/p/b89fde448f6c</guid>
            <category><![CDATA[development]]></category>
            <category><![CDATA[feature-flags]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[devops]]></category>
            <dc:creator><![CDATA[Thomas Poignant]]></dc:creator>
            <pubDate>Thu, 17 Aug 2023 14:46:18 GMT</pubDate>
            <atom:updated>2023-08-17T14:46:18.603Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[ Feature Flags in Dev’Obs Podcast ]]></title>
            <link>https://thomaspoignant.medium.com/feature-flags-in-devobs-podcast-ec11079f8a4b?source=rss-9a58464dd8e9------2</link>
            <guid isPermaLink="false">https://medium.com/p/ec11079f8a4b</guid>
            <category><![CDATA[feature-toggles]]></category>
            <category><![CDATA[podcast]]></category>
            <category><![CDATA[feature-flags]]></category>
            <category><![CDATA[feature-flagging]]></category>
            <dc:creator><![CDATA[Thomas Poignant]]></dc:creator>
            <pubDate>Thu, 07 Jul 2022 12:55:51 GMT</pubDate>
            <atom:updated>2022-07-07T12:55:51.711Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*_RSis4-2oGVOg3cG" /><figcaption>Photo by <a href="https://unsplash.com/@convertkit?utm_source=medium&amp;utm_medium=referral">ConvertKit</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Earlier this week the super cool podcast Dev’Obs asked me to talk about feature flags, <a href="https://gofeatureflag.org"><strong>go-feature-flag</strong></a> and also the super nice initiative <a href="https://openfeature.dev"><strong>Open-feature</strong></a>.</p><p>The podcast is in French 🇫🇷 <em>(yes I know sorry…)</em> but you can learn a lot of cool things, when to use them, what is <strong>Open-feature</strong> about and all the cool things that the feature flags can bring to your developer experience.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.listennotes.com%2Fpodcasts%2Fdevobs%2Fdevobs-24-feature-flags-rknRoFGL7N5%2Fembed%2F&amp;display_name=Listen+Notes&amp;url=https%3A%2F%2Fwww.listennotes.com%2Fpodcasts%2Fdevobs%2Fdevobs-24-feature-flags-rknRoFGL7N5%2F&amp;image=https%3A%2F%2Fcdn-images-1.listennotes.com%2Fpodcasts%2Fdevobs-p7t-6jgzEvoRFbd-bH-BpsNdJWX.300x300.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=listennotes" width="400" height="180" frameborder="0" scrolling="no"><a href="https://medium.com/media/56755198ee47ff505b0fc75e143e43e1/href">https://medium.com/media/56755198ee47ff505b0fc75e143e43e1/href</a></iframe><p>Please tell me if you liked it or not, and if you need someone to talk about feature flagging please <a href="mailto:thomas.poignant@gofeatureflag.org">contact me</a> and I will advocate for it.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ec11079f8a4b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why & How to Collect Your Technical Debt]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/geekculture/why-how-to-collect-your-technical-debt-bd917960eee?source=rss-9a58464dd8e9------2"><img src="https://cdn-images-1.medium.com/max/2600/0*v2oiG-sD4E9955sU" width="6240"></a></p><p class="medium-feed-snippet">Bring awareness about technical debt and help your management to take decision.</p><p class="medium-feed-link"><a href="https://medium.com/geekculture/why-how-to-collect-your-technical-debt-bd917960eee?source=rss-9a58464dd8e9------2">Continue reading on Geek Culture »</a></p></div>]]></description>
            <link>https://medium.com/geekculture/why-how-to-collect-your-technical-debt-bd917960eee?source=rss-9a58464dd8e9------2</link>
            <guid isPermaLink="false">https://medium.com/p/bd917960eee</guid>
            <category><![CDATA[technical-debt]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[product-management]]></category>
            <dc:creator><![CDATA[Thomas Poignant]]></dc:creator>
            <pubDate>Tue, 30 Nov 2021 07:02:45 GMT</pubDate>
            <atom:updated>2021-11-30T19:55:42.567Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How To Design Pipelines and Sort by Dependencies in Python]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/better-programming/how-to-design-pipelines-and-sort-by-dependencies-in-python-ed876495a826?source=rss-9a58464dd8e9------2"><img src="https://cdn-images-1.medium.com/max/2600/0*29cUKUe-3TTKCP2B" width="3779"></a></p><p class="medium-feed-snippet">Sort a direct acyclic graph (DAG) with parallel steps</p><p class="medium-feed-link"><a href="https://medium.com/better-programming/how-to-design-pipelines-and-sort-by-dependencies-in-python-ed876495a826?source=rss-9a58464dd8e9------2">Continue reading on Better Programming »</a></p></div>]]></description>
            <link>https://medium.com/better-programming/how-to-design-pipelines-and-sort-by-dependencies-in-python-ed876495a826?source=rss-9a58464dd8e9------2</link>
            <guid isPermaLink="false">https://medium.com/p/ed876495a826</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Thomas Poignant]]></dc:creator>
            <pubDate>Wed, 10 Nov 2021 18:15:15 GMT</pubDate>
            <atom:updated>2022-01-19T11:30:16.134Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Golang: Automate Your Product Release Cycles Using Go-Feature-Flag]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/better-programming/automate-your-product-release-cycles-using-go-feature-flag-6ab73f869f?source=rss-9a58464dd8e9------2"><img src="https://cdn-images-1.medium.com/max/2600/0*DQUV_fozqXbwxRXy" width="6000"></a></p><p class="medium-feed-snippet">Progressive rollout, scheduling workflows, and experimentation with just a basic configuration</p><p class="medium-feed-link"><a href="https://medium.com/better-programming/automate-your-product-release-cycles-using-go-feature-flag-6ab73f869f?source=rss-9a58464dd8e9------2">Continue reading on Better Programming »</a></p></div>]]></description>
            <link>https://medium.com/better-programming/automate-your-product-release-cycles-using-go-feature-flag-6ab73f869f?source=rss-9a58464dd8e9------2</link>
            <guid isPermaLink="false">https://medium.com/p/6ab73f869f</guid>
            <category><![CDATA[go]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Thomas Poignant]]></dc:creator>
            <pubDate>Wed, 26 May 2021 14:59:54 GMT</pubDate>
            <atom:updated>2021-05-27T11:58:11.986Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Switch easily between multiple kubernetes version on MacOs]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://faun.pub/switch-easily-between-multiple-kubernetes-version-on-macos-9d61b9bc8287?source=rss-9a58464dd8e9------2"><img src="https://cdn-images-1.medium.com/max/2600/0*a5thvQSK2Q5VpjwJ" width="4897"></a></p><p class="medium-feed-snippet">Always use the right kubectl version for your cluster &#x1F39B;</p><p class="medium-feed-link"><a href="https://faun.pub/switch-easily-between-multiple-kubernetes-version-on-macos-9d61b9bc8287?source=rss-9a58464dd8e9------2">Continue reading on FAUN.dev()  »</a></p></div>]]></description>
            <link>https://faun.pub/switch-easily-between-multiple-kubernetes-version-on-macos-9d61b9bc8287?source=rss-9a58464dd8e9------2</link>
            <guid isPermaLink="false">https://medium.com/p/9d61b9bc8287</guid>
            <category><![CDATA[k8s]]></category>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[kubectl]]></category>
            <category><![CDATA[devops]]></category>
            <dc:creator><![CDATA[Thomas Poignant]]></dc:creator>
            <pubDate>Thu, 06 May 2021 17:17:29 GMT</pubDate>
            <atom:updated>2023-02-01T16:43:34.093Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Build a Configurable Chain of Responsibility in Go]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/better-programming/build-a-configurable-chain-of-responsibility-in-go-80a7cdcd1ab2?source=rss-9a58464dd8e9------2"><img src="https://cdn-images-1.medium.com/max/2600/0*DLj103QI9xVOmDlz" width="5472"></a></p><p class="medium-feed-snippet">Use the Chain of Responsibility design pattern to modify app behavior based on configuration changes</p><p class="medium-feed-link"><a href="https://medium.com/better-programming/build-a-configurable-chain-of-responsibility-in-go-80a7cdcd1ab2?source=rss-9a58464dd8e9------2">Continue reading on Better Programming »</a></p></div>]]></description>
            <link>https://medium.com/better-programming/build-a-configurable-chain-of-responsibility-in-go-80a7cdcd1ab2?source=rss-9a58464dd8e9------2</link>
            <guid isPermaLink="false">https://medium.com/p/80a7cdcd1ab2</guid>
            <category><![CDATA[golang]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[go]]></category>
            <dc:creator><![CDATA[Thomas Poignant]]></dc:creator>
            <pubDate>Tue, 20 Apr 2021 15:36:15 GMT</pubDate>
            <atom:updated>2021-04-20T15:36:15.429Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Supercharge Your Dev Machine by Unleashing the Git Command Line]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/better-programming/supercharge-your-mac-by-unleashing-the-git-command-line-e5e9f292f7d7?source=rss-9a58464dd8e9------2"><img src="https://cdn-images-1.medium.com/max/1000/0*bImsVpqbapl_bRV9" width="1000"></a></p><p class="medium-feed-snippet">Tips to improve your Git experience and be more productive</p><p class="medium-feed-link"><a href="https://medium.com/better-programming/supercharge-your-mac-by-unleashing-the-git-command-line-e5e9f292f7d7?source=rss-9a58464dd8e9------2">Continue reading on Better Programming »</a></p></div>]]></description>
            <link>https://medium.com/better-programming/supercharge-your-mac-by-unleashing-the-git-command-line-e5e9f292f7d7?source=rss-9a58464dd8e9------2</link>
            <guid isPermaLink="false">https://medium.com/p/e5e9f292f7d7</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[git]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[productivity]]></category>
            <dc:creator><![CDATA[Thomas Poignant]]></dc:creator>
            <pubDate>Thu, 25 Mar 2021 17:41:31 GMT</pubDate>
            <atom:updated>2021-03-26T14:48:59.216Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Optimizing for MTTR over MTBF is good for your product]]></title>
            <link>https://thomaspoignant.medium.com/optimizing-for-mttr-over-mtbf-is-good-for-your-product-c784e1da74e6?source=rss-9a58464dd8e9------2</link>
            <guid isPermaLink="false">https://medium.com/p/c784e1da74e6</guid>
            <category><![CDATA[observability]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[monitoring]]></category>
            <category><![CDATA[distributed-systems]]></category>
            <category><![CDATA[software-design]]></category>
            <dc:creator><![CDATA[Thomas Poignant]]></dc:creator>
            <pubDate>Thu, 04 Mar 2021 10:17:07 GMT</pubDate>
            <atom:updated>2021-03-23T01:58:15.890Z</atom:updated>
            <content:encoded><![CDATA[<h4>Fail fast and recover</h4><p>This is an endless discussion when creating a new team or product; should I prioritise <em>stability and availability</em> over <em>release frequency</em>? In more technical terms, are you a <strong>mean time to recovery</strong> Team (MTTR) or a <strong>mean time between failure team</strong> (MTBF)?</p><p>MTBF and MTTR are metrics that together determine the availability of your system, so they have a direct impact on how your team is organised.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*AiwgRPdRljMkkLNI.jpeg" /><figcaption>MTTR vs MTBF</figcaption></figure><p>This blog post is in favour of <strong>MTTR</strong> because it reduces the lead time (the time between the initiation and completion) of a feature; this is what we experienced in <a href="https://www.adevinta.com/">Adevinta</a>.</p><p>MTTR is the concept of regularly deploying small changes, testing in production and having the tooling required to detect and react quickly to failures.</p><h3>More deployments increase the quality</h3><p>Engineers can be a bit lost with the concept of <strong>MTTR </strong>at first because it’s stressful when things go wrong.</p><p>The concept behind <strong>MTBF</strong> is well known by engineers: <em>“you produce quality code that can run forever,”</em> all the code goes live in one big release which is tested by your QA and deployed every two weeks.</p><p>When something goes wrong, most of the time it’s a tricky problem which can take a lot of time to understand. Moreover, rolling back two weeks of features at once often ends with a debate with your stakeholder.</p><p>With <strong>MTTR</strong> the goal is different: you have a constant stream of deployments. With more deployments come more problems, but you expect to fail only with small issues and fix them as soon as they happen.</p><p>Keep in mind here that your team should be optimised to respond to failures quickly and iterate the code as soon as something happens.</p><p>This also means that you should test each new feature independently, with small changesets for each version, so your team will deliver less code for each release. This will automatically force people to do smaller pull requests <em>(and reviews are often better with less code)</em>. You also create a strong dynamic inside the team because it becomes everyone’s fault if something goes wrong.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*jFMqxoPmKyJ-h0O6" /><figcaption>Photo by <a href="https://unsplash.com/@brett_jordan?utm_source=medium&amp;utm_medium=referral">Brett Jordan</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>Accept failure to improve your availability</h3><p>A recent <a href="https://itic-corp.com/blog/2020/06/forty-percent-of-enterprises-say-hourly-downtime-costs-top-1million/">Information Technology Intelligence Consulting survey<em> </em></a>reports that hourly downtime can cost up to $1 million. This means that companies of all sizes across all vertical markets should have little or no tolerance for downtime. So the conclusion is that you should be ready when it fails.</p><p><strong>MTBF</strong> minimises changes while <strong>MTTR</strong> encourages them. It can feel unnatural to have more stability when using an <strong>MTTR</strong> approach, but you have more control over your availability: this is what we call “error budget”. This is the maximum amount of time that a technical system can fail without contractual consequences.</p><p>For example, if your Service Level Agreement (SLA) specifies that systems will function 99.99%, that means your error budget <em>(or the time your systems can go down without consequences)</em> is 52 minutes and 35 seconds per year.</p><p>When optimising for <strong>MTBF</strong>, your product uptime is improved: you have great SLO <em>(service level objective). </em>But as soon as you have a problem you burn your error budget extremely quickly because problems are complex and rollbacks are complicated. I’m sure you’ve already heard someone say <em>“except during incidents our SLI is great!”</em></p><p>With <strong>MTTR</strong>, the team is prepared for incidents to occur and to carry out small rollbacks and fast fixes… It’s therefore easier to manage your error budget. In other words, you can deploy less often when you are about to reach your SLO, but this also means that you can use this budget to test things in production directly <em>(A/B tests, new features, etc).</em></p><h3>Prepare your team for success</h3><p>MTTR will also help improve team performance because dealing with recurrent problems trains the team to react when something goes wrong. Since incidents can happen at any time, everyone has to be prepared to fix the system based on metrics set by the whole team on your monitoring/observability system. Those metrics should be focused on the users/business impact and not on the technical aspect because, in the end, this is the core of your business.</p><p>A basic routine would be to review your indicators at each daily meeting because they will drive what you can do or not do during the day.</p><p>You should also set some rules when a new undetected incident happens. You should first write a post-mortem with details on the incident, then correct the problem and add new alerts to detect it automatically next time something happens. The goal is to use each event as a way to learn and improve how the team is working.</p><h3>Tooling to optimise for MTTR</h3><p>Here is a list of things you should consider in order to have an efficient MTTR team:</p><p><strong>Enable a DevOps culture/collaboration in the team</strong></p><p>It’s really important that your team understands how the whole system is working — from the code to the servers and the data; when something goes wrong it should never be a problem for someone else.</p><p><strong>Automate everything</strong></p><ul><li>Have a predictive and automated way of pushing your changes to users <em>(keep everything in git)</em>.</li><li>Reduce your time to deploy to have the shortest feedback loop possible <em>(e.g. if your deployment takes 20 minutes and you can decrease it to 5 minutes, you’ll have 3 more tries to fix the production issue)</em>.</li><li>Build a great CI/CD pipeline and a platform where you can ship faster <em>(Kubernetes, serverless, etc)</em>.</li></ul><p><strong>Up your observability and monitoring game</strong></p><p>Observability and monitoring are the indicators that will let you know that something goes wrong, so you have to spend some time configuring them correctly.</p><p>Don’t forget to put alerts on your business metrics too, because this is even more important in understanding how a release can impact your users’ behaviours.</p><p><strong>Minimise the risk</strong></p><p>Now that your team is set for MTTR, here are things you can do to minimise risks: feature flags, canary releases, A/B testing, etc. All these systems allow you to know when something goes wrong without impacting your users.</p><h3>Conclusion</h3><p>Most teams are <strong>MTBF</strong>-focused because it feels right, but when you decide to change your way of working, you’ll see that accepting the fact that distributed systems are failing all the time benefits the business. The only thing you need to do is be prepared when it happens — and you can do so by setting up your team for <strong>MTTR</strong>.</p><p>This article was originaly published on <a href="https://medium.com/adevinta-tech-blog/optimising-for-mttr-over-mtbf-is-good-for-your-product-f354a67d75d0">Adevinta Tech Blog</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c784e1da74e6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Golang: Build and Deploy an AWS Lambda using CDK ]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://faun.pub/golang-build-and-deploy-an-aws-lambda-using-cdk-b484fe99304b?source=rss-9a58464dd8e9------2"><img src="https://cdn-images-1.medium.com/max/2600/0*ufGpxhaUFnRzmkkj" width="4808"></a></p><p class="medium-feed-snippet">An example on how easily push and run serverless GO code in AWS &#x1F680;</p><p class="medium-feed-link"><a href="https://faun.pub/golang-build-and-deploy-an-aws-lambda-using-cdk-b484fe99304b?source=rss-9a58464dd8e9------2">Continue reading on FAUN.dev()  »</a></p></div>]]></description>
            <link>https://faun.pub/golang-build-and-deploy-an-aws-lambda-using-cdk-b484fe99304b?source=rss-9a58464dd8e9------2</link>
            <guid isPermaLink="false">https://medium.com/p/b484fe99304b</guid>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[go]]></category>
            <category><![CDATA[aws-cdk]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[golang]]></category>
            <dc:creator><![CDATA[Thomas Poignant]]></dc:creator>
            <pubDate>Wed, 03 Mar 2021 12:41:04 GMT</pubDate>
            <atom:updated>2021-03-03T12:41:04.098Z</atom:updated>
        </item>
    </channel>
</rss>