<?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: Mark Phelps</title>
    <description>The latest articles on DEV Community by Mark Phelps (@markphelps).</description>
    <link>https://dev.to/markphelps</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%2F755000%2F2f7147f8-136d-40dd-b9d0-4898905b8387.jpg</url>
      <title>DEV Community: Mark Phelps</title>
      <link>https://dev.to/markphelps</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/markphelps"/>
    <language>en</language>
    <item>
      <title>️️Feature Flags 101: 3 Basic Feature Flag Use Cases You Can Implement Today 🏁</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Mon, 29 Jan 2024 14:35:35 +0000</pubDate>
      <link>https://dev.to/flipt/feature-flags-101-3-basic-feature-flag-use-cases-you-can-implement-today-312k</link>
      <guid>https://dev.to/flipt/feature-flags-101-3-basic-feature-flag-use-cases-you-can-implement-today-312k</guid>
      <description>&lt;p&gt;High-performing engineering teams ship quality code &lt;em&gt;fast.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For that, they decouple code deployment from its release. This enables them to lower the risk of bugs in production and deploy code more often.&lt;/p&gt;

&lt;p&gt;What is the best way to implement this?&lt;/p&gt;

&lt;p&gt;Feature Flags.&lt;/p&gt;

&lt;p&gt;They may seem complicated, but in this article, I'll show you how you can leverage them for different use cases and how Flipt makes the process easy and seamless.&lt;/p&gt;




&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Developers 👋
&lt;/h3&gt;

&lt;p&gt;If you are looking to make &lt;em&gt;high impact&lt;/em&gt; Open Source contributions in 2024, we have a step-by-step roadmap and an &lt;a href="https://discord.com/invite/kRhEqG2TEZ"&gt;awesome community&lt;/a&gt; to help you with that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://discord.com/invite/kRhEqG2TEZ" class="ltag_cta ltag_cta--branded"&gt;Join 260+ Developers ▶&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What are Feature Flags?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Case #1: Controlled Rollouts&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How can Flipt help?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Case #2: Experimentation &amp;amp; A/B Testing&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How can Flipt help?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Case #3: Permissions &amp;amp; Targeting&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How can Flipt help?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrap Up&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What are Feature Flags?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Have you ever slipped a bug in production that caused:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App crashes&lt;/li&gt;
&lt;li&gt;Regressions&lt;/li&gt;
&lt;li&gt;Security Vulnerabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have.&lt;/p&gt;

&lt;p&gt;If you didn’t use feature flags, it’s likely that you rolled back the breaking change and deployed a new build. Or worse, fixed it forward causing extended downtime for users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feature flags enable controlled rollout of software by allowing developers to turn features on or off without deploying new code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s look at how they are useful in more detail.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Use Case #1: Controlled Rollouts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;#1 rule of shipping reliable software?&lt;/p&gt;

&lt;p&gt;Never break the build.&lt;/p&gt;

&lt;p&gt;That’s how you build trust with your users.&lt;/p&gt;

&lt;p&gt;To do this, &lt;strong&gt;you should roll out new features gradually to a small percentage of users&lt;/strong&gt;, and then increase them over time. This gradual rollout helps in monitoring the impact and performance of the feature and reducing the risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How can Flipt help?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In Flipt there are two types of flags — &lt;a href="https://www.flipt.io/docs/concepts#variant-flags"&gt;variant&lt;/a&gt; and &lt;a href="https://www.flipt.io/docs/concepts#boolean-flags"&gt;boolean&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can perform rollout for both types of flags, using &lt;a href="https://www.flipt.io/docs/concepts#rules"&gt;rules&lt;/a&gt; and &lt;a href="https://www.flipt.io/docs/concepts#distributions"&gt;distributions&lt;/a&gt;, for variant flags, and &lt;a href="https://www.flipt.io/docs/concepts#rollouts"&gt;rollouts&lt;/a&gt; rules for boolean flags.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vSJLuuK---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://mintlify.s3-us-west-1.amazonaws.com/flipt/images/concepts/flags_boolean.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vSJLuuK---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://mintlify.s3-us-west-1.amazonaws.com/flipt/images/concepts/flags_boolean.png" alt="Flipt Boolean Flag Preview" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;Flipt Boolean Flag Preview
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Boolean flags are most commonly used when performing code rollout type operations if you want to slowly release functionality over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Use Case #2: Experimentation &amp;amp; A/B Testing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Imagine that you’re running an e-commerce platform. And you’re revamping your user interface. Wouldn’t you be interested in knowing its impact on sales and other key metrics? &lt;/p&gt;

&lt;p&gt;Chances are you do. &lt;/p&gt;

&lt;p&gt;And that’s where feature flags can help. &lt;strong&gt;You can experiment with the feature and gauge its impact on KPIs &lt;em&gt;before&lt;/em&gt; launching it for all the users.&lt;/strong&gt; Hence, limiting the negative impact caused by it.&lt;/p&gt;

&lt;p&gt;Similarly, feature flags facilitate A/B testing by showing different features to different user groups, helping in understanding user preferences and behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How can Flipt help?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q7mx4w0I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://mintlify.s3-us-west-1.amazonaws.com/flipt/images/concepts/flags_variants.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q7mx4w0I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://mintlify.s3-us-west-1.amazonaws.com/flipt/images/concepts/flags_variants.png" alt="Flipt Variant Flag Preview" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;Flipt Variant Flag Preview
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;In Flipt, experimentation is mostly accomplished through using &lt;a href="https://www.flipt.io/docs/concepts#variant-flags"&gt;variant flags&lt;/a&gt;, where you can, for example, return &lt;code&gt;colorscheme: default&lt;/code&gt; to 80% of visitors to your application and then &lt;code&gt;colorscheme: dark&lt;/code&gt; to the remaining 20%.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Use Case #3: Permissions &amp;amp; Targeting&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In addition to controlled rollouts and experimentation, feature flags are also useful for &lt;em&gt;targeting groups.&lt;/em&gt; It can be a&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Group of users&lt;/li&gt;
&lt;li&gt;Group of machines&lt;/li&gt;
&lt;li&gt;Group of environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These groups can be created based on &lt;strong&gt;any criteria&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;E.g. If Uber wants to launch the UberEats feature, it’s less likely they will be doing it for all the cities that they operate in. More likely, they will launch it for a few cities first. Here, they can leverage feature flags which will be enabled only for users of a particular city. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How can Flipt help?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In Flipt you can use our powerful &lt;a href="https://www.flipt.io/docs/concepts#context"&gt;context evaluation&lt;/a&gt; along with &lt;a href="https://www.flipt.io/docs/concepts#segments"&gt;segmentation&lt;/a&gt; to build pretty much any type of logic required for a specific group.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n7nbNgES--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://mintlify.s3-us-west-1.amazonaws.com/flipt/images/concepts/segments.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n7nbNgES--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://mintlify.s3-us-west-1.amazonaws.com/flipt/images/concepts/segments.png" alt="Flipt Segmentation Preview" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;Flipt Segmentation Preview
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;This can be especially useful for developing ad-hoc permissions within your application, without requiring a more heavy-handed access control system or library.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Wrap Up&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;I hope you’ll use feature flags next time you encounter the above use cases.&lt;/p&gt;

&lt;p&gt;And if you need any help with implementing Feature Flags, you can shoot your queries on our &lt;a href="https://discord.com/invite/kRhEqG2TEZ"&gt;discord&lt;/a&gt;. We have an awesome community there 💗&lt;/p&gt;

&lt;p&gt;If you found this valuable, follow me for more open-source related articles. 🙂&lt;/p&gt;

&lt;p&gt;Also please give Flipt a ⭐️ on &lt;a href="https://github.com/flipt-io/flipt"&gt;GitHub&lt;/a&gt;, it really helps us out! &lt;/p&gt;

</description>
      <category>opensource</category>
      <category>devops</category>
      <category>cloud</category>
      <category>productivity</category>
    </item>
    <item>
      <title>️🚀 🚀 Top 3 GitOps Tools for Infrastructure Automation in 2024 🔨</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Tue, 23 Jan 2024 14:47:25 +0000</pubDate>
      <link>https://dev.to/flipt/top-3-gitops-tools-for-infrastructure-automation-in-2024-5h55</link>
      <guid>https://dev.to/flipt/top-3-gitops-tools-for-infrastructure-automation-in-2024-5h55</guid>
      <description>&lt;p&gt;In 2024, developers should primarily focus on their core tasks of feature development, fixing bugs and making improvements to the application. &lt;/p&gt;

&lt;p&gt;That means less time spent on adding feature flags, managing infrastructure, monitoring deployments, etc.&lt;br&gt;
Also, as per Puppet State of DevOps Report 2023, lack of automation has been one of the biggest pain points of platform teams.&lt;/p&gt;

&lt;p&gt;So in this article, let’s unpack why your project needs infrastructure automation and share tools to help you get started.&lt;/p&gt;

&lt;p&gt;Shall we?&lt;/p&gt;



&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Developers 👋
&lt;/h3&gt;

&lt;p&gt;If you are looking to make &lt;em&gt;high impact&lt;/em&gt; Open Source contributions in 2024, we have a step-by-step roadmap and an &lt;a href="https://discord.com/invite/kRhEqG2TEZ" rel="noopener noreferrer"&gt;awesome community&lt;/a&gt; to help you with that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://discord.com/invite/kRhEqG2TEZ" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Join 250+ Developers ▶&lt;/a&gt;
&lt;/p&gt;


&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How Can Your Project Benefit From Infrastructure Automation?&lt;/li&gt;
&lt;li&gt;Tool #1: Digger&lt;/li&gt;
&lt;li&gt;Tool #2: Argo Project&lt;/li&gt;
&lt;li&gt;Tool #3: Pulumi&lt;/li&gt;
&lt;li&gt;Wrap Up&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How Can Your Project Benefit From Infrastructure Automation?
&lt;/h2&gt;

&lt;p&gt;Let’s go over some of the basic benefits of automating your infrastructure:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ensure repeatable results every time.&lt;/strong&gt;  So that you can provide predictable and reliable experience to users and development teams. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove the need for (#clickops), engineers clicking around in a cloud provider UI.&lt;/strong&gt; Automation improves process efficiency and agility by reducing manual effort. As a result, freeing up DevOps engineers from the tedious tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built in auditing.&lt;/strong&gt; Keep a log of every operation done in your infrastructure. Comprehensive audit trails provide visibility into history of operations which is of great help at the time of debugging and troubleshooting.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Tool #1: &lt;a href="https://github.com/diggerhq/digger" rel="noopener noreferrer"&gt;Digger&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;If you want to simplify your infrastructure management and improve visibility and auditability of its changes, Digger might be worth exploring. It’s an open-source IaC automation and collaboration software for Terraform and OpenTofu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fframerusercontent.com%2Fimages%2FBSnrVo5YLvt9dSgHsKM0FSEYNRM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fframerusercontent.com%2Fimages%2FBSnrVo5YLvt9dSgHsKM0FSEYNRM.png" alt="Digger tool"&gt;&lt;/a&gt;&lt;br&gt;Digger tool showing proposed infrastructure changes.
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;You can version control your infrastructure through defining it in code and storing it in the git repository. With automated infra provisioning and updates, Digger ensures consistency and significantly reduces manual effort of DevOps teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At the time of writing this article, Digger has ~2.5k stars on GitHub and is used by companies like Grab, McKinsey &amp;amp; Company, Duolingo with several others.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They also have a highly responsive community that will help you with roadblocks along the way.&lt;/p&gt;


&lt;h2&gt;
  
  
  Tool #2: &lt;a href="https://argoproj.github.io/" rel="noopener noreferrer"&gt;Argo Project&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Argo Project has become one of the top projects to manage Kubernetes clusters and workflows. Along with being able to run CI/CD pipelines natively, you can easily run compute intensive jobs like data processing in fraction of time. &lt;/p&gt;

&lt;p&gt;With it’s rollouts tool, it provides advanced deployment capabilities such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blue-green ✅&lt;/li&gt;
&lt;li&gt;Canary ✅&lt;/li&gt;
&lt;li&gt;Canary analysis ✅&lt;/li&gt;
&lt;li&gt;Experimentation ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also, Argo provides a declarative approach to application deployment that simplifies the deployment process and reduces the risk of errors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fkuzo37ddna4u6a3k4h6p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fkuzo37ddna4u6a3k4h6p.png" alt="Argo tool"&gt;&lt;/a&gt;Argo Tool to get more done with Kubernetes.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you’re thinking, can Argo meet your advanced deployment requirements?&lt;/strong&gt; Here’s a step-by-step tutorial by &lt;a class="mentioned-user" href="https://dev.to/pavanbelagatti"&gt;@pavanbelagatti&lt;/a&gt; on how to implement advanced deployment strategies:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/pavanbelagatti" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F68703%2F6b2032e7-c028-4024-b132-260b569d1989.jpeg" alt="pavanbelagatti"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/pavanbelagatti/argo-rollouts-unleashing-advanced-deployment-strategies-5flk" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Argo Rollouts: Unleashing Advanced Deployment Strategies&lt;/h2&gt;
      &lt;h3&gt;Pavan Belagatti ・ Aug 2 '23&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#kubernetes&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#learning&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  Tool #3: &lt;a href="https://github.com/pulumi/pulumi" rel="noopener noreferrer"&gt;Pulumi&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Storing infrastructure as code is great but how to write code for one? Well Pulumi has solved that for you. It simplifies and automates your cloud infrastructure and optimizes for speed of releases.&lt;/p&gt;

&lt;p&gt;Best part? &lt;strong&gt;You can do that in your familiar programming language with autocomplete, type checking and up-to-date documentation.&lt;/strong&gt; Leaving no reason to procrastinate 😅&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pulumi.com%2Fimages%2Fhome%2Fai-ts.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pulumi.com%2Fimages%2Fhome%2Fai-ts.svg" alt="Pulumi AI"&gt;&lt;/a&gt;Pulumi AI responding to prompt.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Here’s what &lt;strong&gt;Matt Stephenson, Senior Principal Software Engineer&lt;/strong&gt; at Starburst Analytics has to say about Pulumi:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Pulumi let us build and automate cloud infrastructure projects at a scale that simply wasn’t imaginable using prior-generation infrastructure as code technologies&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pulumi is truly your partner for scaling cloud infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrap Up
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;Now, I hope these tools will help you in automating your project infrastructure.&lt;/p&gt;

&lt;p&gt;If you need any help in setting up these tools, feel free to ping me on &lt;a href="https://discord.com/invite/kRhEqG2TEZ" rel="noopener noreferrer"&gt;discord&lt;/a&gt;. We have an awesome community there 💗&lt;/p&gt;

&lt;p&gt;If you found this valuable, follow me for more open source related articles 🙂&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__7755"&gt;
  &lt;a href="/flipt" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7755%2F9083b31e-02a9-4e40-b484-38d4319b9b78.png" alt="flipt image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/flipt" class="ltag__user__link"&gt;Flipt&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/flipt" class="ltag__user__link"&gt;
        Flipt is an open-source, enterprise-ready, GitOps-enabled, CloudNative feature management solution. Manage features, experiments, and rollouts across multiple teams and environments without data leaving your infrastructure.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>devops</category>
      <category>cloud</category>
      <category>productivity</category>
    </item>
    <item>
      <title>️🚀🚀 Top 3 DevOps Trends to Watch Out for in 2024 📈</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Mon, 15 Jan 2024 14:46:18 +0000</pubDate>
      <link>https://dev.to/flipt/top-3-devops-trends-to-watch-out-for-in-2024-lc8</link>
      <guid>https://dev.to/flipt/top-3-devops-trends-to-watch-out-for-in-2024-lc8</guid>
      <description>&lt;p&gt;Staying updated with trends is important to remain competitive and relevant in the industry.&lt;/p&gt;

&lt;p&gt;As we stride into 2024, the landscape of DevOps Engineering will continue undergoing a transformative shift. The challenges we face — complex deployment workflows, information &amp;amp; access management of internal teams, and most importantly keeping tabs on what’s running in production — are more pressing than ever.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://github.com/flipt-io/flipt" rel="noopener noreferrer"&gt;Flipt&lt;/a&gt;, we continually discuss technologies that can bring change to the industry. In this article, we delve into cutting-edge top trends and tools that can redefine DevOps and platform engineering this year.&lt;/p&gt;

&lt;p&gt;Let's go 🚀&lt;/p&gt;




&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Developers 👋
&lt;/h3&gt;

&lt;p&gt;If you are looking to make &lt;em&gt;high impact&lt;/em&gt; Open Source contributions in 2024, we have a step-by-step roadmap and an &lt;a href="https://discord.com/invite/kRhEqG2TEZ" rel="noopener noreferrer"&gt;awesome community&lt;/a&gt; to help you with that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://discord.com/invite/kRhEqG2TEZ" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Join 230+ others ▶&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Trend #1: More eBPF tracing adoption&lt;/li&gt;
&lt;li&gt;Trend #2: GitOps becoming mainstream&lt;/li&gt;
&lt;li&gt;Trend #3: Internal Development Platforms everywhere&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Trend #1: More eBPF tracing adoption
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fhl45zal07mojb1p8pqsh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fhl45zal07mojb1p8pqsh.png" alt="eBPF logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ebpf.io/" rel="noopener noreferrer"&gt;eBPF&lt;/a&gt; will remain trendy in 2024. It allows deep insights into kernel activity with minimal performance and impact. Tracing tools like &lt;a href="https://github.com/iovisor/bcc" rel="noopener noreferrer"&gt;bcc&lt;/a&gt; and &lt;a href="https://github.com/iovisor/bpftrace" rel="noopener noreferrer"&gt;bpftrace&lt;/a&gt; are becoming increasingly popular for troubleshooting performance issues.&lt;/p&gt;

&lt;p&gt;Before, to get application tracing and performance metrics, you’d have to manually add and configure libraries such as OpenTelemetry in each application. This is painstaking and error-prone — as it requires application or DevOps engineers to do it for each new application they want to deploy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools like &lt;a href="https://github.com/keyval-dev/odigos" rel="noopener noreferrer"&gt;Odigos&lt;/a&gt; have discovered a new way, leveraging eBPF to automatically add tracing to each request path as they make their way through your stack.&lt;/strong&gt; This is a game changer as it gives much-needed time back to your engineers, reducing toil along the way.&lt;/p&gt;

&lt;p&gt;Moreover, it’s open source and community-driven, providing readily available resources and support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trend #2: GitOps becoming mainstream
&lt;/h2&gt;

&lt;p&gt;GitOps is another emerging trend in DevOps that emphasizes treating infrastructure as code and managing it through git repositories. &lt;/p&gt;

&lt;p&gt;This approach leverages the familiar workflows and tools of Git for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployments&lt;/li&gt;
&lt;li&gt;Configuration changes&lt;/li&gt;
&lt;li&gt;Infrastructure updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fkxfb6fwy7v8ta0ic8rjo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fkxfb6fwy7v8ta0ic8rjo.png" alt="GitOps logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At Flipt, we believe that the future is declarative. This means that you should quickly be able to see what state your application is in, but more importantly how it got in that state to begin with. &lt;strong&gt;GitOps solves this issue by using familiar tools like git, pull/merge requests, CI/CD to deliver configuration changes — instead of your engineers making API requests or clicking around in a UI (#clickops).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We believe this is the best way to manage all configuration data, even feature flags. That’s why, we’ve gone all in on supporting GitOps workflows at Flipt (with a lot more to come soon). We even have a &lt;a href="https://www.flipt.io/docs/guides/get-going-with-gitops" rel="noopener noreferrer"&gt;guide&lt;/a&gt; to get you started.&lt;/p&gt;

&lt;p&gt;In 2024, we'll see even more adoption of GitOps methodologies in larger organizations that are traditionally not early adopters, as the concept has proven itself to be a winner for smaller, more agile teams in previous years.&lt;/p&gt;

&lt;p&gt;In a world of fast-changing requirements and business needs, GitOps enables DevOps teams to respond quickly. &lt;/p&gt;

&lt;h2&gt;
  
  
  Trend #3: Internal Developer Platforms everywhere
&lt;/h2&gt;

&lt;p&gt;Finally, a trend that I am most bullish on in 2024 that leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster CI/CD cycles&lt;/li&gt;
&lt;li&gt;Streamlined workflows&lt;/li&gt;
&lt;li&gt;Improved governance and compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;is &lt;strong&gt;Internal Developer Platforms (IDPs)&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-851935087532945409-150" src="https://platform.twitter.com/embed/Tweet.html?id=851935087532945409"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-851935087532945409-150');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=851935087532945409&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;These are web-based platforms that provide developers with self-service access to tools, resources, and environments needed for their work.&lt;/p&gt;

&lt;p&gt;Building an IDP from scratch is hard work. That’s why projects such as &lt;a href="https://backstage.spotify.com/" rel="noopener noreferrer"&gt;Spotify’s Backstage&lt;/a&gt; and &lt;a href="http://getport.io" rel="noopener noreferrer"&gt;Port&lt;/a&gt; exist to help bring internal developer platforms to organizations without the time, budget &amp;amp; ability to build them themselves.&lt;/p&gt;

&lt;p&gt;I prefer Port’s opinionated UI/UX over Backstage which requires you to write React components for new integrations. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Whichever tool your team chooses, giving developers a single place to control all aspects of your engineering platform — means less time responding to requests and internal issues from your platform team.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DevOps teams need IDPs for greater autonomy and efficiency. &lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;Hope you’ll take advantage of these DevOps trends in 2024 and incorporate them into your workflow.&lt;/p&gt;

&lt;p&gt;If you need any help with that, feel free to shoot your queries in our &lt;a href="https://discord.com/invite/kRhEqG2TEZ" rel="noopener noreferrer"&gt;discord&lt;/a&gt;. We have an awesome community there 💗&lt;/p&gt;

&lt;p&gt;If you found this valuable, follow me for more open source related articles 🙂&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__7755"&gt;
  &lt;a href="/flipt" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7755%2F9083b31e-02a9-4e40-b484-38d4319b9b78.png" alt="flipt image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/flipt" class="ltag__user__link"&gt;Flipt&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/flipt" class="ltag__user__link"&gt;
        Flipt is an open-source, enterprise-ready, GitOps-enabled, CloudNative feature management solution. Manage features, experiments, and rollouts across multiple teams and environments without data leaving your infrastructure.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>devops</category>
      <category>cloud</category>
      <category>docker</category>
    </item>
    <item>
      <title>️🚀🚀 3 Must Know Tools for Top DevOps Engineers 👷</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Tue, 09 Jan 2024 14:54:31 +0000</pubDate>
      <link>https://dev.to/flipt/3-must-know-tools-for-top-devops-engineers-3752</link>
      <guid>https://dev.to/flipt/3-must-know-tools-for-top-devops-engineers-3752</guid>
      <description>&lt;p&gt;As a DevOps engineer you must have asked this question at least once:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How do I learn so many tools?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In this article, I will share the DevOps tools that we've used at &lt;a href="https://github.com/flipt-io/flipt" rel="noopener noreferrer"&gt;Flipt&lt;/a&gt; and in previous roles (such as at InfluxDB). These tools are relevant for any modern software project.&lt;/p&gt;

&lt;p&gt;Also, if you’re looking to make a DevOps related contribution to an Open Source project, this article will serve as a great source of inspiration for you.&lt;/p&gt;

&lt;p&gt;Let’s dive in! 👇&lt;/p&gt;




&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Developers 👋
&lt;/h3&gt;

&lt;p&gt;If you are looking to make &lt;em&gt;high impact&lt;/em&gt; Open Source contributions, we have a step-by-step roadmap and an &lt;a href="https://discord.com/invite/kRhEqG2TEZ" rel="noopener noreferrer"&gt;awesome community&lt;/a&gt; to help you with that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://discord.com/invite/kRhEqG2TEZ" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Join 220+ others ▶&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tool #1: runatlantis/atlantis&lt;/li&gt;
&lt;li&gt;Tool #2: argoproj/argo-cd&lt;/li&gt;
&lt;li&gt;Tool #3: keyval-dev/odigos&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Tool #1: &lt;a href="https://github.com/runatlantis/atlantis" rel="noopener noreferrer"&gt;runatlantis/atlantis&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.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%2F4ol7s70ryxjcefiwpa7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F4ol7s70ryxjcefiwpa7s.png" alt="Atlantis Logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DevOps engineers spend lot of time in figuring how to integrate infrastructure changes &lt;em&gt;seamlessly&lt;/em&gt; into the project’s development workflow.&lt;/p&gt;

&lt;p&gt;And that’s where Atlantis comes in. It automates terraform workflows within pull requests. As a result it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevents infrastructure drift&lt;/li&gt;
&lt;li&gt;Enforces platform consistency&lt;/li&gt;
&lt;li&gt;Improves collaboration b/w devs and platform engineers &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At Influx we used Atlantis to manage applying our Terraform manifests used to build around 20 Kubernetes clusters across major cloud providers (AWS, GCP and Azure). Our infrastructure team owned our Terraform repositories and gave access to engineers across the organization to contribute via pull-requests in GitHub. &lt;strong&gt;Atlantis gave them the confidence and coordination needed to integrate these changes safely into our trunk branch and apply them to our multiple target environments.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Tool #2: &lt;a href="https://github.com/argoproj/argo-cd" rel="noopener noreferrer"&gt;argoproj/argo-cd&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;If you have worked with Kubernetes before, you know how much pain it is to manage app deployments and updates across multiple clusters.&lt;/p&gt;

&lt;p&gt;But what if I tell you, there’s an easy way to setup an automation that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Streamlines releases&lt;/li&gt;
&lt;li&gt;Reduces manual errors&lt;/li&gt;
&lt;li&gt;Enables faster time-to-market&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That would be pretty incredible right?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Argo - which is an open source continuous delivery platform for Kubernetes does that for you.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F49o6csx36wte94loigt7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F49o6csx36wte94loigt7.png" alt="Argo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At Influx we used Argo as our continuous delivery platform. Again we were deploying many applications to around 20 Kubernetes clusters across the three major cloud vendors. Argo helped to unlock trunk based development and continuously ship changes to production environments. Also, it gave us great visibility into the state of our delivery pipelines and their targets&lt;/p&gt;




&lt;h2&gt;
  
  
  Tool #3: &lt;a href="https://github.com/keyval-dev/odigos" rel="noopener noreferrer"&gt;keyval-dev/odigos&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Lastly, a super useful tool for all DevOps engineers is Odigos. It allows you to monitor distributed applications using OpenTelemetry and eBPF.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fgbkgkayfrjh8tftgn2f4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fgbkgkayfrjh8tftgn2f4.png" alt="Odigos gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Additionally, Odigos comes with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extreme Performance&lt;/li&gt;
&lt;li&gt;Doesn’t require code changes&lt;/li&gt;
&lt;li&gt;Automatically get traces, metrics and log&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;And the best part is it’s open source and built with an active community.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Highly recommended tool for your DevOps toolbox.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;These are some of the top tools that every DevOps engineer should have in their toolkit in 2024.&lt;/p&gt;

&lt;p&gt;Want to explore more DevOps tools like these? Join our &lt;a href="//flipt.io/discord"&gt;awesome community&lt;/a&gt; of engineers where we discuss them regularly. 💗&lt;/p&gt;

&lt;p&gt;If you found this valuable, follow me for more open source related articles 🙂&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__7755"&gt;
  &lt;a href="/flipt" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7755%2F9083b31e-02a9-4e40-b484-38d4319b9b78.png" alt="flipt image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/flipt" class="ltag__user__link"&gt;Flipt&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/flipt" class="ltag__user__link"&gt;
        Flipt is an open-source, enterprise-ready, GitOps-enabled, CloudNative feature management solution. Manage features, experiments, and rollouts across multiple teams and environments without data leaving your infrastructure.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>devops</category>
      <category>cloud</category>
      <category>docker</category>
    </item>
    <item>
      <title>️🚀🚀 3 Open Source Contribution Ideas for DevOps Engineers💡</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Tue, 02 Jan 2024 14:26:04 +0000</pubDate>
      <link>https://dev.to/flipt/3-open-source-contribution-ideas-for-devops-engineers-o5g</link>
      <guid>https://dev.to/flipt/3-open-source-contribution-ideas-for-devops-engineers-o5g</guid>
      <description>&lt;p&gt;One of the toughest aspects of getting started with an open-source project is coming up with contribution ideas. And there’s little help online if you’re a DevOps Engineer. &lt;/p&gt;

&lt;p&gt;But what if I told you that I have some ideas that you can implement in any project? It's true. The ideas that I will be sharing in this article apply to any open source project.&lt;/p&gt;

&lt;p&gt;Before getting started, first understand why you should contribute to Open Source in the first place.&lt;/p&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why should you contribute to Open Source?&lt;/li&gt;
&lt;li&gt;Idea #1: Modernize CI/CD Pipeline&lt;/li&gt;
&lt;li&gt;Idea #2: Setup Dev Environments&lt;/li&gt;
&lt;li&gt;Idea #3: Automate Issue/PR triaging&lt;/li&gt;
&lt;li&gt;Wrapping Up&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why should you contribute to Open Source?
&lt;/h2&gt;

&lt;p&gt;If you are new to open source, you might be wondering why I should do it at all. Here are a few ways making open-source contributions can help your career:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Learn new skills.&lt;/strong&gt; You can work on a tech stack or a programming language of your liking, rather than one being used at work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Showcasing your skills.&lt;/strong&gt; You can add your open source contributions to your resume or portfolio. This serves as a proof of your skill — even if you didn’t use the tech in the current job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve problem solving.&lt;/strong&gt; By collaborating with developers and having community discussions over features/bugs, you gain a fresh perspective on how other developers solve problems.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Enough on the motivation. Now, let’s take a look at what actual contributions you can make to an Open Source project. &lt;/p&gt;

&lt;h2&gt;
  
  
  Idea #1: Modernize CI/CD Pipeline
&lt;/h2&gt;

&lt;p&gt;If you’re looking to demonstrate your ability to optimize and automate processes in your resume, working on the project's CI/CD pipeline would be the best place to contribute.&lt;/p&gt;

&lt;p&gt;A well optimized deployment pipeline will help projects with faster releases and updates. Hence, improving overall code quality and collaboration.&lt;/p&gt;

&lt;p&gt;CI/CD is undergoing a major shift. There are several tools and startups out that are building the next generation of CI/CD.&lt;/p&gt;

&lt;p&gt;We really love Dagger at Flipt, as it allows us to customize our CI/CD pipelines to our heart’s content, while ensuring that they can be reproduced on any machine (thanks to Docker).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdagger.io%2Fdagger-social-card-1200x627.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdagger.io%2Fdagger-social-card-1200x627.png" alt="Dagger cover image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No matter how well architected a project’s CI/CD pipeline is, there’s always room for improvement.&lt;/strong&gt; For example, you could help a project speed up their builds by setting up dependency caching, or splitting up jobs to run in parallel. Any project maintainer would happily accept contributions that help speed up their project’s CI/CD pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Idea #2: Setup Dev Environments
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges open source projects face is streamlining new contributors onboarding. With a dev environment, projects are easy to test and experiment. As a result, increasing overall project contributions.&lt;/p&gt;

&lt;p&gt;Also, it’s a great way to gain experience with cutting-edge containerization tech, and deep understanding of project dependencies and setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.githubassets.com%2Fassets%2Fcodespaces-ga-individuals-a3d930da2750.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.githubassets.com%2Fassets%2Fcodespaces-ga-individuals-a3d930da2750.jpg" alt="GitHub Codespaces"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a multitude of projects from startups and large companies like Microsoft that are aiming to simplify developer environments. A few of the ones we’ve tried include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/remote/codespaces" rel="noopener noreferrer"&gt;GitHub Codespaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://code.visualstudio.com/docs/devcontainers/containers" rel="noopener noreferrer"&gt;DevContainers&lt;/a&gt; (Runs A Codespace but on your local machine)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://devenv.sh/" rel="noopener noreferrer"&gt;DevEnv.sh&lt;/a&gt; (Which uses Nix OS instead of Docker)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We &lt;a href="https://github.com/flipt-io/flipt/blob/main/devenv.nix" rel="noopener noreferrer"&gt;support all 3&lt;/a&gt; at Flipt, &lt;strong&gt;as we know developers have their own preferences, especially when it comes to their dev environments.&lt;/strong&gt; Our goal is to allow new contributors to get up and running quickly, without limiting them to a specific toolset or workflow.&lt;/p&gt;

&lt;p&gt;Ideas for contributing include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bootstrapping the setup these well-known tools in an OSS project&lt;/li&gt;
&lt;li&gt;Updating dependencies (such as bumping base image versions)&lt;/li&gt;
&lt;li&gt;Ensuring the dev environment works for new contributors, not just those who have worked on the project in the past.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Idea #3: Automate Issue/PR triaging
&lt;/h2&gt;

&lt;p&gt;Issue tracking and collaboration aren’t going anywhere. So it’s better that you learn to do it right. Automating a project’s issue management is one way you can learn that.&lt;/p&gt;

&lt;p&gt;Automated issue management helps the project by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster issue resolution&lt;/li&gt;
&lt;li&gt;Improved issue prioritization&lt;/li&gt;
&lt;li&gt;Better project progress tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And project maintainers will love you for that.&lt;/p&gt;

&lt;p&gt;Are you good at writing scripts? Want to build a GitHub bot? You could help project maintainers by helping them script the process of issue/PR triage to ensure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Issues are marked according to the project’s standards (ie: always have &lt;em&gt;bug&lt;/em&gt; or &lt;em&gt;feature request&lt;/em&gt; label, etc)&lt;/li&gt;
&lt;li&gt;Creating a GitHub bot to ping contributors if their PR is missing some key component (like test coverage or passing tests)&lt;/li&gt;
&lt;li&gt;Propose and write a script to help ensure that there are always adequate amounts of &lt;a href="https://github.com/flipt-io/flipt/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;Good First Issue&lt;/a&gt; labeled issues for new contributors to pick up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.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%2Ffkmmkdwj64jb9jd75usr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Ffkmmkdwj64jb9jd75usr.png" alt="Flipt Good First issues"&gt;&lt;/a&gt;Flipt Project Good First Issues&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I would suggest first opening an issue or discussion on any repo you would like to help automate, however.&lt;/strong&gt; This will ensure that your contribution would fit with how the core team operates.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;Now, you can choose any Open Source project of your liking and implement and start contributing.&lt;/p&gt;

&lt;p&gt;If you need any help with that, feel free to shoot your queries on our &lt;a href="https://discord.com/invite/kRhEqG2TEZ" rel="noopener noreferrer"&gt;discord&lt;/a&gt;. We have an awesome community there 💗&lt;/p&gt;

&lt;p&gt;If you found this valuable, follow me for more open source related articles 🙂&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>devops</category>
      <category>cloud</category>
      <category>docker</category>
    </item>
    <item>
      <title>️👨‍🔧 3 Tiny Fixes You Can Make To Start Contributing to Any Open Source Project 🚀</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Thu, 28 Dec 2023 23:33:37 +0000</pubDate>
      <link>https://dev.to/flipt/3-tiny-fixes-you-can-make-to-start-contributing-to-any-open-source-project-3n9m</link>
      <guid>https://dev.to/flipt/3-tiny-fixes-you-can-make-to-start-contributing-to-any-open-source-project-3n9m</guid>
      <description>&lt;p&gt;If you’re new to open source, the process can be overwhelming.&lt;/p&gt;

&lt;p&gt;But after onboarding &lt;a href="https://github.com/flipt-io/flipt"&gt;50+ contributors to Flipt&lt;/a&gt;, I realized there are ways to make starts easy for newbies.&lt;/p&gt;

&lt;p&gt;In this article, I will be sharing 3 fixes that you can make to ANY open source project to get started.&lt;/p&gt;

&lt;p&gt;Best part is that these are quick and easy to make and are technology independent, so you can use them to contribute to any open source project.&lt;/p&gt;

&lt;p&gt;Let’s dive in:&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix #1: Fix a typo
&lt;/h2&gt;

&lt;p&gt;Have you ever corrected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A misspelled function name?&lt;/li&gt;
&lt;li&gt;Grammatical errors in documentation?&lt;/li&gt;
&lt;li&gt;Changed a variable name to a more accurate one?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If so, you can start your open source journey by doing the same.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qmRkCsI0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media1.tenor.com/m/8tZ2c4_L4-cAAAAC/cat-laptop.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qmRkCsI0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media1.tenor.com/m/8tZ2c4_L4-cAAAAC/cat-laptop.gif" alt="typos gif" width="300" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Such typos are pretty common in an open source project. And due to them the project might appear unprofessional or not well maintained to its users. &lt;strong&gt;So even with a low effort change like this, you can improve the overall quality of the project.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fun fact: We actually use a code linter via &lt;a href="https://golangci-lint.run"&gt;golangci-linter&lt;/a&gt; to catch misspellings in code/comments using &lt;a href="https://github.com/client9/misspell"&gt;client9/misspell&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix #2: Fix a broken link
&lt;/h2&gt;

&lt;p&gt;We all have clicked on a link which leads to nowhere. &lt;br&gt;
And if it’s a link to a critical resource like a tutorial or troubleshooting guide, it can be a frustrating and time consuming experience for the developers.&lt;/p&gt;

&lt;p&gt;Broken links in your user-facing documentation not only make your project seem unprofessional, they also negatively affect &lt;em&gt;SEO performance&lt;/em&gt;, making your project harder to find.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, if you can find any non-functional links, or links guiding to the wrong location, fixing them will be a valuable contribution to a project.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mu_J-4ta--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/05z505w72kp3oo76656e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mu_J-4ta--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/05z505w72kp3oo76656e.png" alt="Flipt broken link pull request" width="800" height="407"&gt;&lt;/a&gt;&lt;br&gt;Flipt pull request fixing broken link
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;With your small contribution, you can make a big impact by saving developer’s time and frustration.&lt;/p&gt;

&lt;p&gt;This is a &lt;strong&gt;big reason&lt;/strong&gt; why you should make your documentation source open also! We do this for &lt;a href="https://github.com/flipt-io/docs"&gt;our docs&lt;/a&gt; and it's paid off in spades.&lt;/p&gt;
&lt;h2&gt;
  
  
  Fix #3: Fix outdated documentation
&lt;/h2&gt;

&lt;p&gt;Similar to broken links, stale documentation is another way to waste developer's time. They might waste time implementing or understanding an outdated piece of code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OWifhlau--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4cj8fcn0ikm8wkc2o8yg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OWifhlau--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4cj8fcn0ikm8wkc2o8yg.png" alt="Flipt outdated documentation pull request" width="800" height="407"&gt;&lt;/a&gt;&lt;br&gt;Flipt pull request fixing outdated doc
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Outdated documentation reduces confidence in your project especially for new users. Having docs that are incorrect/out of date puts an unnecessary roadblock in the way of users trying and integrating with your project.&lt;/p&gt;

&lt;p&gt;Here’s some ways you can fix it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update outdated API descriptions&lt;/li&gt;
&lt;li&gt;Correcting incorrect code examples&lt;/li&gt;
&lt;li&gt;Removing references of deprecated code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This will contribute significantly to the project's long term sustainability and maintainability.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;Now you can choose any open source project of your liking, and make the above valuable fixes to get started quickly. &lt;/p&gt;

&lt;p&gt;If you need any help with that, feel free to shoot queries in the &lt;a href="https://discord.com/invite/kRhEqG2TEZ"&gt;discord server&lt;/a&gt;.&lt;br&gt;
We have an awesome community there 💗&lt;/p&gt;

&lt;p&gt;If you found this valuable, follow me for more open source related articles 🙂&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__7755"&gt;
  &lt;a href="/flipt" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2PFcc9Hp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/practicaldev/image/fetch/s--gClD6Tdj--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/organization/profile_image/7755/9083b31e-02a9-4e40-b484-38d4319b9b78.png" alt="flipt image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/flipt" class="ltag__user__link"&gt;Flipt&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/flipt" class="ltag__user__link"&gt;
        Flipt is an open-source, enterprise-ready, GitOps-enabled, CloudNative feature management solution. Manage features, experiments, and rollouts across multiple teams and environments without data leaving your infrastructure.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>programming</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🔥 The Single Best Tip To Attract More Contributors To Your GitHub Project💡</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Wed, 20 Dec 2023 00:42:16 +0000</pubDate>
      <link>https://dev.to/flipt/the-single-best-tip-to-attract-more-contributors-to-your-github-project-4o2l</link>
      <guid>https://dev.to/flipt/the-single-best-tip-to-attract-more-contributors-to-your-github-project-4o2l</guid>
      <description>&lt;p&gt;Picture this.&lt;/p&gt;

&lt;p&gt;You are excited to contribute to an Open Source project. You go to its GitHub repository. Look at active issues. Only to wonder if you’d be able to complete the task. And then never came back to it.&lt;/p&gt;

&lt;p&gt;If it has happened to you, you’re not alone.&lt;/p&gt;

&lt;p&gt;Most first-time contributors struggle to find issues that match their skill level or the time they want to give to the project. &lt;/p&gt;

&lt;p&gt;In this article, I will share the &lt;strong&gt;effort-based issue labeling system&lt;/strong&gt; we use at &lt;a href="https://github.com/flipt-io/flipt"&gt;Flipt&lt;/a&gt; to deal with this problem.&lt;/p&gt;

&lt;p&gt;Implementing this will help you get more contributors to your open-source project. Also, get more contributions from existing ones.&lt;/p&gt;

&lt;p&gt;Too good to be true? Let’s find out.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why labeling issues by effort level is a good idea?&lt;/li&gt;
&lt;li&gt;Effort Level #1: extra small&lt;/li&gt;
&lt;li&gt;Effort Level #2: small&lt;/li&gt;
&lt;li&gt;Effort Level #3: medium&lt;/li&gt;
&lt;li&gt;Effort Level #4: large&lt;/li&gt;
&lt;li&gt;Effort Level #5: extra large&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why labeling issues by effort level is a good idea?
&lt;/h2&gt;

&lt;p&gt;Before going over our system, let’s explore some benefits of labeling issues with effort estimation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Confidence to contribute:&lt;/strong&gt; Effort estimation helps contributors choose tasks that match their time and skill level. This motivates them further to participate. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Low barrier to entry:&lt;/strong&gt; New or inexperienced contributors can make meaningful contributions to the project by working on low-effort issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Encourage a shared understanding of the project:&lt;/strong&gt; Effort labels boost transparency between maintainers and contributors, as it makes clear the time commitment required for each issue.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now let’s understand the estimation labels that we assign to the issues. These are ordered from low to high effort levels, which is also a recommended order in which new contributors should be making contributions to the project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Effort Level #1: &lt;a href="https://github.com/flipt-io/flipt/issues?q=is%3Aissue+label%3Axs"&gt;extra small&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WptmVT7---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ur9vrq77jlqhskdg9sd6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WptmVT7---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ur9vrq77jlqhskdg9sd6.png" alt="xs extra small flipt issues" width="800" height="450"&gt;&lt;/a&gt;Flipt GitHub Issues labeled xs&lt;/p&gt;

&lt;p&gt;These are the issues that contributors can complete within minutes to an hour. They are ideal for first time project contributors to get started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/flipt-io/flipt/issues/2535"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        [FLI-746] Show time/date format on settings/preferences page
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#2535&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/markphelps"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--gV8vBL0l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/209477%3Fv%3D4" alt="markphelps avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/markphelps"&gt;markphelps&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/flipt-io/flipt/issues/2535"&gt;&lt;time&gt;Dec 13, 2023&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Problem&lt;/h3&gt;
&lt;p&gt;It would be nice to show what setting the value of 'UTC' or 'local' actually looks like in the UI on the settings page&lt;/p&gt;
&lt;p&gt;Right now there's no clear indication of what the change means until you goto a list page&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Ideal Solution&lt;/h3&gt;
&lt;p&gt;Here's an example mockup:&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b8df71350fb1e3a33139a79634313c806fbbd034c5dffc7e4427df20c4490d7b/68747470733a2f2f75706c6f6164732e6c696e6561722e6170702f64336639643635352d376162302d343965392d616465382d6235393530343831396330372f61663761646332662d373532612d346535652d383565352d3536633531626536356462652f36343234666362612d303536322d346631352d386266332d3035353966663334326133613f7369676e61747572653d65794a68624763694f694a49557a49314e694973496e523563434936496b705856434a392e65794a775958526f496a6f694c32517a5a6a6c6b4e6a55314c546468596a41744e446c6c4f5331685a4755344c5749314f5455774e4467784f574d774e7939685a6a64685a474d795a6930334e544a684c54526c4e5755744f44566c4e5330314e6d4d314d574a6c4e6a566b596d55764e6a51794e475a6a596d45744d4455324d6930305a6a45314c5468695a6a4d744d4455314f575a6d4d7a517959544e684969776961574630496a6f784e7a41794e4467344e5463314c434a6c654841694f6a45334d4449314e7a51354e7a56392e4639736631586130737070306e4b59746b43566546693145625a354f7533526c676c707846666873493249"&gt;&lt;img src="https://camo.githubusercontent.com/b8df71350fb1e3a33139a79634313c806fbbd034c5dffc7e4427df20c4490d7b/68747470733a2f2f75706c6f6164732e6c696e6561722e6170702f64336639643635352d376162302d343965392d616465382d6235393530343831396330372f61663761646332662d373532612d346535652d383565352d3536633531626536356462652f36343234666362612d303536322d346631352d386266332d3035353966663334326133613f7369676e61747572653d65794a68624763694f694a49557a49314e694973496e523563434936496b705856434a392e65794a775958526f496a6f694c32517a5a6a6c6b4e6a55314c546468596a41744e446c6c4f5331685a4755344c5749314f5455774e4467784f574d774e7939685a6a64685a474d795a6930334e544a684c54526c4e5755744f44566c4e5330314e6d4d314d574a6c4e6a566b596d55764e6a51794e475a6a596d45744d4455324d6930305a6a45314c5468695a6a4d744d4455314f575a6d4d7a517959544e684969776961574630496a6f784e7a41794e4467344e5463314c434a6c654841694f6a45334d4449314e7a51354e7a56392e4639736631586130737070306e4b59746b43566546693145625a354f7533526c676c707846666873493249" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here we would show the current date/time and then live update it's format depending on what the user checked&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Search&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;[X] I searched for other open and closed issues before opening this&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Additional Context&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;No response&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;From &lt;a href="https://synclinear.com" rel="nofollow"&gt;SyncLinear.com&lt;/a&gt; | &lt;a href="https://linear.app/flipt/issue/FLI-746/show-timedate-format-on-settingspreferences-page" rel="nofollow"&gt;FLI-746&lt;/a&gt;&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/flipt-io/flipt/issues/2535"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  Effort Level #2: &lt;a href="https://github.com/flipt-io/flipt/issues?q=is%3Aissue+label%3Asm"&gt;small&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q72KgeZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ut864b35wekn0p9qq3up.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q72KgeZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ut864b35wekn0p9qq3up.png" alt="sm extra small flipt issues" width="800" height="450"&gt;&lt;/a&gt;Flipt GitHub Issues labeled sm&lt;/p&gt;

&lt;p&gt;Issues labeled with &lt;em&gt;sm&lt;/em&gt;, can take multiple hours to complete but less than a day. Such issues are great for new contributors that have solved a couple of &lt;em&gt;xs&lt;/em&gt; issues or contributors that find &lt;em&gt;xs&lt;/em&gt; issues too trivial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/flipt-io/flipt/issues/2546"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Namespace input validation not updating button until clicking outside of input
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#2546&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/julesglad"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--aHzNeqJc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/91433872%3Fv%3D4" alt="julesglad avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/julesglad"&gt;julesglad&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/flipt-io/flipt/issues/2546"&gt;&lt;time&gt;Dec 17, 2023&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Problem&lt;/h3&gt;
&lt;p&gt;New namespace validation only updates button state upon clicking outside of the input, rather than on each keystroke. This does not prevent the feature from working, but can cause some confusion for the user.&lt;/p&gt;
&lt;p&gt;Because I have not clicked out of the input, and instead gone directly to the button to create the namespace, even though I have a special character inside of the input, it has not yet updated to give me a validation error.
&lt;a rel="noopener noreferrer" href="https://github.com/flipt-io/flipt/assets/91433872/9cb474fb-e780-4bfd-b26f-5eb14befde4a"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o_Ft0Dbk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/flipt-io/flipt/assets/91433872/9cb474fb-e780-4bfd-b26f-5eb14befde4a" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Ideal Solution&lt;/h3&gt;
&lt;p&gt;Button state should be updated on each keystroke.&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Search&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;[X] I searched for other open and closed issues before opening this&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Additional Context&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;No response&lt;/em&gt;&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/flipt-io/flipt/issues/2546"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  Effort Level #3: &lt;a href="https://github.com/flipt-io/flipt/issues?q=is%3Aissue+label%3Amd"&gt;medium&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uxFwp66O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ubkzc6ae0tvjfqmdxc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uxFwp66O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ubkzc6ae0tvjfqmdxc1.png" alt="md medium flipt issues" width="800" height="450"&gt;&lt;/a&gt;Flipt GitHub Issues labeled md&lt;/p&gt;

&lt;p&gt;These issues are not too big, not too small. Work involved here can span a couple of days. That makes it an ideal option for weekend open source contributions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/flipt-io/flipt/issues/2532"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        [FLI-738] Validate authentication configs at start
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#2532&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/markphelps"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--gV8vBL0l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/209477%3Fv%3D4" alt="markphelps avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/markphelps"&gt;markphelps&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/flipt-io/flipt/issues/2532"&gt;&lt;time&gt;Dec 12, 2023&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Problem&lt;/h3&gt;
&lt;p&gt;Authentication configs are not currently fully validated at Flipt startup&lt;/p&gt;
&lt;p&gt;For example this config:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;authentication:
  methods:
    github:
      enabled: true
      scopes:
        - "user:email"
        - "read:org"
      allowed_organizations:
        - "flipt-io"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Allows Flipt to start up just fine, however, its not a valid config since &lt;code&gt;client_id&lt;/code&gt;, &lt;code&gt;client_secret&lt;/code&gt; and &lt;code&gt;redirect_address&lt;/code&gt; are all required for the OAuth setup with GitHub: &lt;a href="https://www.flipt.io/docs/configuration/authentication#github" rel="nofollow"&gt;https://www.flipt.io/docs/configuration/authentication#github&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Ideal Solution&lt;/h3&gt;
&lt;p&gt;Now that we have per authentication method validation (added &lt;a href="https://github.com/flipt-io/flipt/pull/2508/files#diff-9b81b9c76a5ad1bd617096d6af8c6bed965ca6c6b2505ce329d9d74151d0709cR257"&gt;https://github.com/flipt-io/flipt/pull/2508/files#diff-9b81b9c76a5ad1bd617096d6af8c6bed965ca6c6b2505ce329d9d74151d0709cR257&lt;/a&gt;), we should now define the minimum set of required configuration for each authentication method and then add validation for each auth method we support so that Flipt will not start and warn the user of the invalid/missing fields.&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Search&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;[X] I searched for other open and closed issues before opening this&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Additional Context&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;No response&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://linear.app/flipt/issue/FLI-738/validate-authenticaton-configs-at-start" rel="nofollow"&gt;FLI-738&lt;/a&gt;&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/flipt-io/flipt/issues/2532"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Effort Level #4: &lt;a href="https://github.com/flipt-io/flipt/issues?q=is%3Aissue+label%3Alg"&gt;large&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7GgDzzMQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbyuwykpkxexfce0qdkp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7GgDzzMQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbyuwykpkxexfce0qdkp.png" alt="lg large flipt issues" width="800" height="450"&gt;&lt;/a&gt;Flipt GitHub Issues labeled lg&lt;/p&gt;

&lt;p&gt;&lt;em&gt;lg&lt;/em&gt; issues are a little bit big. It’s recommended for active contributors or contributors that have fixed multiple &lt;em&gt;md&lt;/em&gt; issues. Simply due to the level of communication involved on these issues.&lt;/p&gt;

&lt;p&gt;They might also span the frontend and backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/flipt-io/flipt/issues/2428"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Support k8s-friendly gRPC deployments
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#2428&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/jalaziz"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s---vE_-4-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/247849%3Fv%3D4" alt="jalaziz avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/jalaziz"&gt;jalaziz&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/flipt-io/flipt/issues/2428"&gt;&lt;time&gt;Nov 22, 2023&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Problem&lt;/h3&gt;
&lt;p&gt;I'll start by saying that I was hoping to contribute this myself, but haven't found the time yet. I may get to it this coming weekend, but figured I should file an issue first.&lt;/p&gt;

&lt;p&gt;Deploying gRPC services on Kubernetes is &lt;a href="https://kubernetes.io/blog/2018/11/07/grpc-load-balancing-on-kubernetes-without-tears/" rel="nofollow"&gt;notoriously troublesome without a service mesh&lt;/a&gt;. The problem is that gRPC uses HTTP/2 and the clients establish long lived connections which &lt;code&gt;kube-proxy&lt;/code&gt; doesn't know how to load-balance.&lt;/p&gt;

&lt;p&gt;Expecting users to use service meshes or linkerd is not very realistic. It turns out that there is another way, but it requires various things to be configured. The general steps are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set keepalive timeout parameters on the server to force periodic re-resolution of DNS on the client.&lt;/li&gt;
&lt;li&gt;Deploy the server as a k8s &lt;a href="https://kubernetes.io/docs/concepts/services-networking/service/#headless-services" rel="nofollow"&gt;headless service&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Configure the client to use DNS round-robin load balancing (e.g. &lt;code&gt;dns:///flipt&lt;/code&gt; -- the third slash &lt;a href="https://github.com/grpc/grpc/blob/master/doc/naming.md"&gt;is significant&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://medium.com/jamf-engineering/how-three-lines-of-configuration-solved-our-grpc-scaling-issues-in-kubernetes-ca1ff13f7f06" rel="nofollow"&gt;This blog post&lt;/a&gt; has plenty of extra info.&lt;/p&gt;

&lt;p&gt;For Flipt, I believe the changes required would be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add the keepalive parameters to the server.&lt;/li&gt;
&lt;li&gt;Introduce a &lt;em&gt;new&lt;/em&gt; headless k8s service to the helm chart (this allows the HTTP service to continue to be load-balanced by &lt;code&gt;kube-proxy&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Ideal Solution&lt;/h3&gt;

&lt;p&gt;Both the flipt gRPC server and the helm chart should support client-side load balancing out of the box.&lt;/p&gt;

&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Search&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[X] I searched for other open and closed issues before opening this&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Additional Context&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;No response&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;/div&amp;gt;
&amp;lt;div class="gh-btn-container"&amp;gt;&amp;lt;a class="gh-btn" href="https://github.com/flipt-io/flipt/issues/2428"&amp;gt;View on GitHub&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
 

&lt;h2&gt;
  
  
  Effort Level #5: &lt;a href="https://github.com/flipt-io/flipt/issues?q=is%3Aissue+label%3Axl"&gt;extra large&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eUWIF9g5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ebipykebw22s8vvd6wf4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eUWIF9g5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ebipykebw22s8vvd6wf4.png" alt="lg extra large flipt issues"&gt;&lt;/a&gt;Flipt GitHub Issues labeled xl&lt;/p&gt;

&lt;p&gt;Finally, &lt;em&gt;xl&lt;/em&gt; issues are as big as it gets. These issues are rare and are recommended for contributors that have previously made successful &lt;em&gt;lg&lt;/em&gt; level contributions. As such contributions will need deep understanding of the project and skill proficiency.&lt;/p&gt;

&lt;p&gt;Usually these issues represent larger projects or initiatives that will need to be broken down into smaller ones before starting work. These issues are helpful to get feedback or suggestions from the community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/flipt-io/flipt/issues/2511"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        [FLI-734] Proposal(Auth): Support JWTs
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#2511&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/markphelps"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--gV8vBL0l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/209477%3Fv%3D4" alt="markphelps avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/markphelps"&gt;markphelps&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/flipt-io/flipt/issues/2511"&gt;&lt;time&gt;Dec 10, 2023&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Support externally created JWTs, verifying via these methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PEM-encoded key file&lt;/li&gt;
&lt;li&gt;JSON Web Key Set (JWKS) in a local file&lt;/li&gt;
&lt;li&gt;JWKS provided by the configured JWKS endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Need to flesh this out a bit more, but here are some good references to get started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-authentication/jwt/" rel="nofollow"&gt;https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-authentication/jwt/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://auth0.com/docs/secure/tokens/json-web-tokens/json-web-key-sets" rel="nofollow"&gt;https://auth0.com/docs/secure/tokens/json-web-tokens/json-web-key-sets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From &lt;a href="https://synclinear.com" rel="nofollow"&gt;SyncLinear.com&lt;/a&gt; | &lt;a href="https://linear.app/flipt/issue/FLI-734/proposalauth-support-jwts" rel="nofollow"&gt;FLI-734&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;/div&amp;gt;
&amp;lt;div class="gh-btn-container"&amp;gt;&amp;lt;a class="gh-btn" href="https://github.com/flipt-io/flipt/issues/2511"&amp;gt;View on GitHub&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
 

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;Now, you can use this simple-to-implement system in your GitHub project to boost contributions. &lt;/p&gt;

&lt;p&gt;If you need any help with that, feel free to shoot queries in the &lt;a href="https://discord.com/invite/kRhEqG2TEZ"&gt;discord server&lt;/a&gt;.&lt;br&gt;
We have an awesome community there 💗&lt;/p&gt;

&lt;p&gt;If you found this valuable, follow me for more open source related articles 🙂&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

</description>
      <category>opensource</category>
      <category>github</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🚀 🚀 Level Up Your GitHub Project with these Must-Have Bots 🤖</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Fri, 15 Dec 2023 13:55:18 +0000</pubDate>
      <link>https://dev.to/flipt/level-up-your-github-project-with-these-must-have-bots-1d9g</link>
      <guid>https://dev.to/flipt/level-up-your-github-project-with-these-must-have-bots-1d9g</guid>
      <description>&lt;p&gt;My life as an open-source maintainer:&lt;/p&gt;

&lt;p&gt;Before - &lt;em&gt;Tiring &amp;amp; Stressful&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Second - &lt;em&gt;Exciting &amp;amp; Fun&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The difference?&lt;/p&gt;

&lt;p&gt;Using bots at work.&lt;/p&gt;

&lt;p&gt;In this article, I will share 3 bots that work for us 24x7, making our maintainer’s life easy.&lt;/p&gt;

&lt;p&gt;These bots will automate the common repetitive &amp;amp; manual work of an Open Source project maintainer, so that they can focus on the project.&lt;/p&gt;

&lt;p&gt;Let’s go! 🚀 &lt;br&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick Ad&lt;/strong&gt;&lt;br&gt;
Hey 👋, If you are looking to network with open-source contributors and maintainers, then &lt;a href="https://discord.com/invite/kRhEqG2TEZ" rel="noopener noreferrer"&gt;join our discord&lt;/a&gt;. See you there! &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bot #1: AllContributors&lt;/li&gt;
&lt;li&gt;Bot #2: Kodiak&lt;/li&gt;
&lt;li&gt;Bot #3: CodeCov&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Bot #1: &lt;a href="https://github.com/all-contributors/all-contributors" rel="noopener noreferrer"&gt;AllContributors&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fbko5o6i9g4295okklpec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fbko5o6i9g4295okklpec.png" alt="AllContributors Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recognizing and thanking contributors to your Open Source project is non-negotiable. It’s easy to miss non-code contributions as they get less visibility than code contributions.&lt;/p&gt;

&lt;p&gt;Before AllContributors we had no way of publicly thanking contributors, other than simply commenting ‘thanks’ in the PR. This meant that most contributions went unnoticed by the larger community.&lt;/p&gt;

&lt;p&gt;AllContributors solves this for maintainers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It automates the process of recognizing new contributors, by adding them to the project's README file, with mention of their contributions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This way you acknowledge the work of all kinds of contributions, developers, designers, documentation writers, etc&lt;/p&gt;

&lt;p&gt;How cool is that?&lt;/p&gt;

&lt;p&gt;After a PR is merged, I simply comment &lt;code&gt;@allcontributors-bot please add @user for [x]&lt;/code&gt;, where x can be code, docs, etc.&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/flipt-io/flipt/pull/2474#issuecomment-1837148786" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Comment for
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#2474&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/markphelps" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F209477%3Fu%3D4df54c7eeaa8e0eb5fe82698e017f8ade6677478%26v%3D4" alt="markphelps avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/markphelps" rel="noopener noreferrer"&gt;markphelps&lt;/a&gt;
        &lt;/strong&gt; commented on &lt;a href="https://github.com/flipt-io/flipt/pull/2474#issuecomment-1837148786" rel="noopener noreferrer"&gt;&lt;time&gt;Dec 02, 2023&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;@all-contributors please add @AmineRhazzar for code&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/flipt-io/flipt/pull/2474#issuecomment-1837148786" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Then the bot takes over from there, putting up a new PR to add the user’s picture and info in the Contributors section of our README.&lt;/p&gt;

&lt;p&gt;Use this bot to improve contributor visibility. It’s a one-time investment that will pay high dividends for years. Follow &lt;a href="https://allcontributors.org/docs/en/bot/installation" rel="noopener noreferrer"&gt;this guide&lt;/a&gt; for the exact steps.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bot #2: &lt;a href="https://github.com/chdsbd/kodiak" rel="noopener noreferrer"&gt;Kodiak&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Outdated project dependencies lead to security, stability, and performance-related issues, which is why dependency updates must be patched promptly.&lt;/p&gt;

&lt;p&gt;At Flipt, we’ve used Dependabot since it was launched to keep our dependencies up to date. Dependabot is great about opening PRs for updating dependencies. The problem however is that it opens too many for us to keep track of and merge manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kodiak automates branch updates and merges of your project. It automatically merges pull requests once a set of criteria are met.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fn4jsy3597bsu0t88gi6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fn4jsy3597bsu0t88gi6j.png" alt="Kodiak"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This reduces the chance of any regression caused by outdated dependency in the project.  &lt;/p&gt;

&lt;p&gt;Kodiak handles the busy work of updating PRs that have become out of date from ‘main’ and merges any PRs that were created by Dependabot and have all green checks ✅. This means that we as maintainers get our time back to focus on reviewing PRs from humans, not robots 🤖&lt;/p&gt;

&lt;p&gt;You can add Kodiak to your project &lt;a href="https://kodiakhq.com/#quickstart" rel="noopener noreferrer"&gt;in minutes&lt;/a&gt;. And it will save hours of maintainers' time and effort.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bot #3: &lt;a href="https://github.com/apps/codecov" rel="noopener noreferrer"&gt;CodeCov&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The better your project’s code quality, the more high-quality contributions you’ll receive from the contributors. Which is why it’s important to monitor the project’s code coverage.&lt;/p&gt;

&lt;p&gt;Before integrating CodeCov, we would need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checkout each PR locally&lt;/li&gt;
&lt;li&gt;Run the test suite with coverage enabled&lt;/li&gt;
&lt;li&gt;Manually comment on the PR where coverage was missing. 
This was a huge pain and a waste of time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Now, CodeCov gives us actionable insights into test coverage and integrates well with our GitHub project.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fwak4eppwchi8kbo6rzsb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fwak4eppwchi8kbo6rzsb.png" alt="CodeCov"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The best part is, that once you integrate it in your CI pipeline, it automatically checks code coverage with each build.&lt;/p&gt;

&lt;p&gt;It also highlights areas of your project that lack test coverage. So that you can prioritize which tests need to be written first.&lt;/p&gt;

&lt;p&gt;Now, CodeCov handles reporting on our PRs where coverage is missing, notifying contributors (and ourselves) where we might be lacking tests.&lt;/p&gt;

&lt;p&gt;It also adds a GitHub check that we can make required, to ensure that a changeset is increasing test coverage, not decreasing it.&lt;/p&gt;

&lt;p&gt;Codecov has a &lt;a href="https://docs.codecov.com/docs" rel="noopener noreferrer"&gt;quick start guide&lt;/a&gt; to help you in getting started.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;Hope that these bots will supercharge your maintainer productivity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://discord.com/invite/kRhEqG2TEZ" rel="noopener noreferrer"&gt;Join our discord&lt;/a&gt; to network with other maintainers &amp;amp; developers.&lt;br&gt;
We have an awesome community there 💗&lt;/p&gt;

&lt;p&gt;If you found this valuable, follow me for more open source related articles 🙂&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Harnessing the Power of Testcontainers for Robust Testing in Go</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Wed, 13 Dec 2023 21:32:57 +0000</pubDate>
      <link>https://dev.to/markphelps/harnessing-the-power-of-testcontainers-for-robust-testing-in-go-2mj3</link>
      <guid>https://dev.to/markphelps/harnessing-the-power-of-testcontainers-for-robust-testing-in-go-2mj3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Testcontainers for Go is a Go package that makes it simple to create and clean up container-based dependencies for automated integration/smoke tests. The clean, easy-to-use API enables developers to programmatically define containers that should be run as part of a test and clean up those resources when the test is done.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://golang.testcontainers.org/"&gt;https://golang.testcontainers.org/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Testcontainers?
&lt;/h2&gt;

&lt;p&gt;Testing is a critical phase in software development. While there are many different types of testing, the two that most developers are familiar with are &lt;strong&gt;Unit Testing&lt;/strong&gt; and &lt;strong&gt;Integration Testing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Traditionally, Unit Tests test code at the function level, while Integration Tests test code as it interacts with various external systems and dependencies, ensuring that all of the components of an application work seamlessly together.&lt;/p&gt;

&lt;p&gt;Purists would argue that any test that requires an external dependency is an Integration Test. However, I've come to believe that at the end of the day, it doesn't matter what you call the type of test, just that your application is well tested, covering the various real-world scenarios that can occur.&lt;/p&gt;

&lt;p&gt;This is where Testcontainers really shines. You can set up almost any scenario that you can think of for your tests that interact with external dependencies, and control those scenarios with Go code!&lt;/p&gt;

&lt;h2&gt;
  
  
  Set Up
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;To get started with Testcontainers-Go, you'll need to have Docker installed on your system. Then, installing the library is straightforward. Simply run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;testcontainers&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;testcontainers&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command fetches the library and adds it to your project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Writing Your First Test
&lt;/h3&gt;

&lt;p&gt;Let's imagine your application requires PostgreSQL. Instead of setting up a PostgreSQL instance manually in CI or on your local machine, you can use Testcontainers-Go to create a Docker container for PostgreSQL only for the duration of your test.&lt;/p&gt;

&lt;p&gt;Here’s a simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"context"&lt;/span&gt;
    &lt;span class="s"&gt;"database/sql"&lt;/span&gt;
    &lt;span class="s"&gt;"log"&lt;/span&gt;
    &lt;span class="s"&gt;"testing"&lt;/span&gt;

    &lt;span class="s"&gt;"github.com/testcontainers/testcontainers-go"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/testcontainers/testcontainers-go/wait"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;TestPostgreSQLContainer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;ctx&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Background&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c"&gt;// Define the container request&lt;/span&gt;
    &lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;testcontainers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContainerRequest&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;        &lt;span class="s"&gt;"postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;ExposedPorts&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"5432/tcp"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;Env&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;          &lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"POSTGRES_PASSWORD"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;WaitingFor&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ForLog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"database system is ready to accept connections"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;// Start the container&lt;/span&gt;
    &lt;span class="n"&gt;postgresContainer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;testcontainers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GenericContainer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;testcontainers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GenericContainerRequest&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;ContainerRequest&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Started&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;          &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatalf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to start container: %s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;postgresContainer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Terminate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c"&gt;// Connect to the database&lt;/span&gt;
    &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;postgresContainer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MappedPort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5432"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;sql&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"host=localhost port=%s user=postgres password=password dbname=postgres sslmode=disable"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Port&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
    &lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c"&gt;// Your test logic here&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we create a PostgreSQL container and wait for it to be ready. We then connect to the database and perform our test operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Leverage Testcontainers
&lt;/h2&gt;

&lt;p&gt;Now that you can spin up a PostgreSQL instance for each test, you can do things like simulate what happens if PostgreSQL becomes unreachable by programmatically pausing or stopping the container while your application is in the middle of a database operation. This action can be easily done through Testcontainers-Go's control over the Docker container lifecycle.&lt;/p&gt;

&lt;p&gt;By pausing or stopping the container, you simulate a network failure or a database crash. Your test code would then observe and assert the behavior of your application under these conditions. Key aspects to look for include how the application handles the loss of connection (e.g., does it retry, how does it log the error, does it alert the user?), and how it recovers once the database connection is re-established. This process would be repeated under various conditions and configurations to thoroughly test the application's resilience and error-handling mechanisms.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://golang.testcontainers.org/"&gt;Testcontainers&lt;/a&gt; offers a robust solution for testing more complicated scenarios in Go applications. Its ability to create and manage Docker containers on the fly streamlines the testing process, making it more efficient and reliable. Whether you're dealing with simple database interactions or complex microservice architectures, Testcontainers-Go is a tool worth integrating into your testing suite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interested in seeing Testcontainers in a real-world project?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://github.com/flipt-io/flipt"&gt;Flipt&lt;/a&gt;, an enterprise-ready, GRPC-powered, GitOps-enabled, feature management solution written in Go where we make heavy use of Testcontainers for our tests.&lt;/p&gt;

</description>
      <category>go</category>
      <category>docker</category>
      <category>testing</category>
      <category>programming</category>
    </item>
    <item>
      <title>3 Reasons Why You Should Contribute to Open Source in 2024</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Mon, 11 Dec 2023 01:21:34 +0000</pubDate>
      <link>https://dev.to/flipt/3-reasons-why-you-should-contribute-to-open-source-in-2024-16h3</link>
      <guid>https://dev.to/flipt/3-reasons-why-you-should-contribute-to-open-source-in-2024-16h3</guid>
      <description>&lt;p&gt;2024 will be the 12th year since I made my first open source contribution.&lt;/p&gt;

&lt;p&gt;Since then I have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contributed to a global scale infrastructure GitHub Container Registry &lt;/li&gt;
&lt;li&gt;Built a network of friends from all over the world&lt;/li&gt;
&lt;li&gt;Started an Open Source Company&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this article, I will share the top 3 out of my 9934 reasons to start contributing to open source.&lt;/p&gt;

&lt;p&gt;If you’re looking to learn new skills, and grow your professional network and career while working on projects you care about, just hear me out for the next 3 minutes.&lt;/p&gt;

&lt;p&gt;Let’s dive in! 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reason #1: You can work on whatever you want&lt;/li&gt;
&lt;li&gt;Reason #2: You can create value for other people&lt;/li&gt;
&lt;li&gt;Reason #3: You can showcase your skills&lt;/li&gt;
&lt;li&gt;Wrapping Up&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Reason #1: You can work on whatever you want
&lt;/h2&gt;

&lt;p&gt;With open source, you get the freedom to work on projects that you are passionate about. You can explore your interests, and learn new skills, without needing to meet a deadline.&lt;/p&gt;

&lt;p&gt;This is very different from usual corporate work i.e. mostly closed source. And you are restricted to working on a specific set of technologies. In the long term, it can impact your technical growth and ability to adapt to industry changes.&lt;/p&gt;

&lt;p&gt;It doesn’t need to be that way.&lt;/p&gt;

&lt;p&gt;Take it from me. In previous roles, I was working in languages that I wasn’t interested in. I literally felt like my skills were stagnating. As a result, I was falling out of ‘love’ with programming.&lt;/p&gt;

&lt;p&gt;But then I started working on open source projects in my spare time. And boy that helped. I was free to learn new languages and work on projects exciting to me.&lt;/p&gt;

&lt;p&gt;Getting started with open source was one of the best decisions of my life!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And the best part is you can start small and slowly ramp up at your own pace. At Flipt, we have &lt;code&gt;good first issues&lt;/code&gt; specifically for first-time contributors.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All you need to do is show your interest by commenting on the issue and we will help you out in making your first contribution.&lt;/p&gt;

&lt;p&gt;Isn’t that amazing? 🙂&lt;/p&gt;

&lt;h2&gt;
  
  
  Reason #2: You can create value for other people
&lt;/h2&gt;

&lt;p&gt;Right now, you are sitting on a lot of static knowledge that you have gained over the years with your professional and personal experience. Open source provides you an active community of developers who you can share it with and make a positive impact on the project. &lt;/p&gt;

&lt;p&gt;It’s one of the most fulfilling things you’ll do as a developer. I’ll take the case of our contributor &lt;a href="https://github.com/ahobson"&gt;Andrew Hobson&lt;/a&gt; as an example.&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/flipt-io/flipt/pull/1900"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        feat(fs/s3): Initial support for s3 filesystem backend
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#1900&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/ahobson"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--xZnjp7o1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/21983%3Fv%3D4" alt="ahobson avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/ahobson"&gt;ahobson&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/flipt-io/flipt/pull/1900"&gt;&lt;time&gt;Jul 24, 2023&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;This follows the same pattern as &lt;code&gt;fs/git&lt;/code&gt; to add support for fetching feature flag data from S3.&lt;/p&gt;
&lt;p&gt;In an AWS environment, this would allow deploying a readonly container and not require communication to a git repository outside of the deployment environment.&lt;/p&gt;
&lt;p&gt;Let me know if you have suggestions or thoughts on how to improve the implementation.&lt;/p&gt;
&lt;p&gt;Thank you for flipt.&lt;/p&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Testing&lt;/h2&gt;
&lt;p&gt;The unit tests take advantage of an existing s3 bucket, using &lt;a href="https://github.com/minio/minio"&gt;minio&lt;/a&gt; to simulate it locally.&lt;/p&gt;
&lt;p&gt;Just like for the git backend, the &lt;code&gt;mage dagger:run test:unit&lt;/code&gt; does the work to start, provision and configure the test suite appropriately.&lt;/p&gt;
&lt;p&gt;However, if you do want to run this test locally to experiment or investigate, you can always do the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# in one terminal session
docker run -it --rm --name minio \
  -e MINIO_ROOT_USER=user -e MINIO_ROOT_PASSWORD=password -p 9009:9009 \
  quay.io/minio/minio:latest server /data --address ":9009"
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;# in another session first use the minio provisioner binary
# this pushes the contents of the provided directory into a bucket in minio
AWS_ACCESS_KEY_ID=user AWS_SECRET_ACCESS_KEY=password \
  go run ./build/internal/cmd/minio/... -minio-url http://localhost:9009 -testdata-dir ./internal/storage/fs/s3/testdata
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;# then you can run the test for `fs.Source`
AWS_ACCESS_KEY_ID=user AWS_SECRET_ACCESS_KEY=password TEST_S3_ENDPOINT=http://localhost:9009 \
  go test -v ./internal/storage/fs/s3/...
&lt;/code&gt;&lt;/pre&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/flipt-io/flipt/pull/1900"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This past summer, he implemented an entirely new &lt;u&gt;s3 object storage backend for our project&lt;/u&gt;, because it was something he wanted to use in his daily work. As the main developer of the project, it’s probably not something I would have ever thought of, but now this backend is used by many of our end users and has inspired additional functionality!&lt;/p&gt;

&lt;p&gt;Now you must be wondering —  “But I have nothing to share”.&lt;br&gt;
And I bet you have. &lt;strong&gt;You’re just blinded due to that knowledge being “obvious” to you now.&lt;/strong&gt; However, when you see anyone struggling in the community with the same problem, you’ll be able to help them out with ease. And build valuable connections in the process.&lt;/p&gt;

&lt;p&gt;Not sure still? &lt;a href="https://discord.com/invite/kRhEqG2TEZ"&gt;Join our close-knit community&lt;/a&gt; to see it in action.&lt;/p&gt;
&lt;h2&gt;
  
  
  Reason #3: You can showcase your skills
&lt;/h2&gt;

&lt;p&gt;Lastly, open source is one of the best ways to collect social proof.&lt;/p&gt;

&lt;p&gt;You collaborate with the community, communicate on issues and features, and ship your code. You become a “low-risk” hire for any employer in comparison to one with just a resume.&lt;/p&gt;

&lt;p&gt;Your contributions will bring you visibility and recognition that can potentially lead to job opportunities, consulting &amp;amp; speaking gigs, etc &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1728963251294089254-635" src="https://platform.twitter.com/embed/Tweet.html?id=1728963251294089254"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1728963251294089254-635');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1728963251294089254&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Our own &lt;a href="https://github.com/GeorgeMac"&gt;George MacRorie&lt;/a&gt; recently was invited to give a talk at &lt;a href="https://gitopsconeu2023.sched.com/event/1Unjp/gitops-is-a-means-where-is-the-end-george-macrorie-flipt-software"&gt;GitOps Con&lt;/a&gt; because of his amazing work on one of our &lt;a href="https://github.com/flipt-io/cup"&gt;open source projects&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At Flipt we give regular shoutouts and appreciate our contributors. We are grateful for each and every contribution made to the project. These contributions have helped us scale 3K supporters on GitHub.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So are you ready to showcase your technical expertise to the world?&lt;br&gt;
Make your first contribution at Flipt and we’ll take care of the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;I hope this list sold you on making your first open source contribution soon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://discord.com/invite/kRhEqG2TEZ"&gt;Join our discord&lt;/a&gt; if you need help with that. &lt;br&gt;
We have an awesome community there 💗&lt;/p&gt;

&lt;p&gt;If you liked this post, follow us for more of open source related articles 🙂&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>github</category>
    </item>
    <item>
      <title>3 Basic Traits That Every Successful Open Source Developer Has</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Fri, 08 Dec 2023 14:04:10 +0000</pubDate>
      <link>https://dev.to/flipt/3-basic-traits-that-every-successful-open-source-developer-has-39e</link>
      <guid>https://dev.to/flipt/3-basic-traits-that-every-successful-open-source-developer-has-39e</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iHh1iaNT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9nm62mya4s7jewmhsgoc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iHh1iaNT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9nm62mya4s7jewmhsgoc.png" alt="Flipt 3k Stars" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/flipt-io/flipt"&gt;Flipt&lt;/a&gt; has reached 3k GitHub stars ⭐ this week.&lt;/p&gt;

&lt;p&gt;Woohoo!! 🎉&lt;/p&gt;

&lt;p&gt;So I thought it would be a great time to reflect on what got us here and share our learnings with the community.  &lt;/p&gt;

&lt;p&gt;In this post, I’m sharing 3 traits of our awesome contributors that helped us scale Flipt this far.&lt;/p&gt;

&lt;p&gt;These 3 skills will help you level up your open source collaboration game and make you an invaluable contributor!&lt;/p&gt;

&lt;p&gt;Let's dive in 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Trait #1: Communication&lt;/li&gt;
&lt;li&gt;Trait #2: Empathy&lt;/li&gt;
&lt;li&gt;Trait #3: Flexibility&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Trait #1: Communication
&lt;/h2&gt;

&lt;p&gt;Most open source developers find collaboration hard at first.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documenting code changes&lt;/li&gt;
&lt;li&gt;Participating in discussions&lt;/li&gt;
&lt;li&gt;Sharing their point of view&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this comes naturally.&lt;/p&gt;

&lt;p&gt;But clear communication is a must for shared understanding and reducing &lt;em&gt;wasted effort&lt;/em&gt; in the project.&lt;/p&gt;

&lt;p&gt;Erka, who’s a regular contributor at Flipt, communicates well while collaborating with maintainers by:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Opening draft PRs&lt;/li&gt;
&lt;li&gt;Having a discussion before full review&lt;/li&gt;
&lt;li&gt;Actively responding to the feedback&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DoTln9B4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ckavzncgc3rgv85r9nqk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DoTln9B4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ckavzncgc3rgv85r9nqk.png" alt="Erka's contribution to Flipt" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Erka's contributions were vital in the past couple of releases. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Likewise, the more you find opportunities to communicate, the easier it becomes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, use commit message descriptions, review comments, code documentation, etc to develop your communication skills.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trait #2: Empathy
&lt;/h2&gt;

&lt;p&gt;When you don’t consider other contributor’s perspectives, you are limiting your learning.&lt;/p&gt;

&lt;p&gt;You’ll be able to resolve issues much more effectively, when you promote a positive and inclusive environment.&lt;/p&gt;

&lt;p&gt;One way to do that is like my fellow teammate George: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ArMBQlMg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5glub8yvn6evecje851z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ArMBQlMg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5glub8yvn6evecje851z.png" alt="George's PR comment" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;He literally checks up on PRs to unblock contributors. And offer a helping hand wherever he can.&lt;/p&gt;

&lt;p&gt;Having active contributors like him makes it immensely easy for newbies to get up and running with Flipt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So contribute to active project discussions or PR reviews to understand different contributor viewpoints.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;It builds a strong foundation for the long-term growth of the project. &lt;/p&gt;




&lt;h2&gt;
  
  
  Trait #3: Flexibility
&lt;/h2&gt;

&lt;p&gt;When you are open to feedback and suggestions, you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stay updated with latest trends&lt;/li&gt;
&lt;li&gt;Become fun to collaborate with&lt;/li&gt;
&lt;li&gt;Learn to navigate uncertainty &amp;amp; ambiguity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first, Amine wasn't sure what to do with a particular bit of implementation. But they didn't let it block them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IO_rIIgi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c99ugc69dsx13mysi919.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IO_rIIgi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c99ugc69dsx13mysi919.png" alt="Amine's contribution to Flipt" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They went ahead with what they thought was best, but were open to feedback and to make any changes if necessary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's why the easiest way to develop flexibility is by actively asking for feedback. Be open to constructive criticism. And use it to improve your approach.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Doing that will also help you in reducing stress and burnout caused by unexpected situations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;Hope you found it useful.&lt;br&gt;
Leave a ⭐ to support our work at &lt;a href="https://github.com/flipt-io/flipt"&gt;Flipt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Drop in comments which trait you struggle with the most. 👇&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Save 500+ Hours of Maintenance Work With These 3 GitHub Actions</title>
      <dc:creator>Mark Phelps</dc:creator>
      <pubDate>Sun, 03 Dec 2023 13:32:54 +0000</pubDate>
      <link>https://dev.to/flipt/save-500-hours-of-maintenance-work-with-these-3-github-actions-2nm3</link>
      <guid>https://dev.to/flipt/save-500-hours-of-maintenance-work-with-these-3-github-actions-2nm3</guid>
      <description>&lt;p&gt;GitHub Actions are awesome.&lt;/p&gt;

&lt;p&gt;They help you ship high-quality software more quickly, without spending a lot of time and effort in the process. &lt;/p&gt;

&lt;p&gt;In this article, I’m sharing 3 GitHub Actions we use at &lt;a href="https://github.com/flipt-io/flipt"&gt;Flipt&lt;/a&gt; that saved us more than 500 developer hours.&lt;/p&gt;

&lt;p&gt;You can use these battle-tested actions and automate your GitHub workflow right away.&lt;/p&gt;

&lt;p&gt;Let’s get rolling! 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GA #1: bufbuild actions&lt;/li&gt;
&lt;li&gt;GA #2: devcontainers/ci&lt;/li&gt;
&lt;li&gt;GA #3: goreleaser/goreleaser-action&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://github.com/bufbuild"&gt;GA #1: bufbuild actions&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3qv7aner--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/duq365bhqabduuuw20sj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3qv7aner--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/duq365bhqabduuuw20sj.png" alt="bufbuild actions repo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For background, we at Flipt are heavy users of protocol buffers and GRPC. We offer both a GRPC and REST API for communication between Flipt and our user’s services. &lt;/p&gt;

&lt;p&gt;In the early days, working with GRPC and Protocol Buffers was a pain. You had to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make sure that you have the right versions of protoc (the protobuf compiler) &lt;/li&gt;
&lt;li&gt;Correct GRPC extensions to generate code for your language of choice. &lt;/li&gt;
&lt;li&gt;Be extremely careful about adding, updating, and deleting fields or messages in your GRPC protobuf files. Because doing something incorrectly would break backward compatibility for your users. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, &lt;a href="https://buf.build/"&gt;Buf&lt;/a&gt; allows us to automate all of this toil by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating code for our GRPC SDKs &lt;/li&gt;
&lt;li&gt;Linting to make sure we don't break backward compatibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s how we use Buf in our GitHub Actions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We push new proto changes to the Buf Schema Registry after linting and running breaking changes checks.&lt;/li&gt;
&lt;li&gt;After each release of Flipt, we trigger workflows for all of our GRPC SDKs to pull the latest changes from the BSR (above).&lt;/li&gt;
&lt;li&gt;Then generate and publish new versions of our GRPC SDKs. (e.g. C# GRPC SDK)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://github.com/flipt-io/flipt/blob/40dff044341fe6aa0161bcdf7b592935bc75f9fe/.github/workflows/proto-push.yml"&gt;Link to full code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This action automates the process of linting, publishing, and code generation saving hours if not days of manual work. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://github.com/devcontainers/ci"&gt;GA #2: devcontainers/ci&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tG5A4Cs0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yev9n1xruk8pwpng360h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tG5A4Cs0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yev9n1xruk8pwpng360h.png" alt="devcontainers/ci repo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every maintainer wants a consistent environment for contributors to develop and test their code.&lt;/p&gt;

&lt;p&gt;But setting up &amp;amp; provisioning devcontainers can be a challenge when done manually. And that’s where devcontainers action comes in. &lt;/p&gt;

&lt;p&gt;It creates and manages devcontainers for GitHub repositories. With this action, you can run commands for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CI&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Building, etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We love &lt;a href="https://containers.dev/"&gt;devcontainers&lt;/a&gt; and GitHub Codespaces at Flipt. &lt;/p&gt;

&lt;p&gt;They are an easy way to standardize a development environment for contributors. Using codespaces, contributors can get a running developing Flipt right from the GitHub UI. &lt;/p&gt;

&lt;p&gt;If a contributor doesn’t want to use or pay for Codespaces, they can also run our devcontainer locally using VSCode + Docker. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There’s one challenge with devcontainers though.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keeping a devcontainer configuration up to date. Especially for a constantly changing project like Flipt. &lt;/p&gt;

&lt;p&gt;We solved this by leaning on the devcontainers/ci action to &lt;a href="https://github.com/flipt-io/flipt/blob/40dff044341fe6aa0161bcdf7b592935bc75f9fe/.github/workflows/devcontainer.yml"&gt;build our devcontainer each day&lt;/a&gt;. Now we can quickly resolve any issues with the build.&lt;/p&gt;

&lt;p&gt;Trust me, using this action is a no-brainer.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://github.com/goreleaser/goreleaser-action"&gt;GA #3: goreleaser/goreleaser-action&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kwsAO4Al--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czjw8d200wcq4r0x0yrj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kwsAO4Al--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czjw8d200wcq4r0x0yrj.png" alt="Go Releaser Action Repo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://goreleaser.com/"&gt;Goreleaser&lt;/a&gt; action makes it too easy to build, package, and publish Go binaries.&lt;/p&gt;

&lt;p&gt;Additionally, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cross-compile your Go project for multiple architectures&lt;/li&gt;
&lt;li&gt;Release to GitHub, GitLab and Gitea &lt;/li&gt;
&lt;li&gt;Create nightly builds&lt;/li&gt;
&lt;li&gt;Push to Homebrew, DockerHub, Snap packages&lt;/li&gt;
&lt;li&gt;Create announcements for new releases on Twitter, Discord, Slack, etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Goreleaser saves us so much time and effort it’s unreal.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Flipt binaries are published for 3 different architectures — amd64, x86_64, and arm64. &lt;/p&gt;

&lt;p&gt;Also, to keep the MacOS Gatekeeper process happy, we need to sign and notarize the binary of our MacOS (arm64) builds.&lt;/p&gt;

&lt;p&gt;We leverage GoReleaser (Pro) to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First run two build workflows in parallel (one for Linux and one for MacOS) &lt;/li&gt;
&lt;li&gt;And then merge the two results into a single job for publishing to GitHub Releases and DockerHub/GHCR/Homebrew.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re interested, we have documented our entire release process &lt;a href="https://github.com/flipt-io/flipt/blob/main/RELEASE.md"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you’re maintaining a Go project, always, always, use Goreleaser and spend saved time on more productive tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;That’s it!&lt;/p&gt;

&lt;p&gt;Hope you found the list useful.&lt;br&gt;
Leave a ⭐ to support our work at &lt;a href="https://github.com/flipt-io/flipt"&gt;Flipt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you liked this post, follow us for more of open source related articles 🙂&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>buildinpublic</category>
      <category>githubactions</category>
    </item>
  </channel>
</rss>
