<?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: TechWorld with Nana</title>
    <description>The latest articles on DEV Community by TechWorld with Nana (@techworld_with_nana).</description>
    <link>https://dev.to/techworld_with_nana</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%2F319175%2Fc5aebaff-6768-4f5e-9c0b-b1eae091ded8.png</url>
      <title>DEV Community: TechWorld with Nana</title>
      <link>https://dev.to/techworld_with_nana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techworld_with_nana"/>
    <language>en</language>
    <item>
      <title>A Guide of how to get started in IT in 2023 - Top IT Career Paths</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Mon, 19 Dec 2022 15:50:43 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/a-guide-of-how-to-get-started-in-it-in-2023-top-it-career-paths-3gip</link>
      <guid>https://dev.to/techworld_with_nana/a-guide-of-how-to-get-started-in-it-in-2023-top-it-career-paths-3gip</guid>
      <description>&lt;p&gt;In this blog article I want to give you &lt;strong&gt;kind of a roadmap of how to get into the IT world&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the written version of my &lt;a href="https://youtu.be/XmWkcePhf84" rel="noopener noreferrer"&gt;new youtube video&lt;/a&gt;&lt;/em&gt; ✍️ &lt;/p&gt;




&lt;p&gt;The tech industry is currently one of the &lt;strong&gt;hottest industries for the job market&lt;/strong&gt;, so it's completely logical that so many people are thinking about changing careers to tech or getting into tech just after graduating from school or college.&lt;/p&gt;

&lt;h3&gt;
  
  
  Entry into tech can be overwhelming 🤯
&lt;/h3&gt;

&lt;p&gt;And it's true that tech industry offers lots of career opportunities, but when you are at the very beginning of your journey it can be very overwhelming too. 🤯 It is a broad industry with so many options, so many IT fields and professions. There is &lt;strong&gt;so much to learn&lt;/strong&gt; and often you &lt;strong&gt;don't even know where to start&lt;/strong&gt;. It's also hard to know which IT field you will be interested in and will eventually choose, before actually trying things out and seeing for yourself what you enjoy doing the most. You may even have &lt;strong&gt;self-doubt&lt;/strong&gt; thinking that it's too late to switch careers or there's so much to learn you can never catch up with the people, who have been in tech since early age.&lt;/p&gt;

&lt;p&gt;And I understand all these concerns, the self-doubt, the time pressure, insecure not knowing where and how to start etc. And that's why with this blog article, I want to kind of &lt;strong&gt;show you various career path in tech and give you some general guidance for how to get started&lt;/strong&gt;. 😇&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qbzwuickfzn4llimagk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qbzwuickfzn4llimagk.png" alt="Different IT Career Paths"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And for every IT field, we will see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether it's an entry-level profession&lt;/li&gt;
&lt;li&gt;what they actually do and what are some of their job responsibilities&lt;/li&gt;
&lt;li&gt;as well as what skills you need to have to get into that specific field&lt;/li&gt;
&lt;li&gt;and some of the technologies you need to learn for it&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  My Background 👩🏻‍💻
&lt;/h1&gt;

&lt;p&gt;First of all, I want to start by saying that &lt;strong&gt;it's never too late to get into IT&lt;/strong&gt;. 👏&lt;/p&gt;

&lt;p&gt;I myself transitioned from my marketing and business studies and had nothing to do with IT before, not even an IT subject at school or college 👀 and &lt;strong&gt;switching my career to tech was probably one of the best decisions of my life&lt;/strong&gt;! 🤠 This field is becoming more popular every year and it comes with so &lt;strong&gt;many benefits and opportunities&lt;/strong&gt; for people working in this field. Plus it's an &lt;strong&gt;interesting, exciting and fulfilling&lt;/strong&gt; field to be in no matter which specialization you choose.&lt;/p&gt;

&lt;p&gt;So let's see what are actually some of the most popular IT professions today, that will be even more demanded in the future, so what options you have for IT jobs that you may want to specialize in.&lt;/p&gt;

&lt;h1&gt;
  
  
  Most popular IT career paths 💎
&lt;/h1&gt;

&lt;p&gt;Of course there are many different statistics and rankings out there and many names for the similar jobs, but there are several professions that definitely stand out, which have become the most popular. The popular and demanded jobs in IT are usually paid very high 💸, so many of those rankings are also based on salary and career growth statistics.&lt;/p&gt;

&lt;p&gt;Based on several rankings, &lt;strong&gt;the most demanded and popular IT fields&lt;/strong&gt; that have been growing in popularity even more over the years are 👏:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software Engineering&lt;/li&gt;
&lt;li&gt;DevOps Engineering&lt;/li&gt;
&lt;li&gt;Cloud Engineering&lt;/li&gt;
&lt;li&gt;Cybersecurity or Security Engineering&lt;/li&gt;
&lt;li&gt;Data engineering or generally data related professions&lt;/li&gt;
&lt;li&gt;and Machine Learning Engineering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbm5nnfi9s4nrzgk7u0pe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbm5nnfi9s4nrzgk7u0pe.png" alt="Most demanded and popular IT fields"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And these top fields will actually be even more demanded in the future. So there is a &lt;strong&gt;lot of growth and future potential in each one of those fields&lt;/strong&gt;. 👍&lt;/p&gt;

&lt;p&gt;So most of you will probably want to get into one of those fields, but &lt;strong&gt;many of you may not know right now what you want to choose exactly&lt;/strong&gt;, maybe because they all sound equally exciting for you or equally overwhelming so you have no idea which one will be a better choice or which one will be the most interesting one for you, which is absolutely okay, because that's exactly what I want to help you with in this overview. 😊 ✅ So let's get into it!&lt;/p&gt;

&lt;h1&gt;
  
  
  General Learning Approach 🧠
&lt;/h1&gt;

&lt;p&gt;First of all, it's absolutely fine to try out multiple things to see what you like the most. In fact, it's a really good idea, because you have so many opportunities, so many options, so you want to take advantage of that and find the one that fits you the best.&lt;/p&gt;

&lt;p&gt;However, you need to &lt;strong&gt;approach this with some structure&lt;/strong&gt;, just randomly learning things here and there in the hope to make sense of many things at once or even worse trying to learn multiple of those fields at once is not a good strategy. It will make your learning journey difficult and it will surely make it longer as well and you won't properly find out what field you like the most.&lt;/p&gt;

&lt;p&gt;So let me help you structure your learning process by &lt;strong&gt;laying out the map that shows you all these professions individually and the learning path to those as well as any overlaps and common knowledge between them&lt;/strong&gt;. ✅&lt;/p&gt;

&lt;h1&gt;
  
  
  1 - Become a Software Engineer 👨🏼‍💻
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2w5w7gsxfwxiuz079y9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2w5w7gsxfwxiuz079y9.png" alt="Become a Software Engineer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's start with the broadest and the most widely least spread IT field, which is "software engineering". I believe it's also the &lt;strong&gt;easiest entry point into IT&lt;/strong&gt; and where most people actually start their IT careers and that's how I started as well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A software developer or software engineer is someone, who develops any kind of software applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  What is software? 🤔
&lt;/h4&gt;

&lt;p&gt;This can be a web application a mobile or a desktop application. Whenever you think of any software, whether it's on your computer the mobile phone in your smart TV. So for example, Amazon, Netflix and all these applications you use on your smart TV. These are all software. Or think about smart cars, again these are applications for navigation and some other controls of the car. You have smart homes, software in production machines and robots.&lt;/p&gt;

&lt;p&gt;So these are all software developed by software engineers. &lt;/p&gt;

&lt;h3&gt;
  
  
  Different subfields of software engineering
&lt;/h3&gt;

&lt;p&gt;But software engineer is a very broad term itself and covers many subfields and you can actually specialize in any of those subfields, since they are each their own separate professions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Frontend, Backend or Full-Stack
&lt;/h4&gt;

&lt;p&gt;For example, you can become a "frontend developer", which is basically developing the front of the application, the part that the users see in their browser or their phone screen or TV screen.&lt;br&gt;
You can become a "backend developer" and develop the backend part of the application, the part that connects to the database, saves and updates user data, processes data and so on.&lt;br&gt;
Or you can become a "full stack developer". They're basically people, who can develop both frontend and backend parts of the application.&lt;/p&gt;

&lt;h4&gt;
  
  
  Web, Mobile or IoT
&lt;/h4&gt;

&lt;p&gt;Then you also have categorizations like "web developer", which is basically developing web applications that you see in a computer or laptop browser. You have mobile app developers, which are developing applications for Android or iOS. You may be an "IoT developer", which is "Internet of Things", like software in your car for your TV the smart home, the smart lock systems for hotels etc.&lt;/p&gt;

&lt;h4&gt;
  
  
  Specialize on programming language
&lt;/h4&gt;

&lt;p&gt;And you can even specialize in a specific technology or programming language or even a framework. So you may choose to become a "Java developer" a "JavaScript developer" or maybe a "React developer". You can specialize in Android development for mobile applications. You can become a "Python developer".&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0eyrg7fd765xs5bvhe3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0eyrg7fd765xs5bvhe3.png" alt="Specialize based on programming language"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So these are all separate career paths, because each of these is already such a big area and field on its own.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generalist or Specialist
&lt;/h3&gt;

&lt;p&gt;So you can go deeper into a chosen technology or area or you can go broader and become a full stack engineer as I mentioned. And both have their values. You need experts in one specific area, but you also need people, who have a good overview and knowledge of many things on a higher level and that's really a personal preference, whether you are a generalist or a specialist, so you can decide what you like more. I am personally a generalist. I like knowing many things and how they fit together and integrate together and knowing things on a high level, rather than deepening my knowledge in one specific area, but as I said that's a really personal preference.&lt;/p&gt;




&lt;h2&gt;
  
  
  Roadmap to become a Software Engineer ☡
&lt;/h2&gt;

&lt;p&gt;However, no matter which of these professions or subfields you choose, you have a &lt;strong&gt;pretty similar entry point for all of those&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1 - Learn basics of Software Development and Programming
&lt;/h3&gt;

&lt;p&gt;You have to first understand basics of software development and programming. For example you take any programming language and &lt;strong&gt;learn the basics of programming with that language&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Things like variables, functions, data types and so on, because these concepts are actually the same for every programming language, no matter whether it's mobile, web, frontend or backend development.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I usually suggest JavaScript as the entry point language, if you want to get into any kind of software development, because it can be used in frontend and backend and even in mobile application development, plus it's easy to learn compared to Java for example.&lt;/p&gt;

&lt;h3&gt;
  
  
  2 - Develop simple example projects
&lt;/h3&gt;

&lt;p&gt;Once you get the basics right, the second step will be to actually &lt;strong&gt;start developing simple example projects to really understand how software is written from scratch&lt;/strong&gt;. 🚀&lt;/p&gt;

&lt;p&gt;The complete setup of frontend and backend, whether it's a web or mobile application, because that's how you really learn the concepts behind software development. I'm a big fan of learning anything with an example project, rather than by book or watching some tutorials passively.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This way you're not learning just a specific language and what features they have, you are learning how to develop an actual application that is usable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So depending on what you want to specialize in, if it's web development you can learn HTML and CSS on top of JavaScript and start creating a little bit more complex web applications with a database connection.&lt;/p&gt;

&lt;p&gt;If you want to go into mobile development you can choose one of the languages for mobile development and practice using that language.&lt;/p&gt;




&lt;h3&gt;
  
  
  How to choose a programming language?
&lt;/h3&gt;

&lt;p&gt;Every language has its advantages and disadvantages. Some of them are cooler, some of them are more widely used, but the important thing is that you learn the concepts first, because you can always learn the syntax or you can even Google the syntax, if you need to.&lt;/p&gt;

&lt;p&gt;If you're not sure, which language you want to choose, always go for the most popular one, because it increases your chances to get a job with that language and it has a large community behind it and it has to be popular for a reason.&lt;/p&gt;

&lt;h3&gt;
  
  
  Concepts over Features and Syntax 💡
&lt;/h3&gt;

&lt;p&gt;So as I said, instead of learning features and syntax of a language just one by one, take an example project either from web or think of your own project and develop that. You will learn way more in that process of doing it, but it has to be simple so you don't get stuck and overwhelmed in the process. &lt;/p&gt;

&lt;h3&gt;
  
  
  No knowledge is wasted, you can always switch
&lt;/h3&gt;

&lt;p&gt;And here's the thing, if you are thinking: "what if I make the wrong choice and start with the wrong thing and find out that I don't like it at all?"&lt;/p&gt;

&lt;p&gt;Well, if you start with backend web development for example and after months of learning that, you realize it's not really for you and you like mobile app development better, that knowledge is not wasted. You aren't starting from scratch. That knowledge that you gained will help you switch to another area, plus you had a chance to find out what you like and what you didn't like. In fact, that isn't wasted even if you decide you want to go into a completely different area like data engineering or cloud engineering or DevOps. &lt;/p&gt;

&lt;p&gt;And I want to say that, the fields in software engineering are usually the &lt;strong&gt;entry-level tech professions&lt;/strong&gt;. So it's relatively easy to get started in IT this way and later you can always transition to another tech area.&lt;/p&gt;

&lt;p&gt;And as I said your knowledge will never be wasted, because lots of concepts are related and interconnected in different areas of IT:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbojk7q2o809ywqftqgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbojk7q2o809ywqftqgg.png" alt="IT fields are interconnected"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your programming skills will be useful even if you go to machine learning or DevOps engineering.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tips on how to learn 🧑🏼‍🏫
&lt;/h3&gt;

&lt;p&gt;Important thing here is not to do everything at once, as long as you &lt;strong&gt;build your knowledge in tech step by step&lt;/strong&gt;, like one area at a time, one programming language and technology at a time and &lt;strong&gt;stick to that for at least six months&lt;/strong&gt; or so and then move on to the next thing you should be fine. Just don't rush from one thing to another, trying to absorb everything at once, which I know many of you are probably thinking to do. &lt;/p&gt;

&lt;p&gt;And if you do want to start with this path, I actually have a &lt;a href="https://techworld-with-nana.com/it-beginners-course" rel="noopener noreferrer"&gt;mini bootcamp&lt;/a&gt; for &lt;strong&gt;learning everything you need to know for web development specifically, full stack development with frontend, backend, database connection plus even more the complete software development and release life cycle&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foy2llw41oaa7c7t6kpzz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foy2llw41oaa7c7t6kpzz.png" alt="IT Beginners Course Preview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And my goal was exactly to make people's entry in IT easier and remove that fear of tackling this scary thing of getting into tech, by making things simpler and easier. Plus with actual real projects to make it fun and engaging.&lt;/p&gt;

&lt;p&gt;Just a shameless plug here for our IT beginners course. 😊 So if you want to know more about that you can see the video, where I explain exactly what you learn there in detail: &lt;a href="https://youtu.be/Iyfntbj2jWU" rel="noopener noreferrer"&gt;Complete Overview of the course&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  2 - Become a DevOps Engineer ♾
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0c9ky8cjnykwe0y1hw3e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0c9ky8cjnykwe0y1hw3e.png" alt="Become a DevOps Engineer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now as I said, you can use knowledge in software development in other IT fields and software development is actually the best stepping stone to transition to our next most popular IT role called "DevOps engineering".&lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;DevOps field is rising in popularity year by year&lt;/strong&gt;, it is the field that I personally found extremely exciting and some years ago from being a senior software engineer transitioned to DevOps. And if you know my videos, you also know that &lt;a href="https://www.youtube.com/channel/UCdngmbVKX1Tgre699-XLlUA" rel="noopener noreferrer"&gt;my whole channel&lt;/a&gt;, courses and educational programs are all about DevOps 😍&lt;/p&gt;

&lt;p&gt;But very important to note here, that DevOps is &lt;strong&gt;not really an entry-level IT profession&lt;/strong&gt;. It is a bit more advanced, which means you need to already have some engineering know-how in order to transition into DevOps, but what is DevOps anyway?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DevOps is all about &lt;strong&gt;automating&lt;/strong&gt; the processes in the software development and release life cycle.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9r7shahz7mnkc1g3on92.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9r7shahz7mnkc1g3on92.png" alt="DevOps"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which means logically enough that you &lt;strong&gt;need to understand those processes and the whole life cycle first&lt;/strong&gt; so you know what you're automating.&lt;/p&gt;

&lt;p&gt;So DevOps is a more complex and difficult field, which I do not recommend to start in, if you have zero IT background 🤷🏻‍♂️, but if you build up your knowledge step by step and you find it as interesting as I do, it can be an extremely rewarding profession.&lt;/p&gt;

&lt;p&gt;It is a highly demanded and also highly paid IT profession, because there is actually a big shortage of these professionals, probably way more than for software engineers.&lt;/p&gt;

&lt;p&gt;If you want to know more about DevOps and &lt;strong&gt;what type of person it is for&lt;/strong&gt; and &lt;strong&gt;what skills you need to become a DevOps engineer&lt;/strong&gt;, I actually recommend you watch my videos from my &lt;a href="https://www.youtube.com/playlist?list=PLy7NrYWoggjzZTuj24TwOldi1NJY4UgWa" rel="noopener noreferrer"&gt;"DevOps as a career" playlist&lt;/a&gt;, where I explain all of that in detail. So after watching them you will know exactly "nope DevOps is definitely not for me" 👎🏼 or "yes that's exactly what I want to do"! 👍 &lt;/p&gt;

&lt;h3&gt;
  
  
  Transitioning to DevOps
&lt;/h3&gt;

&lt;p&gt;Before we move on to the next profession though, I want to mention that &lt;strong&gt;lots of people transition to DevOps not only from software development background but also from systems administration or test automation or network engineering role and various other roles&lt;/strong&gt; actually. I would say IT professions that are becoming less demanded or less interesting are moving towards DevOps engineering, because it is the new hot thing. 🔥&lt;/p&gt;

&lt;p&gt;And if you don't already know about our famous DevOps bootcamp. Two years ago we actually created the &lt;a href="https://www.techworld-with-nana.com/devops-bootcamp" rel="noopener noreferrer"&gt;complete educational program&lt;/a&gt; to teach people all the necessary tools and concepts to become a DevOps engineer:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7qba6hmqbe8v2zn305e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7qba6hmqbe8v2zn305e.png" alt="DevOps Bootcamp"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have educated more than 2,500 students with this bootcamp so far, but as I said the DevOps bootcamp is for people with some level of IT experience or IT pre-knowledge. And that's why we created the IT Beginners mini bootcamp to help people with the zero background learn the fundamentals first they need to, to even get started into DevOps. So I created this course actually as a prerequisite for the DevOps Bootcamp. So if after watching the "DevOps as a career" videos you decide you want to get into DevOps, then &lt;strong&gt;these two educational programs will be the perfectly laid out path for you to get there in the most efficient easy and fast way&lt;/strong&gt;. 🙌&lt;/p&gt;

&lt;p&gt;But if you decided DevOps sounds like it's definitely not for you, then you can consider one of the IT professions I'm going to talk about next.&lt;/p&gt;

&lt;h1&gt;
  
  
  3 - Become a Cloud Engineer ☁️
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmryqpneiyjv319mgf2wf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmryqpneiyjv319mgf2wf.png" alt="Become a Cloud Engineer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next IT field, which is actually pretty related to DevOps is cloud engineering.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Very simply explained, a cloud engineer basically &lt;strong&gt;builds and maintains infrastructure in the cloud&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As many companies move from managing their own infrastructure to using cloud platforms, Cloud Engineers are becoming increasingly demanded.&lt;/p&gt;

&lt;p&gt;Cloud engineering is also an entry-level profession. If you have some basic systems administration experience, then this will be probably the easiest IT field to transition into, but if you're a complete IT beginner, you can actually start your IT journey directly here as well.&lt;/p&gt;

&lt;p&gt;So how do you start in cloud engineering?&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap to become a Cloud Engineer ☡
&lt;/h2&gt;

&lt;p&gt;Well in cloud engineering, there are actually two most popular cloud platforms out there, which are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon's AWS&lt;/li&gt;
&lt;li&gt;and Microsoft's Azure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both of them have various certifications, which you can take to help you get a job as a cloud engineer for that specific cloud platform. So if you want to get started in this, &lt;strong&gt;choose one of those cloud platforms and start learning for their basic entry-level certifications&lt;/strong&gt; and basically specialize in that cloud platform.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcatds0jdomm9r0o82ib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcatds0jdomm9r0o82ib.png" alt="Roadmap to become a Cloud Engineer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I personally suggest choosing AWS, because it is currently the biggest and most used cloud platform. A good way to start here will be using AWS certification programs. AWS has multiple certifications from basic cloud practitioner to more advanced certifications. So obviously start with the basic AWS cloud practitioner certificate and start learning and preparing for that. This will give you knowledge in all important AWS services, but more importantly in the main concepts of cloud engineering in general.&lt;/p&gt;

&lt;p&gt;And remember I said, when you learn one programming language, learning another programming language actually becomes way easier, because you already learned many of the common underlying concepts. The same way if you at some point decide to go for Azure after learning AWS or you find a dream job at a dream company, who uses Google Cloud platform instead, you can learn them way easier, because you already have learned one Cloud platform and the basics of cloud with that platform. In fact learning two cloud platforms will be a major asset, because you now have a good comparison between them.&lt;/p&gt;

&lt;p&gt;So the best starting point will be getting the cloud practitioner certificate from AWS to get you the first job in this field. &lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud vs DevOps
&lt;/h2&gt;

&lt;p&gt;Now I want to mention here that DevOps and Cloud often fall into the same category and often they get mixed up. However even though they have some overlaps, they are actually &lt;strong&gt;two very different fields&lt;/strong&gt; and I plan to create a video for "DevOps engineer versus Cloud engineer" describing in detail what are the common tasks and responsibilities, those overlaps as well as what actually differentiates them.&lt;br&gt;
So you understand exactly the difference between these two fields. ✅ So be sure to subscribe to my Youtube channel and activate the notification bell, if you don't want to miss that. 😇&lt;/p&gt;

&lt;h1&gt;
  
  
  4 - Become an IT Security Engineer - Cybersecurity 🔐
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vaoq9lvbjy6tm8479x9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vaoq9lvbjy6tm8479x9.png" alt="Become an IT Security Engineer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now cloud, DevOps and software engineering fields have one thing in common, they &lt;strong&gt;all need security&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you build a cloud infrastructure you need to secure it, when you program an application you need to make sure it doesn't have any security loopholes that hackers may use to hack into your systems, when you build DevOps processes which actually affects your application, your cloud infrastructure and many different systems, again you have even more security responsibilities to make sure you don't expose passwords and secret keys to your systems etc.&lt;/p&gt;

&lt;p&gt;This means software developers, cloud engineers and DevOps engineers they all have to know about security.&lt;/p&gt;

&lt;p&gt;But security is an extremely large field and it affects every piece and step of the software development and release life cycle and you have security in other IT fields as well. So we actually have a &lt;strong&gt;separate dedicated profession for IT security engineers, who specialize in all things security&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tasks and Responsibilities of a Security Engineer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;As a security professional you know security tools and technologies that help you scan and identify security issues at different levels as well as help fix them and also validate that other engineers have secured their systems properly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are even external security companies who provide services to other companies to secure their systems. For example they try to hack into their systems and see where the systems of the company are vulnerable, because if they can hack into them, actual hackers can also do that.&lt;/p&gt;

&lt;p&gt;So as a security engineer you identify those vulnerable points and advise the company how to secure them. Also &lt;strong&gt;security&lt;/strong&gt; as I said &lt;strong&gt;is on multiple levels, every system, every software, that companies using or developing needs to be secured&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the infrastructure&lt;/li&gt;
&lt;li&gt;the application platform&lt;/li&gt;
&lt;li&gt;the frontend&lt;/li&gt;
&lt;li&gt;the backend&lt;/li&gt;
&lt;li&gt;database&lt;/li&gt;
&lt;li&gt;the application itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24mk8iymc25eh8fopjws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24mk8iymc25eh8fopjws.png" alt="Security on different levels"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So security engineers usually have a &lt;strong&gt;wider cross knowledge of security on all those levels&lt;/strong&gt; and can plan a general strategy of securing the complete setup using various technologies for automating security checks and security testing and so on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Huge Demand 👀
&lt;/h2&gt;

&lt;p&gt;And it goes without saying that security engineers have &lt;strong&gt;extreme value to the companies&lt;/strong&gt; 💎, because security breach is the worst scenario for any big known company. Cyber attacks are becoming more and more sophisticated and for applications, who have millions or hundreds of millions of users and the user data obviously the impact of the attack is huge, when data of so many users is compromised or even think about your online banking application. Obviously you don't want them to have any security issues in their system, right? &lt;br&gt;
For this reason there is usually a &lt;strong&gt;tremendous demand for security engineers in many industries&lt;/strong&gt; and it's definitely going to become even more important in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap to become an IT Security Engineer ☡
&lt;/h2&gt;

&lt;p&gt;So if you want to go on this challenging but very exciting path you need to &lt;strong&gt;first understand the concepts of what you are securing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So this is also not really an entry-level IT position, you definitely need some pre-knowledge in one of the IT fields like network engineering, cloud engineering, software development etc. And on top of that you'll have to learn many security concepts and tools in order to develop this general security strategies. &lt;/p&gt;

&lt;h1&gt;
  
  
  5 - Become a Data Analyst, Data Engineer, Data Scientist - Big Data 📊
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukl3vthcu6w6dg3dxfni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukl3vthcu6w6dg3dxfni.png" alt="Become a data related engineer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the hottest IT jobs, which are more in demand than ever are &lt;strong&gt;data related jobs&lt;/strong&gt;. Now why is that?&lt;/p&gt;

&lt;h3&gt;
  
  
  Human generated data 👥
&lt;/h3&gt;

&lt;p&gt;When we have software that millions and billions of people use daily, those users produce loads of data, right? Think about social media, the posts and media we create and upload every minute or every second. Think about search data generated when millions of people search daily, GPS data from Google Maps or other applications that track your location, when you buy groceries at the supermarket, when you buy stuff online. So basically the user behavior data.&lt;/p&gt;

&lt;p&gt;All of this is data that we humans produce daily through our &lt;strong&gt;digital footprint&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Device generated data ⚙️
&lt;/h3&gt;

&lt;p&gt;But apart from this human generated data there is also massive amounts of device generated data, such as cars, IoT systems through sensors, production machines, robots, logistics data, shipment tracking.&lt;/p&gt;

&lt;p&gt;So even more data than humans generate is coming from these sources.&lt;/p&gt;

&lt;p&gt;With all this, the data has grown dramatically in the last years.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In fact worlds 90% of the data was actually generated in the last two years.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As some sources mentioned, we generate so much data, every single day that if it were written down in form of books and we could pile those books on top of each other, we would have enough to build a bridge to the moon and back.&lt;/p&gt;

&lt;p&gt;And because of the sheer volume of this data, we also call it "Big Data". So that's where the term comes from.&lt;/p&gt;

&lt;h3&gt;
  
  
  Raw vs Processed Data
&lt;/h3&gt;

&lt;p&gt;Data has become a &lt;strong&gt;precious asset of any organization&lt;/strong&gt; 💎, because it helps them understand things better. 💡 Like make predictions, political campaigns are driven by data, like you have polls and online searches etc. Many companies use data to optimize their processes, to save time and money in those processes.&lt;/p&gt;

&lt;p&gt;However, just &lt;strong&gt;raw data has no value&lt;/strong&gt; to the company. Imagine these are massive amounts of data in raw form, generated in different formats and from different sources. It's really difficult for humans to make sense of data in this form. It only has value once the data is &lt;strong&gt;processed, cleaned, analyzed and visualized&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So it's easy to consume for us humans and big data related professionals are exactly the ones, who use tools to turn these massive amounts of data into usable and extremely valuable information for companies.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fblb1esubndliox8a6my2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fblb1esubndliox8a6my2.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And companies can then use these visualized data to make decisions, make future predictions, cost optimizations and so on.&lt;/p&gt;

&lt;p&gt;And there are various data related professions with different tasks and responsibilities such as&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data analysts&lt;/li&gt;
&lt;li&gt;data scientists&lt;/li&gt;
&lt;li&gt;and data engineer
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3932fe3nq1ykvyvj7uh.png" alt="Data Analyst, Data Scientist, Data Engineer"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So let's see comparisons between them. &lt;/p&gt;

&lt;h2&gt;
  
  
  Data Analyst
&lt;/h2&gt;

&lt;p&gt;Data analyst is basically the &lt;strong&gt;entry-level profession&lt;/strong&gt;, if you want to get into this field and is the &lt;strong&gt;easiest to start with&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As the name suggests, data analysts analyze and interpret data to extract meaningful information from it. So they need to basically make sense of the data, like identify any patterns.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Main Skills
&lt;/h3&gt;

&lt;p&gt;The main skills they need to have are knowledge of math and statistics and various tools that help them in data analytics and data visualization.&lt;/p&gt;

&lt;p&gt;But in addition to the technical skills, data analysts must actually have a &lt;strong&gt;good business and product understanding&lt;/strong&gt;. So they analyze the data with the goal to make good decisions for the business and product development and then communicate those decisions to people, who actually need them like, product owners, business decision makers in the company.&lt;/p&gt;

&lt;p&gt;However, data analysts work with already processed and prepared data. So the raw data needs to be collected from multiple sources with different formats and be processed first to be usable for the data analysts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Engineers
&lt;/h2&gt;

&lt;p&gt;And this is something that data engineers do. Data engineers need knowledge of databases and programming to do their job and data engineers actually build something called &lt;strong&gt;"data pipelines" to collect, store and process the data&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9fkceg9ottwnyj3p5xte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9fkceg9ottwnyj3p5xte.png" alt="Data Pipeline"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So you can start into data engineering by learning:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A programming language like Python and its data processing frameworks and libraries&lt;/li&gt;
&lt;li&gt;Learning databases and query language like SQL for example&lt;/li&gt;
&lt;li&gt;Big data specific frameworks like Apache Hadoop, which is a popular framework that allows you to store and work with massive amounts of data.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Data Scientist
&lt;/h2&gt;

&lt;p&gt;And the third one I mentioned is a data scientist, which is usually the &lt;strong&gt;highest paid profession among these three&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Now interesting to mention that companies often use data analysts and data scientists job titles interchangeably. Now they are two different professions, but there are definitely some overlaps between those two. And one of the overlaps is that you need to &lt;strong&gt;have advanced math and statistics knowledge&lt;/strong&gt; here as well.&lt;/p&gt;

&lt;p&gt;So generally contrary to the popular belief, you don't need any math or statistics knowledge for software development and definitely not for DevOps or cloud engineering, but in data science or data analytics you will be working with math and statistics a lot. 🧮&lt;/p&gt;

&lt;p&gt;This means if you want to get started in one of those fields, the first thing you need to learn is &lt;strong&gt;statistics and the programming languages for statistics&lt;/strong&gt; like R or Python. &lt;/p&gt;

&lt;p&gt;However, in addition to statistics, data scientists usually require more advanced technical skills than data analysts and that's where the main difference between those two professions lie:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfhe77t3c6s8ia7v0eko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfhe77t3c6s8ia7v0eko.png" alt="Data Analyst vs Data Scientist"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So data scientists are usually more experienced engineers, who can create advanced machine learning models for example and algorithms to make future predictions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  6 - Become a Machine Learning Engineer 🤖
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqw2n9vdmalcmxjv099u7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqw2n9vdmalcmxjv099u7.png" alt="Become a ML Engineer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which leads us to the next and final hottest IT profession called a Machine Learning Engineer or ML Engineer, which actually is yet another big data related profession.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Science vs Machine Learning field
&lt;/h2&gt;

&lt;p&gt;We said that data analysts and data scientists use data to analyze trends and identify patterns and make some decisions and predictions based on the data. So data can be used by humans to make data-driven decisions, but &lt;strong&gt;data can also be used by machines by programs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So that clean processed data that data engineers prepare can be fed into machines, so they can learn from them and they can use them for different tasks. And that's where machine learning actually comes in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Machine Learning? 🤔
&lt;/h2&gt;

&lt;p&gt;Now what is machine learning exactly and why do machines need data, what do they do with it?&lt;/p&gt;

&lt;p&gt;In software development we write programs and instruct them to do something. In machine learning, machines can &lt;strong&gt;perform a task without being explicitly programmed to do so&lt;/strong&gt;. 🙅🏻‍♀️ How do they do that? They learn how to perform that task from large amounts of data using algorithms, which are also called machine learning algorithms:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6g5uj56licoobjmeu88.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6g5uj56licoobjmeu88.png" alt="How Machine Learning works"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So machine learning is about computers being able to think and act without being explicitly told or programmed to do so.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And there are two main parts of this process:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgp8nfbpuetgxvr62qpd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgp8nfbpuetgxvr62qpd.png" alt="2 parts of Machine Learning"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First one is writing the machine learning algorithms so that machines can use them to learn&lt;/li&gt;
&lt;li&gt;And the second part is feeding large sets of processed data into those algorithms, so basically using the data to train the model.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Skills you need to have
&lt;/h2&gt;

&lt;p&gt;Again there are some overlaps between data scientists and machine learning engineers that you will encounter, they &lt;strong&gt;both need strong math and statistics skills to work with data&lt;/strong&gt;, however, while data scientists focus on making sense of the data, visualizing and presenting it better, machine learning &lt;strong&gt;focuses on using the data for machines to learn to carry out certain tasks&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nfrv3ebqyu3b1eiqs06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nfrv3ebqyu3b1eiqs06.png" alt="Machine Learning vs Data Science"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So entry into machine learning engineering is actually pretty similar to data science:&lt;br&gt;
You need to start by learning a programming language like Python, which has powerful machine learning frameworks and statistics, which is a very important part of machine learning engineering.&lt;/p&gt;

&lt;h1&gt;
  
  
  Python - General Purpose Language 🐍
&lt;/h1&gt;

&lt;p&gt;Now you probably already noticed that in &lt;strong&gt;all those fields I actually mentioned Python programming language&lt;/strong&gt; and that's because Python is a general purpose language.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can use Python in every single one of those areas, however that does not mean that you need the same Python knowledge in each field. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Using Python for web development is completely different from using Python for DevOps automation or machine learning and that's an important difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python Core vs Python libraries for specific field
&lt;/h2&gt;

&lt;p&gt;So first you learn the &lt;strong&gt;Python core with its syntax and general programming concepts&lt;/strong&gt; and then you learn the &lt;strong&gt;specific libraries and frameworks for each IT field on top of that Python core&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwcnrhgjosxyh0ok6mt6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwcnrhgjosxyh0ok6mt6w.png" alt="Python Core and Python Libraries"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So you have completely different frameworks and libraries for web development and machine learning and DevOps automation, which you need to learn for that specific field. So you basically learn different parts of Python for each field and that's an important thing to differentiate.&lt;/p&gt;

&lt;p&gt;Python language just happens to have popular frameworks for all those fields and their use cases, but of course the Python core is the same everywhere.&lt;/p&gt;

&lt;p&gt;If you want to learn Python core, like syntax and programming concepts of Python, you can definitely check &lt;a href="https://youtu.be/t8pPdKYpowI" rel="noopener noreferrer"&gt;our free course on Python&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So we've covered a bunch of career options in IT and I tried to categorize them so you have a better overview and comparison between them. ✅ So hopefully something stood out for you where you think: "well that field sounds pretty interesting to me so I'd like to get into that field".&lt;/p&gt;

&lt;h1&gt;
  
  
  Where and how to learn - CS Degree, Courses, Bootcamps, Self-Learning? 📚
&lt;/h1&gt;

&lt;p&gt;Now of course when you know approximately which direction you want to go and what you want to start learning, the next question becomes: "Where and how do you learn this?" Do you get a college degree in computer science? Do you take an online course? Do you join a data science bootcamp or a coding bootcamp or our DevOps bootcamp? 🤷🏻‍♂️&lt;/p&gt;

&lt;p&gt;Well, I personally started my informatics studies at a technical university, but I was using mostly online resources for my studies like YouTube videos and some coding websites. And as soon as I got an internship as a software developer in my second semester, I actually &lt;strong&gt;quit my studies and used my work to learn by doing&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;At work I was actually learning way more practical stuff that I actually needed for my job than at the university&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I usually recommend learn the relevant skills you need to get hired as fast as possible. 🚀&lt;/p&gt;

&lt;p&gt;But learning at work wasn't always easy, so I &lt;strong&gt;continued learning new things from YouTube videos and blog articles and online courses&lt;/strong&gt;. I was often all over the place trying to learn anything and everything that I stumbled upon. I didn't really have a roadmap that I could follow, but it was still useful in some way.&lt;/p&gt;

&lt;p&gt;So I still think that online resources are one of the best ways to learn, especially in IT field, but as I said having some kind of roadmap and structure definitely makes the learning journey easier, because you &lt;strong&gt;don't just learn things randomly, but you learn things in a certain order without being distracted by massive amounts of information&lt;/strong&gt;. 💡&lt;/p&gt;

&lt;h2&gt;
  
  
  Find a clear roadmap
&lt;/h2&gt;

&lt;p&gt;So whatever field you want to choose: Go find a clear roadmap for that profession. There are various articles and videos about those roadmaps and then just try to follow that roadmap.&lt;/p&gt;

&lt;p&gt;And of course if you decide for DevOps, as I mentioned we have a complete roadmap for that, even if you're starting off without any IT background:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95p47immnca60ih890p3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95p47immnca60ih890p3.png" alt="From IT Beginner to DevOps Engineer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So you don't need to do the research, put together a learning course and find good resources. We have done that whole work for you. You just follow along and learn by doing and if you know my videos I create the content with the goal of giving practical actual usable knowledge with easy explanations. I love helping people learn easily without getting frustrated and being overwhelmed. 💙&lt;/p&gt;

&lt;h2&gt;
  
  
  Start your journey into IT 👩🏻‍💻
&lt;/h2&gt;

&lt;p&gt;So generally as you see, you have various options, choose an entry-level career based on what you want to do later and you can build on top of that.&lt;/p&gt;

&lt;p&gt;And again &lt;strong&gt;no knowledge is wasted in IT&lt;/strong&gt;, everything is still interconnected, so if you start in software development and later want to do DevOps or machine learning or cloud engineering you can still benefit from that knowledge and won't be starting from scratch in that field.&lt;/p&gt;

&lt;p&gt;So if you don't know yet where you want to end up you can &lt;strong&gt;start with any one of those, maybe the easiest one and you can always progress in any other direction later&lt;/strong&gt;. 👍&lt;/p&gt;

&lt;p&gt;I hope I was able to help you make these important decision for your future, you definitely made the right decision by choosing IT in general. With that, all the best in your future career! 😊&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana" rel="noopener noreferrer"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Njuchi_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/c/techworldwithnana" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>career</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Is DevOps right for you? 🤔 13 Points to consider</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Mon, 21 Nov 2022 15:44:40 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/is-devops-right-for-you-13-points-to-consider-30j</link>
      <guid>https://dev.to/techworld_with_nana/is-devops-right-for-you-13-points-to-consider-30j</guid>
      <description>&lt;p&gt;You all know that &lt;strong&gt;DevOps is already very popular and highly demanded&lt;/strong&gt;. You see organizations adopting it worldwide and it seems like a great career choice with lots of job opportunities, high salary and generally a very rewarding work 🔝, but maybe DevOps is not for everyone?&lt;/p&gt;

&lt;p&gt;It &lt;strong&gt;takes a specific type of person&lt;/strong&gt; to be interested in DevOps, so the question is: &lt;strong&gt;"Is DevOps profession right for you?"&lt;/strong&gt; 🤔&lt;/p&gt;

&lt;p&gt;And in order to answer this question, I will explain&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what are the qualities and characteristics you should have if you want to get into DevOps?&lt;/li&gt;
&lt;li&gt;what kind of thinking and approach is required in DevOps?&lt;/li&gt;
&lt;li&gt;which soft skills as well as technical skills you need to have?&lt;/li&gt;
&lt;li&gt;and finally what are some challenges of being a DevOps engineer?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And if at the end of the video you do find out and decide that DevOps is indeed for you, I will also show what next steps you can take to get into DevOps. ✅&lt;/p&gt;

&lt;p&gt;So let's get into it! 🙌&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the written version of my &lt;a href="https://youtu.be/Ms_jTcERvMY" rel="noopener noreferrer"&gt;new youtube video&lt;/a&gt;&lt;/em&gt; ✍️ &lt;/p&gt;




&lt;h1&gt;
  
  
  1) Generalist instead of Specialist
&lt;/h1&gt;

&lt;p&gt;First of all, you need to be a generalist rather than a specialist. What does that mean?&lt;/p&gt;

&lt;p&gt;In DevOps you don't just learn one tool or one concept and then specialize in it. Instead you need to &lt;strong&gt;master combining many tools&lt;/strong&gt;. Some people love focusing on one area of expertise and deepening their knowledge in it, like if you learn JavaScript you can master it on an advanced level and become an expert JavaScript developer, but in DevOps you can't just learn Docker or Terraform and become an expert Docker or Terraform engineer, you need to have a tool set of various tools you combine in order to build DevOps processes:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmr1z7vj06kfid810m8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmr1z7vj06kfid810m8z.png" alt="Generalist instead of Specialist"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Even as a junior DevOps engineer just knowing two or three tools won't help you here, so you should like learning many different things and building a wide skill set.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  2) Analytical and Strategic Thinking
&lt;/h1&gt;

&lt;p&gt;Because you need many tools you also need to develop a &lt;strong&gt;skill to compare, quickly assess and decide on which tools and concepts you will use&lt;/strong&gt; in your projects. Like&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"do we need GitOps or is it just over engineering for our specific use case and project"&lt;/li&gt;
&lt;li&gt;"This tool is great, but is it ready and mature enough to be used in this project?"&lt;/li&gt;
&lt;li&gt;"Should you use Terraform or Pulumi ?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a strategic decision, right? Use Terraform, which is an industry standard or Pulumi, which is more developer friendly and developer centric.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And for those decisions you need to be able to evaluate and test various tools, you also need to consider many aspects and make efficient comparisons between different technologies to decide which tools and concepts match to your specific use case and will work best for your project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  3) High Level Thinking
&lt;/h1&gt;

&lt;p&gt;In order to make those strategic decisions on which tools are best for your specific project and use case, you need to have a &lt;strong&gt;good high level overview&lt;/strong&gt; and &lt;strong&gt;end-to-end understanding of DevOps processes&lt;/strong&gt;. You need to understand which tool fits into which part of those processes and why you're using them:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy37jqszuc97nbij21st7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy37jqszuc97nbij21st7.png" alt="DevOps tools in each part of DevOps process"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You need to &lt;strong&gt;zoom out to see the connections between the tools and different roles in your team, the bottlenecks, possible issues and improvement opportunities&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhg1mvlgkv0emz3tgcjuk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhg1mvlgkv0emz3tgcjuk.png" alt="See the connections in the DevOps process"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So the skill of high level thinking is one of the most important ones when you're getting into DevOps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example, when you're building a CI/CD release pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you need to understand the whole software development life cycle&lt;/li&gt;
&lt;li&gt;you need to understand which roles it affects&lt;/li&gt;
&lt;li&gt;what steps need to be combined in which order&lt;/li&gt;
&lt;li&gt;which systems are affected and&lt;/li&gt;
&lt;li&gt;who is responsible for what.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just like an architect, who designs the whole house 🏠, considering the size of the lot, size of the house that needs to be built, the surrounding space, inner space and all the aspects around it, making a master plan for building the house. The same way you are architecting the DevOps processes on a high level. &lt;/p&gt;

&lt;h1&gt;
  
  
  4) Problem Solving and Solution Oriented
&lt;/h1&gt;

&lt;p&gt;As I already mentioned, when you have a good high level overview, it's easier to identify issues, bottlenecks that slow down the process or possible improvement opportunities in the DevOps processes, like release pipeline, monitoring infrastructure management processes etc.&lt;/p&gt;

&lt;p&gt;So when you see the whole DevOps process in one continuous line it's easier to see those.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Identifying issues is the first step in solving them&lt;/strong&gt; and considering that many DevOps processes are pretty complex, it may be challenging to see those issues and ways to optimize things. So you need to be &lt;strong&gt;constantly observing and actively looking for ways to improve things and fix the issues&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example if you identify that developers always need to manually perform some tasks, which takes two hours or you notice that running tasks takes really long, so the CI pipeline runs are very slow 🐌, you should actively look into it and &lt;strong&gt;see how how you can speed up or automate things&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F998na99iwb1w5z661v33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F998na99iwb1w5z661v33.png" alt="Slow CI/CD pipeline"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Things can be optimized endlessly in DevOps. You don't just build a release pipeline in two months and that's it. It's a continuous improvement process, just like you don't program an application in two months and be done with it, you continue adding features and fixing bugs and so on. It's the same with DevOps processes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This means as a DevOps engineer you need to have a solution oriented approach, constantly looking for ways to optimize and solve things.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  5) Creative and Innovative
&lt;/h1&gt;

&lt;p&gt;Now &lt;strong&gt;coming up with those solutions and improvement ideas&lt;/strong&gt; will also require &lt;strong&gt;creativity and innovative thinking&lt;/strong&gt;. Why is this especially important in DevOps? Again because in DevOps the processes are very complex and covers so many parts of the software development life cycle, things are often not so straightforward. 🙇🏼‍♀️&lt;/p&gt;

&lt;p&gt;So for one specific task there may be 10 different ways of doing it, so you need to combine things in a creative way to find solutions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This means most of the time you need to be creative and &lt;strong&gt;think outside the box&lt;/strong&gt; when deciding how to solve bottlenecks, how to speed up DevOps processes, how to increase the quality of product delivery etc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This also requires innovative thinking, because often the issues you have are very individual for your project. So you need to have a fresh perspective and approach problems this way. Often you can't just see how other companies solve the problems or how your company solved it in the past, because it's a completely new and unique use case so you need to find a unique solution for it.&lt;/p&gt;

&lt;h1&gt;
  
  
  6) Persuasive
&lt;/h1&gt;

&lt;p&gt;When you make a plan and come up with solutions that affect many people, various roles in your organization and many team members, of course those affected people should also be on board with those solutions. You &lt;strong&gt;may get resistance from engineers or people may be opposed to making changes&lt;/strong&gt; to existing processes:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4y9hvm8zp2donwv7ff5k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4y9hvm8zp2donwv7ff5k.png" alt="Resistance of people involved"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So you need a skill to persuade people that your plans are really good and will indeed help them in their work and &lt;strong&gt;have positive impact overall on the organization&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So as a DevOps engineer you will need to know how to communicate your ideas and planned changes, get people on board and advocate for your ideas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  7) Communication Skills and Team Player
&lt;/h1&gt;

&lt;p&gt;So another super important skill you need in DevOps is communication skills. Now let's see why this one's so crucial. 🤔&lt;/p&gt;

&lt;p&gt;In order to identify the issues, bottlenecks, improvements and the respective solutions to those, you often need &lt;strong&gt;input from various people and various roles in your organization and good understanding of their work and their pain points&lt;/strong&gt;. 👥&lt;/p&gt;

&lt;p&gt;Once you have identified issues and come up with solutions and persuaded the team to implement those, you need to also &lt;strong&gt;work closely with engineers to actually implement that plan&lt;/strong&gt;. So communication is the skill that ties it all together.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As a DevOps engineer you don't work alone. The whole DevOps concept is based on the collaboration between different roles and team members and often these are the roles that have different interests and tasks and sometimes even conflicting interests:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F13i95e1qimonkt49qubm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F13i95e1qimonkt49qubm.png" alt="Communication with different roles"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So you need to &lt;strong&gt;enjoy working with people and communicating with them&lt;/strong&gt; since this is going to be one of the major elements of your work as a DevOps engineer. So being a team player is definitely a must here. 🤝&lt;/p&gt;

&lt;p&gt;As part of communication skills you also need to be able to &lt;strong&gt;effectively express your ideas and explain your plans and strategies to the team members&lt;/strong&gt;. 🗣 So this also goes hand in hand with the persuasion skills. Let's see why?&lt;/p&gt;

&lt;p&gt;As I already mentioned, your work affects many people, you solve problems and bottlenecks for different roles, which means you need to get people to work with you, but also share your knowledge with them, explain new concepts and processes and so on. DevOps engineers are also often the mediators between different roles.&lt;/p&gt;

&lt;p&gt;So you need to understand and communicate efficiently with people, who have different interests, tasks and responsibilities. For example let's say you are setting up a CI/CD pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CI/CD pipeline affects developer workflow&lt;/strong&gt; first of all. So developers need to be on board with what you're doing and how you are designing their workflow, because they need to work with it. On the other hand, you need input from them to understand what they need in order to work efficiently. So you can use this input to implement the CI/CD pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CI/CD pipeline also affects test engineers, system administrators, security professionals&lt;/strong&gt;. So the same way you need need to understand what these engineers need in order to do their part of the job and naturally all their interests need to be aligned as well. So for example, if security needs to validate any security issues, test engineers may write some automated tests to detect those security issues and this automated tests will then be integrated into the pipeline or if a system administrator needs to enforce any policies for developers before deploying the application changes to let's say a Kubernetes environment, you can help them create those automated policy checks and then integrate them into the pipeline as well. And if the development fails, help developers interpret those policies and comply with them.&lt;/p&gt;

&lt;p&gt;So you see that as a DevOps engineer &lt;strong&gt;you are kind of in the middle of all those different roles, connecting them and basically encouraging and enforcing this collaboration between different team members&lt;/strong&gt;. 👀 &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe089t0d2iayxifislo7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe089t0d2iayxifislo7h.png" alt="DevOps Engineer in the middle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  8) Detail Thinking
&lt;/h1&gt;

&lt;p&gt;As a DevOps engineer you don't only create the high level design of the processes like a solutions architect, but you also implement things like&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;provisioning the infrastructure&lt;/li&gt;
&lt;li&gt;configuring servers&lt;/li&gt;
&lt;li&gt;writing automation scripts&lt;/li&gt;
&lt;li&gt;infrastructure is code or&lt;/li&gt;
&lt;li&gt;X as code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So once the high level plan is in place, the next step is implementation:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flecq1mkn1o3e8linnoxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flecq1mkn1o3e8linnoxy.png" alt="From plan to implementation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now there are differences across organizations on the role of a DevOps engineer and what its tasks and responsibilities are. Originally DevOps was not even meant as a separate role, but rather as an overlaying concept. So traditional roles like developers, system administrators etc were supposed to take on those tasks that are now done by DevOps engineers, but in practice it emerged as a separate role who designs the DevOps processes and also works hands-on to implement those processes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So in order to implement things you need detail oriented thinking, to consider and pay attention to various details and actually implement the things that you have designed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So you need to be able to &lt;strong&gt;focus both on the big picture and small details or in other words create a zoomed out map with an overview and then zoom in into specific spots on the map&lt;/strong&gt;. When needed you also need detail orientation when troubleshooting issues especially in complex systems like Kubernetes clusters on cloud environments or in complex infrastructure setups.&lt;/p&gt;

&lt;h1&gt;
  
  
  9) Sharing knowledge in an organized way
&lt;/h1&gt;

&lt;p&gt;Now let's say you design the processes and workflows, you implement things and so on. Since these workflows affect other engineers, they need to know how these processes work.&lt;/p&gt;

&lt;p&gt;When you create a CI/CD pipeline, developers need to know how to use it and how to develop, what to do and what not to do. So that their code changes actually get released by that pipeline.&lt;/p&gt;

&lt;p&gt;Or let's say you have implemented infrastructure as code concept in your organization. When a new systems administrator or cloud engineer joins the team, they need to know how the process of creating and configuring infrastructure works.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So documenting things and making them transparent for others in your organization is extremely important in DevOps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The processes should be &lt;strong&gt;transparent for everyone&lt;/strong&gt;. 👀 This will make work and collaboration of engineers much easier, but also make onboarding new engineers way easier as well. This means you need to be an organized person, who document things in an organized and structured way. This could be textual documentation or also graphics and diagrams for let's say visualizing architecture, workflows and different processes in your organization. Making things transparent, sharing knowledge, making sure everyone has access to the information they need.&lt;/p&gt;

&lt;p&gt;Now apart from personal characteristics you should also have personal preferences for things that are essential for the DevOps daily work.&lt;/p&gt;

&lt;h1&gt;
  
  
  10) Enjoy dynamic and diverse work
&lt;/h1&gt;

&lt;p&gt;First of all, you should &lt;strong&gt;love dynamic, diverse work with a wide range of tasks&lt;/strong&gt;, because as I said you don't just work on one tool but rather your tasks may range from coding to configuring infrastructure to monitoring, scripting and so on. &lt;/p&gt;

&lt;p&gt;This will also mean &lt;strong&gt;doing things outside your comfort zone&lt;/strong&gt; instead of doing comfortable work, like only doing the tasks in your areas of expertise:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69ax1h3om1p80xeusptm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69ax1h3om1p80xeusptm.png" alt="Push outside comfort zone"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In DevOps you keep pushing out of your comfort zone, constantly working with new tools you don't know. So you should not be just open to changes, but love the changes and &lt;strong&gt;actively drive changes and improvements in your organization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This also means &lt;strong&gt;being on the edge of the technological changes and industry trends&lt;/strong&gt;, being the front of your organization that keeps an eye and observes industry changes and trends and improvements to implement them and bring them into your organization. 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  11) Enjoy optimizing and improving
&lt;/h1&gt;

&lt;p&gt;Another personal preference that's super important is that you &lt;strong&gt;enjoy identifying optimization opportunities in the existing processes&lt;/strong&gt;. And I think this is a very important one. ⚠️&lt;/p&gt;

&lt;p&gt;For example you should have fun and enjoy solving bottleneck, spitting up things, automating things and seeing the progress &lt;strong&gt;from slow manual tedious work 🐌 to smooth streamlined automated processes.&lt;/strong&gt; 💯&lt;/p&gt;

&lt;h1&gt;
  
  
  12) Challenges
&lt;/h1&gt;

&lt;p&gt;Now as you're probably already thinking DevOps is quite a challenging job. 🤯 It is definitely exciting and rewarding, but it comes with some challenges, which you may also want to consider when deciding whether DevOps is really for you.&lt;/p&gt;

&lt;p&gt;First of all, &lt;strong&gt;constantly learning new technologies and concepts could be overwhelming&lt;/strong&gt; for many people.&lt;/p&gt;

&lt;p&gt;The responsibility and the challenge in &lt;strong&gt;working with people&lt;/strong&gt;, who may be opposed to your ideas and suggestions or &lt;strong&gt;generally resistant to changes can be very difficult&lt;/strong&gt; as well. And since you need to communicate with various teams in the organization, it can be &lt;strong&gt;frustrating if they don't cooperate&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrovk4iegeeuz1tiw4pj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrovk4iegeeuz1tiw4pj.png" alt="Frustrating"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another common challenge is that often there are &lt;strong&gt;unclear requirements about DevOps&lt;/strong&gt; in the companies themselves, because some companies don't know exactly what DevOps is and where the responsibilities of DevOps actually lie. 😑&lt;br&gt;
So you may get pushed into some role or in doing tasks, which are not really part of the DevOps area. Now &lt;strong&gt;this may change in the future when DevOps processes become more standardized&lt;/strong&gt; and DevOps role becomes more standardized as well, but currently this is a common issue across organizations.&lt;/p&gt;

&lt;p&gt;Something that may also bother some people is that &lt;strong&gt;most tasks are not visual&lt;/strong&gt;, but rather in the background, not directly visible by the end users or even the team members. Sometimes the fact that you don't even notice a DevOps process may in some cases be exactly the purpose of the DevOps task.&lt;/p&gt;

&lt;p&gt;Like removing the bottleneck so the processes become more streamlined and smooth and generally when working with people, you need to be a person who is able to cope with that resistance and be empathetic and don't get frustrated so easily.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So overall being a DevOps engineer is a bit challenging, but extremely interesting as well especially for people who love to learn and are always ready to tackle complicated issues. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  13) External Factors
&lt;/h1&gt;

&lt;p&gt;Now apart from the personal qualities and preferences, there are some &lt;strong&gt;hard facts that may be very important&lt;/strong&gt; and influence your decision on whether you want to become a DevOps engineer.&lt;/p&gt;

&lt;p&gt;Something that speaks very strongly for choosing this career is that &lt;strong&gt;DevOps is currently one of the most demanded professions in the IT field&lt;/strong&gt; 🥇 and is probably going to become even more demanded in the next years as DevOps adoption keeps growing. 📈&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3neo2dmowq21lfv5xr4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3neo2dmowq21lfv5xr4.png" alt="DevOps engineer is very demanded"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So if you're someone who takes the market demand into account, then this will be an important factor in the decision. 👍&lt;/p&gt;




&lt;h1&gt;
  
  
  What to do next? 👀
&lt;/h1&gt;

&lt;p&gt;If after reading this you think that DevOps is indeed right for you, then check out &lt;a href="https://youtu.be/G_nVMUtaqCk" rel="noopener noreferrer"&gt;my video from Zero to DevOps engineer&lt;/a&gt;, where you see &lt;strong&gt;how you can transition to DevOps with your specific background&lt;/strong&gt;. 🔝 Whether you are a systems engineer, software developer, test engineer or a complete IT newbie.&lt;/p&gt;

&lt;p&gt;And if you actually decide to get into DevOps and become a DevOps engineer and want to commit to learning it, then you should definitely check out &lt;a href="https://www.techworld-with-nana.com/devops-bootcamp" rel="noopener noreferrer"&gt;our six month DevOps bootcamp&lt;/a&gt;, where you &lt;strong&gt;learn all the tools and concepts you need to become a DevOps engineer in a structured step-by-step way&lt;/strong&gt;. 👏&lt;/p&gt;

</description>
      <category>devops</category>
      <category>career</category>
      <category>cloud</category>
      <category>beginners</category>
    </item>
    <item>
      <title>From Zero to DevOps Engineer - DevOps Roadmap for YOUR specific background 🔥</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Thu, 13 Oct 2022 13:35:37 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/from-zero-to-devops-engineer-devops-roadmap-for-your-specific-background-4h8n</link>
      <guid>https://dev.to/techworld_with_nana/from-zero-to-devops-engineer-devops-roadmap-for-your-specific-background-4h8n</guid>
      <description>&lt;p&gt;As a DevOps professional, sometimes I forget how it is getting into DevOps from the perspective of a beginner. So I wanted to create this article &lt;strong&gt;outlining a path I would take, if I was starting from zero again&lt;/strong&gt;. 0️⃣ And having the knowledge that I have now, what would be the most efficient path to get there.&lt;/p&gt;

&lt;p&gt;So basically what are the steps to becoming a DevOps engineer, what you need to learn and in which order. ✅&lt;/p&gt;

&lt;p&gt;I already made a &lt;a href="https://youtu.be/9pZ2xmsSDdo" rel="noopener noreferrer"&gt;video about DevOps roadmap&lt;/a&gt;, explaining what concepts and tools are part of DevOps, but in this video I wanted to approach it from a different perspective and &lt;strong&gt;show how you can become a DevOps engineer, if you were starting from zero&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And I wanted to make it &lt;strong&gt;more individual for the people with the most common backgrounds of transitioning into DevOps&lt;/strong&gt; and based on your replies on &lt;a href="https://www.linkedin.com/in/nana-janashia/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, I picked 5 of the most common backgrounds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;system administrators&lt;/li&gt;
&lt;li&gt;software developers&lt;/li&gt;
&lt;li&gt;test automation engineers&lt;/li&gt;
&lt;li&gt;network engineers and&lt;/li&gt;
&lt;li&gt;people with zero or very very little IT knowledge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if you have one of those backgrounds, this blog post will be very useful for you, showing YOUR individual path into DevOps. So let's get started! 🙌&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the written version of my &lt;a href="https://youtu.be/G_nVMUtaqCk" rel="noopener noreferrer"&gt;new youtube video&lt;/a&gt;&lt;/em&gt; ✍️ &lt;/p&gt;




&lt;h1&gt;
  
  
  What is DevOps?
&lt;/h1&gt;

&lt;p&gt;If you don't know what DevOps is. You can check out this video first: &lt;br&gt;
👉  &lt;a href="https://youtu.be/0yWAtQ6wYNM" rel="noopener noreferrer"&gt;🎬 What is DevOps?&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What is the DevOps skillset?
&lt;/h1&gt;

&lt;p&gt;Now first in order to understand how to become a DevOps professional, let's define exactly what skill set you require for that. 🤔&lt;/p&gt;

&lt;h3&gt;
  
  
  1 - Software Development Basics
&lt;/h3&gt;

&lt;p&gt;As you are working closely with the development team to improve and automate tasks for them, you need to understand the concepts of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how developers work and&lt;/li&gt;
&lt;li&gt;what workflows they use,&lt;/li&gt;
&lt;li&gt;how they collaborate on developing features,&lt;/li&gt;
&lt;li&gt;the modern processes like agile and scrum,&lt;/li&gt;
&lt;li&gt;what Git workflow they use and&lt;/li&gt;
&lt;li&gt;generally understand what software development life cycle covers from idea to code all the way to releasing it to the end users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now here it's important to mention that you &lt;strong&gt;don't&lt;/strong&gt; need to be a software developer or the one implementing those agile and scrum processes. You need to understand how those things work on a high level, conceptually.&lt;/p&gt;

&lt;h3&gt;
  
  
  2 - Software Deployment
&lt;/h3&gt;

&lt;p&gt;The next one is software deployment. Once the feature is developed, it needs to be released to the end users, which means you need an environment, where your application will be running and be available for the end users. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.1 - Operating Systems &amp;amp; Linux Basics&lt;/strong&gt;&lt;br&gt;
And as a DevOps engineer you need to know how to&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;provision and prepare these environments and&lt;/li&gt;
&lt;li&gt;how to maintain them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And for that you need knowledge of general server administration like creating virtual machines, mostly with Linux operating system, installing software, doing patches, configure networking on premise as well as on cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.2 - Containers with Docker&lt;/strong&gt;&lt;br&gt;
And as part of the more modern infrastructure concepts you need to understand how to work with containers and the most popular container technology, which is Docker.&lt;/p&gt;

&lt;p&gt;👉🏼  &lt;a href="https://youtu.be/3c-iBn73dDE" rel="noopener noreferrer"&gt;🎬 FREE Docker Course&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.3 - Container Orchestration with Kubernetes&lt;/strong&gt;&lt;br&gt;
And for projects with tens or hundreds of Docker containers you need to know how to work with container orchestration platforms like Kubernetes, which is the most popular one nowadays.&lt;/p&gt;

&lt;p&gt;And again, all these tools can be used either on premise or on cloud.&lt;/p&gt;

&lt;p&gt;👉🏼  &lt;a href="https://youtu.be/s_o8dwzRlu4" rel="noopener noreferrer"&gt;🎬 FREE Kubernetes Course&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.4 - Cloud - Learn 1 of the most popular cloud provider&lt;/strong&gt;&lt;br&gt;
If you're working on cloud like AWS, which is the most popular and most used cloud platform for now, you also need to know AWS specific services and how to manage the whole deployment infrastructure on AWS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi857btnc2o084voq7ksu.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi857btnc2o084voq7ksu.jpeg" alt="AWS Market Share"&gt;&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://www.statista.com/chart/18819/worldwide-market-share-of-leading-cloud-infrastructure-service-providers/" rel="noopener noreferrer"&gt;Statista Cloud Infrastructure Market Share&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3 - CI/CD - Continuous Integration and Continuous Deployment
&lt;/h3&gt;

&lt;p&gt;And connecting all these pieces together and kind of the heart of the DevOps processes is CI CD pipelines.&lt;/p&gt;

&lt;p&gt;How do you connect these two software development and deployment? In other words, when software is being developed, how do you deploy those developed features?&lt;/p&gt;

&lt;p&gt;It's not just about deploying it to the deployment environment, we don't just take it and throw it on there. Why? Because humans make mistakes, either because of lack of knowledge in some area or just accidentally. So instead we &lt;strong&gt;add many gatekeepers before the deployment&lt;/strong&gt;, so the deployed code needs to go through various of these gate checks in order to be allowed on the final environment and that's what the &lt;strong&gt;DevOps CI/CD pipeline&lt;/strong&gt; is for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;testing code,&lt;/li&gt;
&lt;li&gt;packaging it and&lt;/li&gt;
&lt;li&gt;deploying all the way to the end environment
to deliver it to their end users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1man7zjvnefnbw0h74tf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1man7zjvnefnbw0h74tf.png" alt="CI/CD Pipeline"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now what are those gatekeepers? Well, testing the code quality, testing code logic, testing that it didn't break any previously existing code, checking for any security issues, testing that it functions as it's supposed to etc. So tools for implementing this whole CI/CD pipelines with all those gatekeepers is a super important skillset.&lt;/p&gt;

&lt;p&gt;So knowing any CI/CD tools like Jenkins, Gitlab CI/CD, GitHub Actions, Circle CI and so on. And most importantly how to integrate this tool with all other technologies to test things, deploy the code and so on is very important.&lt;/p&gt;

&lt;p&gt;👉🏼  &lt;a href="https://youtu.be/qP8kir2GUgo" rel="noopener noreferrer"&gt;🎬 FREE GitLab CI/CD Course&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4 - Monitoring and Observability
&lt;/h3&gt;

&lt;p&gt;Now again we are humans and we can assume that even with the most cautious measures and a lot of extensive testing, we can't always 100% test every single aspect of the deployment and some issue may slip through in the production. 🤷🏻‍♂️ That's why we have bugs in production and that's okay as long as we have a plan for handling a bug or issue when it appears in production.&lt;/p&gt;

&lt;p&gt;So again a part of DevOps skillset is to &lt;strong&gt;create a process of handling discovered issues in production instead of having a panic mode&lt;/strong&gt;. So what does that skillset include? Well, it's a thing called "monitoring and observability".&lt;/p&gt;

&lt;p&gt;So in the last stage of CD or continuous deployment, after deploying the code changes, we don't just say: "hey we're done, that's deployed so now let's move on to the next task", instead we observe and monitor closely what happens. If some user encounters an error, if something crashes or doesn't work, so we know we need to proactively fix that. So maybe for a couple of hours or within the next days of deployment, we're actively looking and observing whether some kind of issue appears in production.&lt;/p&gt;

&lt;p&gt;👉🏼  &lt;a href="https://youtu.be/h4Sl21AKiDg" rel="noopener noreferrer"&gt;🎬 Prometheus Monitoring explained&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5 - Automation
&lt;/h3&gt;

&lt;p&gt;And finally the last missing piece of really conquering DevOps is automating all this. 👏 So basically you automate most of your own work and work of other engineers, automating especially in areas where the same task needs to be repeated.&lt;/p&gt;

&lt;p&gt;Let me give you some examples, for every new code released:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you always need to test your application,&lt;/li&gt;
&lt;li&gt;you always need to check for security,&lt;/li&gt;
&lt;li&gt;you always need to package and&lt;/li&gt;
&lt;li&gt;deploy application changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tasks should happen automatically, so you make sure to execute &lt;strong&gt;automated tests&lt;/strong&gt; that developers or test engineers write, you have &lt;strong&gt;automated security checks, quality checks&lt;/strong&gt; and you have scripts or &lt;strong&gt;automation code that deploys that code to the end environment&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45m2yyq169ivlvs0h26p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45m2yyq169ivlvs0h26p.png" alt="CI/CD automates all human tasks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So you don't deploy the application locally from your own machine, but rather CI/CD pipeline deploys it automatically.&lt;/p&gt;

&lt;p&gt;Another one is monitoring. Obviously you don't want to be sitting in front of a computer and observing and waiting to see if something breaks in the application, instead you want to &lt;strong&gt;deploy tools that monitor the application and notify you if something's off&lt;/strong&gt; or if something happens:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flc81eaf2q2b7no1uf0nl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flc81eaf2q2b7no1uf0nl.png" alt="Monitoring tools"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So monitoring and observability tools go under your DevOps toolbelt as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.1 - Infrastructure as Code&lt;/strong&gt;&lt;br&gt;
But in DevOps we don't stop there with automation, we also automate things that don't repeat on every code change deployment, but still prove to be incredibly efficient.&lt;/p&gt;

&lt;p&gt;So for example &lt;strong&gt;provisioning infrastructure&lt;/strong&gt; or &lt;strong&gt;setting up a Kubernetes cluster&lt;/strong&gt; is not something you do very often but we still automate it in DevOps. Why? Because we want to be able to &lt;strong&gt;easily replicate our deployment environments&lt;/strong&gt; if they get corrupted or if we need multiple staging environments, like DEV, TEST and PRODUCTION:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl05apgz703f9jvot80za.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl05apgz703f9jvot80za.png" alt="Infrastructure as Code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And generally &lt;strong&gt;having everything in code versus some manual scripts&lt;/strong&gt; that some person on a team executes and no one knows about has many benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First of all, encouraging collaboration in a team on infrastructure configuration&lt;/li&gt;
&lt;li&gt;Documenting changes to infrastructure&lt;/li&gt;
&lt;li&gt;Transparency of the infrastructure state and&lt;/li&gt;
&lt;li&gt;Accessibility to that information in a centralized place versus being scattered around on people's local machines in the form of some scripts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is an infrastructure as code concept as part of the whole movement towards automating all workflows to make them more efficient.&lt;/p&gt;

&lt;p&gt;And some of the most popular tools in this area are Terraform for Infrastructure Provisioning and Ansible for Configuration Management.&lt;/p&gt;

&lt;p&gt;👉🏼  &lt;a href="https://youtu.be/POPP2WTJ8es" rel="noopener noreferrer"&gt;🎬 What is Infrastructure as Code?&lt;/a&gt;&lt;br&gt;
👉🏼  &lt;a href="https://youtu.be/l5k1ai_GBDE" rel="noopener noreferrer"&gt;🎬 Terraform explained&lt;/a&gt;&lt;br&gt;
👉🏼  &lt;a href="https://youtu.be/1id6ERvfozo" rel="noopener noreferrer"&gt;🎬 Ansible explained&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.2 Scripting skills&lt;/strong&gt;&lt;br&gt;
While you don't need to actually program the application as a DevOps engineer (more to that later in the article), you will need some scripting or basic programming skills to automate various DevOps processes.&lt;/p&gt;

&lt;p&gt;This can be simple shell scripting or even better a full-fledged programming language like Python. However, you don't need to be able to develop web applications with Python like a software developer. Being able to write automation scripts with Python is absolutely enough and is actually way easier to learn.&lt;/p&gt;

&lt;p&gt;Some examples would be writing a shell script to do a task in a Jenkins job in a CI/CD pipeline or writing a small utility script for flushing the cache, starting the builds and deployments, connecting different tools etc.&lt;/p&gt;

&lt;p&gt;There are many programming languages, but I would recommend starting with Python. Python is widely used, easy to learn and used for many different use cases, especially in DevOps. And the good thing is, programming concepts stay the same, so when you learn one language well, you can easily learn new ones quite quickly.&lt;/p&gt;

&lt;p&gt;👉🏼  &lt;a href="https://youtu.be/t8pPdKYpowI" rel="noopener noreferrer"&gt;🎬 FREE Python Course&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6 - Version Control with Git
&lt;/h3&gt;

&lt;p&gt;You write all automation logic mentioned above as code.&lt;br&gt;
And just like developers manage the application code with a version control tool, like Git, you need to manage this automation code and configuration files with a version control tool as well.&lt;/p&gt;




&lt;p&gt;So these are the fundamental processes and respective tools that are part of DevOps. So any other DevOps tools you may come across - and there are hundreds of them - are simply optimizing or improving different parts of this workflow.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is YOUR zero or starting point? 🤔
&lt;/h1&gt;

&lt;p&gt;So having those DevOps skills is the final goal and you're starting from zero, but many of you are transitioning to DevOps or starting your DevOps journey having &lt;strong&gt;various different backgrounds&lt;/strong&gt;. So &lt;strong&gt;the zero or that starting point is different for all of you&lt;/strong&gt; and as I mentioned at the beginning you may be systems administrator or software engineer or QA engineer etc or may not have an IT background at all and want to transition into DevOps:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmz5dg5qts03fal3t2yl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmz5dg5qts03fal3t2yl.png" alt="Different starting points when transitioning into DevOps"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So now I want to show you how you can transition to DevOps and basically learn all these tools that I just mentioned starting from your specific background. ✅&lt;/p&gt;

&lt;h1&gt;
  
  
  Starting as a Systems Administrator 🧑🏽‍💻
&lt;/h1&gt;

&lt;p&gt;If you are a systems administrator &lt;strong&gt;you know how to administer servers and other systems&lt;/strong&gt;. So you already have some skills in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;setting up infrastructure&lt;/li&gt;
&lt;li&gt;configuring and preparing it for deployment&lt;/li&gt;
&lt;li&gt;so working with operating systems, installing and running software&lt;/li&gt;
&lt;li&gt;security, networking configuration etc
is already familiar for you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of the other tasks you do as systems administrator are things like monitoring systems, health, backup and disaster recovery, installing and patching servers and so on.&lt;/p&gt;

&lt;p&gt;In smaller projects you may have to also do database administration, network administration or security administration.&lt;/p&gt;

&lt;p&gt;All of these are very useful skills, if you want to become a DevOps engineer. 👍 So you already have a lot of skills you can use in the deployment and operations side of DevOps:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F747h16shxun522d5483k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F747h16shxun522d5483k.png" alt="Skills in deployment and operations part of DevOps"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This includes Day 0 activities such as initial setup of the infrastructure, but also Day 1 tasks like maintaining and operating this infrastructure.&lt;/p&gt;

&lt;p&gt;Many systems administrators also know scripting, so that will be helpful in the automation part of DevOps. So as a systems administrator you already have a very good foundation to get into DevOps, however the big part &lt;strong&gt;missing&lt;/strong&gt; here to start in DevOps is learning the &lt;strong&gt;software development basics&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understanding the git workflows&lt;/li&gt;
&lt;li&gt;how developers work and so on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now very important to note, even though some DevOps engineers do know how to program, it's not an essential skill in DevOps, because as a DevOps engineer your &lt;strong&gt;main task is not developing and programming the application it's creating automated processes for delivering the developed software to the end users efficiently with as few bugs and issues as possible&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdh5g2nm1m6ine66o65k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdh5g2nm1m6ine66o65k.png" alt="Process to deliver app to end users"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But to be able to deliver the application changes, of course you need to understand how that application was built, developed and how it works.&lt;/p&gt;

&lt;h1&gt;
  
  
  Starting as a Software Developer 👩‍💻
&lt;/h1&gt;

&lt;p&gt;If you are a software developer, again you have a pretty good background, because you already know an important part of DevOps, which is the software development processes and how these work.&lt;/p&gt;

&lt;p&gt;But most probably you are &lt;strong&gt;missing skills in server management&lt;/strong&gt;. So you need to start by learning about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;virtual machines&lt;/li&gt;
&lt;li&gt;creating and configuring servers&lt;/li&gt;
&lt;li&gt;configuring infrastructure security, networking etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And since most modern applications run on cloud, you need to also learn how to do all these on cloud infrastructure.&lt;/p&gt;

&lt;p&gt;So that would be your starting point when learning DevOps as a software developer.&lt;/p&gt;

&lt;p&gt;And once you have that foundation you can build on that by learning about how containers work on top of the virtual machines and how to run applications in containers and how to run containers on a platform like Kubernetes etc.&lt;/p&gt;

&lt;p&gt;And of course your programming skills will be great help in writing automated scripts for various parts of the application development and deployment processes. 👍&lt;/p&gt;

&lt;h1&gt;
  
  
  Starting as a Test Automation Engineer👨🏼‍💻
&lt;/h1&gt;

&lt;p&gt;Another common background people have when transitioning into DevOps is a test automation engineer. Now here you may have &lt;strong&gt;a bit more catching up&lt;/strong&gt; to do and more skills to learn compared to developers or systems administrators, but you can definitely reuse many of your skills in DevOps.&lt;/p&gt;

&lt;p&gt;As a test engineer you most probably know how the software developers are working, like the agile processes, Jira workflows and so on. And as part of your test automation knowledge &lt;strong&gt;you understand the different testing scopes&lt;/strong&gt; like&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;testing on code level&lt;/li&gt;
&lt;li&gt;testing the whole application on a more abstract level&lt;/li&gt;
&lt;li&gt;testing how the application integrates with other services etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You also understand &lt;strong&gt;how to test different aspects of an application&lt;/strong&gt; and that knowledge is really helpful for setting up an automated CI/CD pipeline, because in order to automate the pipeline and streamline delivering your application changes all the way to the production environment, you need extensive automated testing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqse9nnxq57nedys68rp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqse9nnxq57nedys68rp.png" alt="Extensive testing for multi-stage deployments"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because as soon as you need a human element you will break the automated pipeline and add a bottleneck:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0b43uxkm1d3z1wixb920.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0b43uxkm1d3z1wixb920.png" alt="Manual process breaks automated pipeline"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And since you know how to write automated tests in various programming languages, your skills in various testing frameworks is definitely helpful here for scripting and coding some automation parts of DevOps processes. Or let's say it won't be completely new to you. 👍&lt;/p&gt;

&lt;h1&gt;
  
  
  Starting as a Network Engineer🧑🏻‍💻
&lt;/h1&gt;

&lt;p&gt;The last honorable mention of a background going into DevOps is network engineering. This is probably the farthest from DevOps compared to the other three that I just mentioned, but you still have some skills that you can bring into DevOps as a network engineer.&lt;/p&gt;

&lt;p&gt;As a network engineer you know how to configure devices and networking between devices. So you have &lt;strong&gt;valuable knowledge in configuring networking for infrastructure on premise&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transition to Cloud Network Engineer&lt;/strong&gt;&lt;br&gt;
But as most companies are moving their infrastructure to cloud, many network engineers transition to cloud network engineering:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbvyeleoan8ddqtdrfan.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbvyeleoan8ddqtdrfan.png" alt="Moving to cloud"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So they do all of that on cloud platforms. And instead of configuring routes and switches and networks on on-premise infrastructure, they configure &lt;strong&gt;virtual&lt;/strong&gt; routes and &lt;strong&gt;virtual&lt;/strong&gt; switches and &lt;strong&gt;virtual&lt;/strong&gt; networks on cloud infrastructure.&lt;/p&gt;

&lt;p&gt;With networking and virtual networking knowledge you have an &lt;strong&gt;advantage to understand networking in virtual machines and containers, which is a big part of how modern applications are running&lt;/strong&gt;. So it will be easier for you to understand Docker and Kubernetes networking for example and these are usually pretty difficult parts to manage and troubleshoot or secure, when you're configuring and maintaining the deployment environments with Kubernetes and containers on them.&lt;/p&gt;

&lt;p&gt;So you can definitely use your knowledge and expertise in this area. Some network engineers even know scripting in bash or python for example, which is another helpful skill when it comes to automation part of DevOps.&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps Bootcamp considering these different backgrounds 💡
&lt;/h1&gt;

&lt;p&gt;Now all of these backgrounds we actually considered when creating our &lt;a href="https://www.techworld-with-nana.com/devops-bootcamp" rel="noopener noreferrer"&gt;DevOps bootcamp curriculum&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So we added the Linux Basics module, where you learn everything about Operating Systems and Linux as well as Networking, Bash scripting and so on. Everything from scratch:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m4p6jwsjkofm2pyzo1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m4p6jwsjkofm2pyzo1e.png" alt="Linux Module for Software Developers and Testers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So if you are a software developer or a test automation engineer, this will give you the prerequisite knowledge and foundation for learning things like provisioning deployment servers, configuring servers and preparing for deployment etc as well as how to administer some DevOps tools like Jenkins and Kubernetes cluster and so on.&lt;/p&gt;

&lt;p&gt;Obviously as a system administrator you would skip that part, but instead you would need to learn Git and how to work with Git workflows, to use it for writing infrastructure as code for example. You also need to learn about build and packaging tools to package the applications written in various languages.&lt;/p&gt;

&lt;p&gt;So as you see there are some prerequisites you need to have in DevOps and &lt;strong&gt;various backgrounds bring various of those prerequisites&lt;/strong&gt; with them and we included those prerequisites as well for those missing them, but after those prerequisites are fulfilled the &lt;strong&gt;path pretty much looks the same for everybody&lt;/strong&gt;, because tools like Kubernetes, Terraform, EKS, even Docker are pretty new to many professionals and there is no one profession that was specifically dedicated to those tools previously. So everyone needs to learn them no matter what their IT background is:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisu66suzfjm4pea6vjs1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisu66suzfjm4pea6vjs1.png" alt="DevOps Bootcamp"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Starting with no or little IT background 🙉
&lt;/h1&gt;

&lt;p&gt;Finally, we also &lt;strong&gt;get many questions about starting our DevOps Bootcamp with very little to no IT background&lt;/strong&gt;. Which means there are probably many of you reading this article, who are thinking about getting into DevOps without much IT pre-knowledge and want to know what the path is to DevOps.&lt;/p&gt;

&lt;p&gt;Now this is a very tricky one, because &lt;strong&gt;DevOps is NOT really the entry-level profession in it&lt;/strong&gt;. It's not the first thing you learn when you want to get into the IT field.&lt;br&gt;
Now why is that? 🤷🏻‍♂️ Because DevOps is about&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;automating processes and software development and deployment that people have done manually for a very long time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This means before you automate processes and tasks that are done manually, you first need to understand what those processes and tasks are in the first place. If you don't understand those, you won't know what you're automating or why you even need DevOps.&lt;/p&gt;

&lt;h3&gt;
  
  
  1 - Understand complete software development lifecycle
&lt;/h3&gt;

&lt;p&gt;So if you're completely new to IT and already know you want to eventually become a DevOps engineer, then you should start by understanding the complete software development life cycle first. And the good news is, it's easier than it sounds. You don't need to go and learn software development for months for that and you definitely don't need to become an expert in managing infrastructure and configuring servers.&lt;/p&gt;

&lt;p&gt;If you learn the right things, you can actually do it in a relatively short time:&lt;br&gt;
Go find some example projects, where you create a super simple application and learn how to deploy to a virtual server, so learning the steps of developing, packaging, maybe even automatically testing and then deploying an example application on a Linux server on a cloud platform.&lt;/p&gt;

&lt;p&gt;This will actually be a very good foundational knowledge for building on it to learn DevOps. In this process&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you will learn the basics of creating an application,&lt;/li&gt;
&lt;li&gt;you will learn how to create a virtual machine with a Linux server on some easy to use cloud platform and host your application there.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then repeat the whole process once more, simulating making an update to your application and this will &lt;strong&gt;teach you basic skills for each part of the software development process&lt;/strong&gt;, but most importantly it will make you understand the complete workflow of what goes into that. 👀&lt;/p&gt;

&lt;p&gt;You don't need any fancy tools for that, no Jenkins, no fancy programming framework, not even Git. Again these are to understand the basic concepts and then you can start learning those DevOps tools like Jenkins, Docker, Kubernetes and so on. Because &lt;strong&gt;this phase is not about learning the tools, it's about understanding the concepts and the complete workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2 - How software development teams collaborate
&lt;/h3&gt;

&lt;p&gt;After that go ahead and watch some tutorials about agile and scrum methods and how software development teams collaborate and work in software development projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  3 - DevOps Pre-Requisites and 4 - DevOps Skills
&lt;/h3&gt;

&lt;p&gt;And these skills will actually be enough to start our DevOps Bootcamp, because Linux, Git and all these basic tools you actually learn in our bootcamp from scratch. 🚀 But again you need to understand those workflows first in order to understand, why we're using Git, why we need Jenkins, why we're learning Linux and scripting etc.&lt;/p&gt;

&lt;p&gt;And because of a lot of requests for our Bootcamp from IT beginners 🙈, we actually also decided to create a &lt;strong&gt;complete bootcamp prerequisites course&lt;/strong&gt;. So if you're interested in that you can already sign up to get notified when the course is out 🔔: &lt;a href="https://www.techworld-with-nana.com/it-beginners-course-waitlist" rel="noopener noreferrer"&gt;IT Beginners Course&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So you can of course learn this as I said all by yourself following those steps and put a learning path together by yourself or you can use our prerequisites course when it's out.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary - DevOps Roadmap
&lt;/h1&gt;

&lt;p&gt;So to summarize there are 4 phases:&lt;/p&gt;

&lt;h3&gt;
  
  
  1 - Getting the pre-requisites right
&lt;/h3&gt;

&lt;p&gt;First one getting the prerequisites right. So depending on which background and pre-knowledge you have, you need to first make sure to &lt;strong&gt;get any missing prerequisite knowledge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So as a system administrator or a network engineer, learn the software development workflows. As a developer, learn the basics of infrastructure, virtual servers etc. Of course with zero IT background, you have to get all this prerequisite knowledge from server administration to development first. So you have a more difficult entry, but it is possible if you know what to learn.&lt;/p&gt;

&lt;h3&gt;
  
  
  2 - Cloud, Docker, Kubernetes
&lt;/h3&gt;

&lt;p&gt;Second step is learning cloud, Docker and Kubernetes. After learning the prerequisites, you can already get started with important DevOps skills of working with containers and container orchestration tools. So basically learning Docker and Kubernetes to help your teams deploy and efficiently run the application. Kubernetes itself is a very complex tool, so it may take some time to master it and make it production ready.&lt;/p&gt;

&lt;p&gt;And since most of the modern applications and Kubernetes clusters are running on cloud, you need to learn cloud infrastructure, how to work with cloud infrastructure, how to configure it, how to scale it and so on.&lt;/p&gt;

&lt;h3&gt;
  
  
  3 - Automation
&lt;/h3&gt;

&lt;p&gt;The third step is automation. Once you have mastered the above skills and technologies it's time to learn how to optimize and automate the existing processes. And as a DevOps professional &lt;strong&gt;automation skills are one of the most important ones&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As the heart of DevOps, learning to build &lt;strong&gt;CI/CD pipelines is an essential skill&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And finally you will learn how to automate parts of the complete DevOps processes one by one using the concepts and tools of what's called &lt;strong&gt;X as code&lt;/strong&gt;, including Infrastructure as Code, Configuration as Code, Security as Code, Policy as Code and so on, which basically means just automating everything in the form of code&lt;/p&gt;

&lt;h3&gt;
  
  
  4 - Go from there. Keep learning 🙌
&lt;/h3&gt;

&lt;p&gt;Number four is just go from there. DevOps is evolving and new tools are being developed all the time. So as a DevOps professional, you should learn how to evaluate and test many new tools, always with the same goal to optimize and automate existing processes and make them efficient.&lt;/p&gt;

&lt;p&gt;Some notable concepts and tools: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitOps (ArgoCD 👉🏼  &lt;a href="https://youtu.be/MeU5_k9ssrs" rel="noopener noreferrer"&gt;🎬 ArgoCD Tutorial&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Service Mesh (Istio 👉🏼  &lt;a href="https://youtu.be/16fgzklcF7Y" rel="noopener noreferrer"&gt;🎬 Service Mesh and Istio explained&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also have a video where I explain how I personally learn new technologies fast and efficiently, which I will also link right here: &lt;a href="https://youtu.be/Cthla7KqU04" rel="noopener noreferrer"&gt;How I learn new technologies as a DevOps Engineer (without being overwhelmed)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now I hope this information is going to be useful for you and I was able to show you what your next steps are for getting into DevOps 😊 &lt;/p&gt;




&lt;h3&gt;
  
  
  Good luck on your DevOps journey! 🎉 💪
&lt;/h3&gt;







&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana" rel="noopener noreferrer"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Njuchi_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/c/techworldwithnana" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>career</category>
      <category>cloud</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Top 5 reasons to choose DevOps as a Career 💎</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Tue, 13 Sep 2022 14:31:29 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/top-5-reasons-to-choose-devops-as-a-career-5d6h</link>
      <guid>https://dev.to/techworld_with_nana/top-5-reasons-to-choose-devops-as-a-career-5d6h</guid>
      <description>&lt;p&gt;Many of you may be wondering &lt;strong&gt;if DevOps career is for you&lt;/strong&gt;. 🤔 If you have been following and watching my videos you probably already know that I love DevOps and have a lot of passion for it, but is DevOps for everyone and what are some of the reasons why I personally like DevOps and chose it as a career? And &lt;strong&gt;what are some of the advantages that speaks for choosing DevOps as a career in general&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;I hope sharing my insights on this topic will be useful for some of you 😊&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the written version of my &lt;a href="https://youtu.be/2NtiI0Ojczw" rel="noopener noreferrer"&gt;new youtube video&lt;/a&gt;&lt;/em&gt; ✍️ &lt;/p&gt;




&lt;h2&gt;
  
  
  1 - My personal preference 💙
&lt;/h2&gt;

&lt;p&gt;I want to start with my own background and story of how I ended up in DevOps.&lt;/p&gt;

&lt;p&gt;I started off as a software developer and in one of my software development projects, I started taking over tasks of configuring servers, configuring builds in Jenkins, configuring application packaging etc. Or configuring things around Docker and running containers, making the builds faster, making tests faster and so on. 🙌 And I noticed that tasks that were related to &lt;strong&gt;configuring stuff&lt;/strong&gt; and &lt;strong&gt;optimizing processes were more enjoyable for me&lt;/strong&gt; than programming. 🤓&lt;/p&gt;

&lt;p&gt;Now these are just a subset of tasks in DevOps. I was basically doing some tasks around CI/CD configuration, but DevOps is much more than that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It spans the whole software development life cycle, essentially optimizing and configuring things for different parts of that software development life cycle.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpfe915z3xbhj21f1lgax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpfe915z3xbhj21f1lgax.png" alt="DevOps"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Source: &lt;a href="https://about.gitlab.com/topics/devops/" rel="noopener noreferrer"&gt;https://about.gitlab.com/topics/devops/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now if you don't know exactly what DevOps involves and what that software development lifecycle includes I have a dedicated video on that: &lt;a href="https://youtu.be/0yWAtQ6wYNM" rel="noopener noreferrer"&gt;What is DevOps?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So basically when you're doing software development you are zoomed in into one specific part of that software development life cycle. When you're doing operations, again you are focused on a specific area of that life cycle.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9x1hqxn8066j41kincju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9x1hqxn8066j41kincju.png" alt="DevOps vs Software Development vs Sys Admin"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;DevOps&lt;/strong&gt; however, you &lt;strong&gt;zoom out from those specific areas and parts&lt;/strong&gt; and start seeing the big picture or a bird's eye view of the whole software development workflow. And you start analyzing how each of those areas are connected like software development processes with Git workflows connect to CI/CD pipeline or CI/CD pipeline connected to infrastructure etc.&lt;/p&gt;

&lt;p&gt;And you start analyzing, which areas need improvements, which ones have bottlenecks: like development workflow is super optimized, so your team's generating new features fast, but the pipeline is slow and blocking the release of those features to production.&lt;/p&gt;

&lt;h4&gt;
  
  
  High Level Thinking 🧠
&lt;/h4&gt;

&lt;p&gt;Now what I also observed is that a different type of thinking is required for DevOps. You need high level thinking connecting dots on a high level: &lt;strong&gt;Width instead of depth&lt;/strong&gt;.&lt;br&gt;
Like an architect making the plan of the whole building and planning how different parts are connected and implemented and then you have different specializations, who actually carry out that plan. So I personally like that role a lot 😇&lt;/p&gt;

&lt;h2&gt;
  
  
  2 - Diverse tasks and rewarding 💎
&lt;/h2&gt;

&lt;p&gt;And because DevOps covers the whole software development life cycle, the set of tasks or the &lt;strong&gt;range of tasks is much more diverse and rich in variety&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Like you could be looking at front-end code and optimizing application packaging process&lt;/li&gt;
&lt;li&gt;The next thing could be configuring deployment servers on cloud&lt;/li&gt;
&lt;li&gt;Then scripting a program to automate some infrastructure configuration tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And if you're like me this may be much more interesting and exciting for many people and again this is probably a personal preference.&lt;/p&gt;

&lt;h4&gt;
  
  
  Go broader
&lt;/h4&gt;

&lt;p&gt;Some people &lt;strong&gt;love focusing on their area of expertise deepening their knowledge&lt;/strong&gt; in it. Like I learned JavaScript and then I just learn JavaScript to the most advanced level, different frameworks, different features etc.&lt;/p&gt;

&lt;p&gt;And there is enough to learn for years in each language and technology, but for many this can be boring. If you're like me you &lt;strong&gt;want to have more diverse set of tasks, you want to go broader&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I like architecting processes instead, instead of specializing in just one tool or technology I like to understand whole software development life cycle process and how it all works and more importantly how I can optimize different parts of that life cycle, identifying opportunities for improvements and optimizations 🙌:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;like packaging the application takes too long&lt;/li&gt;
&lt;li&gt;setting up environment for tests is too slow&lt;/li&gt;
&lt;li&gt;security of the build image is not properly checked&lt;/li&gt;
&lt;li&gt;or maybe not enough bugs get discovered before deploying to the end environment&lt;/li&gt;
&lt;li&gt;or the build process is taking too long&lt;/li&gt;
&lt;li&gt;or we find out about issues in production too late&lt;/li&gt;
&lt;li&gt;maybe operation team has a lot of effort and needs long time to update and maintain Kubernetes cluster&lt;/li&gt;
&lt;li&gt;it takes too long to approve and be confident about deploying new features into production&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a DevOps engineer you can solve all these challenges and that in itself for me is a very fulfilling work: Improving things, optimizing, making things faster, automating etc. 🚀&lt;/p&gt;

&lt;p&gt;And this leads to the next reason, which is the impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 - Impact ⭐️
&lt;/h2&gt;

&lt;p&gt;As a DevOps engineer you can have a huge business impact in your company by having a good understanding of the whole software development life cycle and improving and optimizing it. And this again can be &lt;strong&gt;super fulfilling to know that your work has such an impact and affects many people&lt;/strong&gt; eventually. &lt;/p&gt;

&lt;h4&gt;
  
  
  Impact on co-workers 🫂
&lt;/h4&gt;

&lt;p&gt;You can build processes through automation that make the work of your fellow team members in the organization much easier. Smooth well architected processes means that engineers can focus on their areas of expertise and generally enjoy their work much more, instead of doing some boring manual things instead. So you can make lives of developers, operations, testers, project managers and so on easier.&lt;/p&gt;

&lt;h4&gt;
  
  
  Huge business value 💎
&lt;/h4&gt;

&lt;p&gt;But you also bring huge business value. Well implemented DevOps processes will lead to &lt;strong&gt;faster time to market&lt;/strong&gt; and &lt;strong&gt;constant improvement of business quality&lt;/strong&gt;, &lt;strong&gt;cost savings&lt;/strong&gt; etc. Which means &lt;strong&gt;end users are happier&lt;/strong&gt; and company can innovate and deliver much better. So you have an impact on the whole business.&lt;/p&gt;

&lt;p&gt;And this brings me to the next point which is demand for DevOps and salary.&lt;/p&gt;

&lt;h2&gt;
  
  
  4 - Demand and Salary 💵
&lt;/h2&gt;

&lt;p&gt;Since this is a position that has such a huge impact, it automatically means that you are &lt;strong&gt;super valuable for your team and your company&lt;/strong&gt;, because you literally have direct impact on time to market, cost savings, how satisfied the engineers are with work etc. And companies see that value. 👀 &lt;/p&gt;

&lt;p&gt;That's why the demand for DevOps engineers has increased so dramatically over the past few years. 📈 Organizations that have implemented DevOps practices are in fact seeing the benefits of high performance, much faster deployments compared to competitors and logically are &lt;strong&gt;willing to pay high salaries to find DevOps experts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;demand is very clearly visible on job platforms&lt;/strong&gt; as well: indeed.com a major job platform for example had a &lt;a href="https://www.simplilearn.com/is-a-devops-career-right-for-you-article" rel="noopener noreferrer"&gt;75% increase in DevOps job listings and on LinkedIn there was a 50% increase&lt;/a&gt; in mentioning DevOps as a skill.&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;combine these huge value you are bringing to the company and the high demand for DevOps skills with the fact that there are very few engineers&lt;/strong&gt;, who actually have those skills and can fill the role. This means if you are a DevOps engineer you are highly demanded and companies will pay premium for having you. This means ✅ flexibility, ✅ lots of options, ✅ high salary with lots of added benefits. So you have a super high leverage.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlcjx52o30d00tzupfet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlcjx52o30d00tzupfet.png" alt="High Demand for DevOps Engineers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This means if you actually learn DevOps you will drastically increase your value on the global marketplace and get a whole new set of opportunities out there.&lt;/p&gt;

&lt;p&gt;And I think people should definitely take advantage of this opportunity but I also know learning DevOps can be daunting and difficult and that's exactly why we created &lt;a href="https://www.techworld-with-nana.com/devops-bootcamp" rel="noopener noreferrer"&gt;this full educational program&lt;/a&gt; to give people the opportunity to learn all necessary skills to become a DevOps engineer. And we created our program to give you exactly the skills and knowledge to confidently go out there apply for a job as a DevOps engineer, who can help the company implement the DevOps processes from day one and that's what extremely valuable for the employers.&lt;/p&gt;

&lt;h4&gt;
  
  
  Company perspective 🏢
&lt;/h4&gt;

&lt;p&gt;From the company's perspective, when they are looking for a DevOps engineer they usually write a job opening and either they cannot find any DevOps engineer or get candidates that want to be DevOps engineers, but don't really have enough knowledge yet. 😐 Like they have been developers or can configure servers, but they don't really have any DevOps or core DevOps skills.&lt;/p&gt;

&lt;p&gt;So usually what companies do instead is they upskill their existing employees or hire young engineers and train them specifically in DevOps. Because &lt;strong&gt;if they can't find them, they should train them&lt;/strong&gt;. 🙅🏻‍♀️ But again to train people to become DevOps engineers, you need a DevOps engineer to actually train them. 🙉 So we have a lot of companies, who upskill their engineers in DevOps using our bootcamp, which is another proof that &lt;strong&gt;companies are willing to invest in building DevOps know-how internally&lt;/strong&gt; to implement DevOps throughout the organization.&lt;/p&gt;

&lt;h4&gt;
  
  
  DevOps was not meant as a role
&lt;/h4&gt;

&lt;p&gt;Now I know that there is some controversy around DevOps as a role. That it was &lt;strong&gt;meant as a set of concepts and principles and not as an engineering role&lt;/strong&gt;, but the &lt;strong&gt;reality is that there are real DevOps engineering job positions and people who actually work as DevOps engineers&lt;/strong&gt; 🤷🏻‍♂️ and I actually made a dedicated video on that as well, explaining the topic and how it all evolved so if you're interested you can check it out: &lt;a href="https://youtu.be/0yWAtQ6wYNM" rel="noopener noreferrer"&gt;What is DevOps?&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  5 - Continued learning opportunity 📚
&lt;/h2&gt;

&lt;p&gt;Finally, since in DevOps you are covering the whole software development lifecycle, it means you work with lots of tools, so you &lt;strong&gt;need to be constantly learning and expanding your knowledge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now this might be an advantage, if you're like me and really enjoy learning new stuff all the time or it could be a disadvantage, if you want to focus and solidify knowledge in a few technologies:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6dn2nn514ekw82eo0moa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6dn2nn514ekw82eo0moa.png" alt="Advantage or disadvantage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is actually a necessary thing, since &lt;strong&gt;DevOps is still evolving and there is a lot of dynamics and changes&lt;/strong&gt; in DevOps area. So you have new tools, new concepts and solutions that people come up with all the time and as a DevOps engineer you need to actually &lt;strong&gt;stay up to date and see what new solutions are available to make the processes even better&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Also &lt;strong&gt;DevOps processes are never completed&lt;/strong&gt;, you don't just build stuff and complete your work once, it's a constant ongoing process. Just like developing an application, you don't just create an application once and you're done, you make improvements and continue making the application better and better, adding new features, fixing the bugs and issues etc. It's the same thing with DevOps processes. So lots of new things to learn all the time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Downsides 🤯
&lt;/h2&gt;

&lt;p&gt;As I said this could also be a disadvantage and of course like with everything there are pros and cons here as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevOps does come with some challenges&lt;/strong&gt; as well, like&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;too much to learn&lt;/strong&gt; and&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;too broad of a responsibility&lt;/strong&gt; can be overwhelming for some people.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also often there are &lt;strong&gt;unclear requirements&lt;/strong&gt;, because companies themselves don't know what DevOps is exactly. So you may get pushed into some role or in doing tasks, which are not really in the DevOps area. 🤨&lt;/p&gt;

&lt;p&gt;Another big challenge is &lt;strong&gt;communication with various teams&lt;/strong&gt; in the organization and it can be frustrating if they don't cooperate. 🗯&lt;/p&gt;

&lt;h4&gt;
  
  
  Own video: "Is DevOps right for me" 🎬
&lt;/h4&gt;

&lt;p&gt;But I plan to make a separate video, where I talk about advantages and challenges of DevOps as a career in general, so that you can decide whether a career in DevOps is right for you. 👍&lt;/p&gt;

&lt;p&gt;If you don't want to miss it, you can subscribe and activate the notification bell to get notified: &lt;a href="https://www.youtube.com/c/techworldwithnana" rel="noopener noreferrer"&gt;TechWorld with Nana&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Career path is extremely personal 💡
&lt;/h2&gt;

&lt;p&gt;Now finally I want to mention that &lt;strong&gt;choosing a career path is extremely personal and depends on many personal circumstances&lt;/strong&gt;. For me being a DevOps engineer is working on a wide variety of tasks with a wide variety of technologies and tools. It's understanding the bigger picture and being able to investigate issues efficiently. And for me &lt;strong&gt;the impact and fulfillment from the work definitely outweighs the challenges&lt;/strong&gt; 😊 &lt;/p&gt;

&lt;p&gt;Now I hope this gave you good insights into DevOps and that I could provide some valuable information around it. 😊 It would be really interesting to know what are your experiences in DevOps and your personal preferences? &lt;/p&gt;

&lt;p&gt;Share them in the comments for me and for others 👏&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana" rel="noopener noreferrer"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Njuchi_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/c/techworldwithnana" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>career</category>
      <category>cloud</category>
    </item>
    <item>
      <title>GitLab CI/CD for Beginners [FREE Course]</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Sun, 12 Jun 2022 12:00:29 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/gitlab-cicd-for-beginners-free-course-2mee</link>
      <guid>https://dev.to/techworld_with_nana/gitlab-cicd-for-beginners-free-course-2mee</guid>
      <description>&lt;p&gt;In &lt;a href="https://youtu.be/qP8kir2GUgo" rel="noopener noreferrer"&gt;this GitLab Crash Course&lt;/a&gt;, I will teach you everything you need to know to get started with GitLab CI/CD in 1 hour 🚀 😊&lt;/p&gt;

&lt;h1&gt;
  
  
  Overview - What you’ll learn in 1 Hour ✅
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;What GitLab CI/CD is&lt;/li&gt;
&lt;li&gt;GitLab compared to other CI/CD platforms&lt;/li&gt;
&lt;li&gt;Overview of GitLab Architecture&lt;/li&gt;
&lt;li&gt;Build a full GitLab CI/CD pipeline for a Python demo app that

&lt;ul&gt;
&lt;li&gt;executes tests,&lt;/li&gt;
&lt;li&gt;builds a Docker image,&lt;/li&gt;
&lt;li&gt;pushes to a private Docker repository and&lt;/li&gt;
&lt;li&gt;deploys the app to a remote server on DigitalOcean
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp3tu7d3nw9vpfzp9v5op.png" alt="GitLab CI/CD pipeline"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Learn GitLab Basic Concepts on the way:

&lt;ul&gt;
&lt;li&gt;Pipeline, Jobs,&lt;/li&gt;
&lt;li&gt;Stages&lt;/li&gt;
&lt;li&gt;GitLab Runners and Executors&lt;/li&gt;
&lt;li&gt;Variables (Variable and File Type)&lt;/li&gt;
&lt;li&gt;Docker in Docker
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw87brgezsl26ihgt3rah.png" alt="GitLab course overview"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  What is GitLab CI/CD?
&lt;/h1&gt;

&lt;p&gt;First of all what is Gitlab CI/CD and why should you even care?&lt;/p&gt;

&lt;p&gt;GitLab platform generally is striving to become THE DevOps platform or a &lt;strong&gt;one-stop shop for building DevOps processes for your applications&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8c90kntqdog5xo74omq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8c90kntqdog5xo74omq.png" alt="GitLab as a DevOps platform"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So they have exactly this roadmap and they're working towards that, which means they're actually integrating and creating new features to basically give you everything in one platform to build complete DevOps processes and big part of those processes is a CI/CD pipeline.&lt;/p&gt;
&lt;h1&gt;
  
  
  What is CI/CD in simple words
&lt;/h1&gt;

&lt;p&gt;So first of all what is CI/CD in simple words.&lt;/p&gt;

&lt;p&gt;CI/CD stands for &lt;strong&gt;Continuous Integration&lt;/strong&gt; and &lt;strong&gt;Continuous Deployment&lt;/strong&gt; or &lt;strong&gt;Continuous Delivery&lt;/strong&gt; and what it basically means is automatically and &lt;strong&gt;continuously testing, building and releasing code changes to the deployment environment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So that means when a developer commits a new code into the Gitlab repository, Gitlab will automatically execute a CI/CD pipeline that you have configured for your project to release those code changes to the end environment, where the end users can access them:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxie0vm15pd316ea0g6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxie0vm15pd316ea0g6v.png" alt="CI/CD"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But this CI/CD concept is a topic of its own. If you want to understand it on a deeper level then you can check out my video about DevOps and CI/CD pipeline, where I explain this in more detail here: &lt;a href="https://youtu.be/0yWAtQ6wYNM" rel="noopener noreferrer"&gt;What is DevOps?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But as I said in simple terms CI/CD is to continuously release your code changes to the end environment and in this crash course we will be building a simplified version of a CI/CD pipeline using Gitlab CI/CD.&lt;/p&gt;
&lt;h1&gt;
  
  
  Many CI/CD platforms
&lt;/h1&gt;

&lt;p&gt;Of course there are many CI/CD tools, one of the most used ones in the industry still being Jenkins. And Gitlab CI/CD is just one of those other CI/CD platforms:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi28v0vbj96t8ni8qv1j4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi28v0vbj96t8ni8qv1j4.png" alt="Overview of CI/CD platforms"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Source Code &amp;amp; CI/CD on same platform
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;All of them have their advantages and disadvantages&lt;/strong&gt;, but a big advantage of using Gitlab to build CI/CD pipelines for your applications is that you already have your code on Gitlab, so this is an extension of your software development processes in your team, where you can also build CI/CD pipelines on the same platform:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sunluqvv7jjg2ta543o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sunluqvv7jjg2ta543o.png" alt="GitLab benefit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So your team already works with Gitlab, you have your code there, so this is basically an additional feature that you can &lt;strong&gt;extend your workflows on Gitlab&lt;/strong&gt; with and you don't need a separate tool for that. 👍&lt;/p&gt;

&lt;p&gt;Apart from that Gitlab makes that extension very seamless by allowing you to &lt;strong&gt;get started without any setup effort and also having your pipeline as part of your application code compared to Jenkins for example&lt;/strong&gt;, where you have to set up and configure the Jenkins server, create a pipeline and then connect it to the Git project:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2l71f3zcb9tauwko5gir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2l71f3zcb9tauwko5gir.png" alt="GitLab vs Jenkins"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With Gitlab you can start without any of this configuration effort and we will see that in the demo part.&lt;/p&gt;
&lt;h1&gt;
  
  
  GitLab Architecture
&lt;/h1&gt;

&lt;p&gt;Now if you don't have to set up anything and configure any servers to run the pipelines &lt;strong&gt;how does it actually work&lt;/strong&gt;?&lt;br&gt;
And this leads us to the topic of Gitlab architecture and how it works.&lt;/p&gt;
&lt;h3&gt;
  
  
  GitLab Instance
&lt;/h3&gt;

&lt;p&gt;You have a Gitlab instance or also called Gitlab server that &lt;strong&gt;hosts your application code and your pipelines and basically the whole configuration&lt;/strong&gt;. So it knows what needs to be done.&lt;/p&gt;
&lt;h3&gt;
  
  
  GitLab Runners
&lt;/h3&gt;

&lt;p&gt;And connected to that Gitlab instance you have multiple Gitlab runners, which are separate machines connected to the Gitlab server machine, which are actually the ones executing&lt;br&gt;
the pipelines.&lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;Gitlab server knows what needs to be done&lt;/strong&gt; and &lt;strong&gt;Gitlab runner actually does that&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjtwqwgm4eemxyqz8lcd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjtwqwgm4eemxyqz8lcd3.png" alt="GitLab Architecture"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Managed or SaaS
&lt;/h3&gt;

&lt;p&gt;And &lt;em&gt;&lt;a href="http://www.gitlab.com" rel="noopener noreferrer"&gt;www.gitlab.com&lt;/a&gt;&lt;/em&gt; is actually a &lt;strong&gt;managed Gitlab instance&lt;/strong&gt; that offers multiple managed runners already out of the box.&lt;br&gt;
So these are all maintained by Gitlab and that's why you can start running your pipelines without any setup and configuration effort using this managed setup.&lt;/p&gt;
&lt;h3&gt;
  
  
  Self-Managed
&lt;/h3&gt;

&lt;p&gt;And this is already enough for starting out but of course for your own organization you may want to &lt;strong&gt;manage the runners or the whole setup yourself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So you can create partially or completely self-managed Gitlab setup as well:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjtifk5tgrmjy3imocqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjtifk5tgrmjy3imocqt.png" alt="Managed vs Self-Managed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this crash course we will use Gitlab's managed infrastructure and free features to build our release pipeline. So we will not need to configure anything ourselves. 👍&lt;/p&gt;
&lt;h1&gt;
  
  
  Pipeline Configuration - .gitlab-ci.yml
&lt;/h1&gt;

&lt;p&gt;Now the question is how do we create a Gitlab CI/CD pipeline? 🤔&lt;/p&gt;

&lt;p&gt;Well, following the concept of &lt;strong&gt;Configuration as Code&lt;/strong&gt; or &lt;strong&gt;Pipeline as Code&lt;/strong&gt;, the whole pipeline will be written in code and hosted in the applications git repository itself in a &lt;strong&gt;simple YAML file&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And the file has to be called &lt;strong&gt;.gitlab-ci.yml&lt;/strong&gt;, so that Gitlab can automatically detect that pipeline code and execute it without any extra configuration effort from our site:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzpngl1pa6i4utvuxqzp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzpngl1pa6i4utvuxqzp.png" alt="Pipeline is scripted"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So in the &lt;strong&gt;root of the project's repository&lt;/strong&gt;, we're going to create this YAML file and we're going to write all the pipeline configuration inside and we can actually&lt;br&gt;
do that directly in the Gitlab UI as well, so we don't have to switch back and forth from the editor to Gitlab.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3jns7f24h9z2awzfx4c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3jns7f24h9z2awzfx4c.png" alt="GitLab Editor"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Jobs
&lt;/h3&gt;

&lt;p&gt;The tasks in the CI/CD pipeline such as &lt;code&gt;running tests&lt;/code&gt;, &lt;code&gt;building an image&lt;/code&gt;, &lt;code&gt;deploying to a server&lt;/code&gt; etc. are configured as what's called &lt;strong&gt;'jobs'&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fngoapoz8toyrqv2ebwe7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fngoapoz8toyrqv2ebwe7.png" alt="Jobs 1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs1bag6wv05m5yalqrtg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs1bag6wv05m5yalqrtg1.png" alt="Jobs 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So Jobs are the &lt;strong&gt;most fundamental building block&lt;/strong&gt; of a .gitlab-ci.yml file. They &lt;strong&gt;define what to do&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each job has a name and inside the job we have a couple of&lt;br&gt;
parameters or a couple of attributes or things that we want to configure for the job.&lt;/p&gt;

&lt;p&gt;The first attribute and the only required attribute of a job is what's called a &lt;strong&gt;script&lt;/strong&gt;. And script is basically, where we list any commands that should be executed for that job:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz091c3qmzujkqymnntqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz091c3qmzujkqymnntqt.png" alt="Pipeline config basic structure"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So for example for 'run tests', we need to execute `make test* for our python demo application. This is the command that needs to be executed in order to run the test, so we're going to write that command:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6o1gdz5mz1mfnwy849l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6o1gdz5mz1mfnwy849l.png" alt="Pipeline config examples"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, in order for this to run successfully we need to do a couple of things.&lt;/p&gt;

&lt;p&gt;But for the actual demo part, let's continue with the video, so you can follow along more easily: 🤓&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/qP8kir2GUgo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;▬▬▬▬▬▬  R E F E R E N C E S  🔗▬▬▬▬▬▬ &lt;br&gt;
►   Git repo we build the CI/CD pipeline for: &lt;a href="https://gitlab.com/nanuchi/gitlab-cicd-crash-course" rel="noopener noreferrer"&gt;https://gitlab.com/nanuchi/gitlab-cicd-crash-course&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;▬▬▬▬▬▬   Course Pre-Requisites  ▬▬▬▬▬▬ &lt;br&gt;
💡  Docker - learn here:    ►  &lt;a href="https://youtu.be/3c-iBn73dDE" rel="noopener noreferrer"&gt;https://youtu.be/3c-iBn73dDE&lt;/a&gt;&lt;br&gt;
💡  YAML -   learn here:    ►  &lt;a href="https://youtu.be/1uFVr15xDGg" rel="noopener noreferrer"&gt;https://youtu.be/1uFVr15xDGg&lt;/a&gt;&lt;br&gt;
💡  Basics of Git&lt;/p&gt;

&lt;p&gt;Hope you will learn a lot in this beginner tutorial!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana" rel="noopener noreferrer"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Njuchi_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCdngmbVKX1Tgre699-XLlUA?sub_confirmation=1" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/techworld_with_nana/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gitlab</category>
      <category>devops</category>
      <category>tutorial</category>
      <category>docker</category>
    </item>
    <item>
      <title>How I learn new technologies as a DevOps Engineer (without being overwhelmed 👏)</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Wed, 06 Apr 2022 14:10:32 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/how-i-learn-new-technologies-as-a-devops-engineer-without-being-overwhelmed--495e</link>
      <guid>https://dev.to/techworld_with_nana/how-i-learn-new-technologies-as-a-devops-engineer-without-being-overwhelmed--495e</guid>
      <description>&lt;p&gt;In this blog article I talk about the &lt;strong&gt;challenge of learning multiple technologies and staying up to date with new ones in the DevOps field&lt;/strong&gt; and &lt;strong&gt;how I personally manage not to be overwhelmed by it&lt;/strong&gt; and make the learning process much easier. 💯&lt;/p&gt;

&lt;p&gt;I hope sharing my experience and tips on this topic will be useful for some of you 😊&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the written version of my &lt;a href="https://youtu.be/Cthla7KqU04" rel="noopener noreferrer"&gt;new youtube video&lt;/a&gt;&lt;/em&gt; ✍️ 🙂&lt;/p&gt;




&lt;h1&gt;
  
  
  Why it's overwhelming 🙉
&lt;/h1&gt;

&lt;p&gt;As a DevOps engineer you need to learn so many tools to even start your job as a Junior DevOps engineer. So the minimum entry requirement is already super high. Which is logical, because &lt;strong&gt;DevOps is about creating end-to-end processes&lt;/strong&gt; for the complete software development and deployment and there are &lt;strong&gt;many tools involved&lt;/strong&gt; in creating these processes.&lt;/p&gt;

&lt;p&gt;👉🏼 &lt;a href="https://youtu.be/9pZ2xmsSDdo" rel="noopener noreferrer"&gt;More on that here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But in addition to having to learn 5 to 10 technologies right at the beginning, which is you can't just learn them in isolation, but you have to know how to combine them as well how to integrate them together to build those processes.&lt;/p&gt;

&lt;p&gt;But it doesn't stop there. To add to this challenge the DevOps space is developing really fast and we see new technologies new concepts emerging all the time so many engineers feel pressure to learn new tools to use in their projects. 🤯&lt;/p&gt;

&lt;p&gt;So how can you keep an overview and not get too overwhelmed by all this but at the same time still stay up to date and know when a new tool comes up that can actually make your work easier and more efficient or help you and your team in your software development and deployment process. 🤔&lt;/p&gt;

&lt;h1&gt;
  
  
  Separate Concepts and Tools
&lt;/h1&gt;

&lt;p&gt;First of all, when we're talking about developments in the DevOps space, there are two main categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the concepts 💡 and&lt;/li&gt;
&lt;li&gt;the tools 🛠&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And it's important to separate them. Concepts are the foundational basis of DevOps processes, they are guidelines to how things should be done. Therefore &lt;strong&gt;understanding the concepts before learning the tools is super important&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools are just means to an end
&lt;/h3&gt;

&lt;p&gt;It's also important to understand that tools are just means to an end. &lt;strong&gt;Every tool is there to solve a problem or to serve some purpose.&lt;/strong&gt; Understanding the concepts helps you know what processes you have, what problems and challenges are in those processes. And when you have that as a basis, then you can start learning the tools that can actually solve those challenges or implement those concepts.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;CI/CD Example:&lt;/em&gt;&lt;br&gt;
To give you some examples, before learning any DevOps tool you should actually learn the CI/CD concept first:&lt;br&gt;
👉 What does a CI/CD process look like?&lt;br&gt;
👉 What challenges does it have?&lt;br&gt;
👉 What is its purpose? which is to release application&lt;br&gt;
improvements fast and in an automated way to the end users&lt;br&gt;
👉 What does it include? What steps does it have? Like&lt;br&gt;
building the application, testing, deploying to development, to staging and so on:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi394p7ncclx4nq5as2wn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi394p7ncclx4nq5as2wn.png" alt="CI/CD Pipeline"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then you learn the tools that implement this concept and help you achieve its goals.&lt;/p&gt;

&lt;p&gt;So if you're just getting started in the DevOps field this will be the first step or the first concept to learn.&lt;br&gt;
👉🏼 &lt;a href="https://youtu.be/0yWAtQ6wYNM" rel="noopener noreferrer"&gt;Here a video exactly on the topic that you can check out&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Infrastructure as Code Example:&lt;/em&gt;&lt;br&gt;
Another example would be, before learning any Infrastructure as Code tool, you should learn the Infrastructure as Code concept first. Again asking yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why is it needed?&lt;/li&gt;
&lt;li&gt;What is its purpose? Like doing manual work versus automated code for infrastructure provisioning, because manual work is more effort. It has more mistakes, it is less transparent and so on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And also understand what are the challenges of the Infrastructure as Code concept and then again you learn the tools that implement these concepts and you also understand how these different tools address those challenges.&lt;/p&gt;

&lt;p&gt;So now when you're learning DevOps tools or you know a bunch of them already and the new tool comes up, your first question to challenge that technology, is to understand what problem does it actually solve and is that problem relevant for you? So you have a big picture of the concepts and the DevOps processes, because you learned the concepts first, so &lt;strong&gt;now you can easily fit each tool into that big picture&lt;/strong&gt; by just understanding the main purpose of the tool on a high level. 🙌&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6gm5u4w9a2vh7wavtxsq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6gm5u4w9a2vh7wavtxsq.png" alt="DevOps Concepts to Tools"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Use Cases - What problems does it solve? 🤔
&lt;/h1&gt;

&lt;p&gt;So when I start learning a new tool, the first thing I want to find out is, not the cool features that it has or the cool UI that it provides or that it can integrate with 100 other technologies in the ecosystem or that it's super cloud native, Kubernetes native with automated workflow or other fancy stuff 🙄, but instead my first question is what problem or problems does it solve and where does it fit on the big picture of DevOps. 💯 The simpler the answer, the better.&lt;/p&gt;

&lt;p&gt;And there are tools that solve one main problem, but there are also tools that solve multiple problems. In which case I want to find out, which one of those problems are the most important, the main ones, because &lt;strong&gt;a tool is usually good at 1 or 2 things&lt;/strong&gt; and the rest of the use cases are additional bonus features. So in this step I investigate the use cases of the tool.&lt;/p&gt;

&lt;p&gt;Once the problem is clear, then you can evaluate and measure how important or relevant that problem is to decide, whether you want to dig into that tool deeper and basically learn more about it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Also for established tools
&lt;/h3&gt;

&lt;p&gt;And for already established tools, like Kubernetes, Docker, Terraform and so on, which you anyways have to learn, it's still the first step. Because you may know that everyone is using Kubernetes and Docker, but you may not know why 🤷🏻‍♂️ and that's the first thing you should understand and find out when approaching any new technology.&lt;/p&gt;

&lt;h1&gt;
  
  
  How does the tool work? 🧐
&lt;/h1&gt;

&lt;p&gt;After that you can dive in the 'how the tool solves that problem'. There are many tools that address the same issue but in different ways.&lt;/p&gt;

&lt;p&gt;So if you are learning an Infrastructure as Code tool like Terraform, you should find out how it does its job, like:&lt;br&gt;
 Terraform uses state management&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It has modules and providers&lt;/li&gt;
&lt;li&gt;It uses declarative approach&lt;/li&gt;
&lt;li&gt;It has a command line interface with its own commands&lt;/li&gt;
&lt;li&gt;How it connects to the cloud platforms that you want to provision infrastructure on&lt;/li&gt;
&lt;li&gt;And also how does it compare to alternative tools that you may already know about&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So you learn about the core concept of the tool itself on a high level overview.&lt;/p&gt;

&lt;h1&gt;
  
  
  Hands-On Practice with realistic use cases 👩‍💻
&lt;/h1&gt;

&lt;p&gt;Once&lt;br&gt;
✅ I understand the problem and the use cases of the tool,&lt;br&gt;
✅ now I know why I'm even learning it,&lt;br&gt;
✅ I also understand how it works theoretically&lt;br&gt;
✅ so i know more or less how I could integrate it into my existing workflow processes.&lt;/p&gt;

&lt;p&gt;Now it's time to get started and &lt;strong&gt;actually use the tool, because the confidence comes from practice&lt;/strong&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Learning with real use cases 🚀
&lt;/h3&gt;

&lt;p&gt;And here is a super important thing to understand about practicing a tool hands-on. You should &lt;strong&gt;always practice with an actual example use case&lt;/strong&gt;, something you can actually apply in real life projects.&lt;/p&gt;

&lt;p&gt;So the way I do it is, I first define the actual simple, but realistic use case with the tool, because starting with hands-on practice without an example use case can be demotivating and confusing. &lt;/p&gt;

&lt;p&gt;Let me give you some examples:&lt;/p&gt;

&lt;h3&gt;
  
  
  1) Docker Example 🐳
&lt;/h3&gt;

&lt;p&gt;If you want to learn how to use Docker, just take a simple application and dockerize it with Dockerfile to learn how this process works. Then think about how you can build and run this dockerized application. By implementing these simple steps you will actually learn much more than just randomly learning some concepts about the tool through the official documentation or some blog articles.&lt;/p&gt;

&lt;p&gt;So you create a use case like, I have a basic Node.js application:&lt;br&gt;
👉 I dockerize it&lt;br&gt;
👉 I build an image&lt;br&gt;
👉 Push it to the repository&lt;br&gt;
👉 Then I run it and test that the application is accessible&lt;/p&gt;

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

&lt;p&gt;And for each step you can learn how to do it and what are the Docker concepts related to implementing those steps 🚀&lt;/p&gt;

&lt;p&gt;Later you can expand that use case. Like you want to add a database connection to your dockerized Node.js application and you want to run multiple Docker containers. So you learn about Docker Compose and how to use it 👍&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Kubernetes Example
&lt;/h3&gt;

&lt;p&gt;Another example would be, if you're learning Kubernetes. Again think of a simple use case, like you already have a dockerized application with 2 other services. So you want to deploy all of them in Kubernetes with multiple replicas.&lt;/p&gt;

&lt;p&gt;By doing just that one simple use case, you will already learn so much about how Kubernetes works and how to deploy applications in it and again you can expand on that use case and add more steps. 🙌&lt;/p&gt;

&lt;h3&gt;
  
  
  Resources to learn from 📚
&lt;/h3&gt;

&lt;p&gt;Now of course you need some resources to be able to learn how to do this, right? I personally go to the &lt;strong&gt;official documentation&lt;/strong&gt; or &lt;strong&gt;blog articles&lt;/strong&gt; and &lt;strong&gt;video tutorials&lt;/strong&gt; to learn how to do each step individually. So specifically on that topic, because it's much easier to find out resources on specific individual steps, than just learning about the whole&lt;br&gt;
setup.&lt;/p&gt;

&lt;p&gt;And while I'm implementing that individual step, I also learn all the concepts related to that on the way or find tutorials and online courses, like ours, where the instructor guides you exactly through this kind of simple but, realistic use case that you can follow along:&lt;br&gt;
💙 &lt;a href="https://youtu.be/3c-iBn73dDE" rel="noopener noreferrer"&gt;FREE Docker course&lt;/a&gt;&lt;br&gt;
💙 &lt;a href="https://youtu.be/X48VuDVv0do" rel="noopener noreferrer"&gt;FREE Kubernetes course&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And again you can expand on that finding more advanced use cases at your work or just by yourself and trying to implement those as well.&lt;/p&gt;

&lt;h1&gt;
  
  
  Patience while learning 😌
&lt;/h1&gt;

&lt;p&gt;Now there is another super important thing I want to point out, when learning the basics of a tool. Especially if it's a tool like Kubernetes or Docker that you know you will definitely need long term in your DevOps career and it is to: have patience while learning. So &lt;strong&gt;take your time ⏰ when learning the foundational concepts of the tool in order to avoid leaving any knowledge gaps&lt;/strong&gt; and trust me &lt;strong&gt;it always pays off at the end&lt;/strong&gt;, because building on a good foundational knowledge is way easier, because you always have reference knowledge for new stuff and the more you learn the more things make sense, the things just click more and learning new stuff becomes more and more easier.&lt;/p&gt;

&lt;p&gt;In comparison if you rush into things 🏃🏾, because you don't have patience or you don't have time without really understanding the main concepts and learning things kind of chaotically with lots of knowledge gaps, you &lt;strong&gt;may actually get more and more confused if you just add stuff to it&lt;/strong&gt;. So learning new things may actually become more challenging. 🤯&lt;/p&gt;

&lt;h1&gt;
  
  
  Embrace lifelong learning 😎
&lt;/h1&gt;

&lt;p&gt;As an IT professional, learning never stops, because the &lt;strong&gt;tech world is rapidly changing&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new versions of the existing tools are being released&lt;/li&gt;
&lt;li&gt;as well as new tools are being developed all the time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So with the above techniques that I mentioned you will have a good foundation for quickly evaluating new tools, whether they are relevant for you and worth learning but also if you have a good understanding of a specific tool, you can easily learn the new features of that tool as well.&lt;/p&gt;

&lt;p&gt;So it's also a &lt;strong&gt;mindset of lifelong continuous learning&lt;/strong&gt;. ♾&lt;/p&gt;

&lt;h1&gt;
  
  
  How to stay up to date? 🎯
&lt;/h1&gt;

&lt;p&gt;Finally you of course need to be aware when a new version of a popular tool gets released or a new technology is becoming more mainstream and popular so you have to adopt that.&lt;/p&gt;

&lt;p&gt;For that you also have many ways to stay up to date with industry developments, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 you can follow some industry peers on social media accounts or blog platforms that basically post about these kind of new developments&lt;/li&gt;
&lt;li&gt;👥 you can join DevOps communities either online or offline communities, where people exchange this kind of information&lt;/li&gt;
&lt;li&gt;🎬 or you can also subscribe to Youtube channels like ours, but also many other channels that make really great videos on DevOps trends as well&lt;/li&gt;
&lt;li&gt;and much more ways like podcasts 🎤, newsletters 📩 and so on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're interested, you will find a way to stay up to date that suits you.&lt;/p&gt;

&lt;h1&gt;
  
  
  How are you tackling this challenge? 🙋🏽‍♂️
&lt;/h1&gt;

&lt;p&gt;Now I hope sharing my experience and tips on this topic was useful for you. 😊 Please share below how you are tackling this challenge and generally share your experiences how do you keep up with technology developments and what are some of your tips on that? 🤔&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/techworld_with_nana/" rel="noopener noreferrer"&gt;Instagram - Posting many behind-the-scene stuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana" rel="noopener noreferrer"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Njuchi_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>discuss</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>SRE and Tasks of an SRE explained ✅</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Tue, 08 Feb 2022 15:10:43 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/sre-and-tasks-of-an-sre-explained-3ah9</link>
      <guid>https://dev.to/techworld_with_nana/sre-and-tasks-of-an-sre-explained-3ah9</guid>
      <description>&lt;p&gt;SRE is becoming a very popular term in the DevOps and generally the software development world. Probably some of you have already heard about it, but are not sure what it is exactly. &lt;/p&gt;

&lt;p&gt;So this article gives a &lt;strong&gt;detailed look&lt;/strong&gt; at what &lt;strong&gt;SRE&lt;/strong&gt; or &lt;strong&gt;S&lt;/strong&gt;ite &lt;strong&gt;R&lt;/strong&gt;eliability &lt;strong&gt;E&lt;/strong&gt;ngineering really is with the goal to clarify all questions and doubts around it 🙌&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the written version of my &lt;a href="https://youtu.be/OnK4IKgLl24" rel="noopener noreferrer"&gt;new youtube video&lt;/a&gt;&lt;/em&gt; ✍️ 🙂&lt;/p&gt;

&lt;h2&gt;
  
  
  Table Of Contents 📝
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why was there a need for SRE?&lt;/li&gt;
&lt;li&gt;What is SRE? - Official Definition&lt;/li&gt;
&lt;li&gt;What is system reliability and why it's important?&lt;/li&gt;
&lt;li&gt;How to make systems reliable?&lt;/li&gt;
&lt;li&gt;SRE in Practice: SLA &amp;amp; Error Budget&lt;/li&gt;
&lt;li&gt;SRE Tasks and Responsibilities&lt;/li&gt;
&lt;li&gt;Who is doing SRE? SRE Role&lt;/li&gt;
&lt;li&gt;SRE vs DevOps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First of all, I recommend that you read my recent DevOps article first, where I explain DevOps in detail. This will make it definitely easier to understand the topics in this video 😊&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/techworld_with_nana" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F319175%2Fc5aebaff-6768-4f5e-9c0b-b1eae091ded8.png" alt="techworld_with_nana"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/techworld_with_nana/what-is-devops-really-understand-it-29j7" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;What is DevOps? REALLY understand it&lt;/h2&gt;
      &lt;h3&gt;TechWorld with Nana ・ Jan 18 '22&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#development&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#sre&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h1&gt;
  
  
  How SRE emerged and why was there even a need for SRE? 🤔 &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;In a &lt;strong&gt;traditional software development process&lt;/strong&gt;, we have developers and operations as two separate teams. Each of them with their &lt;strong&gt;own goal&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developers&lt;/strong&gt;: Want to push out application changes as fast as possible to the end users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operations&lt;/strong&gt;: Want to keep the application stable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So Operations are very careful about each and every change and this causes a &lt;strong&gt;conflict of interest between these two roles&lt;/strong&gt;, forcing them to work against each other instead of collaborate:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuoonngsuoz7pduffn17m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuoonngsuoz7pduffn17m.png" alt="Dev vs Ops"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And DevOps was actually introduced to help fix exactly this issue. However, while DevOps made release process faster, these &lt;strong&gt;releases were not as stable as ideally wished by DevOps principles&lt;/strong&gt;. Plus in DevOps team there was no dedicated role or person that actually focused full time on keeping systems reliable.&lt;/p&gt;

&lt;p&gt;And that's how the need for SRE and a Site Reliability Engineer as a separate role emerged. 💡&lt;/p&gt;

&lt;p&gt;So what is SRE?&lt;/p&gt;

&lt;h1&gt;
  
  
  What is SRE? - Official Definition &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;SRE was conceptualized at Google by Ben Traynor, a software engineer, who was given a task to run a small team of other software engineers to do what used to be Operations work.&lt;/p&gt;

&lt;p&gt;And according to his own definition:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;SRE is what happens when you &lt;strong&gt;treat operations as a software problem&lt;/strong&gt; and staff it with a bunch of software engineers. 👩‍💻🧑🏻‍💻&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At its core:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6t1df5szd6qpklm4qu3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6t1df5szd6qpklm4qu3.png" alt="SRE definition"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But this definition is of course too vague and high level to really understand how it's implemented in practice. 🧐 So let's break it down and &lt;strong&gt;analyze each part of this definition step by step&lt;/strong&gt;. 👍&lt;/p&gt;

&lt;h1&gt;
  
  
  What is system reliability and why it's important? 🧐 &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;First of all, what is a system that we want to keep reliable? Or what does a system even mean in this definition?&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a System?
&lt;/h3&gt;

&lt;p&gt;The system is the servers, infrastructure, the platform. So the &lt;strong&gt;whole deployment environment&lt;/strong&gt;, where the application runs.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Reliablity?
&lt;/h3&gt;

&lt;p&gt;Now what exactly is reliability and why is it so important to keep our systems reliable? 🤔&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unreliable Services&lt;/strong&gt; ⛔️&lt;br&gt;
Imagine you work with emails daily and your email provider is down once a week or your online banking application is down and not accessible regularly. This would be &lt;em&gt;unreliable services&lt;/em&gt;. 🤨 You can't rely that it's available when you need it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reliable Services&lt;/strong&gt; ❇️&lt;br&gt;
On the other hand, many popular services like Gmail, Twitter, Youtube etc are rarely inaccessible. 👏 So these systems are pretty &lt;em&gt;reliable&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But the thing is, users usually do not notice reliability of the system. 🙄 It only becomes visible when something goes wrong and the services are down. Do you remember the recent outage of Facebook, Instagram and other related services that made huge news?&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9sle1kwcveb1ddvz0zin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9sle1kwcveb1ddvz0zin.png" alt="Facebook Outages"&gt;&lt;/a&gt;&lt;br&gt;
What about AWS server outages that also affected other applications that were hosted on AWS?&lt;/p&gt;

&lt;p&gt;Of course everybody noticed and knew about it when it happened. So &lt;strong&gt;the more popular and bigger the product or service and the more used, the more impact it will have&lt;/strong&gt; 👀, if the service had an outage, which means more their team should worry about its reliability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why reliability is important?
&lt;/h3&gt;

&lt;p&gt;What are the effects or impact of outages or system unreliability? For most of the services this is a lot of &lt;strong&gt;unhappy customers and lots of lost revenue&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F35ma9wbwn7c96umii7rc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F35ma9wbwn7c96umii7rc.png" alt="Why reliability is important"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Like imagine an online shop is down on a holiday or an online bank is not working, because of traffic overload. This means lots of lost business, because people cannot order anything on that shop.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to make systems reliable? &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;Okay, so we understood that systems need to be reliable, but how do we make a system reliable or asked differently:&lt;br&gt;
What makes a system unreliable, what affects its reliability? 🤔 &lt;/p&gt;

&lt;p&gt;The main cause of system becoming unreliable is, when you make &lt;strong&gt;changes to your system&lt;/strong&gt; ⚡️:&lt;/p&gt;

&lt;p&gt;Like change something:&lt;br&gt;
  ⚡️ in the infrastructure&lt;br&gt;
  ⚡️ the platform, where the application is running&lt;br&gt;
  ⚡️ the application itself and its services&lt;br&gt;
  ⚡️ and so on&lt;/p&gt;

&lt;p&gt;These changes may cause a disruption and break something in the whole setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bad Solution 👎🏼
&lt;/h3&gt;

&lt;p&gt;As a solution we can say no changes allowed or &lt;strong&gt;limit the amount of changes&lt;/strong&gt; 🙅🏻‍♂️ to keep systems reliable, but that really limits the business. We want to make changes and improvements to our application to make it better and increase its business value and stay competitive etc. 💪 &lt;/p&gt;

&lt;p&gt;Because if our competitor is bringing out new features, we need to keep up, and that's the main focus of software developers, to make those changes and improvements.&lt;/p&gt;

&lt;p&gt;But on the other hand, if the application is not accessible that's also bad for business, because you may have awesome features, but nobody can use it. And it's the operations job to take care of that and make sure the application is accessible.&lt;/p&gt;

&lt;p&gt;This means Devs want to release fast and Ops want to keep stability. So traditionally, Devs would make a change and Ops would analyze with hundreds of checklists and mechanisms to make sure the change would not affect the system:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmre7kpgxuz5aajrwv3xu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmre7kpgxuz5aajrwv3xu.png" alt="Ops slowing down release process"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This whole analysis and evaluations &lt;strong&gt;slows down the release process&lt;/strong&gt; and that's been the major challenge of the traditional way of software development. And that's exactly &lt;strong&gt;what DevOps and SRE try to solve&lt;/strong&gt;. 🚀&lt;/p&gt;

&lt;h3&gt;
  
  
  So what's the specific solution of SRE here? 💡
&lt;/h3&gt;

&lt;p&gt;Well, &lt;strong&gt;SRE tries to automate the process of analyzing and evaluating the effects the change will have on our system reliability&lt;/strong&gt;. Automation means no checklists or discussions of operations team, whether to release the change or not or what threats and risks are involved:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yp06uqnbu2dzrm22kad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yp06uqnbu2dzrm22kad.png" alt="Automation instead of manual Ops"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead, the evaluation is based on &lt;strong&gt;automated processes&lt;/strong&gt; and this makes &lt;strong&gt;releasing changes fast and safe at the same time&lt;/strong&gt;. 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  SRE in Practice: SLA &amp;amp; Error Budget &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;Now how is that automated evaluation done? 🤩&lt;/p&gt;

&lt;p&gt;The way it works is using what's called &lt;strong&gt;SLAs&lt;/strong&gt;. So what is an SLA? SLA is basically, &lt;strong&gt;how reliable a system is going to be to its end users.&lt;/strong&gt; So how often it's going to be up and how often it's going to be down. And it's expressed in percentage.&lt;br&gt;
A service that works all the time, is never down, has a hundred percent SLA. 💯&lt;/p&gt;

&lt;h3&gt;
  
  
  No need for 100% Reliability
&lt;/h3&gt;

&lt;p&gt;Now you may be thinking: &lt;em&gt;"Of course any service should be 100 reliable right isn't that a natural goal?"&lt;/em&gt; 👀&lt;br&gt;
Well, not really. First of all, it's very hard to achieve 100% reliability and there are very few services in the world that actually need a 100% SLA.&lt;/p&gt;

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

&lt;p&gt;So for example, if your internet provider or the customer's device itself is not 100% reliable, which is the case with most laptops, mobile phones and so on, then your service does not need to be either. It &lt;strong&gt;can be available maximum at the same rate as the underlying network or device&lt;/strong&gt;. 💡&lt;/p&gt;

&lt;p&gt;And in those cases a reliability of three nines or four or five nines may be enough, so that users don't even notice that there is an issue. 👌&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gztzmgky4ypxooojgc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gztzmgky4ypxooojgc0.png" alt="Reliability Number of Nines"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The closer, you try to get to 100%, the more effort it is, which as you see is an unneeded effort, because you don't need 100% SLA for most applications&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Examples of SLA
&lt;/h3&gt;

&lt;p&gt;For example you can define a service level agreement about the &lt;strong&gt;accessibility of your application&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcgagfk2vveq1x3c8lvry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcgagfk2vveq1x3c8lvry.png" alt="High Availability Number of Nines"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Source: &lt;a href="https://en.wikipedia.org/wiki/High_availability" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/High_availability&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So for example a 99 SLA for application accessibility would mean that the system can be down maximum &lt;em&gt;3.65 days&lt;/em&gt; in a year. An SLA with 5 nines or 99.999% allows an application to be unaccessible maximum &lt;em&gt;5 minutes&lt;/em&gt; a year, so the rest of the time it should work.&lt;/p&gt;

&lt;p&gt;You can actually define multiple such agreements or SLAs, not just the accessibility or availability of the system.&lt;/p&gt;

&lt;p&gt;Other SLA examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;application response time&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;error rate&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example if you have an application that serves a million requests a week with 99% SLA, you define that 990 000 of those requests will be successful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who defines these SLAs? 💁🏻‍♀️
&lt;/h3&gt;

&lt;p&gt;Okay now you may be wondering who defines these SLAs? So basically who decides how many requests must be successful out of these million requests or how much downtime is allowed for the application? Who makes this kind of decisions?&lt;/p&gt;

&lt;p&gt;As this decision affects the end users and their user experience, naturally business people are also involved in this process. So &lt;strong&gt;business people together with the engineers&lt;/strong&gt; like SRE and DevOps Engineers decide together what service level agreements they want to define for their application:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwo04zcklonlcxggr9xyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwo04zcklonlcxggr9xyy.png" alt="Business People and Engineers decide on SLAs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Based on the industry benchmarks, competition, user feedback and so on, business people will define the desired SLAs on a &lt;strong&gt;higher level&lt;/strong&gt; and the engineers will then define them on a &lt;strong&gt;technical level and also make sure to integrate them into their DevOps and SRE processes&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Error Budget
&lt;/h3&gt;

&lt;p&gt;As I mentioned SLA for availability defines how long the service should be available or how much downtime is allowed for that service and that &lt;strong&gt;allowed downtime is also what's called an error budget&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstgec7h24wrxsdgc45w0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstgec7h24wrxsdgc45w0.png" alt="Error Budget"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In SRE, a team can "spend" that error budget on making unreliable changes. So basically that error budget says that we're allowed to have that much downtime in our system without losing business, making customers unhappy, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Way to regulate the release speed ⚖️
&lt;/h3&gt;

&lt;p&gt;So &lt;strong&gt;SLA is like a barometer&lt;/strong&gt;, you can &lt;strong&gt;turn it up or down based on how reliable your system needs to be&lt;/strong&gt;. And of course the closer to 100, the more effort you need to put in to guarantee the reliability of your systems.&lt;/p&gt;

&lt;p&gt;Now once the SLA is defined the &lt;strong&gt;system performance can be measured against this number&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;⛔️ If &lt;strong&gt;systems are more unreliable than the SLA allows&lt;/strong&gt;: Then more resources from the SRE team will be put to make the systems reliable. Again because we have exceeded that allowed amount of downtime. And until the system is recovered to be within the defined SLA, fewer changes will be allowed:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frs9x2cppthgrn23zs4qc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frs9x2cppthgrn23zs4qc.png" alt="Not within SLA"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ On the other hand &lt;strong&gt;if the system is performing well beyond the defined SLA&lt;/strong&gt;: Developers in the SRE team can release more changes.&lt;/p&gt;

&lt;p&gt;So it's a simple way to &lt;strong&gt;regulate the release speed&lt;/strong&gt; of developers. ⚖️ If we turn up the SLA, releases will slow down and vice versa:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lv5dszz0wag774l2hos.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lv5dszz0wag774l2hos.png" alt="SLA as regulation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  SRE Tasks and Responsibilities 👩‍💻 &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  1) Automation - Create automated processes for operational aspects 👏
&lt;/h3&gt;

&lt;p&gt;The SRE or the Site Reliability Engineer is the one, who creates automated processes to calculate and evaluate, whether the service is within the SLA or not.&lt;/p&gt;

&lt;p&gt;So now the policy for launching is not the endless checklist that operations use to decide, whether to launch or not, instead an SRE helped design processes that can &lt;strong&gt;automatically evaluate an SLA&lt;/strong&gt;. ✅&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Configure Monitoring and Logging (Observability for System Performance) 🔎📈
&lt;/h3&gt;

&lt;p&gt;Now of course to &lt;strong&gt;measure the performance of our systems&lt;/strong&gt; and whether services are within the SLA, we need proper monitoring of our systems.&lt;/p&gt;

&lt;p&gt;So as another big part of SRE tasks and responsibilities is to &lt;strong&gt;configure proper monitoring and logging of the systems to get visibility&lt;/strong&gt; of what's going on inside.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) Configure Monitoring and Logging (Observability for Detecting Issues) 🔎📉
&lt;/h3&gt;

&lt;p&gt;Now we said that for most applications SLA is not 100%, which means we accept that it won't work 100% of the time. So at some point we will have an outage 😱 &lt;/p&gt;

&lt;p&gt;Now the question is, what do we do when an outage happens? Or how do we prepare for it? And that's where another big part of SRE tasks and responsibilities comes in.&lt;/p&gt;

&lt;p&gt;The first one is &lt;strong&gt;monitoring and alerting&lt;/strong&gt;, which I already mentioned. So in addition to giving you a visibility to measure your system's performance, but more importantly it helps you &lt;strong&gt;detect any indications for issues, before they happen or very early when they happen&lt;/strong&gt; and then alert the teams about it:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkaymbewfxyndxzqzo4m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkaymbewfxyndxzqzo4m.png" alt="Monitoring and Alerting"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4) Develop custom services to achieve this 👩‍💻
&lt;/h3&gt;

&lt;p&gt;Now another important part of this whole configuration is that, when the issue is alerted and ideally the right person in the team gets the message, the &lt;strong&gt;alert message should contain all the needed information&lt;/strong&gt; to identify and fix the issue fast. &lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
❌ &lt;code&gt;"something is wrong in the cluster"&lt;/code&gt;&lt;br&gt;
a more detailed message like:&lt;br&gt;
✅ &lt;code&gt;"service a in cluster b is throwing 500 error"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;So know you know exactly:&lt;br&gt;
👉 which service is having a problem&lt;br&gt;
👉 in which cluster and &lt;br&gt;
👉 what that problem exactly is &lt;/p&gt;

&lt;p&gt;So more detail the alert message, the better!&lt;/p&gt;

&lt;p&gt;In many cases SREs will &lt;strong&gt;develop their own custom services to achieve this proper monitoring alerting and logging configuration for their systems&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5) Do On-Call Support ☎️
&lt;/h3&gt;

&lt;p&gt;Another thing that SREs do is &lt;strong&gt;on-call support&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Basically, when things go wrong and users need real-time support, somebody is responsible for doing that and that is the on-call support team. And putting SREs on this support team has &lt;strong&gt;several benefits&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It helps them really see and understand what issues to expect&lt;/li&gt;
&lt;li&gt;How the support deals with the issues?&lt;/li&gt;
&lt;li&gt;And what improvements can be made to make the support process more efficient?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxdtnjoc5gxltv0lidi6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxdtnjoc5gxltv0lidi6.png" alt="On-Call Support"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;do alert messages and logs have enough information to quickly identify the issue and the cause?&lt;/li&gt;
&lt;li&gt;Where issues identified too late?&lt;/li&gt;
&lt;li&gt;etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So overall the &lt;strong&gt;main goal of SRE&lt;/strong&gt; is to make sure &lt;strong&gt;the scope of outage is small&lt;/strong&gt; when it happens, which means&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;👍 the outage doesn't last long and is fixed very quickly&lt;/li&gt;
&lt;li&gt;👍 and less people and few services are affected by that outage&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  6) Post-Incident Reviews 🧐
&lt;/h3&gt;

&lt;p&gt;Now fixing an issue or an outage is not the end of the SRE team's work. We want to use that outage as a &lt;strong&gt;chance for lessons learned&lt;/strong&gt; and of course avoid that this happens in the future. &lt;/p&gt;

&lt;p&gt;So as a principle of SRE is, to do, what's called &lt;strong&gt;Post Mortem&lt;/strong&gt;, which is latin for "after death". So in SRE terms "after issue" or "after outage analysis".&lt;/p&gt;

&lt;p&gt;This includes a &lt;strong&gt;thorough analysis&lt;/strong&gt;, meaning taking time to really go deeper and understand the issues:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwejdofah7afnwzmk44pf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwejdofah7afnwzmk44pf.png" alt="Post-Incident Reviews"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But of course during this analysis it's super important to &lt;strong&gt;stay blameless&lt;/strong&gt;, which is one of the major points of this post-mortem analysis, in order to encourage people to admit and learn from their and other people's mistakes ✅&lt;/p&gt;

&lt;p&gt;And finally it's important to &lt;strong&gt;document everything&lt;/strong&gt; for future reference!&lt;/p&gt;

&lt;h1&gt;
  
  
  Who is doing SRE? SRE Role 👤 &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;Now you may be thinking:&lt;br&gt;
&lt;em&gt;"How much more should software developers learn? They already have to know all these software development technologies, now they also have to take over the operations tasks and learn all these operations tools?"&lt;/em&gt; 🤯&lt;/p&gt;

&lt;h3&gt;
  
  
  SRE as its own Role
&lt;/h3&gt;

&lt;p&gt;That's why we have SRE as its own role. So a &lt;strong&gt;dedicated person, whose full-time responsibility is to work on keeping systems reliable&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ncypns0sgfnis6x6pgz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ncypns0sgfnis6x6pgz.png" alt="SRE Role"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So in many projects along with developers, you have SRE teams, which are the new Operations team. Basically a team that does the operations, where both teams work for the same goal of keeping the systems within the defined SLAs:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0iw7lvwkapngigduwil.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0iw7lvwkapngigduwil.png" alt="Own SRE team"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So the SRE team maintains and takes care of the automated delivery operations and all sorts of automation that will help developers release their changes safely and fast. 🚀&lt;/p&gt;

&lt;h3&gt;
  
  
  Software Developers as SREs
&lt;/h3&gt;

&lt;p&gt;However, it's also common to have &lt;strong&gt;1 team of SREs and Software Developers&lt;/strong&gt;, where SREs also do the software development job. And this means that Site Reliability Engineers &lt;strong&gt;must know software development&lt;/strong&gt; as well, unlike DevOps engineers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But in both cases, as you see we, started off with a traditional way of software development with separate dev and ops with opposing incentives and with SRE we gave devs and ops the same incentives and put them on the same side. 💙&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  SRE vs DevOps &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;Finally, one of the majorly discussed questions in this area is: &lt;strong&gt;What is the difference between SRE and DevOps Engineer or generally between these two concepts?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you already watched my &lt;a href="https://youtu.be/0yWAtQ6wYNM" rel="noopener noreferrer"&gt;"What is DevOps" video&lt;/a&gt;, you know that there are two definitions of DevOps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the original definition, which is &lt;strong&gt;more high level&lt;/strong&gt; and more broad and doesn't specify how exactly DevOps should be implemented&lt;/li&gt;
&lt;li&gt;and a &lt;strong&gt;more practical one&lt;/strong&gt;, which evolved over time with its own DevOps engineer role.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when we compare DevOps with SRE it's important to know &lt;strong&gt;which definition of DevOps we're using for this comparison&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1. First broader definition of DevOps vs. SRE&lt;/em&gt;&lt;br&gt;
DevOps is a more high-level concept that defines &lt;strong&gt;what needs to be done&lt;/strong&gt; to achieve the automated streamlined release process, while SRE is more specific about &lt;strong&gt;how to exactly implement this process&lt;/strong&gt; and how to implement DevOps principles.&lt;/p&gt;

&lt;p&gt;So many people would say that &lt;strong&gt;SRE is a specific implementation of the DevOps concepts&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffi34pvwmn158xq6un2kt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffi34pvwmn158xq6un2kt.png" alt="SRE implementing DevOps"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2. Practical DevOps vs. SRE&lt;/em&gt;&lt;br&gt;
But as we saw DevOps itself also became more practical with its own role and specific technologies and ways to implement it. So what's the comparison here? 🤔&lt;br&gt;
Well, in many companies this practical DevOps implementation became &lt;strong&gt;more focused and concentrated on the speed of delivery&lt;/strong&gt; for the application changes and of course even though it's part of the DevOps principles to not only release fast, but release quality code many DevOps teams in practice again seemed to optimize more for the speed than reliability.&lt;/p&gt;

&lt;p&gt;So as a great &lt;strong&gt;complementary part of DevOps, SRE emerged with the same principles and goals in mind&lt;/strong&gt;, which is release quality code fast, but as the name suggests &lt;strong&gt;more focused on reliability and keeping systems stable&lt;/strong&gt;, while allowing for fast changes:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fls53su3l74rlf9mg8g7k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fls53su3l74rlf9mg8g7k.png" alt="SRE complementary to DevOps"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So SRE is its own role with its own set of tools for making systems reliable. So these two were kind of parallel developments and are now often seen as &lt;strong&gt;two sides of the same coin&lt;/strong&gt; and it's not uncommon for teams to have both DevOps engineer and SRE helping implement the DevOps principles.&lt;/p&gt;

&lt;p&gt;Now I hope you learned a lot in this article and that I was able to answer all of your questions about SRE. 🙂&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCdngmbVKX1Tgre699-XLlUA?sub_confirmation=1" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/techworld_with_nana/" rel="noopener noreferrer"&gt;Instagram - for behind-the-scenes and previews&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Njuchi_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana" rel="noopener noreferrer"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sre</category>
      <category>devops</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What is DevOps? REALLY understand it</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Tue, 18 Jan 2022 15:18:45 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/what-is-devops-really-understand-it-29j7</link>
      <guid>https://dev.to/techworld_with_nana/what-is-devops-really-understand-it-29j7</guid>
      <description>&lt;p&gt;A &lt;strong&gt;detailed look&lt;/strong&gt; at what DevOps really is with the goal to clarify all questions and doubts around it ✅&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the written version of &lt;a href="https://youtu.be/0yWAtQ6wYNM" rel="noopener noreferrer"&gt;my new youtube video&lt;/a&gt;&lt;/em&gt; ✍️ 🙂&lt;/p&gt;

&lt;p&gt;DevOps has been gaining a lot of popularity and is taking over the traditional way of software development.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Difficulty to define DevOps
&lt;/h1&gt;

&lt;p&gt;However, "DevOps" term itself is so broad and includes so many things that it became difficult to exactly define it and clearly set the boundaries of DevOps compared to other IT fields. So this post tries to answer the question of "what DevOps is" in detail.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;simplest definition&lt;/strong&gt; is that &lt;code&gt;"DevOps is an intersection of Development and Operations"&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;But where do boundaries of DevOps start and end?  Which part of development is not DevOps? Or what part of operations is not DevOps? And why was there even a need for something between development and operations? 🙉&lt;/p&gt;

&lt;p&gt;Development and Operations are &lt;strong&gt;two main components in the whole application release process&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjr07ly5zuwj5r9lxhhoc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjr07ly5zuwj5r9lxhhoc.png" alt="Dev and Ops in Application Release Process"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So let's look in detail at this release process starting from the very beginning!&lt;/p&gt;

&lt;h1&gt;
  
  
  Application Release Process
&lt;/h1&gt;

&lt;p&gt;Whenever we're developing an application, we always have the &lt;strong&gt;same process of delivering that application to the end users&lt;/strong&gt;. So this is the main goal no matter if you use waterfall or agile or whatever approach. At its core: 1) you create an application 2) and you want to deliver it to your end users so that they can use it. 👩‍💻&lt;/p&gt;

&lt;p&gt;So let's say you have a great idea about a cool application. You define its functionality or in other words what features it will have,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;you &lt;strong&gt;code&lt;/strong&gt; it,&lt;/li&gt;
&lt;li&gt;you &lt;strong&gt;test&lt;/strong&gt; it &lt;/li&gt;
&lt;li&gt;and now that you have a tested application you want to actually &lt;strong&gt;deploy&lt;/strong&gt; it on a public server and let users access it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For that you &lt;strong&gt;build and package your application&lt;/strong&gt; in some kind of executable form so that it can run. You configure the public server with all the needed stuff like installing any tools the application needs and deploy your application there, you configure firewall rules to allow access to the application on the server and you have launched, users can start using it! 🚀 &lt;/p&gt;

&lt;p&gt;So that's the &lt;strong&gt;simplified basis of any application release&lt;/strong&gt;, but that's not the end of the journey. While in use, you of course have to check in on your application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is everything running fine?&lt;/li&gt;
&lt;li&gt;Are users experiencing any issues?&lt;/li&gt;
&lt;li&gt;Maybe there are bugs in the application that you didn't catch when testing&lt;/li&gt;
&lt;li&gt;Can application handle high user loads?&lt;/li&gt;
&lt;li&gt;etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2For18fr416kiktxlqljtk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2For18fr416kiktxlqljtk.png" alt="Typical Software Release Process"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So after launching it, you have to actually make sure that your application is accessible and usable by end users and if there are any issues for users, of course you should fix them. &lt;/p&gt;

&lt;p&gt;Now that was the initial launch of your application, but the application development is not done yet. If you see users like your application you would want to make it even cooler, add new features, maybe optimize the performance by getting better servers or making your application faster and so on. So you still have a lot of things to do and every time you improve your application either the code itself or the server configuration you want to make this improvement accessible to the end users immediately.&lt;/p&gt;

&lt;p&gt;So after the initial launch you do multiple updates to your application and to keep track of these updates you version those changes.&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;you do that over and over again&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;you have an idea of improvement&lt;/li&gt;
&lt;li&gt;you implement it in code&lt;/li&gt;
&lt;li&gt;you test it&lt;/li&gt;
&lt;li&gt;build and package it&lt;/li&gt;
&lt;li&gt;you deploy it&lt;/li&gt;
&lt;li&gt;and once released, you observe it in the production to see whether there are any new improvement possibilities or any issues that need to be fixed right away&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So this gives you a process of &lt;strong&gt;continuous delivery of changes&lt;/strong&gt; an endless cycle of improvements to your application.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And DevOps is about making this process of continuous delivery &lt;strong&gt;fast&lt;/strong&gt; and with &lt;strong&gt;minimal errors and bugs&lt;/strong&gt;:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxctyhjeuwgfmm8qvbh3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxctyhjeuwgfmm8qvbh3.png" alt="DevOps fast and minimal errors"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So with DevOps improvements get created and delivered to users fast, but also those improvements are of high quality and well tested.  And that is a &lt;strong&gt;big challenge: quickly delivering high quality code&lt;/strong&gt;. 😳&lt;/p&gt;

&lt;h1&gt;
  
  
  Challenges DevOps tries to solve
&lt;/h1&gt;

&lt;p&gt;Now let's see what are exactly the &lt;strong&gt;challenges that teams may face during this process and which DevOps tries to solve&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;During this whole release process we have roadblocks and frictions:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foive77i2sl300jq79qmk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foive77i2sl300jq79qmk.png" alt="Roadblocks and frictions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now what are the frictions and roadblocks in the release process? 🤔&lt;/p&gt;
&lt;h3&gt;
  
  
  1) Miscommunication and Lack of Collaboration ⛔️
&lt;/h3&gt;

&lt;p&gt;First and the most important challenge is &lt;strong&gt;miscommunication and lack of collaboration between developers and operations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So releasing application has two main parts: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;you code the application&lt;/li&gt;
&lt;li&gt;you deploy and run the application&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Developers are responsible for coding. Operations are responsible for running the application.&lt;/p&gt;

&lt;p&gt;And between these two there might be a gap of: "I wrote an application, but I can't run it" or "I'm running the application, but i don't know how it works" 🙇🏻‍♂️:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmky5r045jz19q2kfasu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmky5r045jz19q2kfasu.png" alt="Miscommunications between devs and ops"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So developers would code without considering where or how the code will be deployed, while operations would try to deploy without really understanding what and why they are deploying or how the application even works. And this would result in miscommunications between these two.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
Developers finish coding but the deployment guide for the operations team is not good enough or well-documented enough, so operations team struggles deploying it, so release takes longer.&lt;/p&gt;

&lt;p&gt;This kind of miscommunication could cause &lt;strong&gt;stretching the release periods for days and weeks&lt;/strong&gt; and in complex badly maintained projects maybe even month.&lt;/p&gt;

&lt;p&gt;So between the developer is done with the feature and operation starts deploying it, there is &lt;strong&gt;no clearly defined automated process of handover&lt;/strong&gt;. It's based on a complex bureaucratic process of what checklists 📝 need to be completed and what needs to be documented and who needs to manually approve what for the release and so on. So no streamlines or automated processes here. &lt;/p&gt;
&lt;h3&gt;
  
  
  2) Conflict of Interest ⛔️
&lt;/h3&gt;

&lt;p&gt;Apart from miscommunications between development and operations, in a traditional setup, where one team is only responsible for development and other team only for operations, these two have seemingly &lt;strong&gt;different incentives&lt;/strong&gt; that make it hard for them to work together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developers want to push out new features fast&lt;/strong&gt;, while &lt;strong&gt;operations want to make sure those changes don't break anything&lt;/strong&gt;, because operations are incentivized to maintain stability in production. Their main focus is to make sure the application is available, doesn't crash, doesn't show 500 errors to the users and so on.&lt;/p&gt;

&lt;p&gt;This means that &lt;strong&gt;operations need to resist the speed of release&lt;/strong&gt; and check all the aspects of a new release to make sure it's 100% safe, which again slows down the process, especially considering that operations don't really understand the code or the application. So it's even more effort for them to evaluate this new release.&lt;/p&gt;

&lt;p&gt;So even though the main &lt;strong&gt;common goal&lt;/strong&gt; of everyone in a company should be to deliver high quality applications to the end users fast, in practice the &lt;strong&gt;more immediate goals&lt;/strong&gt; are for each role to do their job. And developers job is to quickly create new features and push them out, operations job is to maintain the system stability and resist new changes being pushed out: &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4j7zx8paqaptjoepzzuz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4j7zx8paqaptjoepzzuz.png" alt="Conflict of Interest"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This gives us a &lt;strong&gt;conflict of interest&lt;/strong&gt; and this kind of setup naturally makes it difficult for those two to collaborate. 🤷‍♀️&lt;/p&gt;
&lt;h3&gt;
  
  
  3) Security ⛔️
&lt;/h3&gt;

&lt;p&gt;Another showstopper when releasing a feature is Security. Just like operations team carefully evaluates and changes to make sure they won't affect system stability, security team will &lt;strong&gt;evaluate any changes to make sure they don't affect systems security&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgkdjibblmch1ie87e0hx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgkdjibblmch1ie87e0hx.png" alt="Security Release Showstopper"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And in a traditional setup this is the same &lt;strong&gt;manual bureaucratic process as operations&lt;/strong&gt;, which takes days or weeks and slows down the release process. &lt;/p&gt;

&lt;p&gt;And as I mentioned DevOps is about removing any roadblocks that slow down the process, so it includes this one as well.&lt;/p&gt;

&lt;p&gt;However, even though this is part of the DevOps solution, there was a separate term created for that called "DevSecOps" in order to highlight and just remind the teams of the &lt;strong&gt;importance of security&lt;/strong&gt;, because it somehow got left out.&lt;/p&gt;

&lt;p&gt;I actually have a separate dedicated video on DevSecOps, which you can also check out if you're interested: &lt;a href="https://youtu.be/nrhxNNH5lt0" rel="noopener noreferrer"&gt;DevSecOps explained&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4) Application Testing ⛔️
&lt;/h3&gt;

&lt;p&gt;Now adding to the list of show stoppers is application testing. In many projects there are separate teams or roles for testers, who test the application changes on different levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;like testing just the feature&lt;/li&gt;
&lt;li&gt;testing the whole application,&lt;/li&gt;
&lt;li&gt;testing on multiple environments etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And &lt;strong&gt;often these tests are done manually&lt;/strong&gt;, when teams cannot totally rely only on their automated tests and only after manual testing is done, can the change be released:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fff236g54d0m3espzcxi6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fff236g54d0m3espzcxi6.png" alt="Application Testing slowing down release process"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even though this may not be done by development or operations role, but rather a separate tester role, this is an important part of the release process and may also slow it down considerably!&lt;/p&gt;
&lt;h3&gt;
  
  
  5) Manual Work ⛔️
&lt;/h3&gt;

&lt;p&gt;As I mentioned, &lt;strong&gt;many of the tasks&lt;/strong&gt; during the release process like testing, security checks, deployment etc &lt;strong&gt;used to be done manually&lt;/strong&gt;. 🙇🏻‍♂️&lt;/p&gt;

&lt;p&gt;For example, operations would do most of the operations tasks manually, either by directly executing commands on the servers to install tools, configure stuff, do patches or have scripts or small programs they execute. But in both cases this is manual work:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fovdcosbbyt6inw8y5yom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fovdcosbbyt6inw8y5yom.png" alt="Manual Work in release process"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Drawbacks of manual work&lt;/em&gt;&lt;br&gt;
This &lt;strong&gt;manual work is slow and more error prone&lt;/strong&gt;, because of human error plus with manual work you have a disadvantage that knowledge sharing is very difficult, because people who do the tasks would have to document it and others would have to read it. &lt;/p&gt;

&lt;p&gt;It's also very &lt;strong&gt;intransparent&lt;/strong&gt;, because it's hard to trace, who executed what when and finally when infrastructure configuration and so on was done manually, if something happens to the infrastructure, it may be really &lt;strong&gt;hard to recover and replicate the exact state&lt;/strong&gt; fast. You would have to remember exactly what was done on the servers, in which order to get to that previous infrastructure state. 🤦🏽‍♀️&lt;/p&gt;
&lt;h3&gt;
  
  
  DevOps tries to remove these roadblocks ✅
&lt;/h3&gt;

&lt;p&gt;So you see the &lt;strong&gt;main characteristic&lt;/strong&gt; of all these issues is that they all &lt;strong&gt;slow down the release cycle&lt;/strong&gt; and create roadblocks on the way. And you also see in case of security and testing, that DevOps may even go over only development or only operations responsibilities and tasks:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2h5sn5s8nwl8a4x58fi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2h5sn5s8nwl8a4x58fi.png" alt="DevOps including Development, Operations, Testing and Security"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's why to understand DevOps &lt;strong&gt;instead of focusing on the name and what it means, we're focusing on what it tries to achieve&lt;/strong&gt;: 💡&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DevOps tries to remove all these roadblocks and things that slow down the release process, whatever that may be and instead of manual inefficient processes helps create fully automated streamlined processes for release cycles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And this can be done step by step, removing one roadblock at a time until you have a fully optimized and automated DevOps process, that makes your application release super easy. 🚀&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkcc6nsfofig1xxnvjs6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkcc6nsfofig1xxnvjs6.png" alt="DevOps tries to remove all roadblocks"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  DevOps Concept as a Solution
&lt;/h1&gt;

&lt;p&gt;So how does DevOps help achieve this and solve all these challenges? 👀&lt;/p&gt;

&lt;p&gt;Well, by the &lt;strong&gt;official definition&lt;/strong&gt; and this was the original idea of DevOps:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;DevOps defines a combination of cultural philosophies, practices and tools for doing that.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;So DevOps is not just one set of tools or one specific concept, it's a &lt;strong&gt;combination of anything that creates the process of releasing the software fast and with high quality&lt;/strong&gt;. And the main part of the concept was that developers and operations people should work together more often, talk to each other more often and collaborate better to achieve that.&lt;/p&gt;
&lt;h1&gt;
  
  
  DevOps in Practice: DevOps as a separate Role
&lt;/h1&gt;

&lt;p&gt;But actually this definition is too broad and too high level and makes it hard to imagine how it works in practice. 🙉 So it's just not specific enough. So naturally different companies implemented DevOps in different ways. So the &lt;strong&gt;actual implementation of DevOps looked pretty different from company to company&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But since companies started adopting it, gradually it got a more concrete form with some of the common patterns across many companies and one of these patterns was that &lt;strong&gt;DevOps evolved into an actual role called a "Devops Engineer"&lt;/strong&gt;, where either developers are doing DevOps as a job next to development or operations are doing it or someone is doing DevOps exclusively as their only job.&lt;/p&gt;

&lt;p&gt;And a set of technologies that were used to implement the DevOps principles became &lt;strong&gt;DevOps technologies&lt;/strong&gt;, which now DevOps engineers would need to learn:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbxu1cmk44tnl4p8ov16b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbxu1cmk44tnl4p8ov16b.png" alt="DevOps Engineer Role and DevOps Tools"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And I understand that many people are resisting the idea of DevOps engineer and the creators of the DevOps concept didn't see it used this way, but the reality is often different from the theory. We see that concept was adjusted and bent to meet the needs of the end goal and DevOps engineer role is what came out of it. 🤷‍♀️&lt;/p&gt;

&lt;p&gt;And that DevOps role is responsible for creating a streamlined release process without any roadblocks slowing down the release and that's why in the &lt;strong&gt;center of DevOps is the well-known Continuous Integration / Continuous Delivery process&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  DevOps in Practice: How to become a DevOps Engineer
&lt;/h1&gt;

&lt;p&gt;Check out my other blog article to see:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9mw2nnlf1yizqntt5fe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9mw2nnlf1yizqntt5fe.png" alt="Overview DevOps in Practice"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/techworld_with_nana" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F319175%2Fc5aebaff-6768-4f5e-9c0b-b1eae091ded8.png" alt="techworld_with_nana"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/techworld_with_nana/devops-roadmap-2021-how-to-become-a-devops-engineer-1n9p" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;DevOps Roadmap - How to become a DevOps Engineer&lt;/h2&gt;
      &lt;h3&gt;TechWorld with Nana ・ Jan 17 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cloud&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;After reading this, you may be thinking, these are a lot of things to learn and it may be hard to know, where to start or what to learn first or what resources to use. 🤯&lt;/p&gt;

&lt;p&gt;Well, there are many resources out there to learn individual DevOps technologies, 👍 I actually cover many of the DevOps technologies on &lt;a href="https://www.youtube.com/channel/UCdngmbVKX1Tgre699-XLlUA" rel="noopener noreferrer"&gt;my Youtube channel&lt;/a&gt;. 😊&lt;br&gt;
But ideally you want to &lt;strong&gt;follow a well-structured step-by-step roadmap and more importantly learn how to use these technologies together in combination&lt;/strong&gt;, because that's what DevOps engineers do. They use and integrate multiple technologies together to create DevOps processes and of course you want to learn all these with &lt;strong&gt;actual real-life project examples to know how it will look like in a real job&lt;/strong&gt;. And very few courses and learning resources offer this and that's exactly &lt;strong&gt;why we created a &lt;a href="https://www.techworld-with-nana.com/devops-bootcamp" rel="noopener noreferrer"&gt;complete DevOps Bootcamp&lt;/a&gt;&lt;/strong&gt;  with a clear structure and lots of hands-on projects.&lt;/p&gt;

&lt;p&gt;So if you're thinking about becoming a DevOps engineer or slowly transitioning into DevOps you can definitely check out our DevOps bootcamp 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps vs SRE - How SRE fits into the whole DevOps process
&lt;/h1&gt;

&lt;p&gt;To get a full picture of DevOps I want to mention one more concept, which is SRE or &lt;strong&gt;S&lt;/strong&gt;ite &lt;strong&gt;R&lt;/strong&gt;eliability &lt;strong&gt;E&lt;/strong&gt;ngineering and how it fits into DevOps.&lt;/p&gt;

&lt;p&gt;We just learned that there are two definitions of DevOps&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the original definition, which is &lt;strong&gt;more high level&lt;/strong&gt; and more broad and doesn't specify how exactly DevOps should be implemented&lt;/li&gt;
&lt;li&gt;and a &lt;strong&gt;more practical one&lt;/strong&gt;, which evolved over time with its own DevOps engineer role.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when we compare DevOps with SRE it's important to know &lt;strong&gt;which definition of DevOps we're using for this comparison&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1. First broader definition of DevOps vs. SRE&lt;/em&gt;&lt;br&gt;
DevOps is a more high-level concept that defines &lt;strong&gt;what needs to be done&lt;/strong&gt; to achieve the automated streamlined release process, while SRE is more specific about &lt;strong&gt;how to exactly implement this process&lt;/strong&gt; and how to implement DevOps principles.&lt;/p&gt;

&lt;p&gt;So many people would say that &lt;strong&gt;SRE is a specific implementation of the DevOps concepts&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffi34pvwmn158xq6un2kt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffi34pvwmn158xq6un2kt.png" alt="SRE implementing DevOps"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2. Practical DevOps vs. SRE&lt;/em&gt;&lt;br&gt;
But as we saw DevOps itself also became more practical with its own role and specific technologies and ways to implement it. So what's the comparison here? 🤔&lt;br&gt;
Well, in many companies this practical DevOps implementation became &lt;strong&gt;more focused and concentrated on the speed of delivery&lt;/strong&gt; for the application changes and of course even though it's part of the DevOps principles to not only release fast, but release quality code many DevOps teams in practice again seemed to optimize more for the speed than reliability.&lt;/p&gt;

&lt;p&gt;So as a great &lt;strong&gt;complementary part of DevOps, SRE emerged with the same principles and goals in mind&lt;/strong&gt;, which is release quality code fast, but as the name suggests &lt;strong&gt;more focused on reliability and keeping systems stable&lt;/strong&gt;, while allowing for fast changes:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fls53su3l74rlf9mg8g7k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fls53su3l74rlf9mg8g7k.png" alt="SRE complementary to DevOps"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So SRE is its own role with its own set of tools for making systems reliable. So these two were kind of parallel developments and are now often seen as &lt;strong&gt;two sides of the same coin&lt;/strong&gt; and it's not uncommon for teams to have both DevOps engineer and SRE helping implement the DevOps principles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Own 'What is SRE' video coming soon.. 🎬&lt;/strong&gt;&lt;br&gt;
This was just a short look at SRE to understand it in comparison to DevOps, but since I have received many questions about what SRE is, I will release its own follow-up video on SRE in the next weeks to explain in more detail like how SRE works in practice, what are the tasks and responsibilities of a Site Reliability engineer and so on.&lt;/p&gt;




&lt;p&gt;For DevOps I hope I could clarify all your questions about it. If not leave a comment in the video and I will try to answer them 😊&lt;/p&gt;

&lt;h3&gt;
  
  
  Good luck on your DevOps journey! 🎉 💪
&lt;/h3&gt;




&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCdngmbVKX1Tgre699-XLlUA?sub_confirmation=1" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/techworld_with_nana/" rel="noopener noreferrer"&gt;Instagram - for behind-the-scenes and previews&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Njuchi_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana" rel="noopener noreferrer"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>beginners</category>
      <category>development</category>
      <category>sre</category>
    </item>
    <item>
      <title>Golang Tutorial for Beginners [FREE Course] 🎉</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Mon, 20 Dec 2021 15:13:23 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/golang-tutorial-for-beginners-free-course-330</link>
      <guid>https://dev.to/techworld_with_nana/golang-tutorial-for-beginners-free-course-330</guid>
      <description>&lt;p&gt;In &lt;a href="https://youtu.be/yyUHQIec83I" rel="noopener noreferrer"&gt;this full Golang course&lt;/a&gt; you will learn about one of the youngest programming languages that is becoming more and more popular in the cloud engineering world.&lt;/p&gt;

&lt;p&gt;You will learn &lt;strong&gt;everything you need to get started with Go&lt;/strong&gt; and start using it in your projects. ✅&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Go? 💡
&lt;/h1&gt;

&lt;p&gt;Go is a programming language, which was &lt;strong&gt;developed at Google in 2007&lt;/strong&gt; and open sourced in 2009. So it's a pretty young language. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The language is called Go. However, it's also commonly known as Golang. This is because the website was originally &lt;em&gt;golang.org&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now whenever you hear about a new programming language the first question you probably have is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why do we need yet another programming language? 🙄&lt;/li&gt;
&lt;li&gt;What is the purpose of it or how is it better or different from other already existing languages?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So before diving into the syntax, let's see what was the motivation behind creating the Go language?&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Go was developed? How it's different from other programming languages? 🧐
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Infrastructure changed
&lt;/h3&gt;

&lt;p&gt;Well the infrastructure, where the applications were deployed changed a lot in the last few years:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-core processors became common &lt;/li&gt;
&lt;li&gt;and also using cloud infrastructure with hundreds or thousands of servers with multiple processors to deploy applications became pretty universal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So infrastructure became much more &lt;strong&gt;scalable, dynamic and had more capacity&lt;/strong&gt;. However, most languages couldn't help in writing applications that would take advantage of these infrastructure improvements. So basically you had applications that would just execute one task at a time in order. &lt;/p&gt;

&lt;p&gt;But with infrastructure improvements it was possible to now&lt;br&gt;
write applications that would execute tasks in parallel, do multiple things at once. This way making the application faster and more user-friendly. 🚀&lt;/p&gt;
&lt;h3&gt;
  
  
  Multi-Threading - Do multiple things at once
&lt;/h3&gt;

&lt;p&gt;A simple example is, if you are using Google Drive you may be uploading or downloading files and folders, but you can keep navigating back and forth in the UI. So downloading, uploading and navigating the UI all happen &lt;strong&gt;in parallel&lt;/strong&gt;. &lt;br&gt;
So the application allows you to do multiple things at once without affecting any other task:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foffl2gk3de0ub91ji3ul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foffl2gk3de0ub91ji3ul.png" alt="Google Drive - work in parallel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this is a concept of multi-threading. So each thread is basically processing one task and you can have many of them running in parallel and this makes applications fast but may also cause some issues. 👀&lt;/p&gt;
&lt;h3&gt;
  
  
  Challenges
&lt;/h3&gt;

&lt;p&gt;For example on Google Docs, many users can work on the same document at the same time. So when you have two users changing and adding stuff at the same time to the same document, this should work smoothly without one user overriding all the changes that another user is making.&lt;/p&gt;

&lt;p&gt;Another example where such issues may happen, when things are processed in parallel is a booking system for buying tickets or booking a hotel etc. Let's say again two users are trying to book the last remaining ticket at the same time. Of course &lt;strong&gt;this should work in a way that no double booking happens&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And this concept is called &lt;strong&gt;concurrency&lt;/strong&gt; and needs to be handled by developers in code. So they must write code that prevents any conflicts between the tasks, when multiple tasks are running in parallel and updating the same data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vmfpmdrpah7zpq0qbjw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vmfpmdrpah7zpq0qbjw.png" alt="Concurrency"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Language Concurrency Support
&lt;/h3&gt;

&lt;p&gt;Many languages do have features for implementing such applications, however the code can get pretty complex and&lt;br&gt;
handling and preventing the concurrency issues can be pretty hard. And &lt;strong&gt;with complexity there is always a higher risk of human errors&lt;/strong&gt; and that's where the main purpose and difference of Go comes into the picture.&lt;/p&gt;

&lt;p&gt;So Go was designed exactly for that purpose to &lt;strong&gt;make writing multi-threaded concurrent applications that take advantage of the new performance infrastructure much easier&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi8nb47runrnlqyizup0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi8nb47runrnlqyizup0.png" alt="Multi-Core Concurrency Support"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will learn about this in more detail at the end of the course, when we use &lt;em&gt;goroutines&lt;/em&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn46qnc0slx6kfymf7428.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn46qnc0slx6kfymf7428.png" alt="Goroutine vs OS Threads"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Main Use Case of Go
&lt;/h3&gt;

&lt;p&gt;So logically enough the main use case of Go or what it's best used for is writing &lt;strong&gt;applications that need to be very performant and will run on the modern scaled and distributed infrastructure&lt;/strong&gt; with hundreds and thousands of servers typically on a cloud platform. &lt;/p&gt;

&lt;p&gt;Go is used on the server side or the &lt;strong&gt;backend&lt;/strong&gt; of the applications and these types of applications can range from microservices and web applications to database services.&lt;br&gt;
And so in fact, &lt;strong&gt;many cloud technologies or technologies that run on modern cloud environments are actually written in Go&lt;/strong&gt;, like Docker 🐳, Hashicorp Vault, Kubernetes, CockroachDB and so on.&lt;/p&gt;
&lt;h1&gt;
  
  
  Characterstics of Go Language
&lt;/h1&gt;
&lt;h3&gt;
  
  
  Compiled Language
&lt;/h3&gt;

&lt;p&gt;Go is a &lt;strong&gt;compiled language&lt;/strong&gt; and it compiles actually very quickly into a single binary. You can deploy and run it on different platforms in a consistent way, so no matter which operating system or which environment you're using you can take that same binary and basically use it across different platforms.&lt;/p&gt;
&lt;h3&gt;
  
  
  Combine Ease of Programming with Efficiency and Safety
&lt;/h3&gt;

&lt;p&gt;For developing Go, they wanted to take the simplicity of syntax of a more high-level language, like Python and the speed and efficiency of a lower level language like C++.&lt;br&gt;
So you will see the combination of these things in Go.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz519zlj1kkrqbylls4bc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz519zlj1kkrqbylls4bc.png" alt="Go combines Python and C++"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Language features left out on purpose for simplicity 💡 The goal was that the code should be easy to maintain over time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;The simple syntax makes your code very &lt;strong&gt;maintainable, easy to read and extend&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;Go applications can be &lt;strong&gt;built very fast&lt;/strong&gt;, they are also very fast in startup and also when they're running. &lt;/li&gt;
&lt;li&gt;Go is very &lt;strong&gt;resource efficient&lt;/strong&gt;, which means it uses few resources or it requires fewer resources like CPU and RAM to run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Considering all these benefits of simplicity and speed and so on, Go is also becoming more and more popular for writing simple automation applications and CLI applications for DevOps and SRE tasks as well.&lt;/p&gt;



&lt;p&gt;So now that we know why Go was created and what differentiates it from other languages 👍 , let's jump right into learning the core concepts and syntax of Go.&lt;/p&gt;
&lt;h1&gt;
  
  
  Learn Syntax and Concepts while writing a simple application 👩‍💻
&lt;/h1&gt;

&lt;p&gt;In the tutorial, we're going to write a very simple ticket booking application to learn the basics of Go. So instead of learning the concepts and syntax of Go with isolated examples, you will learn them while building an actual application throughout the tutorial. 😎&lt;/p&gt;

&lt;p&gt;But for the demo part, let's continue with the video, so you can follow along more easily: 🤓&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/yyUHQIec83I"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  ▬▬▬▬▬▬ COURSE OVERVIEW 📚  ▬▬▬▬▬▬
&lt;/h3&gt;

&lt;h4&gt;
  
  
  💎  Part 01: Introduction to Go
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;What is Go? Why Go?&lt;/li&gt;
&lt;li&gt;How it's different from other programming languages?&lt;/li&gt;
&lt;li&gt;Characteristics of Go and Go Use Cases&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  💎  Part 02: Local Setup
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Install Go &amp;amp; Editor&lt;/li&gt;
&lt;li&gt;Write our First Program &amp;amp; Structure of a Go File&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  💎  Part 03: Go Syntax &amp;amp; Concepts
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Variables &amp;amp; Constants in Go&lt;/li&gt;
&lt;li&gt;Formatted Output - printf &lt;/li&gt;
&lt;li&gt;Data Types in Go&lt;/li&gt;
&lt;li&gt;Getting User Input&lt;/li&gt;
&lt;li&gt;What is a Pointer?&lt;/li&gt;
&lt;li&gt;Arrays &amp;amp; Slices&lt;/li&gt;
&lt;li&gt;Loops in Go&lt;/li&gt;
&lt;li&gt;Conditionals (if / else) and Boolean Data Type&lt;/li&gt;
&lt;li&gt;Validate User Input&lt;/li&gt;
&lt;li&gt;Switch Statement&lt;/li&gt;
&lt;li&gt;Encapsulate Logic with Functions&lt;/li&gt;
&lt;li&gt;Organize Code with Go Packages&lt;/li&gt;
&lt;li&gt;Scope Rules in Go&lt;/li&gt;
&lt;li&gt;Maps&lt;/li&gt;
&lt;li&gt;Structs&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  💎  Part 04: Concurrency in Go
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Goroutines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope you will learn a lot in this beginner tutorial!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana" rel="noopener noreferrer"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Njuchi_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCdngmbVKX1Tgre699-XLlUA?sub_confirmation=1" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/techworld_with_nana/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Redis - the What, Why and How to use Redis as a primary database</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Thu, 02 Dec 2021 16:38:05 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/redis-the-what-why-and-how-to-use-redis-as-a-primary-database-2c55</link>
      <guid>https://dev.to/techworld_with_nana/redis-the-what-why-and-how-to-use-redis-as-a-primary-database-2c55</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the written version of &lt;a href="https://youtu.be/OqCK95AS-YE" rel="noopener noreferrer"&gt;my new youtube video&lt;/a&gt;&lt;/em&gt; ✍️ 🙂&lt;/p&gt;

&lt;p&gt;In this Redis tutorial, you will learn about Redis and &lt;strong&gt;how Redis can be used as a primary database for complex applications&lt;/strong&gt; that need to store data in multiple formats.&lt;/p&gt;

&lt;h1&gt;
  
  
  Overview 📝
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;What Redis is and its usages&lt;/strong&gt; as well as why it is suitable for modern complex microservice applications?&lt;/li&gt;
&lt;li&gt;How Redis supports storing multiple data formats for different purposes through its &lt;strong&gt;modules&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;How Redis as an in-memory database can &lt;strong&gt;persist data and recover from data loss&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;How to &lt;strong&gt;scale and replicate Redis&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;Finally since one of the most popular platforms for running microservices is Kubernetes and since running stateful applications in Kubernetes is a bit challenging, we will see how you can easily &lt;strong&gt;run Redis in Kubernetes&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  What is Redis?
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Redis stands for &lt;strong&gt;re&lt;/strong&gt;mote &lt;strong&gt;dic&lt;/strong&gt;tionary &lt;strong&gt;s&lt;/strong&gt;erver&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Redis is an &lt;strong&gt;in-memory database&lt;/strong&gt;. So &lt;strong&gt;many people have used it as a cache on top of other databases&lt;/strong&gt; to improve the application performance. 🤓&lt;/p&gt;

&lt;p&gt;However, what many people don't know is that &lt;strong&gt;Redis is a fully fledged primary database&lt;/strong&gt; that can be used to store and persist multiple data formats for complex applications. 😎&lt;/p&gt;

&lt;p&gt;So let's see the use cases for that.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Multi-Model Database?
&lt;/h1&gt;

&lt;p&gt;Let's look at a common setup for a microservices application.&lt;/p&gt;

&lt;p&gt;Let's say we have a complex social media application with millions of users. For this, we may need to store different data formats in different databases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Relational database&lt;/strong&gt;, like Mysql, to store our data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElasticSearch&lt;/strong&gt; for fast search and filtering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph database&lt;/strong&gt; to represent the connections of the users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document database&lt;/strong&gt;, like MongoDB to store media content shared by our users daily&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache service&lt;/strong&gt; for a better performance for the application &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's obvious that this is a pretty complex setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges of having multiple data services
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;❌ Each data service needs to be deployed and maintained&lt;/li&gt;
&lt;li&gt;❌ Know-How needed for each data service&lt;/li&gt;
&lt;li&gt;❌ Different scaling &amp;amp; infrastructure requirements&lt;/li&gt;
&lt;li&gt;❌ More complex application code for interacting with all these different DBs&lt;/li&gt;
&lt;li&gt;❌ Higher Latency (Slower), because of more network hopping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihdzcv0ghlz22rrqhzig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihdzcv0ghlz22rrqhzig.png" alt="challenges multiple data services"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Having a Multi-Model Database
&lt;/h3&gt;

&lt;p&gt;In comparison with a multi-model database you resolve most of these challenges. First of all you &lt;strong&gt;run and maintain just 1 data service&lt;/strong&gt;. So your application also needs to talk to a single data store and that requires only one programmatic interface for that data service. &lt;br&gt;
In addition, latency will be reduced by going to a single data endpoint and eliminating several internal network hubs. &lt;/p&gt;

&lt;p&gt;So having one database, like Redis, that allows you to store different types of data or basically allows you to have multiple types of databases in one as well as act as a cache solves such challenges.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Run and maintain just 1 database&lt;/li&gt;
&lt;li&gt;✅ Simpler&lt;/li&gt;
&lt;li&gt;✅ Reduced Latency (Faster)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1wj78m8moj72y2l84uo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1wj78m8moj72y2l84uo.png" alt="Multi-Model database"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  How Redis works?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Redis Modules&lt;/strong&gt; 📦&lt;br&gt;
The way it works is that you have &lt;strong&gt;Redis Core, which is a key value store&lt;/strong&gt; that already supports storing multiple types of data and then you can extend that core with what's called &lt;strong&gt;modules for different data types&lt;/strong&gt;, which your application needs for different purposes. So for example RediSearch for search functionality like ElasticSearch or Redis Graph for graph data storage and so on:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgq2hxcj3nfktxl9hebev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgq2hxcj3nfktxl9hebev.png" alt="Redis Modules"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And a great thing about this is that it's &lt;strong&gt;modular&lt;/strong&gt;. So these different types of database functionalities are not tightly integrated into one database, but rather you can pick and choose exactly which data service functionality you need for your application and then basically add that module.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Out-of-the-box Cache&lt;/strong&gt; ⚡️&lt;br&gt;
Of course when using Redis as a primary database you don't need an additional cache, because you have that automatically out of the box with Redis. That means again less complexity in your application, because you don't need to implement the logic for managing populating and invalidating cache.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redis is fast&lt;/strong&gt; 🚀&lt;br&gt;
As an in-memory (data is stored in RAM) database, Redis is super fast and performant, which of course makes the application itself faster.&lt;/p&gt;

&lt;p&gt;But at this point you may be wondering:&lt;br&gt;
&lt;em&gt;How can an in-memory database persist data?&lt;/em&gt; 🤔&lt;/p&gt;
&lt;h1&gt;
  
  
  How Redis can persist data and recover from data loss? 🧐
&lt;/h1&gt;

&lt;p&gt;If the Redis process or the server on which Redis is running fails, all the data in memory is gone right? So how is the data persisted and basically how can I be confident that my data is safe? 👀&lt;/p&gt;
&lt;h2&gt;
  
  
  Replicating Redis?
&lt;/h2&gt;

&lt;p&gt;Well, the &lt;strong&gt;simplest way to have data backups is by replicating Redis&lt;/strong&gt;. So if the Redis master instance goes down, the replicas will still be running and have all the data. So if you have a replicated Redis, the replicas will have the data.&lt;/p&gt;

&lt;p&gt;But of course if all the Redis instances go down you will lose the data, because there will be no replica remaining. 🤯So &lt;strong&gt;we need real persistence&lt;/strong&gt;. &lt;/p&gt;
&lt;h2&gt;
  
  
  Snapshotting &amp;amp; AOF
&lt;/h2&gt;

&lt;p&gt;Redis has multiple mechanisms for persisting the data and keeping the data safe.&lt;/p&gt;
&lt;h3&gt;
  
  
  Snapshots
&lt;/h3&gt;

&lt;p&gt;First one: the snapshots, which you can configure based on time, number of requests etc. So &lt;strong&gt;snapshots of your data will be stored on a disk&lt;/strong&gt;, which you can use to recover your data if the whole Redis database is gone.&lt;/p&gt;

&lt;p&gt;But note that you will &lt;strong&gt;lose the last minutes of data&lt;/strong&gt;, because you usually do snapshotting every five minutes or an hour depending on your needs. 😐&lt;/p&gt;
&lt;h3&gt;
  
  
  AOF
&lt;/h3&gt;

&lt;p&gt;So as an alternative Redis uses something called &lt;em&gt;AOF&lt;/em&gt;, which stands for &lt;strong&gt;A&lt;/strong&gt;ppend &lt;strong&gt;O&lt;/strong&gt;nly &lt;strong&gt;F&lt;/strong&gt;ile.&lt;/p&gt;

&lt;p&gt;In this case &lt;strong&gt;every change is saved to the disk for persistence continuously&lt;/strong&gt;. And when restarting Redis or after an outage, Redis will replay the Append Only File logs to rebuild the state. &lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;AOF is more durable&lt;/strong&gt;, but can be slower than snapshotting.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Best Option&lt;/strong&gt; 💡 : Use a combination of both AOF and snapshots, where the AOF is persisting data from memory to disk continuously plus you have regular snapshots in between to save the data state in case you need to recover it:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nu3aqe4lx7ndy6ltjyt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nu3aqe4lx7ndy6ltjyt.png" alt="Snapshotting and AOF"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  How to scale a Redis database?
&lt;/h1&gt;

&lt;p&gt;Let's say my 1 Redis instance runs out of memory, so data becomes too large to hold in-memory or Redis becomes a bottleneck and can't handle any more requests. In such case how do I &lt;strong&gt;increase the capacity and memory size&lt;/strong&gt; for my Redis database? 🤔&lt;/p&gt;

&lt;p&gt;We have several options for that:&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Clustering
&lt;/h2&gt;

&lt;p&gt;First of all, Redis supports &lt;em&gt;clustering&lt;/em&gt;. This means you can have a &lt;strong&gt;primary or master Redis instance, which can be used to read and write data and you can have multiple replicas of that primary instance for reading the data&lt;/strong&gt;:&lt;/p&gt;

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

&lt;p&gt;This way you can scale Redis to handle more requests and in addition &lt;strong&gt;increase the high availability&lt;/strong&gt; of your database, because if master fails 1 of the replicas can take over and your Redis database basically can continue functioning without any issues.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Sharding
&lt;/h2&gt;

&lt;p&gt;Well that seems good enough, but what if &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;your &lt;strong&gt;dataset grows too large to fit in a memory on a single server&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;Plus we have scaled the reads in the database, so all the requests that basically just query the data. But &lt;strong&gt;our master instance is still alone and still has to handle all the writes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So what is the solution here? 🤔&lt;/p&gt;

&lt;p&gt;For that we use the concept of &lt;em&gt;sharding&lt;/em&gt;, which is a general concept in databases and which Redis also supports.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So &lt;em&gt;sharding&lt;/em&gt; basically means that you &lt;strong&gt;take your complete data set and divide it into smaller chunks or subsets of data&lt;/strong&gt;, where each shard is responsible for its own subset of data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So that means instead of having one master instance that handles all the writes to the complete data set, you can &lt;strong&gt;split it into say 4 shards, each of them responsible for reads and writes to a subset of the data&lt;/strong&gt;. 💡&lt;/p&gt;

&lt;p&gt;And each shard also needs &lt;strong&gt;less memory capacity&lt;/strong&gt;, because they just have a fourth of the data. This means you can distribute and run shards on smaller nodes and basically scale your cluster horizontally:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2txigjbn2gt92l8wjhb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2txigjbn2gt92l8wjhb.png" alt="Sharding in Redis"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So having &lt;strong&gt;multiple nodes&lt;/strong&gt;, which run &lt;strong&gt;multiple replicas&lt;/strong&gt; of Redis which are &lt;strong&gt;all sharded&lt;/strong&gt; gives you a very performant highly available Redis database that can handle much more requests without creating any bottlenecks 👍&lt;/p&gt;
&lt;h1&gt;
  
  
  More topics...
&lt;/h1&gt;

&lt;p&gt;Check out my video below for the last 2 topics and scenarios:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Applications that need even higher availability and performance &lt;strong&gt;across multiple geographic locations&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt; The new standard for running microservices is the Kubernetes platform, so &lt;strong&gt;running Redis in Kubernetes&lt;/strong&gt; is a very interesting and common use case&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The full video is available here: 🤓&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/OqCK95AS-YE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Hope this was helpful and interesting for some of you! 😊 &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/techworld_with_nana/" rel="noopener noreferrer"&gt;Instagram - Posting many behind-the-scene stuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana" rel="noopener noreferrer"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>redis</category>
      <category>database</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Top 8 Docker Best Practices for using Docker in Production ✅</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Sun, 21 Nov 2021 12:53:45 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/top-8-docker-best-practices-for-using-docker-in-production-1m39</link>
      <guid>https://dev.to/techworld_with_nana/top-8-docker-best-practices-for-using-docker-in-production-1m39</guid>
      <description>&lt;p&gt;Docker adoption rises constantly 📈 and many are familiar with it, but not everyone is using Docker according to the best practices. 👀&lt;/p&gt;




&lt;p&gt;Before moving on, if you don't know what Docker is, you can learn everything you need to get started in this &lt;a href="https://youtu.be/3c-iBn73dDE" rel="noopener noreferrer"&gt;free Docker Crash Course 🐳&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why using Best Practices? 🤷‍♀️
&lt;/h2&gt;

&lt;p&gt;So, in my &lt;a href="https://youtu.be/8vXoMqWgbQQ" rel="noopener noreferrer"&gt;new video 'Top 8 Docker Production Best Practices'&lt;/a&gt; I want to show you 8 ways you can use Docker in a right way in your projects to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;improve security&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;optimize&lt;/strong&gt; the &lt;strong&gt;image size&lt;/strong&gt;, &lt;/li&gt;
&lt;li&gt;✅ take advantage of some of the useful Docker features &lt;/li&gt;
&lt;li&gt;✅ and also write &lt;strong&gt;cleaner and more maintainable Dockerfiles&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1️⃣ Best Practice
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Use an official and verified Docker image as a base image, whenever available.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's say you are developing a Node.js application and want to build and run it as a Docker image. &lt;/p&gt;

&lt;p&gt;Instead of taking a base operating system image and installing node.js, npm and whatever other tools you need for your application, use the official node image for your application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspd6rkqkwnitp2riio29.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspd6rkqkwnitp2riio29.png" alt="1st best practice"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Cleaner Dockerfile&lt;/li&gt;
&lt;li&gt;Official and verified image, which is already built with the best practices&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2️⃣ Best Practice
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Use specific Docker image versions&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Okay, so we have selected the base image, but now when we build our applications image from this Dockerfile, it will always use the &lt;code&gt;latest&lt;/code&gt; tag of the node image.&lt;/p&gt;

&lt;p&gt;Now why is this a problem? 🤔&lt;br&gt;
❌ - you might get a different image version as in the previous build &lt;br&gt;
❌ - the new image version may break stuff&lt;br&gt;
❌ - &lt;code&gt;latest&lt;/code&gt; tag is unpredictable, causing unexpected behavior &lt;/p&gt;

&lt;p&gt;So instead of a random latest image tag, you want to fixate the version and just like you deploy your own application with a specific version you want to use the official image with a specific version. &lt;br&gt;
And the rule here is: &lt;strong&gt;the more specific the better&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzikxyawtnrwk526xov6z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzikxyawtnrwk526xov6z.png" alt="2nd best practice"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Transparency to know exactly what version of the base image you're using&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  3️⃣ Best Practice
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Use Small-Sized Official Images&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When choosing a Node.js image, you will see there are actually multiple official images. Not only with different version numbers, but also with &lt;strong&gt;different operating system distributions&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4szjwytxzttkc4wovxz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4szjwytxzttkc4wovxz.png" alt="Node image versions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So the question is: Which one do you choose and why is it important? 🤷🏻‍♂️&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) Image Size&lt;/strong&gt;&lt;br&gt;
❌  Well, if the image is based on a &lt;strong&gt;full-blown OS distribution&lt;/strong&gt; like Ubuntu or Centos, you will have a bunch of tools already packaged in the image. So the &lt;strong&gt;image size will be larger&lt;/strong&gt;, but you &lt;strong&gt;don't need most of these tools&lt;/strong&gt; in your application images.&lt;/p&gt;

&lt;p&gt;✅  In contrast having &lt;strong&gt;smaller images means you need less storage space&lt;/strong&gt; in image repository as well as on a deployment server and of course you can transfer the images faster when pulling or pushing them from the repository. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Security Issue&lt;/strong&gt;&lt;br&gt;
❌  In addition to that, with lots of tools installed inside, you need to consider the security aspect. Because such base images usually contain &lt;a href="https://snyk.io/blog/opensourcesecurity-2020survey/" rel="noopener noreferrer"&gt;hundreds of known vulnerabilities&lt;/a&gt; and basically create a &lt;strong&gt;larger attack surface&lt;/strong&gt; to your application image.&lt;/p&gt;

&lt;p&gt;This way you basically end up introducing unnecessary security issues from the beginning to your image! 🙉&lt;/p&gt;

&lt;p&gt;✅  In comparison by using &lt;strong&gt;smaller images with leaner OS distributions&lt;/strong&gt;, which only bundle the necessary system&lt;br&gt;
tools and libraries, you're also minimizing the attack surface and making sure that you build &lt;strong&gt;more secure images&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So the best practice here would be to select an image with a specific version based on a leaner OS distribution like alpine for example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36oou4hn3wq55n14u9dz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36oou4hn3wq55n14u9dz.png" alt="3rd best practice"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alpine has everything you need to start your application in a container, but is much more lightweight. And for most of the images that you look on a Docker Hub, you will see a version tag with alpine distribution inside.&lt;/p&gt;

&lt;p&gt;It is one of the most common and popular base images for Docker containers.&lt;/p&gt;


&lt;h2&gt;
  
  
  4️⃣ Best Practice
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Optimize caching for image layers when building an image&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So what are image layers and what does caching and image layer mean? 🤔&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) What are Image Layers?&lt;/strong&gt;&lt;br&gt;
A Docker image is built based on a Dockerfile.&lt;br&gt;
And in a Dockerfile &lt;strong&gt;each command or instruction creates an image layer&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmtb90pbzqygh0h86a10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmtb90pbzqygh0h86a10.png" alt="Docker Image Layers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So when we use a base image of node alpine like in the above example it already has layers, because it was already built using its own Dockerfile. Plus, in our Dockerfile on top of that we have a couple of other commands that each will add a new layer to this image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Now what about caching?&lt;/strong&gt;&lt;br&gt;
Each layer will get cached by Docker. 👍&lt;br&gt;
So when you rebuild your image, if your Dockerfile hasn't changed, Docker will just use the cached layers to build the image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt; of cached image layers:&lt;br&gt;
✅  - Faster image building&lt;br&gt;
✅  - Faster pulling and pushing of new image versions: &lt;br&gt;
If I pull a new image version of the same application and let's say 2 new layers have been added in the new version: Only the newly added layers will be downloaded, the rest are already locally cached by Docker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Optimize the Caching&lt;/strong&gt;&lt;br&gt;
So to optimize the caching, you need to know that:&lt;br&gt;
Once a layer changes, &lt;strong&gt;all following or downstream layers have to be re-created as well&lt;/strong&gt;. In other words: when you change the contents of one line in the Dockerfile, caches of all the following lines or layers will be busted and invalidated. 😣&lt;/p&gt;

&lt;p&gt;So the rule here and the best practice is:&lt;br&gt;
&lt;strong&gt;Order your commands&lt;/strong&gt; in the Dockerfile &lt;strong&gt;from the least to the most frequently changing commands&lt;/strong&gt; to take advantage of caching and this way optimize how fast the image gets built. 🚀&lt;/p&gt;


&lt;h2&gt;
  
  
  5️⃣ Best Practice
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Use &lt;code&gt;.dockerignore&lt;/code&gt; file&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now usually when we build the image, we don't need everything we have in the project to run the application inside. We&lt;br&gt;
&lt;strong&gt;don't need the auto-generated folders&lt;/strong&gt;, like &lt;code&gt;targets&lt;/code&gt; or &lt;code&gt;build&lt;/code&gt; folder, we don't need the &lt;code&gt;readme&lt;/code&gt; file etc.&lt;/p&gt;

&lt;p&gt;So how do we exclude such content from ending up in our application image? 🤔&lt;br&gt;
👉 Using a &lt;code&gt;.dockerignore&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;It's pretty straightforward. We basically just create this &lt;code&gt;.dockerignore&lt;/code&gt; file and &lt;strong&gt;list all the files and folders that we want to be ignored&lt;/strong&gt; and when building the image, Docker will look at the contents and ignore anything specified inside.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9fso63260yg2o7sddcxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9fso63260yg2o7sddcxa.png" alt="5th best practice"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Reduced image size&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  6️⃣ Best Practice
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Make use of Multi-Stage Builds&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But now let's say there are some contents (like development, testing tools and libraries) in your project that you NEED for building the image - so during the&lt;br&gt;
build process - but you DON'T NEED them in the final image itself to run the application.&lt;/p&gt;

&lt;p&gt;If you keep these artifacts in your final image even though they're absolutely unnecessary for running the application, it will again result in an increased image size and increased attack surface. 🧐&lt;/p&gt;

&lt;p&gt;So how do we &lt;strong&gt;separate the build stage from the runtime stage&lt;/strong&gt;.&lt;br&gt;
In other words, how do we exclude the build dependencies from the image, while still having them available while building the image? 🤷‍♀️&lt;/p&gt;

&lt;p&gt;Well, for that you can use what's called &lt;strong&gt;multi-stage builds&lt;/strong&gt; 💡&lt;/p&gt;

&lt;p&gt;The multi-stage builds feature allows you to use multiple temporary images during the build process, but keep only&lt;br&gt;
the latest image as the final artifact:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftrdfkkdl96x1tkj4ffkh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftrdfkkdl96x1tkj4ffkh.png" alt="6th best practice"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So these previous steps (marked "1st" in the above picture) will be discarded.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Separation of Build Tools and Dependencies from what's needed for runtime&lt;/li&gt;
&lt;li&gt;Less dependencies and reduced image size&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  7️⃣ Best Practice
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Use the Least Privileged User&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, when we create this image and eventually run it as a container, &lt;strong&gt;which operating system user&lt;/strong&gt; will be used to start the application inside? 🤔&lt;br&gt;
By default, when a Dockerfile does not specify a user, it uses a &lt;strong&gt;root user&lt;/strong&gt;. 🙉  But in reality there is mostly no reason to run containers with root privileges.&lt;/p&gt;

&lt;p&gt;❌  This basically introduces a security issue, because when container starts on the host it, will potentially have root access on the Docker host.&lt;br&gt;
So running an application inside the container with a root user will make it &lt;strong&gt;easier for an attacker to escalate privileges on the host&lt;/strong&gt; and basically get hold of the underlying host and its processes, not only the container itself 🤯  Especially if the application inside the container is vulnerable to exploitation.&lt;/p&gt;

&lt;p&gt;✅  To avoid this, the best practice is to simply &lt;strong&gt;create a dedicated user&lt;/strong&gt; and a dedicated group in the Docker image to run the application and also &lt;strong&gt;run the application&lt;/strong&gt; inside the container &lt;strong&gt;with that user&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzrjr4m1885u1yqbnsjik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzrjr4m1885u1yqbnsjik.png" alt="7th best practice"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can use a directive called &lt;code&gt;USER&lt;/code&gt; with the username and then start the application conveniently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Some images already have a &lt;strong&gt;generic user&lt;/strong&gt; bundled in, which you can use. So you don't have to create a new one. For example the node.js image already bundles a generic user called &lt;code&gt;node&lt;/code&gt;, which you can simply use to run the application inside the container. 👍&lt;/p&gt;


&lt;h2&gt;
  
  
  8️⃣ Best Practice
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Scan your Images for Security Vulnerabilities&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Finally, how do you make sure and validate the image you build has a few or no security vulnerabilities? 🧐&lt;/p&gt;

&lt;p&gt;So my final best practice is, once you build the image to &lt;strong&gt;scan it for security vulnerabilities&lt;/strong&gt; using the &lt;code&gt;docker scan&lt;/code&gt; command. 🔍&lt;/p&gt;

&lt;p&gt;In the background Docker actually uses a service called snyk to do the vulnerability scanning of the images. The scan uses a database of vulnerabilities, which gets constantly updated. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example output&lt;/strong&gt; of &lt;code&gt;docker scan&lt;/code&gt; command:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmwear5nj98iyfm63rik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmwear5nj98iyfm63rik.png" alt="docker scan output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You see: &lt;br&gt;
1) the &lt;strong&gt;type of vulnerability&lt;/strong&gt;, &lt;br&gt;
2) a &lt;strong&gt;URL for more information&lt;/strong&gt; &lt;br&gt;
3) but also what's very useful and interesting you see &lt;strong&gt;which version&lt;/strong&gt; of the relevant library actually &lt;strong&gt;fixes that vulnerability&lt;/strong&gt;. So you can update your libraries to get rid of these issues. 👍&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automate the scanning 🚀&lt;/strong&gt;&lt;br&gt;
In addition to scanning your images manually with &lt;code&gt;docker scan&lt;/code&gt; command on a CLI, you can also &lt;strong&gt;configure Docker Hub&lt;/strong&gt; to &lt;strong&gt;scan the images automatically&lt;/strong&gt;, when they get pushed to the repository. And of course you can &lt;strong&gt;integrate&lt;/strong&gt; this check in your &lt;strong&gt;CI/CD pipeline&lt;/strong&gt; when building your Docker images.&lt;/p&gt;



&lt;p&gt;So these are &lt;strong&gt;8 production best practices that you can apply today to make your Docker images leaner and more secure&lt;/strong&gt;! 🚀😊  Hope it is helpful for some of you! Of course there are many more best practices related to Docker, but I think applying these will already give you great results when using Docker in production.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Do you know some other best practices, which you think are&lt;br&gt;
super important and have to be mentioned? &lt;br&gt;
Please share them in the comments for others 🙌 👍&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The full video is available here: 🤓&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/8vXoMqWgbQQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/techworld_with_nana/" rel="noopener noreferrer"&gt;Instagram - Posting many behind-the-scene stuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana" rel="noopener noreferrer"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Njuchi_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCdngmbVKX1Tgre699-XLlUA?sub_confirmation=1" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Kubernetes Crash Course for Absolute Beginners 👏</title>
      <dc:creator>TechWorld with Nana</dc:creator>
      <pubDate>Thu, 30 Sep 2021 14:18:53 +0000</pubDate>
      <link>https://dev.to/techworld_with_nana/kubernetes-crash-course-for-absolute-beginners-35pc</link>
      <guid>https://dev.to/techworld_with_nana/kubernetes-crash-course-for-absolute-beginners-35pc</guid>
      <description>&lt;p&gt;Kubernetes, also known as K8s, is &lt;strong&gt;the most popular platform for container orchestration&lt;/strong&gt; for automating deployment, scaling, and management of containerized applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why we need Kubernetes? 🤔
&lt;/h3&gt;

&lt;p&gt;After you have &lt;a href="https://youtu.be/3c-iBn73dDE"&gt;learnt Docker 🐳&lt;/a&gt;   you can start creating very complex applications with tens or even hundreds of containers, with containers talking to each other and interacting in some way.&lt;br&gt;
And these containers would need to be deployed across multiple servers in a distributed way.&lt;br&gt;
So you can imagine the &lt;strong&gt;overhead and effort&lt;/strong&gt; you would have, if you had to &lt;strong&gt;manage these hundreds of containers manually&lt;/strong&gt; without automation. 🤦‍♀️&lt;/p&gt;

&lt;p&gt;Every time containers crash or the communication between them isn’t working across multiple servers, you would have to interfere and fix the problem. &lt;/p&gt;

&lt;p&gt;So it would be great to have a tool that will &lt;strong&gt;automatically fix such issues and recover the application state&lt;/strong&gt;. That tool is a container orchestration tool. ⭐️&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And &lt;strong&gt;Kubernetes&lt;/strong&gt; is one of the &lt;strong&gt;most popular container orchestration tools&lt;/strong&gt; out there.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Getting started with Kubernetes 😎
&lt;/h3&gt;

&lt;p&gt;In this crash course you will &lt;strong&gt;learn everything you need to know to get started with Kubernetes in 1 hour&lt;/strong&gt;. You will learn all the core concepts, its architecture and how Kubernetes works including the main Kubernetes components that you need to learn to work efficiently with Kubernetes.&lt;/p&gt;

&lt;p&gt;Finally, I will show a hands-on demo project, where you will learn how to deploy a web application with its database into a local Kubernetes cluster. It's a simple but realistic application setup, which can also serve as a blueprint configuration for most common application setups.&lt;/p&gt;

&lt;p&gt;The full tutorial is available here: 🤓&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/s_o8dwzRlu4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  ▬▬▬▬▬▬ COURSE OVERVIEW 📚  ▬▬▬▬▬▬
&lt;/h3&gt;

&lt;h4&gt;
  
  
  💎  Part 01: Introduction to Kubernetes
&lt;/h4&gt;

&lt;p&gt;In the first section you will learn all the core concepts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is Kubernetes&lt;/li&gt;
&lt;li&gt;Benefits of Kubernetes&lt;/li&gt;
&lt;li&gt;Kubernetes Architecture (Control Plane and Worker Nodes)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  💎  Part 02: Main Kubernetes Components
&lt;/h4&gt;

&lt;p&gt;K8s has tons of components, but most of the time you are only working with a handful of them. This part shows you step by step how each component helps you to deploy your application and what the role of each of those components is.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node &amp;amp; Pod&lt;/li&gt;
&lt;li&gt;Configuring Access with Service &amp;amp; Ingress&lt;/li&gt;
&lt;li&gt;External Configuration with ConfigMap &amp;amp; Secret&lt;/li&gt;
&lt;li&gt;Persisting Data with Volume&lt;/li&gt;
&lt;li&gt;Replication with Deployment &amp;amp; StatefulSet&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  💎  Part 03: Kubernetes Configuration
&lt;/h4&gt;

&lt;p&gt;In this part you'll learn the syntax and contents of K8s configuration file , which is used to create and configure components in a Kubernetes cluster.&lt;/p&gt;

&lt;h4&gt;
  
  
  💎  Part 04: Setup Kubernetes cluster locally (Minikube and kubectl)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;What is Minikube&lt;/li&gt;
&lt;li&gt;What is Kubectl&lt;/li&gt;
&lt;li&gt;Install Minikube and Kubectl&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  💎  Part 05: Complete Demo Project: Deploy WebApp with MongoDB
&lt;/h4&gt;

&lt;p&gt;I will show a hands-on demo project, where you will learn how to deploy a web application with its database into a local Kubernetes cluster. It's a simple but realistic application setup, which can also serve as a blueprint configuration for most common application setups.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Demo Project Overview&lt;/li&gt;
&lt;li&gt;Create MongoDB ConfigMap&lt;/li&gt;
&lt;li&gt;Create MongoDB Secret&lt;/li&gt;
&lt;li&gt;Create MongoDB Deployment and Service&lt;/li&gt;
&lt;li&gt;Create WebApp Deployment and Service&lt;/li&gt;
&lt;li&gt;Pass Secret Data to MongoDB Deployment&lt;/li&gt;
&lt;li&gt;Pass Config Data to WebApp Deployment&lt;/li&gt;
&lt;li&gt;Configure External Access&lt;/li&gt;
&lt;li&gt;Deploy all K8s resources into Minikube cluster&lt;/li&gt;
&lt;li&gt;Interacting with Kubernetes Cluster&lt;/li&gt;
&lt;li&gt;Access Web Application in Browser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;▬▬▬▬▬▬   Course Pre-Requisites ▬▬▬▬▬▬ &lt;br&gt;
Docker - learn here:    ►  &lt;a href="https://youtu.be/3c-iBn73dDE"&gt;https://youtu.be/3c-iBn73dDE&lt;/a&gt;&lt;br&gt;
YAML -   learn here:    ►  &lt;a href="https://youtu.be/1uFVr15xDGg"&gt;https://youtu.be/1uFVr15xDGg&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Like, share and follow me&lt;/strong&gt; 😍 for more content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/techworldwithnana"&gt;Private FB group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//linkedin.com/in/nana-janashia"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Njuchi_"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCdngmbVKX1Tgre699-XLlUA?sub_confirmation=1"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/techworld_with_nana/"&gt;Instagram&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
