<?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: Paweł Kosiec</title>
    <description>The latest articles on DEV Community by Paweł Kosiec (@pkosiec).</description>
    <link>https://dev.to/pkosiec</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%2F455704%2F3194cf79-08db-4c9e-9407-3e23ca914250.jpeg</url>
      <title>DEV Community: Paweł Kosiec</title>
      <link>https://dev.to/pkosiec</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pkosiec"/>
    <language>en</language>
    <item>
      <title>How we designed a DevOps Co-pilot to help DevOps and SREs reduce context switching</title>
      <dc:creator>Paweł Kosiec</dc:creator>
      <pubDate>Mon, 07 Oct 2024 17:08:36 +0000</pubDate>
      <link>https://dev.to/kubeshop/how-we-designed-a-devops-co-pilot-to-help-devops-and-sres-reduce-context-switching-2mea</link>
      <guid>https://dev.to/kubeshop/how-we-designed-a-devops-co-pilot-to-help-devops-and-sres-reduce-context-switching-2mea</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today’s fast-paced world, DevOps, SRE, and platform engineers constantly juggle multiple tasks—from navigating through various layers of a project while implementing new functionalities to answering developer questions and troubleshooting infrastructure issues. This constant context switching often leads to inefficiencies and burnout.&lt;/p&gt;

&lt;p&gt;In this blog post, we’ll dive into the journey of building Botkube Fuse, a tool designed to address these challenges. We’ll explore the problems it solves, the design process, and how it can help streamline workflows for platform engineers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Inspiration Behind Fuse
&lt;/h2&gt;

&lt;p&gt;The design process for Fuse was born out of necessity and shaped by user feedback. As we engaged with platform engineers, SREs, and DevOps practitioners in our community, it became clear that their biggest challenge was the sheer volume of tasks they had to handle simultaneously. Our team began by identifying the most common sources of frustration, such as switching between multiple browser tabs for project documentation, constantly checking CI/CD alerts, and answering repetitive infrastructure questions. These scenarios are just examples of a larger problem: context switching.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tackling the Core Pain Point: Context Switching
&lt;/h2&gt;

&lt;p&gt;Context switching is one of the most significant challenges platform engineers face in their daily work. Whether it’s responding to alerts from CI pipelines, troubleshooting deployment issues, or answering developer queries, they are often pulled in multiple directions at once. This fragmented focus leads to inefficiencies and can significantly slow down productivity. In many cases, engineers spend more time switching between tasks than actually solving problems. &lt;/p&gt;

&lt;p&gt;That’s not all. Context switching can also result from a lack of proper staffing and support. Many organizations expect Platform Engineers, DevOps, and SRE practitioners to cover an extremely wide range of responsibilities (“EverythingOps”) without adequate resources. Additionally, these teams are sometimes treated like a help desk for developers or are expected to architect systems without sufficient backing from engineering leadership, further worsening the problem.&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%2F0x4niln2cb88zl6k1uog.gif" 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%2F0x4niln2cb88zl6k1uog.gif" alt="Joggling fail" width="598" height="640"&gt;&lt;/a&gt;&lt;br&gt;
(&lt;em&gt;GIF source: &lt;a href="https://tenor.com" rel="noopener noreferrer"&gt;tenor.com&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;
&lt;h2&gt;
  
  
  From Idea to Reality: Crafting the Perfect Solution
&lt;/h2&gt;

&lt;p&gt;Once we understood the pain point we wanted to solve, the next step was designing a solution. The terminal is the natural choice for most DevOps or platform engineers we engaged with, so we decided to use it as the foundation for our design. We opted to build a CLI tool that combines multiple different tools and knowledge sources into a single, unified experience.&lt;/p&gt;

&lt;p&gt;Now, we can’t forget the hardest part of the design process: naming.&lt;/p&gt;

&lt;p&gt;The name “Fuse” was chosen to represent the core idea of unifying and streamlining tasks for platform engineers. It stems from the concept of “fusion”, symbolizing the merging of multiple tools, tasks, and workflows into a single, cohesive solution. We wanted a name that was easy to remember and reflected the tool’s purpose of reducing fragmentation caused by context switching. Fuse brings together the enhanced power of Botkube’s AI capabilities with a simplified workflow, helping engineers focus on what matters most. The name perfectly encapsulates the tool’s mission to “fuse” everything into a seamless experience.&lt;/p&gt;
&lt;h2&gt;
  
  
  Meet Fuse: Your New DevOps Companion
&lt;/h2&gt;

&lt;p&gt;After two months of design, planning, and development, we launched the first public Fuse release.&lt;/p&gt;

&lt;p&gt;Fuse is a terminal tool powered by our most advanced AI assistant, designed to answer your questions and tackle challenges in your day-to-day work. Unlike some other tools on the market (including Botkube), it’s just a single CLI binary without an agent. You just simply install Fuse and type &lt;code&gt;fuse 'your prompt here...'&lt;/code&gt;, or run &lt;code&gt;fuse&lt;/code&gt; to enter interactive mode and start chatting.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/YOCztqgd5w4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Unlocking Fuse’s Power: How It Works
&lt;/h2&gt;

&lt;p&gt;Fuse builds on existing Botkube technology, including our AI assistant and cloud infrastructure, and takes it to the next level.&lt;/p&gt;

&lt;p&gt;Fuse uses the powerful GPT-4o model from OpenAI to get things done. We integrated a variety of tools to assist you with Kubernetes, Google Cloud Platform, GitHub, Git, and local filesystem operations. It can even generate and execute Python code on your behalf!&lt;/p&gt;

&lt;p&gt;“Whoa, that’s pretty dangerous,” you might say. “I don’t trust the code executed by AI.” Good point! That’s why Fuse requires user confirmation for each potentially dangerous operation (such as filesystem writes or code execution) to ensure you are in full control of what’s happening on your machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Fuse Stands Out
&lt;/h2&gt;

&lt;p&gt;While there are similar tools in the AI space, we wanted to build something different—and better. That’s why we established two bold principles.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Holistic View of Your Infrastructure
&lt;/h3&gt;

&lt;p&gt;Firstly, we aim to integrate your data from different sources and make the Fuse AI assistant aware of connections between them. Imagine a smart assistant who understands your infrastructure: from your Terraform modules, ArgoCD app manifests in your git repository, through your GitHub Actions pipelines, Google Cloud Platform resources current state, to actual business-critical services deployed in Kubernetes. That's what we have in mind while building Fuse. Magic, eh?&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%2Fcrb4b0b70gccockztihn.gif" 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%2Fcrb4b0b70gccockztihn.gif" alt="Magic" width="300" height="168"&gt;&lt;/a&gt;&lt;br&gt;
(&lt;em&gt;GIF source: &lt;a href="https://tenor.com" rel="noopener noreferrer"&gt;tenor.com&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;We introduced the &lt;code&gt;fuse init&lt;/code&gt; command which currently introspects your Google Cloud Platform project, your GKE clusters and other resources, to help with your complex scenarios on the edge of Kubernetes and GCP. But that's just a glimpse of what we want to build. Stay tuned!&lt;/p&gt;

&lt;h3&gt;
  
  
  Focused Solutions for Real Problems
&lt;/h3&gt;

&lt;p&gt;We aim to solve real user problems, which often arise at the intersection of different parts of the infrastructure—hence the need for the end-to-end infrastructure knowledge we described earlier.&lt;/p&gt;

&lt;p&gt;However, even with such knowledge, we do believe that even the most powerful AI assistants out there still require some guidance. Someone needs to do the “prompt engineering” work. That’s why we introduced AI assistant guidance for different user scenarios. Currently, we focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions secret management&lt;/li&gt;
&lt;li&gt;GitHub Actions pipeline run analysis&lt;/li&gt;
&lt;li&gt;GKE troubleshooting with IAM permission errors&lt;/li&gt;
&lt;li&gt;Local environment operations and debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How does it work? The Fuse AI assistant categorizes your question first, and then if it’s close to our predefined scenarios, it uses our custom instruction for guidance to do the work. Of course users can still customize the behavior with customized prompts but we want to make sure it follows the right path by default.&lt;/p&gt;

&lt;p&gt;While more scenarios will definitely ship soon, we also do believe that users should be able to write custom instructions and reuse them automatically in a given context. Expect some updates around that in the following weeks - and if you have any suggestions for improvements or new scenarios, please let us know on Slack or by getting in touch.&lt;/p&gt;

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

&lt;p&gt;Launching Fuse is a significant milestone, but we view it as the foundation for something much bigger. We're eager to learn from your experiences, gather feedback, and iterate on Fuse to make it even more powerful and intuitive. This is just the beginning, and we're excited to see where we can go from here.&lt;/p&gt;

&lt;p&gt;To recap, Botkube Fuse is designed to help platform engineers, DevOps, and SREs reduce inefficiencies caused by constant context switching. By unifying multiple tools into a single, terminal-based CLI powered by AI, Fuse simplifies complex workflows and automates repetitive tasks. With features like GKE troubleshooting, GitHub Actions analysis, and more, it’s built to solve real-world challenges.&lt;/p&gt;

&lt;p&gt;Best of all, Fuse is &lt;a href="https://botkube.io/fuse" rel="noopener noreferrer"&gt;free to try&lt;/a&gt;—so give it a try and see how it can streamline your day-to-day work. We’d love to hear your feedback—reach out to us via &lt;a href="https://join.botkube.io/" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; or our social media channels!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>ai</category>
      <category>productivity</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Microsoft Teams Integration for Botkube: A Technical Journey</title>
      <dc:creator>Paweł Kosiec</dc:creator>
      <pubDate>Wed, 13 Dec 2023 13:20:45 +0000</pubDate>
      <link>https://dev.to/kubeshop/microsoft-teams-integration-for-botkube-a-technical-journey-2n8m</link>
      <guid>https://dev.to/kubeshop/microsoft-teams-integration-for-botkube-a-technical-journey-2n8m</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;If you are already familiar with Botkube, then you know that it's a collaborative tool to help you monitor and troubleshoot Kubernetes clusters. Botkube integrates the most popular communication platforms, and Microsoft Teams is one of them.&lt;/p&gt;

&lt;p&gt;The initial version of our integration debuted in &lt;a href="https://github.com/kubeshop/botkube/pull/242"&gt;February 2020&lt;/a&gt;, marking a significant milestone in our journey. Since then, we've been continuously evolving and improving. In this release cycle, we've identified and acknowledged its limitations in the user-experience and ease of set up. &lt;/p&gt;

&lt;p&gt;Fortunately, these times are over now! We've been working hard on a brand-new Microsoft Teams integration, which we introduced as a part of &lt;a href="https://botkube.io/blog/botkube-1-6-release"&gt;Botkube 1.6 release&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now, let's talk about how we got here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration from the Field
&lt;/h2&gt;

&lt;p&gt;During our conversations with users at events like KubeCon and Civo Navigate, we found out that many IT companies rely on Microsoft Teams for their communication. It's not surprising, considering that Microsoft Teams is one of the most popular communication platforms in the world. It is used by over 1 million organizations and 320 million users (&lt;a href="https://www.demandsage.com/microsoft-teams-statistics/"&gt;source&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Through discussions with various users and organizations, a common problem surfaced--many faced challenges due to the requirement for a public endpoint on their Kubernetes clusters and difficult configuration steps. Also, the integration lacked some of the core features that were available in other platforms like Slack. This was usually a blocker for them.&lt;/p&gt;

&lt;p&gt;Right after the Botkube Cloud launch, we focused on building the seamless multi-cluster Slack integration, as it was without doubt the most popular communication platform among our users. However, we knew that we had to do something about the Microsoft Teams integration as well. Because of the way the Microsoft Teams API works, the only way we could fix this problem properly was a dedicated infrastructure for handling the communication between Botkube and Microsoft Teams.&lt;/p&gt;

&lt;p&gt;That was the time we were approached by a large enterprise company that was using Microsoft Teams as their main communication tool. They were interested in a proper multi-cluster solution for their customer's Kubernetes clusters. After a series of interviews and discussions, we  used their feedback to start developing a new Microsoft Teams integration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tf4M4xjO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qe658fjouvg9s8821sh.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tf4M4xjO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qe658fjouvg9s8821sh.gif" alt="Let's do this!" width="220" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;
&lt;small&gt;Source: &lt;a href="https://tenor.com"&gt;tenor.com&lt;/a&gt;&lt;/small&gt;
&lt;/center&gt;

&lt;h2&gt;
  
  
  Technical journey
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Investigation and research
&lt;/h3&gt;

&lt;p&gt;The very first stage was to investigate various aspects of the Microsoft Teams communication platform and its API. We wanted to understand the limitations and challenges we would face during the development process. We also wanted to make sure that we could deliver the features that were missing in the previous version of the integration.&lt;/p&gt;

&lt;p&gt;This phase consisted of multiple different steps, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Research around Microsoft Teams Bot Framework and Graph API capabilities.&lt;/li&gt;
&lt;li&gt;Multi-tenancy architecture design with a proof of concept application (covering security, multi-cluster support, and scalability).&lt;/li&gt;
&lt;li&gt;App distribution, installation and permission granting process.&lt;/li&gt;
&lt;li&gt;Interactivity support for the Microsoft Teams messages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every single step was crucial to the success of the feature and had it own challenges. During the investigation stage, we quickly realized that this solution will be slightly different from the multi-cluster Slack integration we've built before.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture design
&lt;/h3&gt;

&lt;p&gt;After our set of investigations, we had a clear picture what we're going to build. We established the following architecture:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VjhJsYeg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ossgim7xqqwdzl3y8zyu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VjhJsYeg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ossgim7xqqwdzl3y8zyu.png" alt="Botkube Cloud for Microsoft Teams - architecture" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me go through the diagram.&lt;/p&gt;

&lt;p&gt;Until our Microsoft Teams app is approved by Microsoft and listed in the Microsoft Teams apps catalog, we distribute a ZIP file for manual sideloading by a Microsoft Teams organization administrator.&lt;/p&gt;

&lt;p&gt;After installing the app, to use Microsoft API for fetching team and channel information, we need to grant the app permissions to access the Microsoft Teams API. This is done by the organization administrator only once for the whole organization.&lt;/p&gt;

&lt;p&gt;Same as for Slack integration, in Botkube Cloud we use a message broker internally, to ensure scalability, and reliability. Every Botkube Agent connects via gRPC to Botkube Cloud to receive events from Microsoft Teams.&lt;/p&gt;

&lt;p&gt;Because of the way the Microsoft Teams API works, and to ensure proper tenant separation, both source notifications and executor commands are routed via Botkube Cloud. This is different from the Slack integration, where we could use the Slack API directly from the Botkube instance for handling incoming notifications. However, Botkube Cloud is used simply as a proxy, without storing any event data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interactivity support
&lt;/h3&gt;

&lt;p&gt;Interactivity support for the Microsoft Teams messages was one of the challenging parts of the development process. We wanted to make sure that the user experience is as good as possible, and close to the Slack integration. Fortunately, Microsoft Teams uses Microsoft's Adaptive Cards format, which is a flexible way to present interactive content in Microsoft Teams messages. Moreover, in-place message updates are supported, to ensure the content is always up-to-date. But, of course, technical details were different from the Slack integration, so we needed to render the messages differently.&lt;/p&gt;

&lt;p&gt;After a while we were able to achieve similar feeling to the users familiar with our multi-cluster Slack solution. Here's a quick comparison:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7JMkJMfM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bhubh11py8amgkbfu6an.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7JMkJMfM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bhubh11py8amgkbfu6an.png" alt="Microsoft Teams vs Slack interactivity" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Development and testing
&lt;/h3&gt;

&lt;p&gt;Thanks to the Microsoft Teams proof of concept application, we were able to quickly start the development process. The fact that we built the multi-cluster Slack integration before also helped tremendously. We were able to reuse some of the concepts like gRPC communication between Botkube Agent and Botkube Cloud, and the message broker infrastructure.&lt;/p&gt;

&lt;p&gt;After busy weeks full of development and testing, we were able to deliver the first version of the new Microsoft Teams integration. While it's not yet perfect, it's a huge step forward. We are working on adding more features and improving the existing ones, continuously refining the integration based on user feedback, including the one from the company that came to us with the initial request.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Microsoft Teams integration: Key Features
&lt;/h2&gt;

&lt;p&gt;So what the first version of the new Microsoft Teams integration brings to the table? Let's take a look at the key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-cluster support.&lt;/li&gt;
&lt;li&gt;Enhanced per-channel plugin configuration including RBAC policy.&lt;/li&gt;
&lt;li&gt;Interactive messages.&lt;/li&gt;
&lt;li&gt;Actionable notifications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While some features known from Slack, such as the Kubectl command builder, are not yet available in the new Microsoft Teams integration, we are working on adding them in the future releases.&lt;br&gt;
Still, every single item listed above weren't available in the previous version of the Microsoft Teams integration. And, what's the most important, &lt;strong&gt;we simplified the configuration process&lt;/strong&gt;. It still isn't perfect, but we think that it's a huge step forward.&lt;/p&gt;

&lt;p&gt;As the previous integration was so painful to set up, we decided to deprecate it. Worry not, though! The new Microsoft Teams integration is now available to all users as a part of the &lt;a href="https://app.botkube.io"&gt;Botkube Cloud&lt;/a&gt; offering--both Free and Team plans.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g8PNIb8J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/006u47a7dzo7dk2g08bf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g8PNIb8J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/006u47a7dzo7dk2g08bf.gif" alt="Your reaction after trying out the new Microsoft Teams integration (hopefully!)" width="220" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;
&lt;small&gt;Your reaction after trying out the new Microsoft Teams integration (hopefully!).&lt;br&gt;Source: &lt;a href="https://tenor.com"&gt;tenor.com&lt;/a&gt;&lt;/small&gt;
&lt;/center&gt;

&lt;h2&gt;
  
  
  Setting Up and Configuration
&lt;/h2&gt;

&lt;p&gt;Interested in trying out the brand-new Microsoft Teams integration in Botkube? To get started, create a free &lt;a href="https://app.botkube.io"&gt;Botkube Cloud&lt;/a&gt; account and follow the &lt;a href="https://docs.botkube.io/installation/teams"&gt;Microsoft Teams&lt;/a&gt; instruction. To see the multi-cluster support in action, enable the free Botkube Cloud trial and connect as many Botkube installations as you want!&lt;/p&gt;

&lt;h2&gt;
  
  
  What do you think? Let us know!
&lt;/h2&gt;

&lt;p&gt;We are constantly working on improving Botkube and its new Microsoft Teams integration. Our roadmap is driven by user feedback and community contributions. Let us know what you think about the new integration and how we can make it better. You can reach out to us on the &lt;a href="https://join.botkube.io/"&gt;Botkube Community Slack workspace&lt;/a&gt;, or simply &lt;a href="https://github.com/kubeshop/botkube"&gt;create an issue&lt;/a&gt; on our GitHub repository.&lt;/p&gt;

</description>
      <category>chatops</category>
      <category>kubernetes</category>
      <category>teams</category>
      <category>devops</category>
    </item>
    <item>
      <title>Building Botkube ChatGPT Plugin: From Ideation to Implementation</title>
      <dc:creator>Paweł Kosiec</dc:creator>
      <pubDate>Fri, 28 Jul 2023 10:43:43 +0000</pubDate>
      <link>https://dev.to/kubeshop/building-botkube-chatgpt-plugin-from-ideation-to-implementation-a3b</link>
      <guid>https://dev.to/kubeshop/building-botkube-chatgpt-plugin-from-ideation-to-implementation-a3b</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The Botkube team is a group of dedicated individuals with a common focus on developing innovative solutions in the technology landscape. With AI getting more and more widely used, the team saw an opportunity to explore the potential of AI-powered chatbots in the DevOps space.&lt;/p&gt;

&lt;p&gt;A significant event that played a crucial role in shaping the trajectory of the ChatGPT plugin was the company-wide hackathon organized by Kubeshop. The hackathon was a great opportunity for the team to brainstorm ideas and collaborate on projects that would help people make Kubernetes life easier, simpler and faster.&lt;/p&gt;

&lt;p&gt;This blog post aims to document the entire process involved in the creation of the &lt;a href="https://docs.botkube.io/configuration/executor/doctor"&gt;ChatGPT plugin&lt;/a&gt; for &lt;a href="https://botkube.io"&gt;Botkube&lt;/a&gt; open-source project. From the initial spark of the idea during the hackathon to the final stages of implementation, we'll take you on a behind-the-scenes journey. Expect insights into the challenges, breakthroughs, and collaborative efforts that went into making this vision a reality.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Ideation Phase: The Company-Wide Hackathon
&lt;/h2&gt;

&lt;p&gt;It all started with the internal Kubeshop hackathon. During this intense and collaborative event, team members from diverse backgrounds came together to brainstorm, experiment, and find novel solutions to challenges in the Kubernetes space, as a part of the existing projects in Kubeshop portfolio. The hackathon's theme was to help Developers, Testers, DevOps, SRE’s or their managers with making Kubernetes life easier, simpler, and faster. In 48 hours, the teams had to come up with an idea, build a prototype, and present their proof-of-concept solution to the judges.&lt;/p&gt;

&lt;p&gt;The Botkube team came up with 14 different ideas. As the hackathon time was limited, the team had to filter out the ideas we should focus on. After several discussions and internal voting, we decided to improve the Botkube onboarding experience. This consisted of 4 different parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Botkube Cloud Migration Tool, to seamlessly migrate existing Botkube installation to Botkube Cloud.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Botkube Cloud Instance Builder, a convenient drag-and-drop UI tool to configure Botkube instance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exec plugin, to install and run any CLI application directly from chat platform, without any hassle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ChatGPT executor plugin, which is the main topic of this blog post.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ChatGPT plugin was the most voted idea internally, as we all saw the potential to bring significant value to the users. The team, guided by the goal of selecting an idea with the highest impact, set specific criteria to evaluate each proposal. We considered factors such as feasibility, market demand, and alignment with the Botkube's long-term vision. The ChatGPT plugin idea ticked all the boxes, showing promise to address real customer needs and aligning perfectly with the Botkube's mission.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Planning and Conceptualization
&lt;/h2&gt;

&lt;p&gt;Once the ChatGPT executor plugin was selected as a part of our hackathon topic, the team started working on the project. The first step was to define the goals and objectives of the plugin.&lt;/p&gt;

&lt;p&gt;The main goal was to lower the barrier of entry for new Botkube users. Sometimes it is hard to understand and troubleshoot the Kubernetes errors and their meaning, especially for beginners. That's why the idea was to introduce "Get help" button under incoming error events.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zAt7pBsi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yh7fagq86k9vrlbdgvs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zAt7pBsi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yh7fagq86k9vrlbdgvs.png" alt="Figma prototype" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The button would pass the error data to the ChatGPT plugin, which would use return an AI-generated response with actionable buttons. The user would be able to click on the buttons to execute specific commands, such as &lt;code&gt;kubectl describe pod&lt;/code&gt; or &lt;code&gt;kubectl logs pod&lt;/code&gt;. This would help the user to troubleshoot the issue without the need to search for the solution on the Internet.&lt;/p&gt;

&lt;p&gt;Another use case we considered is answering human questions directly from the chat. The user would be able to ask questions like "How to create a Pod?" or "How to troubleshoot non-working Service?" and get an AI-generated response. This would be useful for new users who are not familiar with Kubernetes concepts and terminology.&lt;/p&gt;

&lt;p&gt;The final part of this phase was to come up with a name for the plugin. This was one of the hardest challenges.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There are only two hard things in Computer Science: cache invalidation and naming things.&lt;br&gt;
-- Phil Karlton&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We decided to call it "Doctor", as it would help users to diagnose and fix Kubernetes issues.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Development Process
&lt;/h2&gt;

&lt;p&gt;The enthusiasm and dedication displayed by the team during the ideation phase laid a strong foundation for the development of the ChatGPT plugin. As we already knew what we wanted to develop, we had to decide on the specific technologies and tools to use.&lt;/p&gt;

&lt;p&gt;Choosing plugin language was the first step. Botkube plugin API uses Hashicorp's &lt;a href="https://github.com/hashicorp/go-plugin"&gt;&lt;code&gt;go-plugin&lt;/code&gt;&lt;/a&gt; gRPC interface. While it has cross-language support, we decided to stick to Go as it is the primary language used in Botkube. We also wanted to leverage the existing Go SDK and pipelines we set up for the Botkube Go codebase.&lt;/p&gt;

&lt;p&gt;The next step was a bit more challenging: choosing the right AI model. We wanted to use a pre-trained model to avoid the need for training data and the time-consuming training process. The most important thing was to be able to answer Kubernetes-related questions efficiently. After careful consideration, we decided to use OpenAI's GPT-3 (&lt;code&gt;text-davinci-003&lt;/code&gt;) model for the chatbot.&lt;/p&gt;

&lt;p&gt;While ChatGPT integration is very straightforward, another little challenge was to construct a prompt that produces predictable results and to parse the response from the model, so that we could render interactive output for a user. After a little bit of testing and experimenting, we achieved the desired result.&lt;/p&gt;

&lt;p&gt;The last part was to integrate the ChatGPT plugin into Kubernetes source plugin, which watches for Kubernetes events and sends notifications to the chat interface. We extended the Kubernetes plugin with &lt;code&gt;extraButtons&lt;/code&gt; configuration property, which accepts command templates and renders them as interactive buttons as a part of each notification:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;This way, we were able to render the "Get help" button under each error event. As the implementation is generic, users can also benefit from it and configure virtually any command button under specific types of events.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;In 48 hours, Botkube team was able to deliver a fully-working ChatGPT plugin called "Doctor". The plugin is able to help troubleshooting Kubernetes cluster issues based on incoming events. It's best used in combination with Slack integration, as it provides interactive buttons to help users navigate through the troubleshooting process. No typing required!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kY8eDXoz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4r1v26dlh3fm0gfp4ay3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kY8eDXoz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4r1v26dlh3fm0gfp4ay3.gif" alt="Doctor plugin in action" width="800" height="334"&gt;&lt;/a&gt;&lt;br&gt;
‍&lt;br&gt;
It also exposes ChatGPT prompt, so you can ask some arbitrary, not necessarily Kubernetes-related questions:&lt;br&gt;
‍&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KFvwXOx5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gss1yxo3eero6tz541q7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KFvwXOx5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gss1yxo3eero6tz541q7.png" alt="What are the common problems with Kubernetes service?" width="800" height="408"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6ngBYrcX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipy5lmky54pb5an5wplb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6ngBYrcX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipy5lmky54pb5an5wplb.png" alt="How to create a pod" width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The team was very happy with the result, and we decided to &lt;strong&gt;ship it to all users in &lt;a href="https://botkube.io/blog/botkube-v1-2-0-release-notes"&gt;Botkube 1.2 release&lt;/a&gt;&lt;/strong&gt;! 🎉&lt;/p&gt;

&lt;p&gt;How to get started, you ask? &lt;a href="https://docs.botkube.io/"&gt;Install Botkube&lt;/a&gt;, if you haven't already, and enable Doctor plugin following the &lt;a href="https://docs.botkube.io/configuration/executor/doctor"&gt;Configuration&lt;/a&gt; document. Then, learn how to use it by reading the &lt;a href="https://docs.botkube.io/usage/executor/doctor"&gt;Usage&lt;/a&gt; document.&lt;/p&gt;

&lt;p&gt;‍&lt;/p&gt;

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

&lt;p&gt;The journey from the hackathon ideation to the final ChatGPT plugin has been nothing short of remarkable. It all began with the internal Kubeshop hackathon, where the Botkube team collaborated intensely and passionately to brainstorm ideas for making Kubernetes life easier, simpler, and faster. After carefully evaluating various proposals, the ChatGPT plugin emerged as the most promising idea, driven by its potential to revolutionize the Botkube onboarding experience and provide users with an unparalleled DevOps tool.&lt;/p&gt;

&lt;p&gt;This would not have been possible without the spirit of cross-team collaboration and innovation that thrives within the company. The hackathon served as a platform for team members from diverse backgrounds to unite, share their expertise, and collectively explore innovative solutions. This collaborative approach fostered a culture of creativity and knowledge-sharing that continues to inspire future projects.&lt;/p&gt;

&lt;p&gt;The Doctor plugin was just the beginning of our journey. We plan to continually enhance its functionality, leveraging user feedback and insights to make it more versatile and user-friendly. That's why your feedback is very important to us.&lt;/p&gt;

&lt;p&gt;Let us know what do you think about the &lt;a href="https://docs.botkube.io/configuration/executor/doctor"&gt;ChatGPT-based Doctor plugin&lt;/a&gt;! We are always open to feedback and suggestions. If you have any questions, feel free to reach out to us on &lt;a href="https://join.botkube.io/"&gt;Slack&lt;/a&gt; or &lt;a href="https://twitter.com/botkube_io"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;PS If you haven’t already, don’t forget to star &lt;a href="https://github.com/kubeshop/botkube"&gt;Botkube repository&lt;/a&gt; on GitHub!&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>kubernetes</category>
      <category>devops</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Introducing Capact, your new way to manage applications and infrastructure</title>
      <dc:creator>Paweł Kosiec</dc:creator>
      <pubDate>Tue, 21 Sep 2021 12:55:17 +0000</pubDate>
      <link>https://dev.to/capactio/introducing-capact-your-new-way-to-manage-applications-and-infrastructure-mfj</link>
      <guid>https://dev.to/capactio/introducing-capact-your-new-way-to-manage-applications-and-infrastructure-mfj</guid>
      <description>&lt;p&gt;Managing the lifecycle of infrastructure, applications, and processes in modern IT is problematic. There are a variety of tools and best practices, which are ever-changing. It's a struggle to stay up-to-date with these practices, and not everyone is an expert at everything. Technical debt is inevitable.&lt;/p&gt;

&lt;p&gt;We are ultimately all alone. We are siloed within the context of team, department, or company, locked-in in a particular ecosystem of tooling. To deliver end-to-end capabilities, we build them from scratch in a vacuum. We consume API calls, transform data, build and manage infrastructure and applications. Don't we spend too much time solving the same problems as others have?&lt;/p&gt;

&lt;p&gt;Sharing expertise is something that already happens—we have plenty of libraries and frameworks out there. But what if we went a step further and have a way to create, use and share building blocks that are &lt;strong&gt;language-agnostic abstracted capabilities&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;For example, if you're not a cloud expert, all you need to know is that you want a managed PostgreSQL database on AWS. Let the subject-matter experts take care of it, and simply focus on your business logic. Likewise, if you need any Kubernetes cluster—by saying "I want any Kubernetes cluster" and letting the magic happen, you could cover both local development and production scenarios…&lt;/p&gt;

&lt;p&gt;What if I told you… &lt;strong&gt;now this is all possible&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Introducing Capact, crowdsourced expertise. Learn once, use everywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Capact?
&lt;/h2&gt;

&lt;p&gt;Capact is a new way to manage applications and infrastructure and run arbitrary workflows. &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%2F6g9e0x2lr90rpfyy4tqm.gif" 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%2F6g9e0x2lr90rpfyy4tqm.gif" alt="Here we go again GIF"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;center&gt;&lt;small&gt;source: &lt;a href="https://tenor.com/view/here-wego-again-again-ohboy-sigh-captain-america-gif-15496881" rel="noopener noreferrer"&gt;tenor.com&lt;/a&gt;&lt;/small&gt;&lt;/center&gt;

&lt;p&gt;Yes, we get it. You already know plenty of different tools for that. But Capact is different. How is it different?&lt;/p&gt;

&lt;p&gt;Capact comes with a truly unique feature—&lt;strong&gt;interchangeability of dependencies&lt;/strong&gt;. If you know the concept of interfaces from a variety of programming languages, you get the idea. Think about Capact as a way of executing workflows with steps, which are described with interfaces. An implementation for a given interface is resolved dynamically at runtime, according to your preferences. Also, these dynamic workflow steps are building blocks, which can be reused by others (or even nested within other workflows).&lt;/p&gt;

&lt;p&gt;Initially, we focused on day-one and day-two operations for managing applications and infrastructure. However, Capact is built with universal concepts in mind, so you can run any arbitrary workflow you want. For example, you can do data processing, machine learning workloads, system configuration, cluster benchmarking, auditing, running serverless workloads—the possibilities are virtually endless.&lt;/p&gt;

&lt;p&gt;The best thing is that Capact is &lt;strong&gt;fully open-source&lt;/strong&gt; under the Apache 2.0 license. How cool is that? 😎&lt;/p&gt;

&lt;h2&gt;
  
  
  Capact concept in one minute
&lt;/h2&gt;

&lt;p&gt;The whole concept sounds confusing? Let's see that in action.&lt;/p&gt;

&lt;p&gt;Let's take &lt;a href="https://mattermost.com/" rel="noopener noreferrer"&gt;Mattermost&lt;/a&gt; installation as an example. Mattermost is an open-source alternative for Slack.&lt;/p&gt;

&lt;p&gt;Mattermost is a Go server application, which uses a PostgreSQL database. If we want to install Mattermost, this how the workflow would look like:&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%2F4tom82qmpf5zs1qh4l0d.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%2F4tom82qmpf5zs1qh4l0d.png" alt="Mattermost installation 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We need a PostgreSQL database first to run a Mattermost server. It's pretty simple.&lt;/p&gt;

&lt;p&gt;Now, what if we make the PostgreSQL database installation abstract? Think about that as an empty slot, where you can put a puzzle with a specific shape.&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%2F9h0vcc8xrtcmmh3rsa8v.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%2F9h0vcc8xrtcmmh3rsa8v.png" alt="Mattermost installation 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Assuming there are many puzzles pieces out there, you see that only a few of them fit in the slot:&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%2Fr0518vrr8of8gj7sqllf.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%2Fr0518vrr8of8gj7sqllf.png" alt="Mattermost installation 3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the case of PostgreSQL installation, four puzzle pieces fit:&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%2F9ckj3l9mfq677j1jzy6v.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%2F9ckj3l9mfq677j1jzy6v.png" alt="Mattermost installation 4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install PostgreSQL Helm chart on a Kubernetes cluster&lt;/li&gt;
&lt;li&gt;Provision GCP CloudSQL for PostgreSQL database&lt;/li&gt;
&lt;li&gt;Provision AWS RDS for PostgreSQL database&lt;/li&gt;
&lt;li&gt;Reuse existing PostgreSQL database&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By default, for a workflow run, Capact picks the first puzzle piece that fits. However, by applying &lt;a href="https://capact.io/docs/feature/policies/overview" rel="noopener noreferrer"&gt;Policy&lt;/a&gt;, you are in complete control of which puzzle piece will be chosen. Moreover, you can select a different one for a specific scenario, such as local setup, CI/CD, stage, and production cluster.&lt;/p&gt;

&lt;p&gt;What's great is that Mattermost installation itself is also a larger puzzle piece, which others can use! Maybe as a part of productivity stack installation, which could consist of Mattermost, &lt;a href="https://about.gitlab.com/" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt; and &lt;a href="https://jitsi.org/jitsi-meet/" rel="noopener noreferrer"&gt;Jitsi Meet&lt;/a&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%2Fawhkofh5zuloqql7g3sj.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%2Fawhkofh5zuloqql7g3sj.png" alt="Mattermost installation 5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that's Capact. You can build your own workflows with existing puzzles, which are available inside Capact Hub. You can also create your own puzzles. Share them with the community and enable &lt;a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="noopener noreferrer"&gt;DRY&lt;/a&gt; at a global scale, together!&lt;/p&gt;

&lt;h2&gt;
  
  
  How does Capact differ from other tools?
&lt;/h2&gt;

&lt;p&gt;Capact doesn't compete with tools you might already be familiar with, but it integrates them instead. Whether you are a &lt;a href="https://helm.sh" rel="noopener noreferrer"&gt;Helm&lt;/a&gt; or &lt;a href="https://terraform.io" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; user, you can still use your favorite tools. Mix and match your tooling or API of choice. For example, chain Terraform, Helm, and Slack API.&lt;/p&gt;

&lt;p&gt;If you are familiar with &lt;a href="https://kubevela.io/" rel="noopener noreferrer"&gt;Kubevela&lt;/a&gt;, &lt;a href="https://crossplane.io/" rel="noopener noreferrer"&gt;Crossplane&lt;/a&gt;, and &lt;a href="https://oam.dev/" rel="noopener noreferrer"&gt;Open Application Model&lt;/a&gt;, you can see many similarities between the solution and Capact. Here are the main differences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Capact has unique built-in feature—interchangeable dependencies, which reduces the amount of duplicated code.&lt;/li&gt;
&lt;li&gt;Capact is a process / workflow-based solution, which gives you more flexibility. Unlike Kubevela and Crossplane, Capact is not limited to just infrastructure and application deployment. You can use it for virtually everything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To read a detailed comparison between Capact and other tools, see our &lt;a href="https://capact.io/docs/faq#how-does-capact-compare-to" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started with Capact
&lt;/h2&gt;

&lt;p&gt;Interested in trying out Capact? Awesome! The easiest way to do so is by installing it locally and trying out one of our examples to understand Capact basic concepts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://capact.io/docs/cli/getting-started" rel="noopener noreferrer"&gt;Install Capact CLI&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://capact.io/docs/installation/local" rel="noopener noreferrer"&gt;Install Capact locally with Capact CLI&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://capact.io/docs/example/mattermost-installation" rel="noopener noreferrer"&gt;Run different scenarios of Mattermost installation example&lt;/a&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here are other things to do: &lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;Star our GitHub repository&lt;/strong&gt;: If you like the idea, show your interest in the project and &lt;a href="https://github.com/capactio/capact" rel="noopener noreferrer"&gt;give us a GitHub star&lt;/a&gt;! You can also subscribe for new Capact releases. Thank you for your support!&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Follow us:&lt;/strong&gt; Interesting in Capact updates? Follow us on &lt;a href="https://twitter.com/capactio" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;! Also, check out our &lt;a href="https://www.linkedin.com/company/72586376" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; page and &lt;a href="https://www.youtube.com/channel/UCajXtDttqVuZ_Bl7M3_qA8w" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt; channel.&lt;/p&gt;

&lt;p&gt;📖 &lt;strong&gt;Read our documentation:&lt;/strong&gt; If you want to get familiar with other installation options, examples, content development, or contribution guides, check out the &lt;a href="https://capact.io/docs" rel="noopener noreferrer"&gt;Capact documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;🤔 &lt;strong&gt;Get support:&lt;/strong&gt; If you need any help, or you have a question for us, join our &lt;a href="https://capact.io/community/slack" rel="noopener noreferrer"&gt;Slack channel&lt;/a&gt; on the CNCF workspace and post a message—we'll do our best to get you sorted!&lt;/p&gt;

&lt;p&gt;Currently, Capact is at an experimental stage. We open-sourced Capact as early as possible to get early feedback and build Capact together with the community.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait, there's more!
&lt;/h2&gt;

&lt;p&gt;In a series of future blog posts, we will highlight Capact features and cover various topics for all!&lt;/p&gt;

&lt;p&gt;Also, as of September 20th 2021, &lt;strong&gt;a brand-new release&lt;/strong&gt;, Capact 0.5.0, &lt;strong&gt;is here&lt;/strong&gt;. We were working really hard to bring many UX improvements, both for Capact users and content developers. The list includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete Action input validation and more advanced, concurrent Capact manifests validation with optional server-side checks,&lt;/li&gt;
&lt;li&gt;Experimental content development tools for Helm and Terraform-based (AWS and GCP) manifest generation,&lt;/li&gt;
&lt;li&gt;Policy syntax and behavior changes for improving consistency and usability,&lt;/li&gt;
&lt;li&gt;Verbose output for Capact CLI,&lt;/li&gt;
&lt;li&gt;Dependency updates, including migration to Argo 3,&lt;/li&gt;
&lt;li&gt;Air-gapped Capact installation,&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://k3d.io" rel="noopener noreferrer"&gt;k3d&lt;/a&gt; support,&lt;/li&gt;
&lt;li&gt;and much, much, more!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To see the full list of features, read the &lt;a href="https://github.com/capactio/capact/releases/tag/v0.5.0" rel="noopener noreferrer"&gt;release notes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Are you ready to start playing around with Capact?&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%2Fk5qwq1d4e4r3fcosazvr.gif" 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%2Fk5qwq1d4e4r3fcosazvr.gif" alt="Are you ready GIF"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;center&gt;&lt;small&gt;source: &lt;a href="https://tenor.com/view/are-you-ready-gif-5011220" rel="noopener noreferrer"&gt;tenor.com&lt;/a&gt;&lt;/small&gt;&lt;/center&gt;



&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://capact.io" rel="noopener noreferrer"&gt;https://capact.io&lt;/a&gt; on September 7, 2021 and updated on September 20th, 2021 to highlight that the Capact 0.5.0 release is publicly available.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cloudnative</category>
      <category>cloud</category>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
