<?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: Santiago</title>
    <description>The latest articles on DEV Community by Santiago (@s-m).</description>
    <link>https://dev.to/s-m</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%2F1280889%2Faf3de360-d8a9-4fe5-8053-a17fc687b50a.jpeg</url>
      <title>DEV Community: Santiago</title>
      <link>https://dev.to/s-m</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/s-m"/>
    <language>en</language>
    <item>
      <title>The Ultimate Clipboard, period.</title>
      <dc:creator>Santiago</dc:creator>
      <pubDate>Wed, 10 Apr 2024 13:00:00 +0000</pubDate>
      <link>https://dev.to/thesword/the-ultimate-clipboard-period-45k4</link>
      <guid>https://dev.to/thesword/the-ultimate-clipboard-period-45k4</guid>
      <description>&lt;p&gt;It’s no secret that we, software workers, search on the bast internet sea for answers to our problems. And when we find them, we copy them, and paste them on our project. But some times we need to replicate the solution we implemented to fix an issue, to solve another issue somewhere else. And some other times, we just want to copy and past some stuff. And… some other other times, we may want to do all that at the same time.&lt;/p&gt;

&lt;p&gt;If you’re like me, then the “regular” clipboard runs short pretty fast, and quite frequently as well. A few years ago someone recommended me to install this tool, and my life changed completely after that… at least my life from 9 to 5 from Mondays to Fridays…&lt;/p&gt;

&lt;p&gt;Let me show your how to install and use the ultimate clipboard you’ll ever need. All aboard!&lt;/p&gt;

&lt;h2&gt;
  
  
  Clipy
&lt;/h2&gt;

&lt;p&gt;I know, you thinking about that old pet from certain writing tool right?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5UgRSWyE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/04/image.png%3Fw%3D240" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5UgRSWyE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/04/image.png%3Fw%3D240" width="240" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sorry, but no, is not that one (though you can have it back if you want it: &lt;a href="https://github.com/Cosmo/Clippy" rel="noopener noreferrer"&gt;here&lt;/a&gt;). The one I’m talking about is with a single P. Clipy is a Clipboard extension app for macOS.&lt;/p&gt;

&lt;p&gt;Its idea is simple enough, add a history to your clipboard. Each time you press “Cmd+C”, it gets added first on the list of you clipboard history. “Cmd+V” paste what you have at the top of the clipboard history. And if you press “Cmd+Shift+V”, you get to pick what to paste from your history.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YTLTkigq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/04/screenshot-2024-04-06-at-16.49.13.png%3Fw%3D722" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YTLTkigq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/04/screenshot-2024-04-06-at-16.49.13.png%3Fw%3D722" width="722" height="700"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And it doesn’t stops there, this tool not only adds more room to your clipboard, but also allows you to create snippets to store your most commonly used “pastes”. You can even create “folders” to group them and have some useful code snippets, URLs, Ascii Emojies (¯_(ツ)_/¯) , or commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get it
&lt;/h2&gt;

&lt;p&gt;The installation is pretty straight forward.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the binary from their distribution site: &lt;a href="https://clipy-app.com/" rel="noopener noreferrer"&gt;https://clipy-app.com/&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Move it into your Applications folder.&lt;/li&gt;
&lt;li&gt;There is no step 3.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How I use it
&lt;/h2&gt;

&lt;p&gt;It has proven to be extremely handy in many occasions to me already. On my daily work I’m used to copy a lot of commands, some to replicate on different environments, or simply to run again later. Also, copying some values to add to my code or commands, and being able to reuse that data later on is really useful as well.&lt;/p&gt;

&lt;p&gt;Regarding the snippets, I use them to keep at hand the commands and code sample I use the most. For instance, I work with many git repos and branches, and I like keep my workspace clean, that means, removing merged and deleted branches for instances. Of course, deleting them one by one not only is boring but also time consuming. So I have this git command to delete all branches on my local that have been removed from the remote repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git fetch &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;branch &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;git branch &lt;span class="nt"&gt;-vv&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;': gone]'&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $1}'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;git branch &lt;span class="nt"&gt;-D&lt;/span&gt; &lt;span class="nv"&gt;$branch&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feel free to add it to your snippets :D. I also have a commands to create a diff report between tags, another one to calculate the cadence of a branch, and even the LOCs (yeah, still use that one sometimes).&lt;/p&gt;

&lt;p&gt;And since I’m an automation maniac, I also keep a template for any new script I create:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; errexit

&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; nounset
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; pipefail
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TRACE&lt;/span&gt;&lt;span class="p"&gt;-0&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"1"&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; xtrace
&lt;span class="k"&gt;fi

&lt;/span&gt;main&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;# Add Code Here&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

main &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the template I use to create a script with some of the best practices I like to have implemented on my scripts from the very start. Those are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;errexit&lt;/strong&gt; : the script exist whenever any commands returns a non-zero code. So you don’t miss any execution errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nounset&lt;/strong&gt; : the script will fail if you try to use any environment variables that hasn’t been declared. So you don’t forget to initialize them or mistype any names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pipefail&lt;/strong&gt; : I use pipelines a lot ( i.e.: command 1 | command 2 | command3 ), by default only the exit code of the last command is returned. By enabling this option, if any of the commands fail, the script will return the error code instead. This has saved my hours of debugging time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xtrace&lt;/strong&gt; : If you run the script by adding “TRACE=1” in front of it, you’ll get a lot of extra logs to debug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;main&lt;/strong&gt; function: the main login of the script encapsulated on a function.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Go For It
&lt;/h2&gt;

&lt;p&gt;This is one of the very first tools I always get installed on new machines. It has proven it’s value to me, and I can’t conceive my daily work with out it nowadays.&lt;/p&gt;

&lt;p&gt;Hope you find it as useful as I did, and feel free to copy my snippets as well &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TcI50qgQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f600.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TcI50qgQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f600.png" alt="😀" width="72" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy! *Sails away….&lt;/p&gt;

</description>
      <category>software</category>
      <category>tools</category>
      <category>bash</category>
      <category>clipboard</category>
    </item>
    <item>
      <title>Evolve your DevOps NOW! Starting Point</title>
      <dc:creator>Santiago</dc:creator>
      <pubDate>Wed, 06 Mar 2024 13:00:00 +0000</pubDate>
      <link>https://dev.to/thesword/evolve-your-devops-now-starting-point-1g5m</link>
      <guid>https://dev.to/thesword/evolve-your-devops-now-starting-point-1g5m</guid>
      <description>&lt;p&gt;When I started working as a Configuration Manager back in my days at Motorola little did I know that I’d end up on a journey to find a proper path to make DevOps grow and evolve. But here I am, after a some really long years (13/14 months each… #BadJoke) of traveling on the high seas, researching, implementing and learning, finally reached to a good port, found a cool treasure map and I’m willing to share the treasure I found with you.&lt;/p&gt;

&lt;p&gt;Lucky for us, the treasure chest is big, sadly, is too big to fit on a single post. So, since I’ll have to split it into multiple posts, I though I could do it iteratively as well. I’m going to start, in this post, talking about the general idea of the model, and how is structured. Then we’re gonna review the model again, going in deep on each level of it (more about this in a min), and finally we’ll do a third iteration to check the goals and practices of each levels.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nPZV62Z2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/03/gettyimages-600994292.webp%3Fw%3D730" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nPZV62Z2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/03/gettyimages-600994292.webp%3Fw%3D730" width="730" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Raise the anchor sailor!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Map
&lt;/h2&gt;

&lt;p&gt;How would you recognize a treasure map? I mean, we’ve all seen treasure maps on the movies, and games before. These pieces of old paper with drawings in them and a big red cross showing were to start digging right? But we’re on the information era, how does a treasure map looks nowadays? In this case, it takes the form of a &lt;strong&gt;Maturity Model&lt;/strong&gt;. Cool, ok, but what’s that (you may ask)? &lt;strong&gt;A MM is a tool to evaluate the development and performance growth of a group (or individual)&lt;/strong&gt;. It places an individual’s performance against the established stages of growth and expertise.&lt;/p&gt;

&lt;p&gt;Let’s put it in other words. Imagine you have a plant on your desk. A tiny plant you want to make it grow and get big. For that you have a ruler, but an special one. If you place the ruler next to the plant, you’ll be able to measure it. The ruler will tell you if it’s your plant is &lt;em&gt;tiny&lt;/em&gt;, &lt;em&gt;small&lt;/em&gt;, &lt;em&gt;average&lt;/em&gt;, or &lt;em&gt;huge&lt;/em&gt;, so you’ll know the size of your plant. But this ruler is special remember? Not only will tell you how big your plant is, but also will tell you how to make it grow to the next size.&lt;/p&gt;

&lt;p&gt;A MM works the same way, it allows you to measure your DevOps Team or Area, to understand how matured and evolved it is, and at the same time gives your the steps to follow to make it move to the next stage of evolution, or maturity level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Process Areas
&lt;/h2&gt;

&lt;p&gt;These steps to go from level I to level II are specific goals that the team will have to accomplish in order to complete the maturity level, and be ready to sail to the next one. If you’re at level I, and wish to reach level III, you’ll have to complete level II first.&lt;/p&gt;

&lt;p&gt;The steps are grouped by categories to make them easier to manage and understand. there are 5 categories, that we’re going to call &lt;strong&gt;Process Areas&lt;/strong&gt; , they are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Source Code&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Templating&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practices grouped in &lt;strong&gt;Source Code&lt;/strong&gt; area are related to code change management, like ensuring its integrity, detecting integration issues, continuous integration implementations, test results reports, code coverage and static analysis, and so on.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Testing&lt;/strong&gt; area brings together the practices related to the management of unit tests, functional tests and integration tests. Notice that functional and integration test suites require a running environment, those practices tho are not included in this process area but in &lt;strong&gt;Environment&lt;/strong&gt; , which groups the practices involved in managing the software application execution environments. Specifically in identifying what environments will be necessary (production, test, development, staging, pre-production, etc.), the characteristics of each one, and the processes necessary to create them and ensure that they meet the stated requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monitoring&lt;/strong&gt; groups together practices involved in real-time and statistical monitoring of software environments and applications so that erratic behavior can be identified and alerted when they occur (or sooner, if possible).&lt;/p&gt;

&lt;p&gt;And finally, the &lt;strong&gt;Templating&lt;/strong&gt; area contains practices to generate patterns and templates of processes and (software) projects to expedite both the start of a new project and the replication of changes and improvements in multiple projects that are based on the same templates. In other words, just as code reuse is encouraged in programming, this area promotes the reuse of solutions found in other processes and projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sailing to the next port
&lt;/h2&gt;

&lt;p&gt;The next stop on our journey are the &lt;strong&gt;Maturity Levels&lt;/strong&gt;. The following post will introduce some of the specific practices and how are they organized into these levels that will eventually help you make your DevOps grow strong and evolve.&lt;/p&gt;

&lt;p&gt;But tell me, what do you think about these process areas? Can you match the practices you follow into any of them?&lt;/p&gt;

</description>
      <category>devops</category>
      <category>software</category>
      <category>cmmi</category>
      <category>howto</category>
    </item>
    <item>
      <title>How to document when you don’t like documenting</title>
      <dc:creator>Santiago</dc:creator>
      <pubDate>Mon, 26 Feb 2024 11:00:00 +0000</pubDate>
      <link>https://dev.to/thesword/how-to-document-when-you-dont-like-documenting-3jo8</link>
      <guid>https://dev.to/thesword/how-to-document-when-you-dont-like-documenting-3jo8</guid>
      <description>&lt;p&gt;I don’t really like writing documentation, and I can count with half a hand, the number of engineers I’ve worked with that truly and honestly liked to do it. But, if there is something I dislike even more, is having to answer the same questions over and over about how to use my app or script.&lt;/p&gt;

&lt;p&gt;Due to that (in your face positive motivation) I’ve spent some time learning a few tricks on how to create documents easy to read, and easy to write, with out having to spent much time on them, and I’m willing to share them with you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set the Course Sailor
&lt;/h2&gt;

&lt;p&gt;Just like when sailing in the middle of the sea, you need to know in which direction to point your boat. Or you could end up messing it up big, really big. When writing docs you need to know which is your target audience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftheswordblogsite.files.wordpress.com%2F2024%2F02%2Fscreenshot-2024-02-23-at-08.17.59.png%3Fw%3D884" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftheswordblogsite.files.wordpress.com%2F2024%2F02%2Fscreenshot-2024-02-23-at-08.17.59.png%3Fw%3D884"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your &lt;strong&gt;target audience&lt;/strong&gt; will define how technical you can get on your explanations, and will give you a better idea of how people will interact with your project. For instance, if you’re writing for developers, you may want to include more technical details and even some insight of internal design, and expect them to make a more advance usage of it. On the other hand, when writing for people how “doesn’t speak dev” ( like a marketing team), you’ll have to reduce the number of technical words and expect a more basic usage of it.&lt;/p&gt;

&lt;p&gt;Do not try to… let me emphasize that, DO NOT try to create a document for both, technical and non-technical audience. It’ll be boring for technical folks, and confusing for non-technical ones. If you need to target both, create separated documents.&lt;/p&gt;

&lt;p&gt;Once you know who’s gonna be reading your doc, its time to sit down and start writing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The IBM Pattern
&lt;/h2&gt;

&lt;p&gt;No, this is not the “International Business Machines” pattern, its the &lt;strong&gt;“Intro-Basic-More”&lt;/strong&gt; pattern, based on the &lt;a href="https://en.wikipedia.org/wiki/KISS_principle" rel="noopener noreferrer"&gt;&lt;em&gt;KISS principle&lt;/em&gt;&lt;/a&gt; (Keep It Simple, Sailor). What is that IBM thing? Is a simple mnemotechnic I use to remember that any documentation (like a README file) should have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;Introduction&lt;/strong&gt; section, explaining what the tool/service/project is about. It has to be concise and brief. Don’t overthink it, one sentence or two at top, and that should be it. You can also include the (one-liner) &lt;em&gt;install&lt;/em&gt; command here.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Basic Usage&lt;/strong&gt; section should show the users how to achieve the most probable reason why they want to use this tool/service/project, and only that. If you’re writing a doc for &lt;em&gt;grep&lt;/em&gt;, the basic usage is &lt;code&gt;grep 'skywalker'&lt;/code&gt;, if you’re writing a doc for &lt;em&gt;curl&lt;/em&gt;, the basic usage is &lt;code&gt;curl starwars.com&lt;/code&gt;. Give them what they came to find right away.&lt;/li&gt;
&lt;li&gt;Last but not least, &lt;strong&gt;More Questions&lt;/strong&gt;. This section should present a way for the reader to find more information if the basic usage is not enough. It could be a list of FAQs&lt;sup&gt;1&lt;/sup&gt;, how to use the “help/usage” command, a link to a more detailed document (like a Swagger based site), or a way to contact you (not recommended).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By following this patter you’ll make sure that anyone who reads it will get a clear idea of what you project is for and what it does, how to make a basic usage of it, and how to get more info if needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  VHS
&lt;/h2&gt;

&lt;p&gt;Some of you may say “Sounds great Santi, but how can I document the basic usage if I don’t like documenting”. Argh! What a predicament, but I got you covered.&lt;/p&gt;

&lt;p&gt;There is this tool I’ve been using for &lt;strong&gt;showing&lt;/strong&gt; users how use my scripts and apps, with little to no effort from my side. It’s called &lt;a href="https://github.com/charmbracelet/vhs?tab=readme-ov-file#vhs" rel="noopener noreferrer"&gt;VHS&lt;/a&gt; (yes, as in &lt;strong&gt;Video Home System&lt;/strong&gt; ) and it allows you to create GIFs of commands running on a terminal, from the terminal. Is not a recording app (tho it can do that as well), it’s a GIF generator.&lt;/p&gt;

&lt;p&gt;You can instruct VHS to create a GIF running your app. And update that GIF automatically on every release. So you’ll get your documentation up to date effortlessly.&lt;/p&gt;

&lt;p&gt;For instance, this is a script I wrote for dev teams to create a couple of Kubernetes manifest files. It has many options to customize those manifests, but for most common usage, which is a new app for development, this is more than enough:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftheswordblogsite.files.wordpress.com%2F2024%2F02%2Fadd_app.gif%3Fw%3D900" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftheswordblogsite.files.wordpress.com%2F2024%2F02%2Fadd_app.gif%3Fw%3D900"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Your Own Boat
&lt;/h2&gt;

&lt;p&gt;Let me show you how to use VHS by following the IBM pattern.&lt;/p&gt;

&lt;h3&gt;
  
  
  VHS Intro
&lt;/h3&gt;

&lt;p&gt;This tool allows you to create terminal GIFs as code for integration testing and demoing your CLI tools.&lt;/p&gt;

&lt;p&gt;Install it by simply running: &lt;code&gt;brew install vhs&lt;/code&gt;. Check for more install options &lt;a href="https://github.com/charmbracelet/vhs?tab=readme-ov-file#installation" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic Usage
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create a new &lt;em&gt;vhs_demo.tape&lt;/em&gt; file with the following content:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Output vhs_demo.gifRequire echoSet Shell "bash"Set FontSize 16Set Width 800Set Height 450Type "vhs vhs_demo.tape"Sleep 1sEnterSleep 5s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Change the “&lt;em&gt;Type&lt;/em&gt;” command with your own.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Execute VHS to generate the GIF:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftheswordblogsite.files.wordpress.com%2F2024%2F02%2Fvhs_demo.gif%3Fw%3D800" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftheswordblogsite.files.wordpress.com%2F2024%2F02%2Fvhs_demo.gif%3Fw%3D800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get the &lt;em&gt;vhs_demo.gif&lt;/em&gt; file generated on the same folder.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  More Questions
&lt;/h3&gt;

&lt;p&gt;Run &lt;code&gt;vhs -h&lt;/code&gt; to see all the options available, or check &lt;a href="https://github.com/charmbracelet/vhs?tab=readme-ov-file#vhs-command-reference" rel="noopener noreferrer"&gt;the official docs&lt;/a&gt; to learn more about VHS and its advance usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Raise the Sails
&lt;/h2&gt;

&lt;p&gt;Following this pattern, and using VHS for adding examples and expected outputs has helped me a lot to reduce the number of times people needs to come to me for help for common tasks. Hope it helps you too.  &lt;/p&gt;

&lt;p&gt;What do you think about it? How do you write your docs? I really wanna know &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs0.wp.com%2Fwp-content%2Fmu-plugins%2Fwpcom-smileys%2Ftwemoji%2F2%2F72x72%2F1f600.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs0.wp.com%2Fwp-content%2Fmu-plugins%2Fwpcom-smileys%2Ftwemoji%2F2%2F72x72%2F1f600.png" alt="😀"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Frequently Asked Questions &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs0.wp.com%2Fwp-content%2Fmu-plugins%2Fwpcom-smileys%2Ftwemoji%2F2%2F72x72%2F21a9.png" alt="↩"&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>tools</category>
      <category>automation</category>
      <category>devops</category>
      <category>documentation</category>
    </item>
    <item>
      <title>The Way You Need To Evolve DevOps</title>
      <dc:creator>Santiago</dc:creator>
      <pubDate>Wed, 21 Feb 2024 07:07:00 +0000</pubDate>
      <link>https://dev.to/thesword/the-way-you-need-to-evolve-devops-3m05</link>
      <guid>https://dev.to/thesword/the-way-you-need-to-evolve-devops-3m05</guid>
      <description>&lt;p&gt;Nowadays we have stoped measuring how many organizations have adopted DevOps practices to start measuring how advanced the implementation of those practices is. This is not really optional anymore but a standard. And yet we still find it hard to define exactly what DevOps is, or how to start from scratch.&lt;/p&gt;

&lt;p&gt;We could agree on some general ideas, like that it’s a cultural change, that its main goal is to make the ops team to move at the same phase as devs, and that it helps empowering the dev teams/cells. But on the other hand, some would say it’s better to start from a dev team, others would say it’s better to start from an infra team. Some teams put their focus on pipelines automation, others on deployments and monitoring. And the list of differences goes on and on and on.&lt;/p&gt;

&lt;p&gt;As an academic researcher and a DevOps team leader I’ve dedicated a couple of years researching, analyzing and applying DevOps practices trying to figure out which is the best way, if any, to do it. I found, of course, a lot of material to read, watch and listen to, but I decided to go the extra mile, and find the path my way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sailing to Unknown Port
&lt;/h2&gt;

&lt;p&gt;The adventure started with some reading. A lot of reading actually. As I said, there are a lot of articles, books, courses, reddit threads, etc. where to look at. Used those as an input to create a list of the common practices, metrics used to measure success, and issues or problems that motivated teams to go the DevOps way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Eb2FM9nk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/02/pexels-photo-194094-edited.jpeg%3Fw%3D1024" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Eb2FM9nk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/02/pexels-photo-194094-edited.jpeg%3Fw%3D1024" alt="Boats" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, it was time to start talking to people. With those lists at hand, I started interviewing other DevOps leads and experienced software engineers to get their feedback and thoughts about them. Asked if they have implemented any of the practices listed there, if there was anyone missing, if they have used any of those metrics, or have had those issues. Interesting enough, they gave me pretty similar answers. Practices weren’t implemented the same way, or the metrics used weren’t exactly the same, but there was some sort of pattern to be discovered there. So, it was time for moving forward.&lt;/p&gt;

&lt;p&gt;Next step was to create an online survey with similar questions to the interviews, and ask every software company and organization around my city to fill it. It took some time. The quarantine and curfew got in the middle so there wasn’t much to do but wait, but it was worth it. Once I got enough answers, a preliminar analysis started to show what I was expecting, a pattern, a path.&lt;/p&gt;

&lt;p&gt;After closing the survey I went full researcher mode. I deep dived into the sea of data points and open answers, and emerged back to the surface (a few months later) with a treasure map.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Treasure Map
&lt;/h2&gt;

&lt;p&gt;I found that there is actually a possible path for a team or company to follow to go from zero to fully mature a DevOps area. Actually, I believe there are many, my treasure map is simply one of them. A clear and reproducible guide to follow to safety reach the wonderful DevOps bay.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---gPpEYfj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/02/screenshot-2024-02-19-at-15.47.30.png%3Fw%3D1024" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---gPpEYfj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/02/screenshot-2024-02-19-at-15.47.30.png%3Fw%3D1024" alt="Treasure Map" width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With a map in my hands I was exited to see if it would take me where it was supposed to. So I followed it. Started with a single project, going step by step, slow but steady, cautious, double checking everything before taking the next step. Results were great, but it could’ve been a coincidence, those happen after all.&lt;/p&gt;

&lt;p&gt;I tried next with a couple of projects at the same time, from different teams and technologies. Moved a bit faster in this occasion, and got great results as well, and excellent feedback from the dev teams. The map wasn’t lying.&lt;/p&gt;

&lt;p&gt;And finally, I got the chance to test it once more, but this time, with the goal of building a DevOps area from scratch on a new company. It took much more time than the previous experiences, but it proved the path we were following was leading us in the right direction. By the time we were half way there, the devs and even the managers had already noticed some big changes for good.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get the Gold
&lt;/h2&gt;

&lt;p&gt;I don’t want this secret treasure map to remain, well, secret. Being the treasure a well implemented set of best practices related to development, testing, monitoring and automation, I want everyone to get a peace of it, or all of it.&lt;/p&gt;

&lt;p&gt;The map ifself consists of a Maturity Levels Matrix, similar to CMMI levels. Each of which have a set of goals to help you achieve the implementation of the best practices related to it. By creating a roadmap based on this matrix, you’ll be able to create and grow a DevOps culture on any team, organization or company.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nyFu-O_n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/02/img_0060-1.jpg%3Fw%3D1024" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nyFu-O_n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://theswordblogsite.files.wordpress.com/2024/02/img_0060-1.jpg%3Fw%3D1024" alt="Maturity Model Groups" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Explaining and properly teaching this tools and their processes will take me several posts for sure, so I’m inviting you to embark with me on this trip so you can also find and enjoy the gold of the DevOps treasure chest.&lt;/p&gt;

&lt;p&gt;EDIT: Check the followup post &lt;a href="https://dev.to/thesword/evolve-your-devops-now-starting-point-1g5m"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  All Aboard!
&lt;/h2&gt;

&lt;p&gt;Join me on this journey! On the follow up post I’ll start explaining the maturity model in detail.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>software</category>
      <category>cmmi</category>
      <category>howto</category>
    </item>
  </channel>
</rss>
