<?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: Julien Danjou</title>
    <description>The latest articles on DEV Community by Julien Danjou (@jd).</description>
    <link>https://dev.to/jd</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%2F384728%2Fc5b85438-827c-49bd-a4c9-c5487c890e98.png</url>
      <title>DEV Community: Julien Danjou</title>
      <link>https://dev.to/jd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jd"/>
    <language>en</language>
    <item>
      <title>Auto-Retry Is the Duct Tape of CI — Here’s Why We Still Need It</title>
      <dc:creator>Julien Danjou</dc:creator>
      <pubDate>Tue, 13 May 2025 09:27:23 +0000</pubDate>
      <link>https://dev.to/jd/auto-retry-is-the-duct-tape-of-ci-heres-why-we-still-need-it-1b58</link>
      <guid>https://dev.to/jd/auto-retry-is-the-duct-tape-of-ci-heres-why-we-still-need-it-1b58</guid>
      <description>&lt;p&gt;You push a PR. CI kicks off. Ten minutes later, red.&lt;/p&gt;

&lt;p&gt;You check the logs.&lt;/p&gt;

&lt;p&gt;It’s a test that fails every now and then — you’ve seen it flake before.&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%2Fjj8ek08n1erkaqie64lz.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%2Fjj8ek08n1erkaqie64lz.png" alt="CI failure log" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It times out, or throws a weird assertion. Maybe it’s infra. Maybe it’s racey. Maybe you don’t even care anymore.&lt;/p&gt;

&lt;p&gt;You click “Retry.”&lt;/p&gt;

&lt;p&gt;It passes. You merge. You move on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Next Day
&lt;/h2&gt;

&lt;p&gt;The next day, someone else pings you.&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%2Fx1x24ptenwdanff4b3fx.jpg" 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%2Fx1x24ptenwdanff4b3fx.jpg" alt="CI engineers" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;“Hey, did your PR break this test? It’s failing for me now.”&lt;/p&gt;

&lt;p&gt;You don’t know. It didn’t fail for you. At least not finally.&lt;/p&gt;

&lt;p&gt;You just reran it until it turned green.&lt;/p&gt;

&lt;p&gt;This is where a lot of teams end up with CI:&lt;/p&gt;

&lt;p&gt;Half trust, half habit. A system that “works” — as long as you’re willing to babysit it.&lt;/p&gt;

&lt;p&gt;Auto-retry is duct tape. And we all use it.&lt;br&gt;
I’m not against auto-retry. In fact, I love it.&lt;/p&gt;

&lt;p&gt;CI isn’t deterministic.&lt;/p&gt;

&lt;p&gt;Jobs fail for reasons that have nothing to do with your code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker pull limits&lt;/li&gt;
&lt;li&gt;Cloud runner cold starts&lt;/li&gt;
&lt;li&gt;Network hiccups&lt;/li&gt;
&lt;li&gt;Flaky mocks&lt;/li&gt;
&lt;li&gt;“It passed locally”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;¯\(ツ)/¯&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Auto-retry keeps velocity up when CI would otherwise block shipping.
&lt;/h2&gt;

&lt;p&gt;It saves hours.&lt;/p&gt;

&lt;p&gt;It lets engineers focus on the code — not the randomness around it.&lt;/p&gt;

&lt;p&gt;But duct tape works best when you know where it’s holding things together.&lt;/p&gt;

&lt;h2&gt;
  
  
  When retry is invisible, confidence erodes
&lt;/h2&gt;

&lt;p&gt;I’ve seen teams where retry was the fix for everything.&lt;/p&gt;

&lt;p&gt;“Just rerun it, it’s always like that.”&lt;/p&gt;

&lt;p&gt;Builds fail, builds get retried, builds go green — and no one remembers to look back. It becomes normal.&lt;/p&gt;

&lt;p&gt;We stop asking why jobs fail, because the fix is one click away.&lt;/p&gt;

&lt;p&gt;We trust the green check, even when we know it’s masking something flaky.&lt;/p&gt;

&lt;p&gt;The team’s confidence in CI drops. But so does the pressure to improve it.&lt;/p&gt;

&lt;p&gt;That’s the quiet cost of auto-retry: it prevents disaster… and hides decay.&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%2Fahzcoz6od17u6xqpcrwz.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%2Fahzcoz6od17u6xqpcrwz.png" alt="CI Dashboard" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  We built CI Insights to make this visible
&lt;/h2&gt;

&lt;p&gt;When we built CI Insights, we didn’t want to replace your CI.&lt;/p&gt;

&lt;p&gt;We wanted to show you what’s really going on inside it.&lt;/p&gt;

&lt;p&gt;That’s why one of the first things we added was retry awareness.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mergify.com/product/ci-insights" rel="noopener noreferrer"&gt;CI Insights&lt;/a&gt; shows you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which jobs pass after retry (flaky)&lt;/li&gt;
&lt;li&gt;How often each job flakes&lt;/li&gt;
&lt;li&gt;What your “retry recovery rate” looks like&lt;/li&gt;
&lt;li&gt;Which jobs eat up the most rerun time&lt;/li&gt;
&lt;li&gt;When your team is stuck in a silent feedback loop&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It doesn’t stop jobs from failing.&lt;/p&gt;

&lt;p&gt;But it tells you whether you’re fixing things… or just getting lucky.&lt;/p&gt;

&lt;h2&gt;
  
  
  Confidence isn’t just about test coverage
&lt;/h2&gt;

&lt;p&gt;It’s about knowing that when CI says “green,” it means it.&lt;/p&gt;

&lt;p&gt;And if it had to say “red” twice before that, someone should know.&lt;/p&gt;

&lt;p&gt;CI Insights gives you a clear view of that — and lets you automate retry with context.&lt;/p&gt;

&lt;p&gt;By job, by condition, by intent — not just “try again and pray.”&lt;/p&gt;

&lt;p&gt;Want to know what your retry pattern really looks like?&lt;/p&gt;

&lt;p&gt;➡️ Join the &lt;a href="https://mergify.com/product/ci-insights" rel="noopener noreferrer"&gt;CI Insights beta&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>githubactions</category>
      <category>productivity</category>
    </item>
    <item>
      <title>CI Failures Don’t Just Break Builds — They Break Focus</title>
      <dc:creator>Julien Danjou</dc:creator>
      <pubDate>Wed, 07 May 2025 11:32:22 +0000</pubDate>
      <link>https://dev.to/jd/ci-failures-dont-just-break-builds-they-break-focus-g72</link>
      <guid>https://dev.to/jd/ci-failures-dont-just-break-builds-they-break-focus-g72</guid>
      <description>&lt;p&gt;A few weeks ago, something broke in production.&lt;/p&gt;

&lt;p&gt;No big deal — we've all been there. I did what I’ve done hundreds of times before:&lt;/p&gt;

&lt;p&gt;Checked logs, wrote a patch, pushed to a new branch, and waited for CI.&lt;/p&gt;

&lt;p&gt;Except CI failed. Not because of my change, but because someone had merged a PR 20 minutes earlier that broke main.&lt;/p&gt;

&lt;p&gt;Now I'm stuck. The fix is ready, but I can't ship it without bypassing the tests or waiting for someone else to fix what they broke. From a clean engineering process point of view, this is a disaster.&lt;/p&gt;

&lt;p&gt;So I face the same choice many of us do in this situation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Force-merge the fix and cross my fingers, or hold off on fixing prod.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I clicked merge. Crossed my fingers. And hoped that while I fixed one problem, I didn’t just create two more.&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%2Fwq7uqe4avchvg1hj6pm6.jpg" 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%2Fwq7uqe4avchvg1hj6pm6.jpg" alt="Broken CI" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CI doesn’t just fail. It fails at the worst possible moment.
&lt;/h2&gt;

&lt;p&gt;You can build a beautiful, automated pipeline. You can configure your cache keys, lint your YAML, and badge your build.&lt;/p&gt;

&lt;p&gt;But none of that helps you when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A flaky test randomly fails a PR at 6:30 pm;&lt;/li&gt;
&lt;li&gt;GitHub Actions hits a Docker pull rate limit again;&lt;/li&gt;
&lt;li&gt;A CI step you don’t control starts failing globally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here’s the kicker: most of us rerun the job, get a green check, and move on. No root cause. No visibility. No long-term fix.&lt;/p&gt;

&lt;p&gt;We’re debugging by ritual.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real cost isn’t money — it’s momentum.
&lt;/h2&gt;

&lt;p&gt;When CI breaks, you don’t lose dollars.&lt;/p&gt;

&lt;p&gt;You lose flow.&lt;/p&gt;

&lt;p&gt;You're in the middle of a fix. Or a feature. Or just trying to finish the last ticket of the sprint. CI breaks, and now you're digging through logs from a job you didn’t write for a failure you didn’t cause.&lt;/p&gt;

&lt;p&gt;You rerun the job. Still red.&lt;/p&gt;

&lt;p&gt;Rerun again. It’s green.&lt;/p&gt;

&lt;p&gt;You merge, slightly less confident than before.&lt;/p&gt;

&lt;p&gt;Your 20-minute bugfix becomes a 90-minute support fire. And you’re left wondering:&lt;/p&gt;

&lt;p&gt;Did I actually fix the bug? Or did I just push the pain to Future Me?&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do we tolerate this?
&lt;/h2&gt;

&lt;p&gt;Because CI is treated like plumbing.&lt;/p&gt;

&lt;p&gt;If it works, you don’t think about it. If it doesn’t, you patch it, rerun it, and carry on.&lt;/p&gt;

&lt;p&gt;Nobody “owns” CI quality.&lt;/p&gt;

&lt;p&gt;Nobody tracks flake rates in a dashboard.&lt;/p&gt;

&lt;p&gt;Nobody budgets time for fixing transient failures.&lt;/p&gt;

&lt;p&gt;And so it creeps.&lt;/p&gt;

&lt;p&gt;What was a one-off rerun last week becomes standard practice. What was a reliable build becomes a minefield of red crosses and Slack pings.&lt;/p&gt;

&lt;h2&gt;
  
  
  So we started building CI Insights.
&lt;/h2&gt;

&lt;p&gt;We didn’t want to replace CI. But we wanted answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What jobs are failing the most?&lt;/li&gt;
&lt;li&gt;Are they flaky? Or actually broken?&lt;/li&gt;
&lt;li&gt;Which tests slow us down the most?&lt;/li&gt;
&lt;li&gt;What’s our actual lead time from PR to prod?&lt;/li&gt;
&lt;li&gt;Why are reruns our default fix?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we built something that watches your CI without changing it.&lt;/p&gt;

&lt;p&gt;No YAML edits. No instrumentation. Real-time observability, and answers.&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%2Fkd8q3mq57a6ajw6zx6va.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%2Fkd8q3mq57a6ajw6zx6va.png" alt="CI Insights" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CI Insights tells us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which jobs flake&lt;/li&gt;
&lt;li&gt;Which jobs got slower this month&lt;/li&gt;
&lt;li&gt;How much time does our team spend rerunning things&lt;/li&gt;
&lt;li&gt;How much merge delay CI is actually causing&lt;/li&gt;
&lt;li&gt;What our deployment frequency looks like (DORA-style)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s like going from looking at raw logs… to having a dashboard that tells you why your team is grumpy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can do today
&lt;/h2&gt;

&lt;p&gt;Even without CI Insights, you can start spotting CI drift:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Track retry rates.&lt;/strong&gt; If your reruns are increasing, something’s decaying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor merge delay.&lt;/strong&gt; If jobs block PRs more than they fail, you have friction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surface flakes.&lt;/strong&gt; Build a script that scans past failed-then-passed jobs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the slow creep.&lt;/strong&gt; Job duration going up over time? That’s silent tech debt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CI isn’t a tool. It’s a mirror.&lt;/p&gt;

&lt;p&gt;And when it breaks, it reflects the messiest part of our engineering process: the stuff we patch instead of fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to see your own CI like this?
&lt;/h2&gt;

&lt;p&gt;We’re opening up the &lt;a href="https://mergify.com/product/ci-insights" rel="noopener noreferrer"&gt;CI Insights beta&lt;/a&gt; for GitHub Actions users. It’s free while in beta and built for engineers like us who just want their pipelines to work — or at least make sense when they don’t.&lt;/p&gt;

&lt;p&gt;We’ll show you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The flakiest jobs in your org&lt;/li&gt;
&lt;li&gt;Job cost and rerun trends&lt;/li&gt;
&lt;li&gt;Real-time CI status across repos&lt;/li&gt;
&lt;li&gt;Slack alerts and auto-retries for the noisy stuff&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://mergify.com/product/ci-insights" rel="noopener noreferrer"&gt;Join the beta&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or email me at &lt;a href="mailto:jd@mergify.com"&gt;jd@mergify.com&lt;/a&gt; — we’re always looking for developers to help shape CI observability.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Interview: The Performance of Python</title>
      <dc:creator>Julien Danjou</dc:creator>
      <pubDate>Mon, 11 May 2020 11:40:56 +0000</pubDate>
      <link>https://dev.to/jd/interview-the-performance-of-python-5abg</link>
      <guid>https://dev.to/jd/interview-the-performance-of-python-5abg</guid>
      <description>&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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F05%2Fperformance-python.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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F05%2Fperformance-python.png" alt="Interview: The Performance of Python" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Earlier this year, I was supposed to participate to &lt;a href="https://dotpy.io" rel="noopener noreferrer"&gt;dotPy&lt;/a&gt;, a one-day Python conference happening in Paris. This event has unfortunately been cancelled due to the COVID-19 pandemic.&lt;/p&gt;

&lt;p&gt;Both Victor Stinner and me were supposed to attend that event. Victor had prepared a presentation about Python performances, while I was planning on talking about profiling.&lt;/p&gt;

&lt;p&gt;Rather than being completely discouraged, Victor and I sat down (remotely) with Anne Laure from &lt;a href="https://www.welcometothejungle.com/en/collections/behind-the-code" rel="noopener noreferrer"&gt;Behind the Code&lt;/a&gt; (a blog ran by Welcome to the Jungle, the organizers of the &lt;a href="https://dotpy.io" rel="noopener noreferrer"&gt;dotPy&lt;/a&gt; conference).&lt;/p&gt;

&lt;p&gt;We discuss Python performance, profiling, speed, projects, problems, analysis, optimization and the GIL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.welcometothejungle.com/en/articles/btc-performance-python" rel="noopener noreferrer"&gt;You can read the interview here.&lt;/a&gt;&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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F05%2Fimage-5.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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F05%2Fimage-5.png" alt="Interview: The Performance of Python" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>interview</category>
      <category>python</category>
    </item>
    <item>
      <title>Being in Charge</title>
      <dc:creator>Julien Danjou</dc:creator>
      <pubDate>Fri, 17 Apr 2020 12:03:33 +0000</pubDate>
      <link>https://dev.to/jd/being-in-charge-3ip3</link>
      <guid>https://dev.to/jd/being-in-charge-3ip3</guid>
      <description>&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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F04%2FLe-Podcast-header.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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F04%2FLe-Podcast-header.png" alt="Being in Charge" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you never heard of the 10x engineer myth, it's a pretty great concept. It boils down to the idea where an engineer could be 10x more efficient than a random engineer. I find this fantastically twisted.&lt;/p&gt;

&lt;p&gt;Last week, I sat and chat with Alexis Monville in &lt;a href="https://alexis.monville.com/en/category/podcast/" rel="noopener noreferrer"&gt;Le Podcast&lt;/a&gt; — a podcast that equips you to make positive change in your organization. &lt;a href="https://alexis.monville.com/en/2020/04/10/do-you-want-10x-engineers/" rel="noopener noreferrer"&gt;We talked&lt;/a&gt; about that 10x Engineer myth, and from there we digressed on how to grow your career and handle the different aspects of it.&lt;/p&gt;

&lt;p&gt;This was a very interesting exchange. Alexis is actually going to publish a new book next month (May 2020) entitled &lt;a href="https://iamincharge.club/" rel="noopener noreferrer"&gt;I am a Software Engineer and I am in charge&lt;/a&gt;.&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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F04%2Fimage-1.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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F04%2Fimage-1.png" alt="Being in Charge" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lucky me, this week, I had the chance to be able to read the book before everybody else — which means I actually read &lt;em&gt;after&lt;/em&gt; our recording. I understood why Alexis said that a lot of what I was talking about during our podcast resonated with him. I send &lt;a href="https://iamincharge.club/2020/04/16/the-first-review/" rel="noopener noreferrer"&gt;a detailed review of the book to Alexis and Michael&lt;/a&gt; if you're curious. I'm definitely recommending this book if you want to stop complaining about your job and start understanding how to pull the strings.&lt;/p&gt;

&lt;p&gt;I wish I had this book available 10 years ago! 😅&lt;/p&gt;

</description>
      <category>work</category>
      <category>podcast</category>
      <category>interview</category>
    </item>
    <item>
      <title>One year of Mergify</title>
      <dc:creator>Julien Danjou</dc:creator>
      <pubDate>Thu, 12 Mar 2020 08:25:00 +0000</pubDate>
      <link>https://dev.to/jd/one-year-of-mergify-5al0</link>
      <guid>https://dev.to/jd/one-year-of-mergify-5al0</guid>
      <description>&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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2FScreenshot-2020-03-05-at-15.44.20-1.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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2FScreenshot-2020-03-05-at-15.44.20-1.png" alt="One year of Mergify" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has been close to a year now that I've incorporated my new company, &lt;a href="https://mergify.io" rel="noopener noreferrer"&gt;Mergify&lt;/a&gt;. I've been busy, and I barely wrote anything about it so far. Now is an excellent time to take a break and reflect a bit on what happened during those last 12 months.&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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2Fexport-mergify-logo-title-horizontal.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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2Fexport-mergify-logo-title-horizontal.png" alt="One year of Mergify" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What problem does Mergify solve?
&lt;/h1&gt;

&lt;p&gt;Mergify is a powerful automation engine for GitHub pull requests. It allows you to automate everything — and especially merging. You write rules, and it handles the rest.&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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2FScreenshot-2020-03-10-at-11.27.23.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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2FScreenshot-2020-03-10-at-11.27.23.png" alt="One year of Mergify" width="800" height="400"&gt;&lt;/a&gt;Example of rule matching returned in GitHub checks&lt;/p&gt;

&lt;p&gt;For example, let's say you want your pull request to be merged, e.g., once your CI passes and the pull request has been approved. You just write such a rule, and our engine merges the pull request as soon as it's ready.&lt;/p&gt;

&lt;p&gt;We also deal with more advanced use cases. For instance, we provide &lt;a href="https://doc.mergify.io/merge-action.html#strict-merge" rel="noopener noreferrer"&gt;a merge queue&lt;/a&gt; so your pull requests are merged serially and tested by your CI one after another — avoiding any regression in your code.&lt;/p&gt;

&lt;p&gt;Our goal is to make pull request management and automation easy. You can use your bot to trigger a rebase of your pull requests, or a backport to a different branch, just with a single comment.&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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2FScreenshot-2020-03-10-at-11.21.37.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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2FScreenshot-2020-03-10-at-11.21.37.png" alt="One year of Mergify" width="800" height="400"&gt;&lt;/a&gt;Some people like to make bots talk to each other.&lt;/p&gt;

&lt;h1&gt;
  
  
  A New Adventure
&lt;/h1&gt;

&lt;p&gt;Mergify is the first company that I ever started. I did run some personal businesses before, created non-profit organizations, built FOSS projects — but I never created a company from scratch, even less with an associate.&lt;/p&gt;

&lt;p&gt;Indeed, I've chosen to build the company with my old friend &lt;a href="https://sileht.net/" rel="noopener noreferrer"&gt;Mehdi&lt;/a&gt;. We've known each others for 7 years now, and have worked together all that time on different open-source projects. Having worked with each other for so long has probably been a critical factor in the success of our venture so far.&lt;/p&gt;

&lt;p&gt;I had little experience sharing the founding seats with someone, and tons of reading seemed to indicate that it would be a tough ride. Picking the right business partner(s) can be a hard task. Luckily, after working so much time together, Mehdi and I both know our strengths and weaknesses well enough to be able to circumvent them. 😅&lt;/p&gt;

&lt;p&gt;On the other hand, we both have similar backgrounds as software engineers. That does not help to cover all the hats you need to wear when building a company. Over time, we found arrangements to cover most of those equally between us.&lt;/p&gt;

&lt;p&gt;We don't have any magical advice to give on this. As in every relationship, communication is the key and the #1 factor of success.&lt;/p&gt;

&lt;h1&gt;
  
  
  Getting Users
&lt;/h1&gt;

&lt;p&gt;I don't know if we got lucky, but we got users and customers pretty early. We used a few cooperative projects as guinea pigs first, and they were brave enough to try our service and give us feedback. No repository has been harmed during this first phase!&lt;/p&gt;

&lt;p&gt;Then, as soon as we managed to get our application on the &lt;a href="https://github.com/marketplace/mergify" rel="noopener noreferrer"&gt;GitHub Marketplace&lt;/a&gt;, we saw a steady number of users coming to us.&lt;/p&gt;

&lt;p&gt;This has been fantastic as it allowed us to get feedback rapidly. We set up a form asking users for feedback after they used Mergify for a couple of weeks. What we hear is that users were happy, that the documentation was confusing and that some features were buggy or missing. We planned all of those ideas as our future work in our roadmap, using &lt;a href="https://medium.com/mergify/how-we-handle-our-roadmap-for-mergify-7e813e24508e" rel="noopener noreferrer"&gt;the principles we described a few months ago&lt;/a&gt;.&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%2Fmiro.medium.com%2Fmax%2F1200%2F0%2AAEQ1FoTAW9C9l-um" 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%2Fmiro.medium.com%2Fmax%2F1200%2F0%2AAEQ1FoTAW9C9l-um" alt="One year of Mergify" width="1200" height="1500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We tried various strategies to get new users, but so far, organic growth has been our #1 way of onboarding new users. Like many small startups out there, we're not that good at marketing and executing strategies.&lt;/p&gt;

&lt;p&gt;We provide our service for free for open-source projects We are now powering many organizations, such as Mozilla, Amazon Web Services, Ceph and Fedora.&lt;/p&gt;

&lt;h1&gt;
  
  
  Working with GitHub
&lt;/h1&gt;

&lt;p&gt;Working with GitHub has been… complicated. When you build an application for a marketplace, your business is entirely dependent on the platform you develop for — both in terms of features and quality of service.&lt;/p&gt;

&lt;p&gt;In our case, we hit quite many bugs with GitHub. Their support has mostly been fast to answer, but some significant issues are still opened months later. The truth is that the GitHub API could deserve more love and care from GitHub. For example, their GraphQL API is a work in progress for years and miss out many essential features.&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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2FScreenshot-2020-03-05-at-16.38.55.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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2FScreenshot-2020-03-05-at-16.38.55.png" alt="One year of Mergify" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We dealt and still deal with all those issues. It obviously impacts our operations and decreases our overall velocity. We regularly have to find new ways to sidestep GitHub limitations.&lt;/p&gt;

&lt;p&gt;You have no idea how we wished for GitHub to be open-source. The idea of not having access to their code and understand how it works is so frustrating that we publish our &lt;a href="https://github.com/mergifyio/mergify-engine" rel="noopener noreferrer"&gt;engine&lt;/a&gt; as an open-source project. That allows all of our users to see how it works and even propose enhancements.&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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2FScreenshot-2020-03-11-at-10.39.12.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%2Fjulien.danjou.info%2Fcontent%2Fimages%2F2020%2F03%2FScreenshot-2020-03-11-at-10.39.12.png" alt="One year of Mergify" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Automate all the way
&lt;/h1&gt;

&lt;p&gt;We're a tiny startup, and we decided to bootstrap our company. We never took any funding. From the beginning, it has been clear to us that we had to think and act like we had no resources. We're built around a scarcity mindset. Every decision we make is based on the assumption that we basically are very limited in terms of money and time.&lt;/p&gt;

&lt;p&gt;We basically act like any wrong choice we do could (virtually) kill the company. We only do what is essential, we ship fast, and we automate everything.&lt;/p&gt;

&lt;p&gt;For example, we have built our whole operation about CI/CD systems, and pushing any new fix or feature in production is done in a matter of &lt;em&gt;minutes&lt;/em&gt;. It's not uncommon for us to push a fix from our phone, just by reviewing some code or editing a file.&lt;/p&gt;

&lt;h1&gt;
  
  
  Growth
&lt;/h1&gt;

&lt;p&gt;We're extremely happy with our steady growth and more users using our service. We now manage close to 30k repositories and merge 15k pull requests per month for our users.&lt;/p&gt;

&lt;p&gt;That's a lot of mouse clicks saved!&lt;/p&gt;

&lt;p&gt;If you want to try &lt;a href="https://mergify.io" rel="noopener noreferrer"&gt;Mergify&lt;/a&gt; yourself, it's a single click log-in using your GitHub account. Check it out!&lt;/p&gt;

</description>
      <category>mergify</category>
    </item>
  </channel>
</rss>
