<?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: Michael Zion</title>
    <description>The latest articles on DEV Community by Michael Zion (@michaelzion).</description>
    <link>https://dev.to/michaelzion</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%2F1190304%2F718d0fd6-e684-47a6-8457-813673cdb806.jpeg</url>
      <title>DEV Community: Michael Zion</title>
      <link>https://dev.to/michaelzion</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/michaelzion"/>
    <language>en</language>
    <item>
      <title>Why &amp; When to use GitOps: Use-Cases &amp; Principles</title>
      <dc:creator>Michael Zion</dc:creator>
      <pubDate>Tue, 11 Mar 2025 21:43:41 +0000</pubDate>
      <link>https://dev.to/meteorops/why-when-to-use-gitops-use-cases-principles-4e64</link>
      <guid>https://dev.to/meteorops/why-when-to-use-gitops-use-cases-principles-4e64</guid>
      <description>&lt;p&gt;&lt;strong&gt;Optimizing Kubernetes Management with GitOps and CD Tools.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’ve come a long way from the days of deploying releases to individual machines, whether manually or by an automated process. &lt;/p&gt;

&lt;p&gt;The de-facto standard today is to deploy and manage the application stack using an orchestrator, usually &lt;a href="https://www.meteorops.com/glossary/kubernetes" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, &lt;a href="https://www.meteorops.com/blog/practical-tips-for-kubernetes-upgrades-for-startups" rel="noopener noreferrer"&gt;Kubernetes carries its own challenges&lt;/a&gt;. Although you can manage your stack in one centralized place, you still have to manage deployments, updates, rollbacks, and the overall infra.&lt;/p&gt;

&lt;p&gt;When Kubernetes was in its early years, services were deployed either manually or through CI/CD using &lt;code&gt;kubectl&lt;/code&gt; or Helm.&lt;/p&gt;

&lt;p&gt;There was nothing to describe the desired state and no easy way to keep track of changes or revert them. To solve these issues, &lt;a href="https://www.meteorops.com/glossary/gitops" rel="noopener noreferrer"&gt;GitOps&lt;/a&gt; was added to the mix.&lt;/p&gt;




&lt;h2&gt;
  
  
  Single Source of Truth with Increased Visibility and Operability
&lt;/h2&gt;

&lt;p&gt;The idea behind GitOps is a git repo that describes the desired state of the infrastructure and the application stack that runs on it. &lt;/p&gt;

&lt;p&gt;Combined with CI/CD, GitOps allows for fast and efficient infra provisioning and application lifecycle management. &lt;/p&gt;

&lt;p&gt;In the context of GitOps and Kubernetes, any change to the source code triggers a change in the cluster or application stack. &lt;/p&gt;

&lt;p&gt;Changes are tracked and releases are tagged with a version and can be rolled back as fast as they can be deployed. &lt;/p&gt;

&lt;p&gt;Best of all, no one is running manual commands which can be very error prone. In essence, GitOps centralises all operations related to deployments and infra management while allowing various teams to both collaborate and work independently. &lt;/p&gt;




&lt;h2&gt;
  
  
  Continuous Delivery Tools to Enhance GitOps
&lt;/h2&gt;

&lt;p&gt;However, GitOps and CI/CD for Kubernetes still lack something in terms of really being able to manage the infra and application stack.&lt;/p&gt;

&lt;p&gt;Managing deployments and infra becomes easier with GitOps thanks to declarative continuous delivery tools for Kubernetes such as &lt;strong&gt;&lt;a href="https://www.meteorops.com/glossary/argo-cd" rel="noopener noreferrer"&gt;Argo CD&lt;/a&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;a href="https://www.meteorops.com/glossary/flux-cd" rel="noopener noreferrer"&gt;Flux CD&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These tools act as a wrapper around your codebase which translates everything declarative into actual state. Your codebase holds all of your Kubernetes manifests, Helm charts, and configuration files. &lt;strong&gt;Argo CD&lt;/strong&gt; then takes it, evaluates it, and applies it to the cluster.&lt;/p&gt;

&lt;p&gt;Such tools also offer intuitive and convenient UI to visualize and manage everything that is going on in the cluster.&lt;/p&gt;

&lt;p&gt;It’s good to be able to revert a deployment or fix a configuration issue through the UI and on the spot rather than going through the process of committing code and waiting for it to sync. This is especially true in case of an emergency or when developing and debugging.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Benefits of Combining GitOps and CD Tools
&lt;/h2&gt;

&lt;p&gt;When put into the context of everyday work of developers and &lt;a href="https://www.meteorops.com/glossary/devops" rel="noopener noreferrer"&gt;DevOps&lt;/a&gt;, the real benefits of GitOps and CD tools  come into light. What GitOps and CD tools offer is a nice package of intuitive and secure easy-to-use framework for management and collaboration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ease of Use and Visibility into the State of the Application and Cluster
&lt;/h3&gt;

&lt;p&gt;The truth is that although not too difficult, setting up a GitOps codebase with CD tools can be a complex task. However, once in place, they grant ease of use with increased security.&lt;/p&gt;

&lt;p&gt;Reading Kubernetes manifests to understand the complex relationship of services and components is not easy. It’s even harder to debug and troubleshoot issues with no centralized control dashboard.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It’s easier with CD tools because they visualize everything that the code represents.&lt;/li&gt;
&lt;li&gt;It’s easier to discern the components of a service or the various CRDs that have been added to the cluster when they appear in front of you with all their dependencies and associations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CD tools have robust control, logging, and debugging  features which allow developers and DevOps to quickly assess the status of the cluster and respond accordingly. There’s no need to run &lt;code&gt;kubectl&lt;/code&gt; commands or tail pod logs. Everything is intuitively visualized in the CD tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Secure Operations
&lt;/h3&gt;

&lt;p&gt;Having everything visualised and controllable from outside the cluster, does away with the need to access the cluster itself. &lt;/p&gt;

&lt;p&gt;‍&lt;a href="https://www.meteorops.com/blog/from-gatekeepers-to-service-providers-reimagining-devops-relationship-with-developers#the-relationship-between-devops-and-developers" rel="noopener noreferrer"&gt;Developers and DevOps&lt;/a&gt; can be given roles through RBAC to determine which resources they have access to and what they can do in the CD tool itself rather than in the cluster. &lt;/p&gt;

&lt;p&gt;Although access is ultimately given to components of the cluster and application, it’s still better than having to manage service accounts and having dozens of developers running exec into pods. &lt;/p&gt;

&lt;p&gt;For additional security, CD tools sit inside the cluster and communicate with native API so their function takes place inside the cluster and not outside. There’s no need to open the cluster to external CI/CD pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Recovery, Consistency, and Guardrails
&lt;/h3&gt;

&lt;p&gt;Recovery is built into CD Tools. CD tools continuously monitor the state of the cluster and compare with what the code says. &lt;/p&gt;

&lt;p&gt;In case of a mismatch, the CD tool attempts to reconcile between the two. If it fails, it will retry several times before sending an alert and even pausing sync. &lt;/p&gt;

&lt;p&gt;Retries are especially important in complex systems with vast networks of dependencies between services and components. &lt;/p&gt;

&lt;p&gt;Even if the code dictates service dependencies and the order of deployment, dependencies could still fail. &lt;/p&gt;

&lt;p&gt;By retry, CD tools give all components of the system more time and more chances to go online before failing the deployment and pausing progress. &lt;/p&gt;

&lt;p&gt;Since there are no imperative commands running without a state, GitOps prevents the occurrence of hanging resources. If you remove a manifest file or parts of it, the CD tools will sync immediately, without any CI/CD pipeline, and remove the corresponding resources and components.&lt;/p&gt;

&lt;h3&gt;
  
  
  Management of Multiple Environments and Applications
&lt;/h3&gt;

&lt;p&gt;With inherent security, ease of use, and built-in recovery, GitOps and CD tools are easily expanded to support the configuration and management of multi-env, multi-app stacks. It becomes much easier to separate environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.meteorops.com/blog/one-click-environment-the-ultimate-devops-goal#why-it-improves-the-system%E2%80%99s-recoverability" rel="noopener noreferrer"&gt;Different environments for development and production&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Regional stacks for compliance or disaster recovery.&lt;/li&gt;
&lt;li&gt;Separate applications for business units in the organization.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since the initial setup is most of what it takes to get GitOps and CD tools going, it’s incredibly easy to set up multiple stacks and manage both separately, as they are different stacks, and side-by-side in one place, as they are centrally managed. &lt;/p&gt;




&lt;h2&gt;
  
  
  The Application Needs GitOps and CD Tools
&lt;/h2&gt;

&lt;p&gt;Keeping the application stack and cluster in order and in the desired state is the main function of GitOps and CD tools. There's no guessing how the cluster should be or what should be in and who or what put it there. Everything is conveniently visualized with a vast array of actions that can be performed right from within the UI. GitOps and CD tools give developers and DevOps the ability to work independently in a secure and safe way. Secure in terms of access that is restricted to the CD tools itself. Safe in terms of the ability to quickly revert changes and the self-healing properties of CD tools. It’s not the easiest task to set up GitOps with CD tools, but the agility, convenience, productivity and security that they offer allow for well-managed operations. Well-managed operations then allow for faster and safer development pipelines to further advance your application and product.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>gitops</category>
      <category>argocd</category>
    </item>
    <item>
      <title>How to build a DevOps team</title>
      <dc:creator>Michael Zion</dc:creator>
      <pubDate>Tue, 01 Oct 2024 22:27:55 +0000</pubDate>
      <link>https://dev.to/meteorops/how-to-build-a-devops-team-99</link>
      <guid>https://dev.to/meteorops/how-to-build-a-devops-team-99</guid>
      <description>&lt;p&gt;If you're considering how to build a DevOps team the best way possible, this one's for you.&lt;br&gt;&lt;br&gt;
This blog post is the result of my advice for people building DevOps teams: CTOs, VPs of R&amp;amp;D, Team Leaders, and more.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I'll give you the bottom line. &lt;br&gt;
These are the steps for building your DevOps team:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Polish your DevOps Philosophy&lt;/li&gt;
&lt;li&gt;Understand the DevOps Lead responsibilities: Product, Project, People, Service, Architecture&lt;/li&gt;
&lt;li&gt;Define your Team's Mission Statement&lt;/li&gt;
&lt;li&gt;Set useful DevOps Goals &amp;amp; Practices&lt;/li&gt;
&lt;li&gt;Set Guiding DevOps Principles&lt;/li&gt;
&lt;li&gt;Define the DevOps team's roadmap &amp;amp; strategy&lt;/li&gt;
&lt;li&gt;Set a definition of done&lt;/li&gt;
&lt;li&gt;Common DevOps teams pitfalls&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.meteorops.com/blog/calculating-your-companys-required-devops-capacity" rel="noopener noreferrer"&gt;Calculate your team's required capacity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hire the right DevOps Engineers&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can also apply these to existing DevOps teams and level-up your organization. &lt;br&gt;
Let's get started!&lt;/p&gt;




&lt;h2&gt;
  
  
  Polish your DevOps Philosophy
&lt;/h2&gt;

&lt;p&gt;You must first understand why organizations need DevOps, and how it can work in practice.  &lt;/p&gt;

&lt;p&gt;DevOps is an enabler role. &lt;/p&gt;

&lt;p&gt;It's meant to &lt;strong&gt;enable the developers to build, improve, and take ownership over the system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's break it down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt; = Create something new. Could be a new microservice, a new database, or a new monitoring dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve&lt;/strong&gt; = Introduce a change into something that exists. Could be fixing a bug, changing a database schema, or changing an alert threshold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Take ownership&lt;/strong&gt; = Take charge of problems that arise with what you built and improved. This means when something needs improvement, the owner is the one who does it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The above are what the developers should do.&lt;/p&gt;

&lt;p&gt;Now, &lt;strong&gt;DevOps should enable it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Note, to enable &lt;strong&gt;is not&lt;/strong&gt; to give full permissions and let them have fun.&lt;/p&gt;

&lt;p&gt;To enable is to give developers what they need to build, improve, and own the system.&lt;/p&gt;

&lt;p&gt;But, do it in a way that focuses the developers' energy in the right direction, and in a safe way.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understand the DevOps Lead Responsibilities
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96xldgwk618fcimt5vy3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96xldgwk618fcimt5vy3.png" alt="Image description" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have 5 hats as a DevOps Lead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Product (Platform)&lt;/strong&gt;&lt;br&gt;
Your clients are your company's developers.&lt;br&gt;
Provide them with tools, knowledge, and automations.&lt;br&gt;
&lt;strong&gt;Tools&lt;/strong&gt; = Polished automations.&lt;br&gt;
&lt;strong&gt;Automations&lt;/strong&gt; = Automated knowledge.&lt;br&gt;
&lt;strong&gt;Knowledge&lt;/strong&gt; = Hard-earned information &amp;amp; insights.&lt;br&gt;
Understand their requirements, and use Tools, Automations, and Knowledge to fulfill them.&lt;br&gt;
Understand why they want what they want: Is it because of an underlying issue with the system? If yes, solve it before building anything.&lt;br&gt;
If a tool or automation will save time, consider building or implementing it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;br&gt;
Don't let your developers wait until you do something "the right way".&lt;br&gt;
Sometimes they need immediate help to complete something.&lt;br&gt;
Help them first, and invest time later in automation and tooling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Project&lt;/strong&gt;&lt;br&gt;
Managing your DevOps team requires managing the work it does.&lt;br&gt;
Turn the team's philosophy into a mission.&lt;br&gt;
Turn the team's mission into goals.&lt;br&gt;
Turn the team's goals into a roadmap.&lt;br&gt;
Turn the team's roadmap into tasks.&lt;br&gt;
Prioritize the tasks.&lt;br&gt;
Set simple roles and responsibilities.&lt;br&gt;
Hold your team members accountable to progression.&lt;br&gt;
Make it easy to inform relevant team members on updates.&lt;br&gt;
Make it easy to consult with a teammate on a subject of their expertise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;People&lt;/strong&gt;&lt;br&gt;
Each DevOps team member has type of work and tasks they enjoy more.&lt;br&gt;
One enjoys sharing knowledge, another enjoys being of service, and some enjoy building tools.&lt;br&gt;
Different teammates are also interested in different subjects: Monitoring, Infrastructure, CI/CD, etc.&lt;br&gt;
A team member that's working on what they enjoy is more fulfilled and productive.&lt;br&gt;
Strive to overlap each teammate's goals with the company's goals.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;br&gt;
You have 2 architectures to worry about.&lt;br&gt;
1) The company's product architecture (built by the developers).&lt;br&gt;
2) The DevOps platform's architecture (built by the DevOps team).&lt;br&gt;
Help the developers understand and control the application's effect on the infrastructure.&lt;br&gt;
Enable the developers to make informed decisions by providing context.&lt;br&gt;
Finally, build the platform to support the developers requirements.&lt;br&gt;
At every step, only limit decisions that damage the company.&lt;br&gt;
Examples: High cost, Stability impairment, Restricts observability, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Define Your DevOps Team's Mission Statement
&lt;/h2&gt;

&lt;p&gt;Here's one for you:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Enable the developers to build, improve, and own the system".&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's pretty minimal, so it's going to help your team stay focused.&lt;/p&gt;

&lt;p&gt;A healthy sign it catches on: When the team debates a decision regarding a task, they ask &lt;em&gt;"Does it help us enable the developers to build, improve, or own the system?"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That's when you win.&lt;/p&gt;




&lt;h2&gt;
  
  
  Set Useful DevOps Goals &amp;amp; Practices
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgkeqv0n8ruw33on4ubi6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgkeqv0n8ruw33on4ubi6.png" alt="Image description" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your company's success will be determined by its speed and its product's quality.&lt;/p&gt;

&lt;p&gt;To make it happen, you should know programming is science, not maths - I'll explain.&lt;/p&gt;

&lt;p&gt;People used to think programming will be a mathematical discipline.&lt;br&gt;
They thought programmers will write functions and mathematically prove them.&lt;/p&gt;

&lt;p&gt;Not what happened - Programming is a scientific discipline.&lt;/p&gt;

&lt;p&gt;You write code, your test it, and you assume it's good - until one test fails.&lt;/p&gt;

&lt;p&gt;In essence, you're experimenting.&lt;/p&gt;

&lt;p&gt;You might ask: &lt;em&gt;"wtf? how's this related to setting useful goals?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The answer is that the first thing you want to enable is running experiments easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  So here are some useful goals:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Developers can easily test their code in a consistent manner&lt;/li&gt;
&lt;li&gt;Production and testing environments are identical (Production will benefit from the quality of the tests)&lt;/li&gt;
&lt;li&gt;Developers can easily collaborate&lt;/li&gt;
&lt;li&gt;Developers can understand the state of the system and the impact of changes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Let's translate those goals into smaller goals or practices that will achieve the goals:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Developers can &lt;a href="https://www.meteorops.com/blog/one-click-environment-the-ultimate-devops-goal" rel="noopener noreferrer"&gt;create a testing/production environment with "One-Click"&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;There's a continuous integration process that enables the developers to collaborate by agreeing on the current up-to-date version of the system&lt;/li&gt;
&lt;li&gt;Auto-create dashboards and alerts for new services&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Set Guiding DevOps Principles
&lt;/h2&gt;

&lt;p&gt;Some useful DevOps principles that help save your team time, improve the speed of delivery, and keep the system healthy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;PoC before doing things "the right way"&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make it work, then make it better&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The entire system should be fully recoverable from Git&lt;/li&gt;
&lt;li&gt;Use tools with a big community and well-documented interface&lt;/li&gt;
&lt;li&gt;Equip key-developers with DevOps knowledge to be the first point-of-contact for their team members (super users)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Define the DevOps Team's Roadmap &amp;amp; Strategy
&lt;/h2&gt;

&lt;p&gt;Roadmap = Goals * Strategy.&lt;br&gt;&lt;br&gt;
Once you set the goals (as mentioned above), you can start prioritizing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;♯1 - The DevOps Categories&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enabling developers requires a DevOps Engineer to handle and enable the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Provision infrastructure&lt;/li&gt;
&lt;li&gt;Deploy workloads&lt;/li&gt;
&lt;li&gt;Monitor the system&lt;/li&gt;
&lt;li&gt;Recover from issues&lt;/li&gt;
&lt;li&gt;Scale up and down&lt;/li&gt;
&lt;li&gt;Track &amp;amp; test changes (Codebase Management)&lt;/li&gt;
&lt;li&gt;Secure the system&lt;/li&gt;
&lt;li&gt;Store &amp;amp; retrieve data&lt;/li&gt;
&lt;li&gt;Configure the system&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;♯2 - Examine each goal through each category&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every DevOps goal you set should be examined through the lens of each category.&lt;/p&gt;

&lt;p&gt;The reason is that together the categories cover each aspect of the building, improving, and owning of a software operation.&lt;/p&gt;

&lt;p&gt;Let's do an example:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Goal: Create a "One-Click Environment Automation"&lt;/li&gt;
&lt;li&gt;Categories to address:

&lt;ul&gt;
&lt;li&gt;How should its infrastructure be provisioned?&lt;/li&gt;
&lt;li&gt;How should its workloads be deployed?&lt;/li&gt;
&lt;li&gt;How should its metrics and logs be sent, stored, and queried?&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;♯3 - Strategic Principles&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reach at least 50% capacity of working on the DevOps goals as soon as you responsibly can -
Support the developers and teach them how to self-support to achieve that&lt;/li&gt;
&lt;li&gt;Easy to modify &amp;gt; Perfect -
When you do something that isn't perfect due to a lack of time, do it in such a way that modifying it later on to improve it is easy&lt;/li&gt;
&lt;li&gt;Prerequisites first:
Codebase Management -&amp;gt; Infrastructure -&amp;gt; Deployment -&amp;gt; Configuration -&amp;gt; Data Management.&lt;/li&gt;
&lt;li&gt;At least moderate foundations quickly, reinforce later, but never weak foundations:
If you don't use any boilerplates, or if you are not proficient in something early on, and it's a foundation (like infrastructure), then don't give up and build weak foundations, but also don't over-invest and build strong ones if it's too time consuming.
Instead, moderately invest in the foundation, and revisit it later.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Set a Definition of Done
&lt;/h2&gt;

&lt;p&gt;Also known as a Definition of done.&lt;/p&gt;

&lt;p&gt;Ask the following questions for every single component in your system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;&lt;/em&gt;: Are there metrics, logs, traces, and alerts setup in an actionable way?&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Availability&lt;/strong&gt;&lt;/em&gt;: Is there a mechanism to keep it alive during incidents?&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Resiliency&lt;/strong&gt;&lt;/em&gt;: Can it recover from an error quickly?&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Recovery&lt;/strong&gt;&lt;/em&gt;: Can it be fully restored to a previous state?&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Testability&lt;/strong&gt;&lt;/em&gt;: Is it possible to test changes to it?&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Deliverability&lt;/strong&gt;&lt;/em&gt;: Is there a process to release changes to it?&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Persistency&lt;/strong&gt;&lt;/em&gt;: Will its data persist if the system is hindered?&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Integrable&lt;/strong&gt;&lt;/em&gt;: Does it have a consistent and predictable interface allowing integration with it?&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/em&gt;: Is it accessible only by the parts of the system that absolutely need it?&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;&lt;/em&gt;: Are its dependencies fully tracked and managed?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Common DevOps Team Pitfalls
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Pitfall&lt;/strong&gt;&lt;/em&gt;: DevOps work blocks developers work&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Indicator&lt;/strong&gt;&lt;/em&gt;: Developers need to wait for DevOps team changes to complete before continuing work&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Cause&lt;/strong&gt;&lt;/em&gt;: The DevOps team doesn't utilize its own practices (AKA shoemaker's son always goes barefoot)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Pitfall&lt;/strong&gt;&lt;/em&gt;: Only support developers and maintain the system&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Indicator&lt;/strong&gt;&lt;/em&gt;: No progress on any DevOps goal or task&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Cause&lt;/strong&gt;&lt;/em&gt;: Either there are no clear DevOps goals or repeating developers requests haven't been automated&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Pitfall&lt;/strong&gt;&lt;/em&gt;: Adopting 'Best' practices instead of 'Suitable' practices&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Indicator&lt;/strong&gt;&lt;/em&gt;: Introducing methodologies and adhering to principles that go against the company's goals&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Cause&lt;/strong&gt;&lt;/em&gt;: Prioritizing methodology over company goals, usually because of a disconnect from the company goals or due to lack of DevOps experience&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Calculate Your DevOps Team's Required Capacity
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1tsndj0izl6nvyzlsre.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1tsndj0izl6nvyzlsre.png" alt="Image description" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Required DevOps Capacity = &lt;a href="https://www.meteorops.com/blog/calculating-your-companys-required-devops-capacity" rel="noopener noreferrer"&gt;(Scale * Complexity) / Leverage&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leverage = Level of DevOps Engineers * Company Resources * Team Focus&lt;/li&gt;
&lt;li&gt;Scale = Number of instances of each component * Number of people in the organization&lt;/li&gt;
&lt;li&gt;Complexity = Number of components * Number of teams&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Hire the Right DevOps Engineers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsk1skmru0gl08c1sy7a6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsk1skmru0gl08c1sy7a6.png" alt="devops engineers feedback" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The types of DevOps Engineers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Barrels vs. Ammo&lt;/strong&gt;&lt;br&gt;
~ Ammo = People who can complete tasks but won't initiate them.&lt;br&gt;
~ Barrel = People who understand what tasks are needed next but won't complete them.&lt;br&gt;
Interviewer Tip: During the technical interview with a candidate ask about past DevOps accomplishments, and ask how the tasks were created and who did them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Aspiration-Oriented vs. Prevention-Oriented&lt;/strong&gt;&lt;br&gt;
~ Aspiration-Oriented = Has goals, positive feedback encourages and focuses them while negative feedback discourages them and kicks them off track.&lt;br&gt;
~ Prevention-Oriented = Avoids problems, positive feedback makes them lay back and reduce capacity while negative feedback focuses them and keeps them on track.&lt;br&gt;
Interviewer tip: See if there's a common theme for projects the candidate did in the past. People focused on security tasks and deep attention to specific details are more likely to be prevention-oriented, while people who initiated many projects spanning multiple (DevOps) categories are more likely to be aspiration-oriented.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://www.meteorops.com/blog/devops-agency-vs-devops-consultancy-vs-devops-services-company" rel="noopener noreferrer"&gt;Working with service providers&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set clear desired results&lt;/strong&gt;&lt;br&gt;
And let the DevOps service provider assist in exploring the goal and provide perspective from other companies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Expect transparency on progress&lt;/strong&gt;&lt;br&gt;
And judge it against the latest plan.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Expect clear planning&lt;/strong&gt;&lt;br&gt;
And make sure it has clear goals, takes into consideration the risks, and has a strategy that adheres to your DevOps principles.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Lots of stuff covered over this one-pager, and still much was left outside.&lt;/p&gt;

&lt;p&gt;If you take away 1 thing from it, let it be this: A simple DevOps team mission statement is the most significant thing you need.&lt;/p&gt;

&lt;p&gt;It sounds over-simplistic and abstract, but without it there is not guiding principle for how DevOps in the organization should look like.&lt;/p&gt;

&lt;p&gt;Hope you enjoyed, and send me an email at &lt;a href="mailto:michael@meteorops.com"&gt;michael@meteorops.com&lt;/a&gt; if there's anything else you'd like to see in here.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>teamwork</category>
      <category>infrastructureascode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Don't waste 6 months on hiring DevOps, take the 10 Hours DevOps Pill</title>
      <dc:creator>Michael Zion</dc:creator>
      <pubDate>Thu, 04 Jan 2024 14:55:06 +0000</pubDate>
      <link>https://dev.to/meteorops/dont-waste-6-months-on-hiring-devops-take-the-10-hours-devops-pill-40f9</link>
      <guid>https://dev.to/meteorops/dont-waste-6-months-on-hiring-devops-take-the-10-hours-devops-pill-40f9</guid>
      <description>&lt;p&gt;A practical playbook for founders and engineering managers to stop wasting time trying to get started with DevOps the right way&lt;/p&gt;




&lt;h2&gt;
  
  
  Is this article for you?
&lt;/h2&gt;

&lt;p&gt;Maybe you're a CTO.&lt;br&gt;
Maybe you're an engineering manager.&lt;br&gt;
If you think about hiring you first DevOps Engineer - this article is for you.&lt;br&gt;
It will save you 6 months of wasted mental capacity.&lt;/p&gt;

&lt;p&gt;How? By dedicating 10 hours to planning.&lt;br&gt;
I'll share with you here exactly what to do during those 10 hours.  &lt;/p&gt;

&lt;h2&gt;
  
  
  You might know this story TOO well
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ~ "I need to focus on the product"
&lt;/h3&gt;

&lt;p&gt;You are building your company’s product.&lt;br&gt;
You start thinking about the development process and building or improving production.&lt;br&gt;
Then, you read about DevOps somewhere and think to yourself: “This seems like what I need”.&lt;/p&gt;

&lt;h3&gt;
  
  
  ~ "DevOps is expensive"
&lt;/h3&gt;

&lt;p&gt;You start looking for a DevOps Engineer, but you find out the standard DevOps salary - “Oh, that’s pretty expensive for our budget”.&lt;br&gt;
So you decide to wait. “Hiring a developer is more important right now” you tell yourself.  &lt;/p&gt;

&lt;p&gt;A month goes by, and you and your team are grinding away, building a kickass product.&lt;br&gt;
But alas! The missing development automation hurts collaboration, the cloud infrastructure is a collection of manual changes - and you’re not sure if the system is built well.&lt;/p&gt;

&lt;p&gt;So, you make a decision, and you post your first “DevOps Position”, congrats!&lt;/p&gt;

&lt;h3&gt;
  
  
  ~ "I'll interview some candidates"
&lt;/h3&gt;

&lt;p&gt;Candidates start streaming in, and you start interviewing.&lt;br&gt;
After interviewing the 3rd candidate, you think to yourself “this is not it”.&lt;br&gt;
Every candidate is missing a different piece of the required knowledge.&lt;br&gt;
One doesn’t know AWS, the other isn’t familiar with "", and the last one only worked with on-prem before.&lt;/p&gt;

&lt;p&gt;And so, you re-evaluate.&lt;/p&gt;

&lt;h3&gt;
  
  
  ~ "I'll do it myself"
&lt;/h3&gt;

&lt;p&gt;The realization is this: You can’t hire on knowledge for this position, you have to hire on skill and character.&lt;br&gt;
BUT, you feel like the knowledge is crucial, at least at this point.&lt;br&gt;
So you make another decision - I’ll invest some more time in this “DevOps” thing - I’ll learn.&lt;br&gt;
You watch DevOps tutorials on Youtube.&lt;br&gt;
You even subscribe to various DevOps Newsletters, something you didn’t do before.&lt;br&gt;
Another month goes by.&lt;/p&gt;

&lt;h3&gt;
  
  
  ~ "What do other startups do?"
&lt;/h3&gt;

&lt;p&gt;After learning and implementing DevOps bits and pieces all over the place, it doesn’t feel right.&lt;br&gt;
“Am I re-inventing the wheel and complicating the future?” you might ask yourself.&lt;br&gt;
You take a step back, zoom-out, and ask other startup founders what they did at this stage.&lt;/p&gt;

&lt;p&gt;That’s when you find out you’re not alone - “Oh! So it’s tough for other founders as well!”&lt;br&gt;
But, each founder tells you something different.&lt;br&gt;
One founder tells you to hire a freelancer - but that seems like just another hiring model and doesn’t solve the problem.&lt;br&gt;
Another founder tells you to just hire a full-time DevOps Engineer - but your resources are limited, and you’d rather hire more developers to build the product.&lt;br&gt;
Until one founder tells you to hire an agency: “Instead of a freelancer, get a company that’s built to get your DevOps right”.&lt;/p&gt;

&lt;h3&gt;
  
  
  ~ "Maybe an agency?"
&lt;/h3&gt;

&lt;p&gt;You’re convinced, and you start looking for agencies.&lt;br&gt;
You get recommendations, you search online, and you start booking calls.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;1st call with a DevOps agency&lt;br&gt;
*&lt;/em&gt;“Hi there! Yes we’re the solution for you! Let’s get started!”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2nd call with a DevOps agency&lt;/strong&gt;&lt;br&gt;
“Yes! We’ll provide you with a strong DevOps Engineer! Let’s get started!”&lt;/p&gt;

&lt;h3&gt;
  
  
  ~ "I'll do it myself"
&lt;/h3&gt;

&lt;p&gt;You choose not to go on the 3rd call and you pause the process.&lt;/p&gt;

&lt;p&gt;Why? Because you realize: “These guys didn’t remove any uncertainty for me - how are they different from a freelancer?”&lt;br&gt;
So you make another decision.&lt;br&gt;
You’ll continue to do DevOps yourself, and maybe delegate some tasks to other team members.&lt;/p&gt;

&lt;p&gt;That’s when you find out it was a trap! You got yourself into a loop!&lt;br&gt;
‍&lt;/p&gt;

&lt;h3&gt;
  
  
  ~ "Oh no! it's a loop!"
&lt;/h3&gt;

&lt;p&gt;After just one month you realize it’s not sustainable, and you repeat the same process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open DevOps position&lt;/li&gt;
&lt;li&gt;Realize each candidate is missing something else&lt;/li&gt;
&lt;li&gt;Fear for the budget&lt;/li&gt;
&lt;li&gt;Stop the hiring&lt;/li&gt;
&lt;li&gt;Complete DevOps tasks yourself&lt;/li&gt;
&lt;li&gt;Consider a freelancer&lt;/li&gt;
&lt;li&gt;Drop the idea because it's similar hiring&lt;/li&gt;
&lt;li&gt;Consider an agency&lt;/li&gt;
&lt;li&gt;Interview a bunch of agencies&lt;/li&gt;
&lt;li&gt;No extra certainty or confidence from an agency&lt;/li&gt;
&lt;li&gt;Do DevOps work yourself&lt;/li&gt;
&lt;li&gt;Repeat&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This loop is sometimes 2 months long, and sometimes 12 months long.&lt;/p&gt;

&lt;p&gt;Either way, it slows down your company!&lt;br&gt;
It occupies your thoughts.&lt;br&gt;
It takes valuable time from you.&lt;br&gt;
It speeds up global warming.&lt;/p&gt;

&lt;p&gt;Maybe the global warming part was an exaggeration.&lt;/p&gt;

&lt;p&gt;It’s amazing how many founders went through this exact same process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Break the loop
&lt;/h2&gt;

&lt;p&gt;I’m here to tell you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;You can break the DevOps hiring loop&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You can promote DevOps efforts quickly AND accurately&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You can save 6-12 months of stumbling around&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  You need just 10 hours with a DevOps Expert
&lt;/h2&gt;

&lt;p&gt;You need just 10 hours with a DevOps expert.&lt;br&gt;
What you need most is perspective from an experienced individual.&lt;br&gt;
You don’t yet have the DevOps perspective or experience? No problem.&lt;br&gt;
Get a DevOps Expert to consult you on a hourly basis.&lt;br&gt;
I call it "The 10 Hours DevOps Pill" 💊&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements for the DevOps expert
&lt;/h2&gt;

&lt;p&gt;Not anyone will fit as your trusted DevOps expert.&lt;/p&gt;

&lt;p&gt;Use someone that answers these criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Helped 10+ companies with DevOps -
Has a wide perspective&lt;/li&gt;
&lt;li&gt;Consulted CTOs and VPs of R&amp;amp;D before -
Understands the weight of culture in adopting DevOps&lt;/li&gt;
&lt;li&gt;Consulted DevOps Group and Team Leaders before -
Understands how to manage the work&lt;/li&gt;
&lt;li&gt;Did lots of DevOps hands-on work before -
Understands how to do the work&lt;/li&gt;
&lt;li&gt;You understand them -
They know where you stand and have simple explanations. (Run away from the buzzwords throwers)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Spoiler: The contents of the 10 hours
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;2h - Share everything about your startup&lt;/li&gt;
&lt;li&gt;2h - Ask what’s possible + What others did&lt;/li&gt;
&lt;li&gt;2h - Set DevOps goals&lt;/li&gt;
&lt;li&gt;2h - Choose a strategy&lt;/li&gt;
&lt;li&gt;2h - Create a DevOps roadmap
Let’s dive into the playbook for each meeting!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1st + 2nd Consultation Hours: Share, share, share
&lt;/h2&gt;

&lt;p&gt;Share the state of your company with the DevOps expert.&lt;br&gt;
Share your infrastructure, your code, your work process, everything!&lt;br&gt;
Don’t be shy, and don’t justify - simply explain your startup’s goals and your reasoning.&lt;br&gt;
(Sign an NDA first, of course)&lt;/p&gt;

&lt;h2&gt;
  
  
  3rd + 4th Consultation Hours: Understand what’s possible + Gain perspective
&lt;/h2&gt;

&lt;p&gt;Take notes or record this call!&lt;/p&gt;

&lt;p&gt;Ask the DevOps expert: &lt;strong&gt;What’s possible?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How fast can changes reach production?&lt;/li&gt;
&lt;li&gt;How fast can you create new environments?&lt;/li&gt;
&lt;li&gt;How easily can your developers collaborate?&lt;/li&gt;
&lt;li&gt;How confidently can you change the system?&lt;/li&gt;
&lt;li&gt;What uptime can the system have?&lt;/li&gt;
&lt;li&gt;How aware can your team be of the system’s state?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ask the DevOps expert: &lt;strong&gt;What did other startups do at this stage?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What goals did they have?&lt;/li&gt;
&lt;li&gt;What DevOps efforts did they promote?&lt;/li&gt;
&lt;li&gt;Why did they decide those DevOps efforts?&lt;/li&gt;
&lt;li&gt;Which startups performed best? Why?&lt;/li&gt;
&lt;li&gt;Are there industry-unique considerations?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5th + 6th Consultation Hours: Set DevOps goals
&lt;/h2&gt;

&lt;p&gt;You now know what’s possible, and what other companies do.&lt;br&gt;
Time to set short-term, mid-term, and long term goals.&lt;br&gt;
If you want to dive deep into useful DevOps principles, check out &lt;a href="https://www.meteorops.com/blog/the-cto-devops-handbook-simple-principles-and-examples"&gt;the CTO DevOps Handbook here 👈🏼&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7th + 8th Consultation Hours: Strategize
&lt;/h2&gt;

&lt;p&gt;Based on your goals, strengths, and restrictions, choose a strategy.&lt;br&gt;
Discuss the following options with your DevOps expert.&lt;/p&gt;

&lt;h3&gt;
  
  
  Possible Strengths
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Developers with DevOps background&lt;/li&gt;
&lt;li&gt;High budget&lt;/li&gt;
&lt;li&gt;Available time to manage the DevOps efforts&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Possible Restrictions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;No budget&lt;/li&gt;
&lt;li&gt;Low budget&lt;/li&gt;
&lt;li&gt;DevOps needs are temporary for now&lt;/li&gt;
&lt;li&gt;No time to manage the DevOps efforts&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;DevOps Engineer&lt;/th&gt;
&lt;th&gt;Freelancer&lt;/th&gt;
&lt;th&gt;Agency&lt;/th&gt;
&lt;th&gt;Winner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Budget&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Freelancer / Agency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Management Effort Required&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low-Medium&lt;/td&gt;
&lt;td&gt;Agency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hourly Flexibility&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Agency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ease of bridging knowledge gaps&lt;/td&gt;
&lt;td&gt;Low-Medium&lt;/td&gt;
&lt;td&gt;Low-Medium&lt;/td&gt;
&lt;td&gt;Medium-High&lt;/td&gt;
&lt;td&gt;Agency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ease of building trust&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium-High&lt;/td&gt;
&lt;td&gt;Low-Medium&lt;/td&gt;
&lt;td&gt;DevOps Engineer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The available strategies
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Hire a DevOps Engineer, Boost with the DevOps expert&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a DevOps roadmap with the DevOps Expert before hiring&lt;/li&gt;
&lt;li&gt;Get the DevOps expert to interview the candidates&lt;/li&gt;
&lt;li&gt;Get advice from the DevOps expert on what to examine during your interview with the candidates&lt;/li&gt;
&lt;li&gt;Prioritize the DevOps efforts with the DevOps Expert&lt;/li&gt;
&lt;li&gt;Plan the onboarding of the DevOps Engineer with the 6. DevOps expert&lt;/li&gt;
&lt;li&gt;Hire the DevOps Engineer&lt;/li&gt;
&lt;li&gt;Get advice on managing DevOps projects from the DevOps expert&lt;/li&gt;
&lt;li&gt;Discuss the DevOps tasks implementation with the DevOps Engineer and DevOps expert&lt;/li&gt;
&lt;li&gt;Occasionally or routinely consult with the DevOps expert on priorities, management, and engineering&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Hire a DevOps freelancer, Boost with the DevOps expert&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Exactly as the above strategy&lt;/li&gt;
&lt;li&gt;Take advantage of the hourly flexibility when needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Hire a DevOps agency, Boost with the DevOps expert&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a DevOps roadmap with the DevOps Expert before choosing an agency&lt;/li&gt;
&lt;li&gt;Share your requirements with the agency&lt;/li&gt;
&lt;li&gt;Filter out any agency that doesn’t provide you with a plan BEFORE work starts&lt;/li&gt;
&lt;li&gt;Get the plan reviewed by your DevOps expert: Does it make sense? Is the planned result desired?&lt;/li&gt;
&lt;li&gt;Make sure the DevOps agency’s ability to provide support after the work is done&lt;/li&gt;
&lt;li&gt;Asses the level of the DevOps agency’s DevOps Engineers with the help of the DevOps expert&lt;/li&gt;
&lt;li&gt;Make sure the DevOps agency is flexible with its hourly capacity&lt;/li&gt;
&lt;li&gt;Occasionally or routinely consult with the DevOps expert on priorities, management, and engineering&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Advantages and disadvantages of the strategies
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Good when&lt;/th&gt;
&lt;th&gt;Bad when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Full-time + Expert&lt;/td&gt;
&lt;td&gt;- Your budget is high - You need flexible DevOps capacity - Your team has DevOps background&lt;/td&gt;
&lt;td&gt;- Your budget is low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freelancer + Expert&lt;/td&gt;
&lt;td&gt;- Your budget is low - You need flexible DevOps capacity - You can't risk losing DevOps capacity short-mid-term&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agency + Expert&lt;/td&gt;
&lt;td&gt;- Your budget is low - You need flexible DevOps capacity - You want an accurate plan before work starts - You frequently need to support new tools and technologies&lt;/td&gt;
&lt;td&gt;- The agency doesn’t have flexible plans - The agency’s team isn’t experienced - The agency doesn’t create clarity before work starts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  9th + 10th Consultation Hours: Create a DevOps roadmap + Execute your strategy
&lt;/h2&gt;

&lt;p&gt;You’re ready to create a DevOps roadmap and start executing your strategy!&lt;br&gt;
Creating a DevOps roadmap is the first step of each of the strategies described above.&lt;/p&gt;

&lt;h3&gt;
  
  
  You had to do a bunch of things first:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;You needed a DevOps expert to help you break the vicious DevOps loop - &lt;strong&gt;Done&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You needed to set DevOps goals rooted in a deep DevOps understanding and perspective - &lt;strong&gt;Done&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You needed to get familiar with different strategies and choose the best one for you - &lt;strong&gt;Done!&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  You’re left with 2 things to do:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1 - Create the DevOps roadmap based on the goals and strategy you’ve set&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2 - Start executing the strategy:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Share the DevOps goals with the team&lt;/li&gt;
&lt;li&gt;Schedule the interviews with the Engineers/Freelancers/Agencies&lt;/li&gt;
&lt;li&gt;Use the DevOps expert to stay on track&lt;/li&gt;
&lt;li&gt;Set the milestones for the DevOps goals&lt;/li&gt;
&lt;li&gt;Create the tasks&lt;/li&gt;
&lt;li&gt;Complete the tasks&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Prepare before starting the process
&lt;/h2&gt;

&lt;p&gt;You want to do two things before jumping into the 10 hours:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Before the first 2 hours&lt;/strong&gt;:
Perfect your &lt;a href="https://www.meteorops.com/blog/the-cto-devops-handbook-simple-principles-and-examples#devops-dictionary"&gt;DevOps terminology&lt;/a&gt; (will support rich discussions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Before the last 2 hours&lt;/strong&gt;:
List existing efforts that might slow down the DevOps roadmap (will help prioritizing)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Ask me anything
&lt;/h2&gt;

&lt;p&gt;If you’re thinking about taking this “10-hours DevOps Pill”, feel free to &lt;a href="https://www.meteorops.com/10-hours-devops-pill"&gt;reach out here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do it yourself
&lt;/h2&gt;

&lt;p&gt;You now know the general process for breaking the DevOps loop.&lt;br&gt;
You don’t NEED a DevOps expert.&lt;br&gt;
Feel free to subscribe to my Newsletter and &lt;a href="https://meteorops.beehiiv.com/subscribe"&gt;learn how to do it yourself here 👈🏼&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cto</category>
      <category>webdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>The CTO DevOps Handbook: Simple Principles and Examples</title>
      <dc:creator>Michael Zion</dc:creator>
      <pubDate>Mon, 25 Dec 2023 21:28:13 +0000</pubDate>
      <link>https://dev.to/meteorops/the-cto-devops-handbook-simple-principles-and-examples-2jcb</link>
      <guid>https://dev.to/meteorops/the-cto-devops-handbook-simple-principles-and-examples-2jcb</guid>
      <description>&lt;p&gt;Nail the DevOps part as your company's CTO&lt;/p&gt;




&lt;p&gt;The goal of this handbook is to give you clarity on DevOps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understand what’s DevOps (in simple words)&lt;/li&gt;
&lt;li&gt;Know what’s possible with DevOps (in simple goals)&lt;/li&gt;
&lt;li&gt;Get simple “when-to-do-what” DevOps guidelines
‍&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I added a bonus at the bottom of the article.&lt;br&gt;
It's a production-ready setup example you could take inspiration from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this article is for
&lt;/h2&gt;

&lt;p&gt;You might be a founder who wishes to get started with DevOps the right way.&lt;/p&gt;

&lt;p&gt;You might be a CTO of a 1,000 employees company who wishes to get simple principles.&lt;/p&gt;

&lt;p&gt;Or, maybe you’re a Software Engineer, and you want to understand if your company’s DevOps approach is good.&lt;/p&gt;

&lt;p&gt;If you’re looking for a simple DevOps playbook, this is it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand the desired result
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Two things your company needs to be able to do
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Serve its product to customers&lt;/li&gt;
&lt;li&gt;Build and improve the product&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Abilities you need to build, improve, and serve software
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Run experiments and test changes&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  DevOps has a simple meaning
&lt;/h2&gt;

&lt;p&gt;Developers and Operators have shared responsibility for building and improving the system.&lt;/p&gt;

&lt;p&gt;In practice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Developers are responsible to “Operate”&lt;/li&gt;
&lt;li&gt;DevOps Engineers are responsible to enable to “Operate” AND do some of it themselves&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Operate&lt;/strong&gt; = provision, monitor, secure, configure, deploy, scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a balance: Enabler, Doer, or Automator
&lt;/h2&gt;

&lt;p&gt;The DevOps role will end up as a balance between:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enabler: Provides the tools and knowledge to fulfill the DevOps goals&lt;/li&gt;
&lt;li&gt;Doer: Does the tasks that fulfill the DevOps goals&lt;/li&gt;
&lt;li&gt;Automator: Automates any repeating operation&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Know what things you should enable, do, or automate
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provision infrastructure&lt;/li&gt;
&lt;li&gt;Secure the system&lt;/li&gt;
&lt;li&gt;Deploy workloads&lt;/li&gt;
&lt;li&gt;Monitor the system&lt;/li&gt;
&lt;li&gt;Recover from issues&lt;/li&gt;
&lt;li&gt;Scale up or down&lt;/li&gt;
&lt;li&gt;Track &amp;amp; test changes&lt;/li&gt;
&lt;li&gt;Automate processes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choose the right tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Has state management = Saves time automating state-aware processes (e.g., Terraform)&lt;/li&gt;
&lt;li&gt;Has a big community &amp;amp; good docs = Saves time dealing with common issues (e.g., Kubernetes)&lt;/li&gt;
&lt;li&gt;Has multiple interface types: API, CLI, UI = Saves time integrating with the existing system (e.g., Vault)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also read about choosing tools &lt;a href="https://www.meteorops.com/blog/one-click-environment-the-ultimate-devops-goal#tools-choosing-principles"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set useful goals
&lt;/h2&gt;

&lt;p&gt;There are DevOps goals that adopting them will focus you on the right direction:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.meteorops.com/blog/one-click-environment-the-ultimate-devops-goal"&gt;One-Click Environments&lt;/a&gt;&lt;/strong&gt;: makes e2e tests easy and quick&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic Commits&lt;/strong&gt;: provides confidence that a tested change will work in production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate the Shared &amp;amp; Env-Specific Parts&lt;/strong&gt;: enables e2e tests as the company scales up&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want to learn about more useful DevOps goals, feel free to book a free consultation &lt;a href="https://www.meteorops.com/personal-devops-consultation"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enablers: Choose the Tools-to-Knowledge Balance
&lt;/h2&gt;

&lt;p&gt;Developers can either have the knowledge or the tools to do something.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More knowledge-reliance&lt;/strong&gt;: if you want the developers to contribute to the DevOps efforts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More tools-reliance&lt;/strong&gt;: if you want to abstract the operations from the developers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the balance between the two is not intentional, it’s accidental.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doers: Have a good reason to do it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Is it a one-time task?&lt;/li&gt;
&lt;li&gt;Does it teach you how the developers work?&lt;/li&gt;
&lt;li&gt;Are you directly accountable for the results of the task?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you answered “no” to the above questions, enable or automate it instead.&lt;/p&gt;

&lt;p&gt;Doing more = Learning the system's use-cases&lt;/p&gt;

&lt;p&gt;Doing too much = Not scalable, too-much knowledge-reliance&lt;/p&gt;

&lt;h2&gt;
  
  
  Automators: Have a good reason to automate it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Did it happen before?&lt;/li&gt;
&lt;li&gt;Is it likely to happen again?&lt;/li&gt;
&lt;li&gt;Will automating it take less time than doing it?&lt;/li&gt;
&lt;li&gt;Will automating it teach you an important company process?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you answered “yes” to 2 out of the 4 questions - automate it!&lt;/p&gt;

&lt;p&gt;More automations = Less reliance on knowledge to operate the system.&lt;/p&gt;

&lt;p&gt;Too much automations = No system awareness.&lt;/p&gt;

&lt;p&gt;P.S. - you can also enable developers to automate it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create available DevOps Capacity
&lt;/h2&gt;

&lt;p&gt;The DevOps needs of a company have spikes.&lt;/p&gt;

&lt;p&gt;One month you need 2 DevOps Engineers, and half of that the next month.&lt;/p&gt;

&lt;p&gt;Switchovers between big efforts and small tasks are common.&lt;/p&gt;

&lt;p&gt;This is true, especially for new companies.&lt;/p&gt;

&lt;p&gt;Break the assumption: “DevOps tasks must be done by a DevOps Engineer”.&lt;/p&gt;

&lt;h2&gt;
  
  
  There are 3 types of DevOps capacity
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Non-Flexible&lt;/strong&gt;: A full-time DevOps Engineer on the team&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semi-Flexible&lt;/strong&gt;: Key developers that can contribute to the DevOps goals&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully-Flexible&lt;/strong&gt;: A flexible DevOps Services company or freelancer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can read more about calculating the DevOps capacity your company needs &lt;a href="https://www.meteorops.com/blog/calculating-your-companys-required-devops-capacity"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to focus on what: Common Dilemmas
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;When&lt;/strong&gt;: You work alone, and the system is simple&lt;/p&gt;

&lt;p&gt;‍&lt;strong&gt;Focus&lt;/strong&gt;: On simplifying the development - Dockerize your apps, Create a post-commit pipeline that runs tests&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When&lt;/strong&gt;: You need to be able to create new environments quickly (for development, or for clients)&lt;/p&gt;

&lt;p&gt;‍ &lt;strong&gt;Focus&lt;/strong&gt;: On implementing “One-Click Environments”: Using IaC (e.g., Terraform) + Deployment tool (Depends on the platform).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When&lt;/strong&gt;: You want to e2e test every code modification, but there are many code modifications&lt;/p&gt;

&lt;p&gt;‍&amp;gt; &lt;strong&gt;Focus&lt;/strong&gt;: On splitting the “One-Click Env” into a “base” with shared resources, and “env” with env-specific resources&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When&lt;/strong&gt;: You want to unify &amp;amp; standardize how you deploy, monitor, scale, configure, and secure your workloads&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Focus&lt;/strong&gt;: On implementing an orchestrator such as Kubernetes&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When&lt;/strong&gt;: You want you have many moving parts and wish to be certain a tested change will work&lt;/p&gt;

&lt;p&gt;‍ &lt;strong&gt;Focus&lt;/strong&gt;: On implementing GitOps and consider a Monorepo (the sooner the better)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When&lt;/strong&gt;: You want the DevOps efforts to be done by the dev team&lt;/p&gt;

&lt;p&gt;‍ &lt;strong&gt;Focus&lt;/strong&gt;: On using “actual” IaC tools (Pulumi Typescript/Python), Full “how to operate” (see above) documentation‍&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never&lt;/strong&gt;: Invest lots of time in new tech without a strong reason&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Always&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have your code in Git&lt;/li&gt;
&lt;li&gt;Monitor the basic stuff: CPU, Memory, Disk, Network, App Logs, Cloud Costs&lt;/li&gt;
&lt;li&gt;Architect for high-availability&lt;/li&gt;
&lt;li&gt;Test before you deploy&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  BONUS: An example setup for a CTO approaching Production
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2zw1wj7ub4thd1o0h717.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2zw1wj7ub4thd1o0h717.jpg" alt="Image description" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2 AWS Accounts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;One for development and staging&lt;/li&gt;
&lt;li&gt;Another for production&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Monorepo in Github
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Docker-Compose for local development&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2 Infrastructure-as-Code projects: 'base' &amp;amp; 'apps'
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;base = shared resources (e.g., VPC, RDS, ECS Cluster, EKS Cluster)&lt;/li&gt;
&lt;li&gt;apps = env-specific resources (e.g., Lambda Functions, ECS Services, Kubernetes Namespaces)&lt;/li&gt;
&lt;li&gt;config file per environment&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Github Actions Workflow: Development workflow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Checkout branch and locally develop + test changes&lt;/li&gt;
&lt;li&gt;Create a Pull Request: Deploys a Pull-Request ‘apps’ environment on the ‘development’ environment ‘base’&lt;/li&gt;
&lt;li&gt;On merge to main: Deploys from the ‘main’ branch an ‘apps’ environment onto the ‘development’ environment ‘base’&lt;/li&gt;
&lt;li&gt;Manual: Deploy from the ‘main’ branch onto the ‘staging’ / ‘production’ environment ‘base’&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Setup Notes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Avoid mentioning an environmnent's name in the code for conditional resources deployment&lt;/li&gt;
&lt;li&gt;Use each environment’s config file to declare if a resource should be created&lt;/li&gt;
&lt;li&gt;Could be implemented using Terraform, Terragrunt, Pulumi, CDK, and other IaC tools&lt;/li&gt;
&lt;li&gt;Production should have 2-instances of every workload for high-availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’d like to see this setup in your startup, &lt;a href="https://www.meteorops.com/devops-setup-for-production-free-consultation"&gt;click here to book a call 👈🏼&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;P.S. - I'll be updating this page occasionally, so you might want to visit again&lt;/p&gt;




&lt;h2&gt;
  
  
  Another Bonus: DevOps Dictionary for Human Beings
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Definition&lt;/th&gt;
&lt;th&gt;Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A working instance of the entire system&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CI (Continuous Integration)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Enable developers to collaborate by agreeing on a single source-of-truth (master/main)&lt;/td&gt;
&lt;td&gt;Jenkins, Github Actions, GitlabCI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CD (Continuous Delivery)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Create an artifact that’s ready for production (tested, tagged)&lt;/td&gt;
&lt;td&gt;JFrog Artifactory, Nexus, AWS ECR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CD (Continuous Deployment)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every available deliverable (artifact) gets deployed automatically&lt;/td&gt;
&lt;td&gt;ArgoCD, Jenkins, AWS CodeDeploy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Monitoring / Observability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Collect metrics/traces/logs from apps and infrastructure, analyze them, and display them, and setup alerts&lt;/td&gt;
&lt;td&gt;Prometheus, Jaeger, Elasticsearch, Fluentd, OpenTelemetry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The resources on which the workloads run, in which the data is stored, and through which the network flows&lt;/td&gt;
&lt;td&gt;Servers, Databases, Network Routers &amp;amp; Switches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloud Infrastructure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Same as the above, but specifically in the cloud&lt;/td&gt;
&lt;td&gt;AWS EC2, AWS RDS, GCP Compute Engine, Azure Virtual Machines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloud&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Computing &amp;amp; Data services served from remote locations for you to build your system&lt;/td&gt;
&lt;td&gt;AWS, Azure, GCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Containerization &amp;amp; Virtualization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Technologies utilizing Kernel &amp;amp; OS features to create virtual machines, or isolate process (AKA run containers)&lt;/td&gt;
&lt;td&gt;Docker, vSphere, KVM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Secrets Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Storing and retrieving sensitive configurations (e.g., tokens, passwords)&lt;/td&gt;
&lt;td&gt;Hashicorp Vault, AWS Secrets Manager, SealedSecrets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Configuration Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Usually refers to preparing servers for workloads (e.g., creating directories &amp;amp; files, starting processes)&lt;/td&gt;
&lt;td&gt;Ansible, Chef, Puppet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Version Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Saving the code in a versioned way (Git)&lt;/td&gt;
&lt;td&gt;Github, Gitlab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitOps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Making the system is the same as it’s described in Git&lt;/td&gt;
&lt;td&gt;Flux, ArgoCD, Jenkins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Monorepo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All of the company’s code is in one Git Repository&lt;/td&gt;
&lt;td&gt;NX, Turborepo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Polyrepo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multiple Git repositories for different components&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IaC (Infrastructure-as-Code)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Creating Cloud infrastructure with &lt;strong&gt;idempotent&lt;/strong&gt; code and state management&lt;/td&gt;
&lt;td&gt;Terraform, Pulumi, CDK, Crossplane&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Execute, serve, or install the artifacts&lt;/td&gt;
&lt;td&gt;ArgoCD, Jenkins, AWS CodeDeploy, Scripts (Bash, Python, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Orchestrator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dynamically allocating workloads to a pool of nodes&lt;/td&gt;
&lt;td&gt;Kubernetes, Nomad, AWS ECS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Authentication &amp;amp; Authorization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Making sure each person, workload, or resource, has access only to what’s necessary (other workloads and resources)&lt;/td&gt;
&lt;td&gt;AWS IAM, OpenID, OpenVPN, Twingate, Istio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service Discovery&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Exposing available workloads using DNS&lt;/td&gt;
&lt;td&gt;Consul, CoreDNS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Get more practical advice
&lt;/h2&gt;

&lt;p&gt;I post small nuggets of practical advice on the "MeteorOps Newsletter".&lt;br&gt;
You can &lt;a href="https://meteorops.beehiiv.com/subscribe"&gt;subscribe here 👈🏼&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cto</category>
      <category>softwareengineering</category>
      <category>programming</category>
    </item>
    <item>
      <title>One-Click Environment: The Ultimate DevOps Goal</title>
      <dc:creator>Michael Zion</dc:creator>
      <pubDate>Mon, 18 Dec 2023 15:13:05 +0000</pubDate>
      <link>https://dev.to/meteorops/one-click-environment-the-ultimate-devops-goal-2l1l</link>
      <guid>https://dev.to/meteorops/one-click-environment-the-ultimate-devops-goal-2l1l</guid>
      <description>&lt;p&gt;I remember when I started working as a DevOps Engineer.&lt;/p&gt;

&lt;p&gt;For me, ”Best-Practices” was the most sacred phrase.&lt;/p&gt;

&lt;p&gt;I searched for best-practices not only when I wanted to know how to do something. I searched for best-practices to get inspiration for what I should do.&lt;/p&gt;

&lt;p&gt;In hindsight, big mistake. It happened because I didn’t have a clear goal.&lt;/p&gt;

&lt;p&gt;When you don’t have a clear goal, you’ll try to see what the experts do and copy. You’ll end up embracing their best-practices without knowing why they did them.&lt;/p&gt;

&lt;p&gt;I’ll share with you here why “One-Click Environment” is the ultimate DevOps goal.&lt;/p&gt;

&lt;p&gt;As a bonus, I’ll share a framework to achieve it fast.&lt;br&gt;
‍&lt;/p&gt;

&lt;h2&gt;
  
  
  The ultimate DevOps goal - One-Click Environment
&lt;/h2&gt;

&lt;p&gt;Looking back, the goal you should set is simple: Create an environment in “One-Click”. I’m saving you years of confusion that I had to go through.&lt;/p&gt;

&lt;p&gt;Why is this the ultimate goal, you ask? Three reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It makes it easy to test changes&lt;/li&gt;
&lt;li&gt;It makes it clear what should be automated&lt;/li&gt;
&lt;li&gt;It improves the system’s recoverability&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What do I mean by “Environment”?
&lt;/h2&gt;

&lt;p&gt;A ‘clean’ and working version of the entire system.&lt;/p&gt;

&lt;p&gt;The most popular environment is the Production environment, which serves the clients.&lt;/p&gt;

&lt;p&gt;There are static testing environments, such as ‘dev’, ‘staging’, ‘uat’, and more.&lt;/p&gt;

&lt;p&gt;There are also ephemeral testing environments, such as Pull-Request-Environments, Git-Branch-Environments, Developer-Environment, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it makes it easy to test changes?
&lt;/h2&gt;

&lt;p&gt;The company with the fastest development speed I ever saw was a supply-chain startup. They deployed high-quality code to production a lot, every day, with no downtime.&lt;/p&gt;

&lt;p&gt;How? We deployed ephemeral environments for every pull-request. The environments were identical to production. After running automated tests they terminated.&lt;/p&gt;

&lt;p&gt;We used Pulumi (Typescript) on AWS and documented how to change the environment. This way developers took part in contributing to the environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Programming is not Mathematics
&lt;/h3&gt;

&lt;p&gt;Edsger Dijkstra, was one of the pioneers of computer science. He envisioned programming as a mathematical discipline. He thought programmers will mathematically prove their code works.&lt;/p&gt;

&lt;p&gt;When was the last time you wrote a mathematical proof for your code? Probably never.&lt;/p&gt;

&lt;h3&gt;
  
  
  Programming is Science
&lt;/h3&gt;

&lt;p&gt;Instead, you took the scientific approach: You ran some tests to see if your code works as expected. And how do you run tests? On an environment of course!&lt;/p&gt;

&lt;p&gt;The easier it is to create an environment, the faster you’ll be able to run your tests. The ‘cleaner’ your environment is, the more trust you’ll have in the test results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it makes it clear what should be automated?
&lt;/h2&gt;

&lt;p&gt;Another startup we work with has 15 Kubernetes clusters with 2,200 nodes on GCP - All created manually!&lt;/p&gt;

&lt;p&gt;Developers asked for support many times a day; "Create this DB", "I need a new NodePool", etc.&lt;/p&gt;

&lt;p&gt;With every new request, we had to ask - "Should this be automated?"&lt;/p&gt;

&lt;p&gt;We ended up automating everything required for every new environment.&lt;/p&gt;

&lt;p&gt;How? We created a Pulumi Typescript codebase and imported the entire infrastructure into it. On top of that, developers felt comfortable contributing to it, as it was a Typescript project.&lt;/p&gt;

&lt;h3&gt;
  
  
  The “should this be automated?” mental struggle
&lt;/h3&gt;

&lt;p&gt;I asked myself at least 1,836 times “should this be automated?”, on lots of things. Sometimes I decided to automate nonsense.&lt;/p&gt;

&lt;p&gt;If you want to understand if it's worth automating, ask yourself 2 questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is it going to happen again?&lt;/li&gt;
&lt;li&gt;Will automating it take less time than doing it manually?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Don’t rely on your memory
&lt;/h3&gt;

&lt;p&gt;You’ll need to remember every ad-hoc modification you did to an environment. If a change isn’t done as part of the “One-Click Environment” automation, you’ll have to rely on your memory and do it again.&lt;/p&gt;

&lt;p&gt;Imagine a developer creating a new environment, running its tests, only to find out the DB isn't there. Someone created it manually in the other environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bottom line, how do “One-Click Environments” guide automation?
&lt;/h3&gt;

&lt;p&gt;Next time you ask yourself “should this be automated?”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If it’s part of what a new and clean environment needs: Easy YES&lt;/li&gt;
&lt;li&gt;If not: A strong maybe&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the way, maybe you want to automate it, but you’re drowning in so many requests that it’s impossible.&lt;/p&gt;

&lt;p&gt;In that case, send your management &lt;a href="https://www.meteorops.com/blog/calculating-your-companys-required-devops-capacity"&gt;this article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It's about calculating how much DevOps capacity your company needs.&lt;/p&gt;

&lt;p&gt;Maybe it’ll help understand how much DevOps capacity you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it improves the system’s recoverability?
&lt;/h2&gt;

&lt;p&gt;An IoT startup we worked with had 5 clients, with an AWS account per client.&lt;/p&gt;

&lt;p&gt;It was supposed to be the same system per client, but it wasn’t!&lt;/p&gt;

&lt;p&gt;Each account’s production was created with Terraform (Terragrunt) and Ansible. But, there were so many ad-hoc changes, it took about 2-4 days to create a full environment from scratch.&lt;/p&gt;

&lt;p&gt;We decided to use Jenkins and created a pipeline that automated everything. When we finished, you could deploy a full environment from scratch in 50-minutes. (after some parallelization it went down to 20-minutes)&lt;/p&gt;

&lt;p&gt;You should have heard the sigh of relief the team had when the demo finished — ”No more fear of not recovering from a production incident!”.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a new environment and route traffic to it
&lt;/h3&gt;

&lt;p&gt;Think about your production — what would it take to create it from scratch? If your answer is “I don’t know”, it’s most likely because some things were created manually or ad-hoc.&lt;/p&gt;

&lt;p&gt;If your answer is “one-click”, we are hiring. Please click this link asap: &lt;a href="https://www.meteorops.com/job/senior-devops-engineer"&gt;Senior DevOps Engineer Position at MeteorOps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Imagine a production failure that requires creating a new environment, and finding out you can't. Some things were modified manually.&lt;/p&gt;

&lt;p&gt;Or, as the poet Capone-N-Noreaga wrote - “Oh no, oh no, oh no no no no no”.&lt;/p&gt;

&lt;p&gt;When you have “One-Click Environments”, you can deploy a new environment fast and use it instead of the old one.&lt;br&gt;
‍&lt;/p&gt;

&lt;h3&gt;
  
  
  It also improves high-availability
&lt;/h3&gt;

&lt;p&gt;When you can create an environment from scratch, things become easier:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;creating a multi-region setup&lt;/li&gt;
&lt;li&gt;creating an active-active setup&lt;/li&gt;
&lt;li&gt;creating an active-passive setup
‍
You can deploy many environments in different locations, and route traffic to an environment based on your needs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  TPCS - A useful framework to achieve a One-Click Environment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tools, Pipeline, Contributions, State
&lt;/h3&gt;

&lt;p&gt;‍&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvv2b8pwqq2we9d89z2se.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvv2b8pwqq2we9d89z2se.jpg" alt="Image description" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It all boils down to 4 things you should be doing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You should choose the tools to: manage data, provision, deploy, configure, secure, test, monitor, and automate&lt;/li&gt;
&lt;li&gt;Then you should build the pipeline that uses the tools to create the environment&lt;/li&gt;
&lt;li&gt;You should also make it easy to contribute to the pipeline that creates an environment&lt;/li&gt;
&lt;li&gt;And, you should continuously reconcile the state of the system to its desired state&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Principles for choosing tools
&lt;/h3&gt;

&lt;p&gt;Choose tools that answer the below requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More native integrations per tool, less glue required — Makes building the pipeline easier (e.g. - AWS)&lt;/li&gt;
&lt;li&gt;Popular tools with active communities make documentation easier (e.g. - Kubernetes)
Tools with a declarative syntax are self-documenting and save you some hustle (e.g. - Terraform)&lt;/li&gt;
&lt;li&gt;Tools with native state management will save you time reconciling the state of the system (e.g. - Terraform)&lt;/li&gt;
&lt;li&gt;Tools with extensive APIs will make it easier to give the developers more ownership (e.g. - Pulumi)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Guidelines to build the pipeline
&lt;/h3&gt;

&lt;p&gt;This is where you’re flexibility is your number one priority:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose a flexible automation platform (e.g. - Jenkins)&lt;/li&gt;
&lt;li&gt;Create one pipeline and make it possible to pass parameters to it&lt;/li&gt;
&lt;li&gt;Manage the pipeline’s code straight in Git&lt;/li&gt;
&lt;li&gt;Bonus: Parallelize its stages to speed it up
‍
### Make it easy to contribute&lt;/li&gt;
&lt;li&gt;Describe the desired state of the system in a Git repository, and make it easy for developers to contribute&lt;/li&gt;
&lt;li&gt;Make it clear where to find infra-related stuff, deployment-related stuff, etc&lt;/li&gt;
&lt;li&gt;Write good documentation
‍&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good documentation answers these questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How to provision a resource?&lt;/li&gt;
&lt;li&gt;How to deploy a workload?&lt;/li&gt;
&lt;li&gt;How to configure the system?&lt;/li&gt;
&lt;li&gt;How to secure the system?&lt;/li&gt;
&lt;li&gt;How to test changes?&lt;/li&gt;
&lt;li&gt;How to monitor a workload?&lt;/li&gt;
&lt;li&gt;How to automate a process?&lt;/li&gt;
&lt;li&gt;How to manage the data’s lifecycle? (e.g. - Run DB migrations)
‍
### Reconcile the state of the system
This step is made easier if you chose idempotent tools with state management, and made harder if you didn’t! (choose idempotent tools)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The guiding principle here is simple. If you run the pipeline twice with the same parameters, nothing should happen the second time.&lt;/p&gt;

&lt;p&gt;That’s it, you’re good to go!&lt;/p&gt;

&lt;p&gt;But first…&lt;/p&gt;

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

&lt;h2&gt;
  
  
  A Recap!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Without a useful goal, you might embrace “best-practices” that aren’t good for you.&lt;/li&gt;
&lt;li&gt;The most useful goal for a DevOps Engineer is being able to create an environment with “One-Click”.&lt;/li&gt;
&lt;li&gt;Because it makes it easy to test changes,&lt;/li&gt;
&lt;li&gt;And It makes it clear what should be automated,&lt;/li&gt;
&lt;li&gt;And It makes it easy to recover the system.&lt;/li&gt;
&lt;li&gt;A framework that helps achieve this goal is TPCS: Tools, Pipelines, Contributions, State
‍&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whenever I think about going forward without a goal, I’m reminded of this gem from ‘Alice in Wonderland’:&lt;/p&gt;

&lt;p&gt;“Alice: Would you tell me, please, which way I ought to go from here?&lt;br&gt;
The Cheshire Cat: That depends a good deal on where you want to get to.&lt;br&gt;
Alice: I don't much care where.&lt;br&gt;
The Cheshire Cat: Then it doesn't much matter which way you go.&lt;br&gt;
Alice: ...So long as I get somewhere.&lt;br&gt;
The Cheshire Cat: Oh, you're sure to do that, if only you walk long enough.”&lt;br&gt;
 ― Lewis Carroll, Alice in Wonderland&lt;br&gt;
‍&lt;/p&gt;

&lt;p&gt;If you want to implement the “One-Click Environment” in your company&lt;br&gt;
You should know we (MeteorOps) took many companies from “no-automation” to “one-click environment”. If you’re interested in a free consultation about it, feel free to &lt;a href="https://www.meteorops.com/free-one-click-environment-consultation-call"&gt;click here&lt;/a&gt; 👈&lt;/p&gt;

</description>
      <category>devops</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
