<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://capact.io/blog</id>
    <title>Capact Blog</title>
    <updated>2021-12-13T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://capact.io/blog"/>
    <subtitle>Capact Blog</subtitle>
    <icon>https://capact.io/img/favicon.ico</icon>
    <rights>Copyright © 2022 Capact authors.</rights>
    <entry>
        <title type="html"><![CDATA[Meet Capact maintainers and learn how to become one!]]></title>
        <id>maintainers-interview</id>
        <link href="https://capact.io/blog/maintainers-interview"/>
        <updated>2021-12-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Did you know that it's already been 16 months since Capact was born?]]></summary>
        <content type="html"><![CDATA[<p>Did you know that it&#x27;s already been 16 months since Capact was born?</p><p>In a previous blog post, we discussed some of the problems Capact aims to solve. This time, Capact maintainers took some time to answer questions you might have if you&#x27;re considering contributing to the project.</p><p>What&#x27;s it like to build a cloud-native platform from scratch? What is it like to work in Capact? What are the biggest challenges? How to start with Go? Read on to get the answers!</p><h2>Tell us why you are here. How did you begin your adventure in IT?</h2><p><strong>Mateusz:</strong> In the past, I worked on similar projects that aimed to unify our developer tooling. In my opinion, it is something that awaits us in the future. It’s definitely worth being a part of it.</p><p>My journey with IT actually started thanks to my brother. He was really into technology, so besides playing games with me, he started to teach me how it all worked and gave me programming challenges. There was a big age difference between us (10 years), so the first program that I wrote was on Commodore 64 when I was about 8 years old. Since then, I have been involved in technology. From the beginning, I felt love for backends, but tolerated frontend 😁 During my studies, I got interested in the cloud. As a result, I started an internship, where from Java I switched to Go. Now it’s been 5.5 years that I’ve been connected with the cloud-native world and I certainly don’t regret that.</p><p><strong>Paweł:</strong> My adventure with computer science also started pretty early. When I got my first PC, I was 8 years old. Initially, I played games on it, but after a while, I was interested in doing more than that. When I was in primary school, I started to write some basic applications in Delphi and created my first HTML website. Obviously, the websites followed the trends at that time—they were loaded with GIFs and tons of text scrolling in different directions (remember the “MARQUEE” HTML tag?).</p><p>When I was 13, I began working as a freelancer in the web development area. Before getting a bachelor’s degree in computer science, I joined my first IT company as a UI developer. More than 4 years ago, I transformed from a front-end guy to a full-stack cloud developer, with JavaScript, Go, and Kubernetes. I was involved in building a project from the CNCF landscape, and over time I developed less and less front-end and more back-end stuff. In the meantime, I was a Scrum Master and was involved in promoting that previous project at conferences, meetups, and different events. Same as Mateusz, I joined Capact over a year ago to build an ambitious, cloud-native project from scratch.</p><h2>The main technologies used in Capact are Go and Kubernetes. Why such a choice in this case?</h2><p><strong>Paweł:</strong> Both Go and Kubernetes are becoming more and more popular.</p><p>In the cloud-computing world, choosing the proper set of technologies is very crucial to ensure the final application is scalable, performant, and resilient. Kubernetes helps us orchestrate the deployed microservices, and make sure they operate without any issue, on any cloud provider, or even bare metal.</p><p>Go, on the other hand, is a great fit for such projects—its simplicity enables us to write such back-end services efficiently. They are fast to compile and consume much fewer resources than alternatives written in Java or JavaScript/TypeScript.</p><p><strong>Mateusz:</strong> It’s worth highlighting that the Go community already created a lot of powerful libraries. You don’t need to solve cloud-specific problems once again, and can focus on solving your domain/business problems instead.</p><p>As mentioned, Go is easy in terms of memory consumption, which is important in cloud environments. Of course, it doesn&#x27;t come without a downside; the abstraction level in Go is quite low, but the <a href="https://tip.golang.org/doc/go1.18">upcoming Go 1.18</a> will be a significant release, especially with support for generics.</p><h2>Can you give us more background on what Capact is?</h2><p><strong>Paweł:</strong> Capact is an open-source framework for running arbitrary workflows. Currently, we are focusing on day-one and day-two workflows for deploying, and managing applications and cloud-native infrastructure.</p><p>The main difference between Capact and alternative tools is its interchangeability of dependencies. The workflow may consist of dynamic steps, which are described by the interface. Such steps can resolve different implementations, depending on the user&#x27;s preferences. It is the same concept taken from programming languages.</p><p><strong>Mateusz:</strong> As you can see, the idea for the Capact project is pretty bold: Create a platform that is a glue that you can use to chain e.g. Terraform, Helm, and Slack API. At the same time, ensure <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself">the DRY principle</a> at the global scale, so that you can reuse as many existing building blocks as you can. This idea is explained very well in our <a href="https://capact.io/blog/introducing-capact">Introductory blog post</a> :)</p><p>The best part of this project is that it&#x27;s not a competitor to any other project. It gives an option to use tools that you like and trust in a unified and easy way.</p><h2>What are the biggest challenges associated with it?</h2><p><strong>Mateusz:</strong> As I said, we try to make Capact as easy as possible.</p><p>Here is the thing: it&#x27;s challenging to make it easy for the end-user, as gluing different tools together requires a lot of flexibility from our platform. It&#x27;s not possible to gather all use-cases and implement them at once. We need to deliver that iteratively. If you have ideas for where we should go next, we&#x27;d love to hear them!</p><p>Personally, I like that this project is complicated and makes you rack your brain. We want to solve problems that are not trivial. We also try to strike a balance between the productization and the open-source side.</p><p><strong>Paweł:</strong> Apart from balancing between two scopes, open-source and commercial, these two are also separate challenges. We are about to start building an open-source community around Capact, which will definitely be a challenge to gain adoption—not only from hobbyists but also big tech companies.</p><p>There&#x27;s also a commercial offering planned, which is based on Capact. And that&#x27;s happening right now, so we need to ensure that the Capact user experience is seamless for every user profile (BTW they are described on <a href="https://capact.io/community/user-profiles">our website</a>) and that it works well in a production environment.</p><h2>What kind of benefits related to career development can a contributor gain in this project?</h2><p><strong>Paweł:</strong> Capact consists of many technologies, and you can learn a lot. Even if you know some of them, while working on Capact, you will have an opportunity to dive deeply into some stuff you have never tried. Apart from <a href="https://go.dev/">Go</a> and <a href="https://kubernetes.io/">Kubernetes</a>, we use <a href="https://graphql.org/">GraphQL</a>, <a href="https://www.typescriptlang.org/">TypeScript</a>, <a href="https://www.terraform.io/">Terraform</a>, and plenty of projects and tools around Kubernetes, such as <a href="https://argoproj.github.io/argo-workflows/">Argo workflows</a>, and <a href="https://min.io/">MinIO</a>.</p><p>You will help design upcoming Capact features—starting from user experience, ending up on architectural challenges. There&#x27;s also a lot to learn when it comes to soft skills—while building an open-source community, you will practice collaborating with external contributors, improve giving talks on meetups and conferences, etc.</p><p>Once you have made several valuable contributions, you will have an opportunity to become <a href="https://capact.io/community/governance#maintainers">Capact Maintainer</a>.</p><h2>What type of maintainers are you looking for?</h2><p><strong>Mateusz:</strong> We&#x27;re looking for open-minded people who want to be responsible for multiple parts of the platform that we develop. We have a small team, and we deliver features end-to-end. At this stage, we don&#x27;t want to split into domain experts; all of us are responsible for the whole product. Don&#x27;t worry, we will help you in onboarding to our technology stack.</p><p>On a daily basis, you will implement new functionality, write automated tests, build CI/CD pipelines, and provide documentation for it.</p><p><strong>Paweł:</strong> You will also have an opportunity to design architecture, create a proofs of concept, teach and evangelize the open-source community, and be involved in project roadmap planning.</p><p>We&#x27;re looking for solid all-rounders, who are not afraid of new technologies and learn quickly. That&#x27;s why we think about a true DevOps profile—solid programming skills and love for operations. We require Kubernetes experience, and some experience with Go—it doesn&#x27;t have to be production-grade experience, but it would be good if you know the basic conventions. Any open-source contributions would be nice to have!</p><h2>Do you have any advice for beginners in Go? How can developers broaden their knowledge in this area and what benefits does this language offer?</h2><p><strong>Paweł:</strong> Go is great for writing lightweight backend applications and CLI tools. If you want to build modern cloud-native, apps, learn Go, as it is the right tool for the job.</p><p>I would recommend starting with some Go interactive tutorials. After learning new syntax (which is really easy), figure out an idea for a new hobby project. Maybe you&#x27;re missing some tool you would like to use? It doesn&#x27;t matter whether it is an HTTP service, CLI tool, or something else—start working on that! Open-sourcing, can give you an additional boost to work on it, and improve over time. Promote it on Reddit and other sites, and you&#x27;ll see that people use it, and love it!</p><p>You can also contribute to some existing open-source projects written in Go. On GitHub, look for issues with the “good first issue” label, discuss it with project maintainers, and start coding! If you&#x27;re interested in the Capact project, perhaps you can even contribute to our repositories? We also have “good first issues” :-)</p><p><strong>Mateusz:</strong> Personally, I can tell that for me the most efficient way to learn any language is by doing reviews and submitting PRs that will be reviewed by more experienced developers. This way, you learn how to solve real problems. It doesn&#x27;t need to be directly within your current company. Same as Paweł, I&#x27;m a huge open-source enthusiast, so I also encourage you to contribute to various open-source projects, or start your own!</p><p>Additionally, I like to “spy” on other projects from the CNCF landscape and check their design. I also follow people connected with Go, e.g. <a href="https://github.com/dmitshur">@dmitshur</a>, <a href="https://github.com/ibuildthecloud">@ibuildthecloud</a>, <a href="https://github.com/mattn">@mattn</a>, <a href="https://github.com/rsc">@rsc</a>, <a href="https://github.com/alexellis">@alexellis</a>, <a href="https://github.com/bep">@bep</a>, <a href="https://twitter.com/peterbourgon">@peterbourgon</a>, and others, to learn how they solve a given problem, and to get familiar with different approaches. </p><p>It’s much harder to recommend a great project, as it depends on what you want to implement. For example, from my perspective, if you are going to write a more future-proof CLI, the <a href="https://github.com/cli/cli">github.com/cli/cli</a> repository is definitely worth checking. If you want to see some Go patterns in action, e.g. a more generic approach to functional options, see <a href="https://github.com/kubernetes-sigs/controller-runtime/blob/v0.11.0/pkg/client/options.go">sigs.k8s.io/controller-runtime</a>.</p><p>In our community, there are a lot of materials. It&#x27;s good to start with the <a href="https://github.com/golang/go/wiki/">golang/wiki</a>, the <a href="http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang">50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs</a>, and the <a href="https://github.com/uber-go/guide">Uber Style Guide</a>. The <a href="https://www.ardanlabs.com/blog/">Ardan Labs</a> is also a good knowledge source.</p><p>Others:</p><ol><li>Read and follow: <a href="https://golang.org/doc/effective_go.html">https://golang.org/doc/effective_go.html</a></li><li>Try: <a href="https://gobyexample.com/">https://gobyexample.com/</a></li><li>Subscribe: <a href="https://golangweekly.com/">https://golangweekly.com/</a></li></ol><h2>Get involved!</h2><p>Giving feedback, requesting a feature, reporting a bug—all of these are a great way to contribute. Just join our <a href="/community/slack"><strong>Slack</strong></a> and talk to us!</p><p>Are you participating in the <a href="https://24pullrequests.com/">24 Pull Requests</a> event? We&#x27;ve got your back. Check out issues with the <a href="https://github.com/capactio/capact/labels/good%20first%20issue"><code>good first issue</code></a> label and get our full support from the beginning to the merge of your pull request :)</p><p>Do you want to work with us on a daily basis? Contact us at <a href="mailto:contact@capact.io">contact@capact.io</a>!</p>]]></content>
        <author>
            <name>Mateusz Szostok</name>
            <uri>https://github.com/mszostok</uri>
        </author>
        <author>
            <name>Paweł Kosiec</name>
            <uri>https://github.com/pkosiec</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing Capact, your new way to manage applications and infrastructure]]></title>
        <id>introducing-capact</id>
        <link href="https://capact.io/blog/introducing-capact"/>
        <updated>2021-09-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[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.]]></summary>
        <content type="html"><![CDATA[<p>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&#x27;s a struggle to stay up-to-date with these practices, and not everyone is an expert at everything. Technical debt is inevitable.</p><p>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&#x27;t we spend too much time solving the same problems as others have?</p><p>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 <strong>language-agnostic abstracted capabilities</strong>?</p><p>For example, if you&#x27;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 &quot;I want any Kubernetes cluster&quot; and letting the magic happen, you could cover both local development and production scenarios…</p><p>What if I told you… <strong>now this is all possible</strong>?</p><p>Introducing Capact, crowdsourced expertise. Learn once, use everywhere.</p><h2>What is Capact?</h2><p>Capact is a new way to manage applications and infrastructure and run arbitrary workflows. </p><p><img src="./assets/here-we-go-again-again.gif" alt="Here we go again GIF"/> <center><small>source: <a href="https://tenor.com/view/here-wego-again-again-ohboy-sigh-captain-america-gif-15496881" target="_blank">tenor.com</a></small></center></p><p>Yes, we get it. You already know plenty of different tools for that. But Capact is different. How is it different?</p><p>Capact comes with a truly unique feature—<strong>interchangeability of dependencies</strong>. 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).</p><p>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.</p><p>The best thing is that Capact is <strong>fully open-source</strong> under the Apache 2.0 license. How cool is that? 😎</p><h2>Capact concept in one minute</h2><p>The whole concept sounds confusing? Let&#x27;s see that in action.</p><p>Let&#x27;s take <a href="https://mattermost.com/">Mattermost</a> installation as an example. Mattermost is an open-source alternative for Slack.</p><p>Mattermost is a Go server application, which uses a PostgreSQL database. If we want to install Mattermost, this how the workflow would look like:</p><p><img src="./assets/capact-example1.svg" alt="Mattermost installation 1"/></p><p>We need a PostgreSQL database first to run a Mattermost server. It&#x27;s pretty simple.</p><p>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.</p><p><img src="./assets/capact-example2.svg" alt="Mattermost installation 2"/></p><p>Assuming there are many puzzles pieces out there, you see that only a few of them fit in the slot:</p><p><img src="./assets/capact-example3.svg" alt="Mattermost installation 3"/></p><p>In the case of PostgreSQL installation, four puzzle pieces fit:</p><p><img src="./assets/capact-example4.svg" alt="Mattermost installation 4"/></p><ol><li>Install PostgreSQL Helm chart on a Kubernetes cluster</li><li>Provision GCP CloudSQL for PostgreSQL database</li><li>Provision AWS RDS for PostgreSQL database</li><li>Reuse existing PostgreSQL database</li></ol><p>By default, for a workflow run, Capact picks the first puzzle piece that fits. However, by applying <a href="/docs/feature/policies/overview">Policy</a>, 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.</p><p>What&#x27;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, <a href="https://about.gitlab.com/">GitLab</a> and <a href="https://jitsi.org/jitsi-meet/">Jitsi Meet</a>? 🤔</p><p><img src="./assets/capact-example5.svg" alt="Mattermost installation 5"/></p><p>And that&#x27;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 <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY</a> at a global scale, together!</p><h2>How does Capact differ from other tools?</h2><p>Capact doesn&#x27;t compete with tools you might already be familiar with, but it integrates them instead. Whether you are a <a href="https://helm.sh">Helm</a> or <a href="https://terraform.io">Terraform</a> 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.</p><p>If you are familiar with <a href="https://kubevela.io/">Kubevela</a>, <a href="https://crossplane.io/">Crossplane</a>, and <a href="https://oam.dev/">Open Application Model</a>, you can see many similarities between the solution and Capact. Here are the main differences:</p><ul><li>Capact has unique built-in feature—interchangeable dependencies, which reduces the amount of duplicated code.</li><li>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.</li></ul><p>To read a detailed comparison between Capact and other tools, see our <a href="/docs/faq#how-does-capact-compare-to">FAQ</a>.</p><h2>Get started with Capact</h2><p>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.</p><ol><li><a href="/docs/cli/getting-started">Install Capact CLI</a>,</li><li><a href="/docs/installation/local">Install Capact locally with Capact CLI</a>,</li><li><a href="/docs/example/mattermost-installation">Run different scenarios of Mattermost installation example</a>.  </li></ol><p>Here are other things to do: </p><p>⭐ <strong>Star our GitHub repository</strong>: If you like the idea, show your interest in the project and <a href="https://github.com/capactio/capact">give us a GitHub star</a>! You can also subscribe for new Capact releases. Thank you for your support!</p><p>👉 <strong>Follow us:</strong> Interesting in Capact updates? Follow us on <a href="https://twitter.com/capactio">Twitter</a>! Also, check out our <a href="https://www.linkedin.com/company/72586376">LinkedIn</a> page and <a href="https://www.youtube.com/channel/UCajXtDttqVuZ_Bl7M3_qA8w">YouTube</a> channel.</p><p>📖 <strong>Read our documentation:</strong> If you want to get familiar with other installation options, examples, content development, or contribution guides, check out the <a href="/docs/">Capact documentation</a>.</p><p>🤔 <strong>Get support:</strong> If you need any help, or you have a question for us, join our <a href="/community/slack">Slack channel</a> on the CNCF workspace and post a message—we&#x27;ll do our best to get you sorted!</p><p>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.</p><h2>Wait, there&#x27;s more!</h2><p>In a series of future blog posts, we will highlight Capact features and cover various topics for all!</p><p>Also, as of September 20th 2021, <strong>a brand-new release</strong>, Capact 0.5.0, <strong>is here</strong>. We were working really hard to bring many UX improvements, both for Capact users and content developers. The list includes:</p><ul><li>Complete Action input validation and more advanced, concurrent Capact manifests validation with optional server-side checks,</li><li>Experimental content development tools for Helm and Terraform-based (AWS and GCP) manifest generation,</li><li>Policy syntax and behavior changes for improving consistency and usability,</li><li>Verbose output for Capact CLI,</li><li>Dependency updates, including migration to Argo 3,</li><li>Air-gapped Capact installation,</li><li><a href="https://k3d.io">k3d</a> support,</li><li>and much, much, more!</li></ul><p>To see the full list of features, read the <a href="https://github.com/capactio/capact/releases/tag/v0.5.0">release notes</a>.</p><p>Are you ready to start playing around with Capact?</p><p><img src="./assets/are-you-ready.gif" alt="Are you ready GIF"/> <center><small>source: <a href="https://tenor.com/view/are-you-ready-gif-5011220" target="_blank">tenor.com</a></small></center></p><p><em>This post was updated on 20.09.2021 to highlight that the Capact 0.5.0 release is publicly available.</em></p>]]></content>
        <author>
            <name>Paweł Kosiec</name>
            <uri>https://github.com/pkosiec</uri>
        </author>
    </entry>
</feed>