<?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: Sylvia</title>
    <description>The latest articles on DEV Community by Sylvia (@sylviafronczak).</description>
    <link>https://dev.to/sylviafronczak</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%2F48703%2F054c18d9-9bbf-4253-be48-6ed6e2a26e6a.jpg</url>
      <title>DEV Community: Sylvia</title>
      <link>https://dev.to/sylviafronczak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sylviafronczak"/>
    <language>en</language>
    <item>
      <title>Containers and Kubernetes vs VMs vs Config Management</title>
      <dc:creator>Sylvia</dc:creator>
      <pubDate>Tue, 21 Jan 2020 16:15:00 +0000</pubDate>
      <link>https://dev.to/scalyr/containers-and-kubernetes-vs-vms-vs-config-management-1omi</link>
      <guid>https://dev.to/scalyr/containers-and-kubernetes-vs-vms-vs-config-management-1omi</guid>
      <description>&lt;p&gt;In today's &lt;a href="https://www.scalyr.com/blog/devops-engineer-what-does-it-take-to-land-the-job/"&gt;DevOps&lt;/a&gt;-centered world, it's often easy to be taken in by the infrastructure solution of the hour—VMs for everyone! Or wait, now containers are where it's at! Who needs config management anyway?&lt;/p&gt;

&lt;p&gt;Those of us that are primarily developers probably haven't had to think about infrastructure decisions as much as our friends on the operations side. Since we haven't had to make those decisions in the past, it can be hard to figure out what's out there and why you'd want to use things like VMs or containers. We need to consider what actual problem these solutions are trying to solve. So let's start simply.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b2mvdObA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2018/07/19175532/Boxing_Gloves.png" class="article-body-image-wrapper"&gt;&lt;img class="aligncenter  wp-image-906" src="https://res.cloudinary.com/practicaldev/image/fetch/s--b2mvdObA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2018/07/19175532/Boxing_Gloves.png" alt="" width="336" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;Config Management, VMs, and Containers: What Are They?&lt;/h1&gt;

&lt;p&gt;Let's take a high-level look at what they are and how they differ from one another.&lt;/p&gt;

&lt;h2&gt;Config Management&lt;/h2&gt;

&lt;p&gt;Configuration management is a centralized management of your decentralized systems and servers. Many consider configuration management to be not much more than package management—installing, upgrading, patching, and removing packages on an operating system. But modern config management like &lt;a href="https://puppet.com/" rel="noopener noreferrer"&gt;Puppet&lt;/a&gt; and &lt;a href="https://www.ansible.com/" rel="noopener noreferrer"&gt;Ansible&lt;/a&gt; do a lot more for you. It turns your infrastructure setup and decisions into code, allowing you to version and automate your infrastructure builds.&lt;/p&gt;

&lt;h2&gt;Virtual Machines&lt;/h2&gt;

&lt;p&gt;A VM takes an existing machine and installs additional compartmentalized machines on it. The initial machine is the host machine; all VMs on the host are called guests. The host manages its guests using a virtual machine monitor (or hypervisor). This keeps the guest VMs isolated from each other. Each guest VM also requires its own operating system. So the more VMs you have on a particular machine, the more operating systems are running.&lt;/p&gt;

&lt;h2&gt;Containers/Kubernetes&lt;/h2&gt;

&lt;p&gt;Containers like Kubernetes are a type of &lt;span class="ILfuVd yZ8quc"&gt;virtualization that let you run an application and its dependencies in an isolated process. &lt;/span&gt;A container doesn't have its own OS. It shares the kernel with not only the host but also the neighboring containers.&lt;/p&gt;

&lt;h1&gt;What Problem Do They Solve?&lt;/h1&gt;

&lt;p&gt;So there must be a reason why we have these different solutions. Let's consider what they're trying to fix.&lt;/p&gt;

&lt;h2&gt;Problem Solved By Config Management&lt;/h2&gt;

&lt;p&gt;Without config management, it would be difficult to track system-level changes and infrastructure. This problem becomes bigger the more servers you have. Modern configuration management is designed to deploy, configure, and manage servers in a repeatable and automated fashion.&lt;/p&gt;

&lt;p&gt;At a container level, there's also the application's config management. Where do we store our configuration? For a container solution, Kubernetes uses &lt;a href="https://kubernetes.io" rel="noopener noreferrer"&gt;config maps&lt;/a&gt; and &lt;a href="https://kubernetes.io/docs/concepts/configuration/secret/" rel="noopener noreferrer"&gt;Kubernetes secrets&lt;/a&gt; for management.&lt;/p&gt;

&lt;h2&gt;Problem Solved By Virtual Machines&lt;/h2&gt;

&lt;p&gt;VMs allow you to run different applications on the same hardware but in an isolated fashion. As a developer, you don't care what else was running on other VMs. You don't wonder about what was already using ports. And you're not worried about what particular OS versions or patches the other applications required. Therefore, if you have different applications that have different operating system needs, VMs will deal with that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Djlb7gei--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2018/06/31170723/there_must_be_a_reason_why_we_have_these_different_solutions.png" class="article-body-image-wrapper"&gt;&lt;img class="size-full wp-image-2693 alignright" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Djlb7gei--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2018/06/31170723/there_must_be_a_reason_why_we_have_these_different_solutions.png" alt="" width="283" height="224"&gt;&lt;/a&gt;There have been several legacy systems that I've come across in the past that could benefit from VMs. They were inexplicably tied to not just a particular OS, but one particular version of that OS. It just would not run elsewhere. The secrets of why that was the case were often buried and long forgotten.&lt;/p&gt;

&lt;h2&gt;Problem Solved By Containers/Kubernetes&lt;/h2&gt;

&lt;p&gt;Containers let us run a single application in a lightweight fashion and still stay separate from other containers and applications on that server. This removes the requirement of having a separate VM for each application. All the containers use the same kernel as the host. Containers are also simpler for developers like us to spin up, as someone else already made the OS decisions. There's less for us to have to manage or even know about.&lt;/p&gt;

&lt;h1&gt;What Should You Watch Out For?&lt;/h1&gt;

&lt;p&gt;Consider the following factors when looking at config management, containers, and VMs.&lt;/p&gt;

&lt;h2&gt;Configurability&lt;/h2&gt;

&lt;p&gt;One of the benefits of config management is being able to patch and modify your infrastructure. You might think this would be a requirement since many companies still stand up their infrastructure setup by hand. However, your infrastructure is code. That should be versioned and automated through a CI/CD pipeline. If you have to change at a system level, then you can update your infrastructure scripts and it will deploy a new image. You want your application config to be immutable, and there's nothing keeping us from making the infrastructure immutable as well.&lt;/p&gt;

&lt;p&gt;Kubernetes relies on config maps and Kubernetes secrets to ensure that containers have the correct configuration. That's where you set up your container so it knows what environment it's in and how it should run. It also makes secret rotation of things like database IDs and passwords easier; that can all be scripted and scheduled.&lt;/p&gt;

&lt;p&gt;Another option for both VMs and containers is to have configuration completely in another system. The container or VM only knows where to get the configuration from. The configuration lives in a vault or KeyStore.&lt;/p&gt;

&lt;p&gt;This has the advantage of being able to update the configuration for the whole fleet, but it makes the assumption that changing configuration won't introduce a bug. As much as we'd like to believe that, most of us have seen a change in configuration that caused problems. Perhaps configuration is better off being immutable.&lt;/p&gt;

&lt;h2&gt;Security&lt;/h2&gt;

&lt;p&gt;VMs don't have access to the host OS as they have their own OS to work with. Sneaking through the hypervisor to get through to the host OS is difficult. If Bob's Burger Barn VM is compromised, it's less likely to affect their neighbor over at Harriet's House of Hummus.&lt;/p&gt;

&lt;p&gt;However, VMs are heavier solutions with their own set of OS and required packages. Therefore, they also have more places where you need to worry about penetration for security issues. With containers, they're considered to have a smaller surface area, as they only have the packages required to run the application.&lt;/p&gt;

&lt;p&gt;The lifecycle of a container is also typically shorter. So if someone does break in, they can be shut out the next time you deploy the container.&lt;/p&gt;

&lt;p&gt;On the other hand, containers share an OS and kernel. If someone gains kernel access in one container, they could have access to other containers as well. If a neighbor in your cluster is compromised, that could affect your application.&lt;/p&gt;

&lt;p&gt;Additionally, security solutions are still evolving for containers. That's why you want to deploy frequently with the latest versions of tools and infrastructure using your config management. Even though containers have that smaller surface area that I mentioned, there aren't as many tools available yet for monitoring security risks and penetration. If a container is compromised, that container may be deleted and removed before we even find that something occurred.&lt;/p&gt;

&lt;h2&gt;Performance/Resources&lt;/h2&gt;

&lt;p&gt;Containers can have a performance lag over VMs. I once worked on a project moving from VMs to containers. Some of the components/applications that ran without issue on VMs, where the app was allocated 2–4G of RAM of memory, later required 6–8G of RAM on a container. Why is that?&lt;/p&gt;

&lt;p&gt;For one, hypervisors on the VM boost performance so that it's closer to the performance of running on bare metal. Additionally, containers all run on the same kernel, similar to Linux processes. And if your application uses Java and runs on a JVM, there's another gotcha. Although Java 9 and 10 have some improvements, we were using Java 8. In that version, the JVM looked at the host OS to determine what processors were available, how many threads to spawn, and how much CPU it should use. That doesn't work when all containers are trying to use more than they have available.&lt;/p&gt;

&lt;p&gt;Not all is perfect on the VM side, however. The overall efficiency of the host is worse if you're running multiple instances of an app on separate VMs than if you were using containers. As mentioned earlier, this is due to the overhead required for each VM and its own OS. That might not seem too bad, especially when you recall that VMs share the hardware of the host OS. However, the VM will also include "virtual" hardware that maps to the host the OS needs to run. It also comes with all the packages the OS needs to function fully.&lt;/p&gt;

&lt;p&gt;In summary, If you want multiple instances of an application running, then containers make it easy and less resource-heavy. However, if you only have one instance of your applications running but have many applications overall, then VMs are a good solution.&lt;/p&gt;

&lt;h1&gt;Harmony&lt;/h1&gt;

&lt;p&gt;You may be thinking that none of these address all your problems or concerns. Or maybe one option would be attractive if it weren't for that single flaw. Well, you're in luck! You can use all three together to get all the benefits you're looking for.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3CoLrADl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2018/06/31170747/You_can_use_all_three_together_to_get_all_the_benefits_you_re_looking_for.png" class="article-body-image-wrapper"&gt;&lt;img class="size-full wp-image-2694 alignleft" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3CoLrADl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2018/06/31170747/You_can_use_all_three_together_to_get_all_the_benefits_you_re_looking_for.png" alt="" width="298" height="233"&gt;&lt;/a&gt;For example, let's say that security of containers is a concern, but you still want to get your stuff easily deployed and configured. You can use VMs that hold containers to mitigate the risk of less secure neighbors while still having the flexibility and portability of containers. And since those VMs are all going to be using config management, setting this up is repeatable and configured correctly.&lt;/p&gt;

&lt;p&gt;Config management isn't dead. It just needs to be adjusted for the current infrastructure. You'll always need to manage configuration. Even serverless applications, though they may not have dedicated servers, still live and run on a server. And someone has to manage those servers.&lt;/p&gt;

&lt;p&gt;Overall, when combining these elements, you'll still have to monitor the system to make sure you're getting the most out of your infrastructure. Ensure it's working as expected with the help of tools for proper &lt;a href="https://www.scalyr.com/blog/http-monitor-what-it-is-and-why-you-need-it/"&gt;monitoring&lt;/a&gt; and &lt;a href="https://www.scalyr.com/blog/why-do-engineers-care-about-logging/"&gt;logging&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;VMs, containers, and configuration management solve specific problems. As developers, we can't make infrastructure decisions based on what's trendy. And we don't want to only have one tool in our tool belt.&lt;/p&gt;

&lt;p&gt;Take all three of these solutions and see how they can address your problems without compromise.&lt;/p&gt;

</description>
      <category>containers</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>GitHub Tips for Bootcamp Grads</title>
      <dc:creator>Sylvia</dc:creator>
      <pubDate>Tue, 21 Jan 2020 00:30:27 +0000</pubDate>
      <link>https://dev.to/sylviafronczak/github-tips-for-bootcamp-grads-5a2a</link>
      <guid>https://dev.to/sylviafronczak/github-tips-for-bootcamp-grads-5a2a</guid>
      <description>&lt;p&gt;I recently found myself at a Meetup where half of the attendees were from a local front-end bootcamp class. They were connecting, looking for future job prospects, and practicing their soft skills. They came off as energetic, engaged, and hopeful.&lt;/p&gt;

&lt;p&gt;And somehow I found myself inspired to give advice that I’ve built up over the last decade or more of screening resumes and candidates. I hope they put the advice to good use. Now, I couldn’t give them all the tips I would like to. I would have bored them to tears with my talk. However, I want to share my thoughts with a wider audience.&lt;/p&gt;

&lt;p&gt;I want to share these tips with you, the recent college or bootcamp grad, that doesn’t know how to stand out from his or her classmates that worked on exactly the same projects. It’s tough. And as bootcamp grads, or college grads, at least 70% of your GitHub repositories look exactly the same.&lt;/p&gt;

&lt;p&gt;And that’s the problem. When you evaluate entry-level software developers, you need to find what makes one candidate stick out over another in just a couple of minutes. But when everyone does the same thing, it becomes more of a coin toss.&lt;/p&gt;

&lt;p&gt;So what can you, an entry-level developer do? Do you need to spend months writing large projects or create amazing new applications? No. But you do need to take steps to improve your GitHub repos.&lt;/p&gt;

&lt;p&gt;For today’s post, I’m going to take you through some examples of what I consider when reviewing your GitHub repo. These things may not be what all hiring managers or leads look for, but I know I’m not alone. And most of these suggestions won’t take months to implement.&lt;/p&gt;

&lt;p&gt;Now let’s get started.&lt;/p&gt;

&lt;h1&gt;
  
  
  Do Your Repositories Stand Out?
&lt;/h1&gt;

&lt;p&gt;Earlier I mentioned that 80% of repositories and GitHub profiles look the same. I made that number up based on my personal experience, but I don’t think I’m too far off the mark.&lt;/p&gt;

&lt;p&gt;Don’t believe me? Just do a search for repos with something like “Lab 1” or “Lab 16” in the name. Then go to the owner’s profile and take a look around. Even though languages and problems vary, most of them look the same. So how can we make ours stand out? Let’s review the following tips.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Rename Your Repos
&lt;/h2&gt;

&lt;p&gt;I get it, the instructors want your repos named with a lab or exercise number. However future employers don’t know what to do with this. We’ll maybe click in one or two of them to see if we can decipher what the code does and then give up and move onto another candidate.&lt;/p&gt;

&lt;p&gt;For this, you have two options. First, you could append a meaningful name to the lab or exercise number. For example, instead of Lab 1, use Lab 1 – String Calculator.&lt;/p&gt;

&lt;p&gt;Second, once your bootcamp class completes, feel free to rename your repos so that the name denotes what the program does.&lt;/p&gt;

&lt;p&gt;Either way, you’re helping software developers that review your GitHub so we can drill into some of the more interesting examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Update Your README
&lt;/h2&gt;

&lt;p&gt;Most lab examples don’t even include a README. However, in the real world README’s provide critical information on the usage of applications. Take a look at some examples of software libraries you’ve used to see what the README’s should contain.&lt;/p&gt;

&lt;p&gt;For example, head on over to the &lt;a href="https://github.com/vuejs/vue"&gt;Vue.js&lt;/a&gt; and see how much information gets put in there. As another example, head over to the &lt;a href="https://github.com/JodaOrg/joda-time"&gt;Joda-Time&lt;/a&gt; GitHub repo for a shorter version of a README. Since Jada-Time is much smaller than Vue.js, less documentation is necessary.&lt;/p&gt;

&lt;p&gt;Now you don’t need as much information as larger projects. But at the very minimum, add a short README and make it descriptive.&lt;/p&gt;

&lt;p&gt;In other words, don’t create a README with just this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Countries Application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But instead, do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;An application that allows users to display lists of countries from a text file.

To build the application, clone the repository and run `mvn build`

To run the application, type mvn exec:java
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Pin Your Best Work
&lt;/h2&gt;

&lt;p&gt;When I look at your GitHub profile, your page displays a list of your most popular repositories. These may not be the projects you want your future employer to review.&lt;/p&gt;

&lt;p&gt;Pick out your favorites and make sure they’re showing off your best work. Then pin them to your profile to make sure everyone sees what you want them to see on your profile.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Add Tests
&lt;/h2&gt;

&lt;p&gt;Most companies now have some level of automated testing. If you want to stand out, show off some of your skills by adding a few unit tests to your repositories. It will let your future employers know that you’re at least familiar with basic testing concepts. Therefore, they know you’ll be able to hit the ground running faster than candidates that don’t use unit tests.&lt;/p&gt;

&lt;p&gt;A word of caution here, however. I’ve seen many Java Spring projects where the developer used Spring’s initializer to create a basic template of the project. Part of that initial code includes a default &lt;code&gt;contextLoads&lt;/code&gt; test. The only code this tests is whether your app can start or not. It does not give you any points.&lt;/p&gt;

&lt;p&gt;You see, when I look at a project that has a test folder, I get my hopes. And I dive into it hoping to find something good. But I just end up seeing nothing but autogenerated code. Yuck!&lt;/p&gt;

&lt;p&gt;Any amount of testing trumps no testing. Just put in a little effort and your repository will shine.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Use Configuration Properly
&lt;/h2&gt;

&lt;p&gt;Another one of my pet peeves involves seeing code like this Java example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private static final String JDBC_URL = "jdbc:postgresql://localhost:5432/my_awesome_db";
private static final String JDBC_USER = "myAwesomeUser";
private static final String JDBC_PASSWORD = "87654321";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are actually a few problems here. First, these values don’t belong in your source code. They belong in configuration files or, in the case of the user id and password, in a system designed to store secrets.&lt;/p&gt;

&lt;p&gt;At a minimum, pull those properties from a configuration file. Additionally, don’t ever store secrets in your GitHub repository. For the Java example above, let’s assume we’re using Spring. So we can add the following to our application.properties with placeholders for our secrets. Even if the user id and password aren’t real, treat them as if they were.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.jdbc.url: "jdbc:postgresql://localhost:5432/web_lab_db"
app.jdbc.user: “&amp;lt;INSERT USER HERE&amp;gt;”
app.jdbc.password: “&amp;lt;INSERT PASSWORD HERE&amp;gt;”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows prospective employers that you understand what configuration does and that you understand at least a bit of security.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Use a Linter And Style Formatter
&lt;/h2&gt;

&lt;p&gt;Code that follows a common practice looks cleaner and more professional. Additionally, using a linter ensures that you’re not making any common mistakes. Am I going to dig through your code looking for mistakes? No. But if you can reduce the amount of poor formatting and common mistakes, why not do it?&lt;/p&gt;

&lt;p&gt;An additional note about formatting and style. Years ago I worked in an organization with a programmer that never indented things. Now, I understand that this is a really bad outlier, but it enforces my point. I struggled taking his code seriously. How can anyone appreciate his algorithmic knowledge when his code was unreadable?&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Use .gitignore
&lt;/h2&gt;

&lt;p&gt;Let’s look at a short list of folders and files that shouldn’t be committed in your git repository:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Operating system files: .DS_Store, Thumbs.db&lt;/li&gt;
&lt;li&gt;IDE files like .idea&lt;/li&gt;
&lt;li&gt;Language and framework files: jars, wars, and other executables&lt;/li&gt;
&lt;li&gt;Directories of compiled code: target, bin, classes&lt;/li&gt;
&lt;li&gt;Files from package managers like node_modules&lt;/li&gt;
&lt;li&gt;Credentials and secrets
Again, like other points on this list, knowing how to use your .gitignore properly will give you an edge over your competition.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  8. Use folders and packages
&lt;/h2&gt;

&lt;p&gt;A small percentage of repositories I review have no folders. They’re just repositories with 20 files and no organization. Unless there’s something else amazing about the candidate, these applications get thrown out.&lt;/p&gt;

&lt;p&gt;Most types of applications use a standard folder structure. Look up what it should be for your language or framework and follow it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Get A Leg Up On Your Competition
&lt;/h1&gt;

&lt;p&gt;You’ve made it through my list. Congrats!&lt;/p&gt;

&lt;p&gt;And you may have noticed that many of these items don’t have too much to do with the code itself.  You’re an entry-level dev. Your code will not be as complex or performant as many applications. And that’s OK. We’re not looking for senior-level programming for entry-level positions.&lt;/p&gt;

&lt;p&gt;But we still want to see something that stands out. Show your future employer a level of professionalism that doesn’t exist in many lab-type repositories. Show that you’re a professional that cares about standards and does more than just “make it work.”&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>Operational Visibility Is the Key to Your Competitiveness</title>
      <dc:creator>Sylvia</dc:creator>
      <pubDate>Tue, 14 Jan 2020 15:40:36 +0000</pubDate>
      <link>https://dev.to/scalyr/operational-visibility-is-the-key-to-your-competitiveness-3n3c</link>
      <guid>https://dev.to/scalyr/operational-visibility-is-the-key-to-your-competitiveness-3n3c</guid>
      <description>&lt;p&gt;With DevOps practices, many companies have improved their CI/CD pipeline, ensuring that deployments happen smoothly and frequently. In addition, many companies have added automated testing and application monitoring to make sure their apps work consistently and within spec.&lt;/p&gt;

&lt;p&gt;Unfortunately, many companies stop there and don't take further actions to improve operational visibility. Additional tooling and infrastructure for metrics and logs don't always have clear benefits. Therefore, many companies deprioritize these efforts in favor of more features.&lt;/p&gt;

&lt;p&gt;However, you're missing out on a lot of benefits if you just stop with the basics of &lt;a href="https://www.scalyr.com/blog/devops-past-present-and-future/"&gt;DevOps.&lt;/a&gt; A successful deployment is only one step in the process. But if you stop there, you’re don't get the data that can provide more positive benefits for your customers. And more benefits for your customers can lead to better competitiveness in the market.&lt;/p&gt;

&lt;p&gt;Let's look at operational visibility and see how it can give your company and products the edge over the competition.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z6K_-n_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/03/22064120/Eye_with_scalyr_colors_signifying_operational_visibility.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z6K_-n_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/03/22064120/Eye_with_scalyr_colors_signifying_operational_visibility.png" alt="Eye_with_scalyr_colors_signifying_operational_visibility" class="wp-image-3287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Operational Visibility&lt;/h2&gt;

&lt;p&gt;Operational visibility refers to the monitoring of your system’s operations, performance, and readiness. It allows you to assess fluctuations in metrics and act on anomalies.&lt;/p&gt;

&lt;p&gt;Many businesses continue to act with little operational visibility. They find out about problems from their customers. However, some problems never bubble up to the surface because affected users may simply go away without commenting on their experience.&lt;/p&gt;

&lt;p&gt;So you shouldn't just stop where your CI/CD pipeline ends. But where do you go now? The next step involves adding operational visibility to your platform. Once you know your application made it into production, you'll want to know more than just how well it’s running. You also want to know what the system traffic looks like because that'll help you get into the minds of your customers and find out what they're actually doing with your products.&lt;/p&gt;

&lt;h2&gt;Competitiveness&lt;/h2&gt;

&lt;p&gt;Now that you know a bit more about operational visibility, how can it improve your competitiveness? In the next few sections, let's look at how data from our application and business operations can give you an edge.&lt;/p&gt;

&lt;h3&gt;The Features and Fixes That Customers Need&lt;/h3&gt;

&lt;p&gt;With increased operational visibility, you can track which features your customers gravitate toward in our applications and where they have problems or run into errors. This insightful additional data can drive your application teams to focus on the features that customers actually want and use.&lt;/p&gt;

&lt;p&gt;Using all this data, you can plan our product launches so that you launch with the most critical bug fixes and most important features first.&lt;/p&gt;

&lt;p&gt;Additionally, you can increase the speed with which you go to market with these features and fixes. Those additional metrics and insights will provide a better view of how your systems are used and will alert you to problems quickly if there's a need to backtrack.&lt;/p&gt;

&lt;h3&gt;Decentralized Decision-Making for a Faster Turnaround&lt;/h3&gt;

&lt;p&gt;With more visibility into the operations of your systems, your teams can make more decisions themselves. If a feature seems to be taking off quickly, perhaps a team can find a way to capitalize on the success right away instead of waiting until the next product meeting.&lt;/p&gt;

&lt;p&gt;Decentralized decision-making brought about by increased operational visibility will provide a competitive edge where responsiveness and speed count.&lt;/p&gt;

&lt;h3&gt;Better Customer Support&lt;/h3&gt;

&lt;p&gt;Operational visibility provides the right data to the right people and also allows teams to be more autonomous. If your customer support folks can quickly answer questions by looking into metrics or logs of an application, they will route fewer calls down to product teams or developers. They'll be able to &lt;a href="https://www.scalyr.com/blog/visibility-speed/"&gt;help customers within minutes&lt;/a&gt; instead of hours or days.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OCJNjXpd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/03/22064932/Operational-visibility-provides-the-right-data-to-the-right-people-and-also-allows-teams-to-be-more-autonomous.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OCJNjXpd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/03/22064932/Operational-visibility-provides-the-right-data-to-the-right-people-and-also-allows-teams-to-be-more-autonomous.png" alt="Operational visibility provides the right data to the right people and also allows teams to be more autonomous" class="wp-image-3289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And with just a few of these competitive advantages, you can start separating yourself from similar products and applications that don't focus on daily operations and trends. But how do you add all this visibility into your world? Let's take a deeper look.&lt;/p&gt;

&lt;h2&gt;What Do You Need?&lt;/h2&gt;

&lt;p&gt;So let's say you're ready to take the plunge into operational visibility. What would your next steps be? Well, you need to work on a few things to make sure you're able to get what you need out of our systems and processes. Let's go through some of these steps.&lt;/p&gt;

&lt;h3&gt;Robust Data Collection&lt;/h3&gt;

&lt;p&gt;For the first step of operational visibility, you need data. And lots of it. Additionally, you need systems that can handle the load of storing and accessing all that data.&lt;/p&gt;

&lt;p&gt;With &lt;a href="https://www.scalyr.com/product"&gt;Scalyr&lt;/a&gt;, the answer is simple. You can use &lt;a href="https://www.scalyr.com/blog/the-10-commandments-of-logging/"&gt;logging&lt;/a&gt; for all your data needs and access it quickly. And it's not enough that you log all the things. You also need to make sure that everyone that needs access can have it.&lt;/p&gt;

&lt;p&gt;Though it takes skill to write the code that runs your system, it doesn't take as much skill or experience to be able to read a log message and determine what's going on. That's especially true if your developers understand the value of the logs and add more user-friendly logging wherever they can.&lt;/p&gt;

&lt;p&gt;So however you decide to gather your operational metrics and messages, make sure you're set up to handle the load on resources.&lt;/p&gt;

&lt;h3&gt;Alignment Between KPIs and the Data Collected&lt;/h3&gt;

&lt;p&gt;Whatever your business KPIs involve, there should be data collected that correlates to them. So if your product KPIs involve sales figures, conversions, or time spent on a page, then your operational visibility tool should also have access to that data as it relates to your products.&lt;/p&gt;

&lt;p&gt;For example, it's no longer enough to have monthly or weekly reports on sales figures. You need these figures in real time. And if you gather those figures in real time using operational visibility tools, you can monitor the health of your company with better speed and accuracy.&lt;/p&gt;

&lt;p&gt;So any time you're tracking KPIs for business, make sure you have visibility into the data that supports these KPIs.&lt;/p&gt;

&lt;h3&gt;Accurate Data&lt;/h3&gt;

&lt;p&gt;All the data that you're gathering and tracking towards KPIs doesn't add value if it's inaccurate. In order to make the best decisions around your competitiveness, you need to know that your data reflects reality.&lt;/p&gt;

&lt;p&gt;So in addition to testing around your business logic, you need testing around your visibility metrics. You don't want to find out too late that a bug reports the wrong values for your KPI.&lt;/p&gt;

&lt;h3&gt;Visibility&lt;/h3&gt;

&lt;p&gt;Visibility can come in many forms. It can include fancy dashboards and alerting. Or it can involve providing the proper access to logs and metrics.&lt;/p&gt;

&lt;p&gt;But the important thing about visibility involves actually making the data visible. And most companies stop short of providing the data to all the employees that can benefit from it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PdLQSGrm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/03/22065212/Visibility-can-come-in-many-forms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PdLQSGrm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/03/22065212/Visibility-can-come-in-many-forms.png" alt="" class="wp-image-3291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, you may think that only developers and application maintenance folks need access to logs. But you're not considering that your customer support, social media, or marketing people could use access too.&lt;/p&gt;

&lt;p&gt;Giving visibility to operational metrics can provide your employees with data that they can use in ways you can't even imagine. They can speed up support, find new ways to market features, or spot trends that you're not tracking.&lt;/p&gt;

&lt;h2&gt;Compete by Using Data&lt;/h2&gt;

&lt;p&gt;Instead of stopping with the easy wins brought by automated testing and a CI/CD pipeline, go further to build visibility into the operation of your applications and business.&lt;/p&gt;

&lt;p&gt;You'll be able to react faster, improve support, and provide what other companies won't. And with all these features, your teams will benefit from the ability to make decisions autonomously with real-time data.&lt;/p&gt;

&lt;p&gt;So take a look at Scalyr and give it a spin. See how you can make your product more competitive and successful using operational visibility.&lt;/p&gt;

</description>
      <category>visibility</category>
    </item>
    <item>
      <title>Getting Started Quickly with Meteor Logging</title>
      <dc:creator>Sylvia</dc:creator>
      <pubDate>Tue, 22 Oct 2019 15:29:31 +0000</pubDate>
      <link>https://dev.to/scalyr/getting-started-quickly-with-meteor-logging-4d55</link>
      <guid>https://dev.to/scalyr/getting-started-quickly-with-meteor-logging-4d55</guid>
      <description>&lt;p&gt;We’ve covered a lot of bases in our "getting started quickly" posts. In addition to &lt;a href="https://www.scalyr.com/blog/get-started-quickly-with-javascript-logging/"&gt;JavaScript&lt;/a&gt; and &lt;a href="https://www.scalyr.com/blog/getting-started-quickly-with-node-js-logging/"&gt;Node.js&lt;/a&gt;, we’ve created guides for &lt;a href="https://www.scalyr.com/blog/get-started-quickly-csharp-logging/"&gt;C#&lt;/a&gt;, &lt;a href="https://www.scalyr.com/blog/get-started-quickly-java-logging/"&gt;Java&lt;/a&gt;, &lt;a href="https://www.scalyr.com/blog/get-started-quickly-with-python-logging/"&gt;Python&lt;/a&gt;, and more. Today we’ll discuss logging from a Meteor point of view.&lt;/p&gt;

&lt;p&gt;Now, since Meteor can follow the same premise as JavaScript and Node.js, we’re going to change things up a bit. Instead of an empty app, we're going to clone an existing sample app and add logging to it. But if this tutorial isn't quite what you were looking for, go check out the basic JavaScript and Node.js posts. They'll cover anything else you might need.&lt;/p&gt;

&lt;p&gt;But don’t worry, we’ll still cover these topics:&lt;/p&gt;

&lt;p&gt;• Meteor overview&lt;br&gt;
• Basic logging&lt;br&gt;
• Where to log&lt;br&gt;
• What to log&lt;/p&gt;

&lt;p&gt;Now let's get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T4fcc89q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15120426/Meteor_logging_image_with_scalyr_colors.png" class="article-body-image-wrapper"&gt;&lt;img class="wp-image-2967 aligncenter" src="https://res.cloudinary.com/practicaldev/image/fetch/s--T4fcc89q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15120426/Meteor_logging_image_with_scalyr_colors.png" alt="Meteor_logging_image_with_scalyr_colors" width="541" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Meteor Overview&lt;/h2&gt;

&lt;p&gt;If you came to this blog post by searching for Meteor logging, you might not need this section. But I’d like to make sure we’re all starting from the same point, so here’s some quick Meteor info. Don’t worry, I’ll be brief.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.meteor.com/"&gt;Meteor&lt;/a&gt; provides a full-stack JavaScript platform for developing web and mobile apps. It includes a number of packages from Node.js and other JavaScript libraries. It focuses on and provides full stack reactivity so your UI acts seamlessly with your backend server. And as a bonus, it provides easy MongoDB integration right out of the box.&lt;/p&gt;

&lt;h2&gt;Basic Logging&lt;/h2&gt;

&lt;p&gt;As I mentioned above, instead of creating a bare application, we’re going to clone one of the existing sample applications that the folks over at Meteor have provided. Since we’re adding logging to an already existing app, we’ll be able to see different logs come through with minimal effort.&lt;/p&gt;

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

&lt;p&gt;If you haven't used Meteor before, their basic setup is a breeze. First, you'll need to install both Node.js and npm. Also, if you're on a Mac, you'll need Xcode as well.&lt;/p&gt;

&lt;p&gt;For step two, we'll install Meteor using either Chocolatey or a curl command, depending on your operating system.&lt;/p&gt;

&lt;pre class="lang:default decode:true"&gt;curl https://install.meteor.com/ | sh

// OR...

choco install meteor&lt;/pre&gt;

&lt;p&gt;All set? Great. Next, let's clone the simple todo app from Meteor.&lt;/p&gt;

&lt;pre class="lang:default decode:true"&gt;git clone https://github.com/meteor/simple-todos.git&lt;/pre&gt;

&lt;p&gt;Once you've got everything downloaded and installed, cd into the simple-todo directory and run the app using the Meteor command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yAXjXScC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124602/011.png" class="article-body-image-wrapper"&gt;&lt;img class="alignnone wp-image-2969 size-full" src="https://res.cloudinary.com/practicaldev/image/fetch/s--yAXjXScC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124602/011.png" alt="" width="948" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the application has started, go to &lt;a href="http://localhost:3000/"&gt;http://localhost:3000/&lt;/a&gt;. You should see a simple todo app there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G5RlK5dP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124645/021-1024x463.png" class="article-body-image-wrapper"&gt;&lt;img class="alignnone size-large wp-image-2970" src="https://res.cloudinary.com/practicaldev/image/fetch/s--G5RlK5dP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124645/021-1024x463.png" alt="" width="1024" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should be able to add users, add items to the checklist, and so on. Go ahead and play around with it. I'll be waiting at the next section for you.&lt;/p&gt;

&lt;h3&gt;Console Logging&lt;/h3&gt;

&lt;p&gt;Now that you've had a chance to check out the application, let's get started. To demonstrate some simple logging, we're going to add some console logs to our application. This can be helpful for debugging issues on the client side while you're developing. But it won't do much for you once your application is being used by someone out in the real world—you won't have access to their console logs.&lt;/p&gt;

&lt;p&gt;To start, let's add some code to the imports/api/tasks.js file. This file contains the JavaScript that's executed when we add or remove tasks from the list. In the "tasks.insert" method, add the log.console line shown in this image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--llLVnu6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124721/031-1024x439.png" class="article-body-image-wrapper"&gt;&lt;img class="alignnone size-large wp-image-2971" src="https://res.cloudinary.com/practicaldev/image/fetch/s--llLVnu6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124721/031-1024x439.png" alt="" width="1024" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, after saving that file, head over to your browser window. It should have updated automatically, so you don't have to restart the app. When you add a new task, you should see the output in your browser console.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ux6r4C46--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124750/041-1024x280.png" class="article-body-image-wrapper"&gt;&lt;img class="alignnone size-large wp-image-2972" src="https://res.cloudinary.com/practicaldev/image/fetch/s--ux6r4C46--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124750/041-1024x280.png" alt="" width="1024" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looks great, right? What if we also want to add some user context? Modify the line in the "tasks.insert" method to also print out the userId object that this application has defined.&lt;/p&gt;

&lt;pre class="lang:default decode:true"&gt;console.log('Task being added: ' + text + ' by ' + this.userId);&lt;/pre&gt;

&lt;p&gt;After that, you should see something like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--usTiypLf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124816/051-1024x221.png" class="article-body-image-wrapper"&gt;&lt;img class="alignnone size-large wp-image-2973" src="https://res.cloudinary.com/practicaldev/image/fetch/s--usTiypLf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124816/051-1024x221.png" alt="" width="1024" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not super helpful, is it? Let's make it a little more useful by asking Meteor to find the username associated with this ID instead.&lt;/p&gt;

&lt;pre class="lang:default decode:true"&gt;console.log('Task being added: ' + text + ' by ' + Meteor.users.findOne(this.userId).username);&lt;/pre&gt;


&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Yes, that looks much better!

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yimpp_q2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124841/06-1024x243.png" class="article-body-image-wrapper"&gt;&lt;img class="alignnone size-large wp-image-2974" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yimpp_q2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15124841/06-1024x243.png" alt="" width="1024" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OK, now that we've done some simple console logging, we can move on to the next section. However, I have one thing I'd like you to do first.&lt;/p&gt;

&lt;p&gt;Now that you have a Meteor application up and running, take some time to explore its various functionalities by adding your own console logging throughout the code. It really helps you understand the application by seeing data flow through the system as you use it. And though these may not be logs you want to keep around forever, they'll help you gain a sense of what goes into a good Meteor application.&lt;/p&gt;

&lt;h2&gt;Where to Log&lt;/h2&gt;

&lt;p&gt;Let's return to something I mentioned at the beginning of the console logging section: You won't be able to view your customer's console.log files. Let's discuss what you should do instead.&lt;/p&gt;

&lt;h3&gt;Send Logs to the Server&lt;/h3&gt;

&lt;p&gt;As discussed, if your application is being used by actual customers, you won't have access to their console logs. Sure, you could have them open their browser console and send you what's there every time there's an issue. But you're assuming that people will know how to do that. And even if they do know, it doesn't provide a great user experience for them.&lt;/p&gt;

&lt;p&gt;So what can we do instead? Well, instead of just writing to a console, we could send logs back to the server. But then what?&lt;/p&gt;

&lt;h3&gt;Save Logs for Later Use&lt;/h3&gt;

&lt;p&gt;With Meteor, one option could be to set up a logging table in MongoDB. So instead of just inserting tasks as our example above shows, we could insert logging or error messages. However, storing logs in a database typically doesn't make sense. You want to store them somewhere easily accessible by tools like Scalyr so you can start harvesting some analytics.&lt;/p&gt;

&lt;p&gt;Let's consider another option. How about taking a look at some of Scalyr's &lt;a href="https://www.scalyr.com/help/api"&gt;APIs&lt;/a&gt;? There are a lot of goodies there. And two of them let us add events to our Scalyr logs, either one at a time or by batch. So instead of logging to the console, or saving the logs to our database, we can send events that require logging right back to Scalyr.&lt;/p&gt;

&lt;p&gt;In this situation, I would send the logs over to the server side of my Meteor application and then call the Scalyr APIs with the token tied to my account. Let's go over this in greater detail.&lt;/p&gt;

&lt;p&gt;First, adding simple HTTP functionality to your Meteor app requires running the following command within your Meteor directory.&lt;/p&gt;

&lt;pre class="lang:default decode:true"&gt;meteor add http&lt;/pre&gt;

&lt;p&gt;That will let you make HTTP calls to remote servers easily.&lt;/p&gt;

&lt;p&gt;Then we can use the following syntax to send an event to Scalyr's addEvents API.&lt;/p&gt;

&lt;pre class="lang:default decode:true"&gt;HTTP.call('POST', 'https://www.scalyr.com/addEvents', 
{
  "token": "YOUR_ACCESS_TOKEN",
  "session": "UNIQUE_SESSION_ID",
  "sessionInfo": {
    "serverType": "simple-todo",
    "serverId": "simple-todo-server-1"},
  "events": [
    {
      "thread": "1",
      "ts": "1332851837424000000",
      "type": 0,
      "sev": 3,
      "attrs": {
        "message": "Task being added: stuff",
        "recordId": 39217,
        "latency": 19.4,
        "username": "sylvia"
      }
    }
  ]
);&lt;/pre&gt;

&lt;p&gt;You may have noticed that I broke out the username from the message I sent. That's because breaking parts of the log into separate attributes will help with searching later.&lt;/p&gt;

&lt;h2&gt;What to Log&lt;/h2&gt;

&lt;p&gt;With great logging comes great responsibility. So what should we log in our applications?&lt;/p&gt;

&lt;p&gt;Well, that depends—not only on what your application does, but also on whether you're logging on the client side or the server side. You also want to make sure that what you log adds value. Logging every little action is usually a bad idea.&lt;/p&gt;

&lt;p&gt;In fact, the example above doesn't represent something I'd want to be logged in my system. I don't care what my customers add to their to-do lists. I care about metrics, performance, and errors. And I want specific information that can help debug issues.&lt;/p&gt;

&lt;p&gt;So what sort of data can we log?&lt;/p&gt;

&lt;ol&gt;
    &lt;li&gt;Errors—If something goes wrong, we want to know about it.&lt;/li&gt;
    &lt;li&gt;Usage—Let's see how often various parts of our application are used. If we have features no one uses, we can deprecate them or make them better.&lt;/li&gt;
    &lt;li&gt;Performance—We want to know what the customer experiences regarding latency. If the application slows down too much for them, we need to investigate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fMvatf1U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15125225/With-great-logging-comes-great-responsibility.png" class="article-body-image-wrapper"&gt;&lt;img class="size-full wp-image-2976 alignright" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fMvatf1U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://library.scalyr.com/2019/02/15125225/With-great-logging-comes-great-responsibility.png" alt="With great logging comes great responsibility" width="252" height="140"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Specifically for error logging, what information do we need?&lt;/p&gt;

&lt;ol&gt;
    &lt;li&gt;Timestamps that tell exactly when an error occurred&lt;/li&gt;
    &lt;li&gt;User ID or context, so we know who was affected&lt;/li&gt;
    &lt;li&gt;Relevant parameters to help recreate the problem and find a solution&lt;/li&gt;
    &lt;li&gt;Unique and specific error messages to help pinpoint the problem&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;You're on Your Way&lt;/h2&gt;

&lt;p&gt;You're in a great place. You've got a sample Meteor app to experiment with, as well as some guidance on how to log information in it. Once you've logged data from your application, remember to review the logs from time to time. Iterate on what's being logged and the format until you have a useful set of data that will help you debug and optimize your application. And now you can rest easy knowing you'll be able to support your Meteor application in production.&lt;/p&gt;

</description>
      <category>logging</category>
      <category>programming</category>
      <category>software</category>
    </item>
    <item>
      <title>What Is a Site Reliability Engineer? Should You Become One?</title>
      <dc:creator>Sylvia</dc:creator>
      <pubDate>Tue, 24 Sep 2019 14:20:11 +0000</pubDate>
      <link>https://dev.to/scalyr/what-is-a-site-reliability-engineer-should-you-become-one-3ig1</link>
      <guid>https://dev.to/scalyr/what-is-a-site-reliability-engineer-should-you-become-one-3ig1</guid>
      <description>&lt;p&gt;Although site reliability engineering has been around for a while, it has only recently gained fame in general software circles. But there are still a lot of questions as to what a site reliability engineer (SRE) is and does.&lt;/p&gt;

&lt;p&gt;Much of what we know comes from the book &lt;em&gt;Site Reliability Engineering&lt;/em&gt; from Google. And we'll refer to that book a few times in this post.&lt;/p&gt;

&lt;p&gt;SREs have been compared to operations groups, system admins, and more.&lt;/p&gt;

&lt;p&gt;But the comparison falls short in encompassing their role in today's modern software environment.&lt;/p&gt;

&lt;p&gt;SREs cover more responsibilities than operations. And though they usually have a background in system administration, they also bring software development skills to the role.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SREs combine all these skills and ensure that complex distributed systems run smoothly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So how do they do all this?&lt;/p&gt;

&lt;p&gt;Read further to find out what SREs are, in practice, and how they accomplish this through the responsibilities they fulfill.&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%2Flibrary.scalyr.com%2F2019%2F01%2F22215455%2FComputer_with_wrench_and_Scalyr_colors_signifying__site_reliability_engineer-300x300.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%2Flibrary.scalyr.com%2F2019%2F01%2F22215455%2FComputer_with_wrench_and_Scalyr_colors_signifying__site_reliability_engineer-300x300.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;What Is A Site Reliability Engineer?&lt;/h2&gt;

&lt;p&gt;Let's start our post with a definition. What is a site reliability engineer?&lt;/p&gt;

&lt;p&gt;For starters, the concept of&lt;a href="https://www.scalyr.com/blog/what-is-sre/" rel="noopener noreferrer"&gt; site reliability engineering&lt;/a&gt; was first introduced by &lt;a href="https://landing.google.com/sre/books/" rel="noopener noreferrer"&gt;a book&lt;/a&gt; of same name, written by a team of engineers from Google.&lt;/p&gt;

&lt;p&gt;Wikipedia defines site reliability engineering like this:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Site Reliability Engineering (SRE) is a discipline that incorporates aspects of software engineering and applies them to infrastructure and operations problems.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;In a nutshell, we can say that &lt;strong&gt;a SRE is a professional with solid background in coding/automation, that uses that experience to solve problems in infrastructure and operations.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Wait a minute...doesn't that sound a little bit familiar? What is the difference between SRE and DevOps?&lt;/p&gt;

&lt;p&gt;First of all, you shouldn't think of DevOps as a role.&lt;/p&gt;

&lt;p&gt;Rather, consider it more of a cultural aspect of the team. It can’t and shouldn't be assigned to a person, but rather performed as a team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SRE, on the other hand, is the practice of creating and maintaining a service with high availability.&lt;/strong&gt; The professional that assumes this role should be a software developer.&lt;/p&gt;

&lt;h2&gt;What Does a Site Reliability Engineer Do?&lt;/h2&gt;

&lt;h3&gt;Automate All the Things&lt;/h3&gt;

&lt;p&gt;One difference between the SRE role and the traditional operations team involves automation.&lt;/p&gt;

&lt;p&gt;In the past, operations folks would keep things running by executing scripts, pushing buttons, and carrying out other manual endeavors. However, in the SRE world, there's a heavy emphasis on automation.&lt;/p&gt;

&lt;p&gt;Where did this drive come from? The engineering aspect of the SRE role.&lt;/p&gt;

&lt;p&gt;When you put software developers in a position where the same functions repeat day in and day out, they'll be driven to automate. That's what software developers do best.&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%2Flibrary.scalyr.com%2F2018%2F07%2F19175223%2FiStock-542714868-1024x1024.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%2Flibrary.scalyr.com%2F2018%2F07%2F19175223%2FiStock-542714868-1024x1024.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And automation doesn't stop at automating a software build and some acceptance tests. Their automation includes CI/CD and infrastructure creation and patching, as well as monitoring, alerting, and automating responses to certain incidents.&lt;/p&gt;

&lt;p&gt;In Google's SRE book, this is also referred to as eliminating toil:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Toil is the kind of work tied to running a production service that tends to be manual, repetitive, automatable, tactical, devoid of enduring value, and that scales linearly as a service grows.&lt;/p&gt;
&lt;p&gt;—&lt;em&gt;Site Reliability Engineering&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But why do we focus so much on reducing toil?&lt;/p&gt;

&lt;p&gt;Not only does reducing toil make the processes repeatable and automated, but it also increases the amount of time SREs have to build tools and investigate infrastructure changes that further improve site reliability.&lt;/p&gt;

&lt;p&gt;In summary, the less toil there is, the more time and resources are dedicated to making sure your software ecosystem runs reliably and the faster you can deliver business value.&lt;/p&gt;

&lt;h3&gt;Monitor Distributed Systems&lt;/h3&gt;

&lt;p&gt;With the popularity of distributed systems, there's a greater need for increased monitoring.&lt;/p&gt;

&lt;p&gt;It's not enough that your application is up and running. We also need to ensure that infrastructure works properly and that all our other internal dependencies are accessible and functioning.&lt;/p&gt;

&lt;p&gt;Additionally, business functions of the application should have proper monitoring to validate they're working properly.&lt;/p&gt;

&lt;p&gt;For this portion of the job, SREs can use a product like Scalyr to monitor and alert on any potential issues. This allows them to monitor the system in real time as well as track long-term trends that may indicate reduced reliability.&lt;/p&gt;

&lt;h3&gt;Provide On-Call Support&lt;/h3&gt;

&lt;p&gt;Similar to traditional operations roles, SREs spend time rotating on-call responsibilities.&lt;/p&gt;

&lt;p&gt;In addition to monitoring infrastructure and their own services, they also make themselves accessible to development teams for consultation and troubleshooting.&lt;/p&gt;

&lt;p&gt;What does on call look like?&lt;/p&gt;

&lt;p&gt;Typically SREs rotate the on-call role based on a schedule that allows other SREs to focus on engineering while also not causing burnout for the on-call engineer. On-call rotations vary from a couple days in a row to a week or more.&lt;/p&gt;

&lt;p&gt;When a high-priority page triggers, the engineer will investigate and diagnose the issue. The SRE might also pull in additional engineers or software developers to resolve the issue.&lt;/p&gt;

&lt;p&gt;Depending on the system's SLA, they may all need to work together to solve the issue in a matter of minutes. For low-priority issues, the SRE typically handles them during business hours.&lt;/p&gt;

&lt;p&gt;And that's great news for the engineers who don't like to jump out of bed at 3 a.m. for every little thing that happens.&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%2Flibrary.scalyr.com%2F2018%2F08%2F09184011%2FLog4j_With_Scalyr_Colors.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%2Flibrary.scalyr.com%2F2018%2F08%2F09184011%2FLog4j_With_Scalyr_Colors.png" alt="Log4j"&gt;&lt;/a&gt;Log4j&lt;/p&gt;

&lt;h3&gt;Manage Incidents&lt;/h3&gt;

&lt;p&gt;An important part of the SRE role involves managing incidents.&lt;/p&gt;

&lt;p&gt;Now you may say this is no different than the on-call responsibility. You find a problem and then fix it. How hard could it be?&lt;/p&gt;

&lt;p&gt;Well, for managing incidents, SREs need to employ additional professional skills to make sure everything goes smoothly.&lt;/p&gt;

&lt;p&gt;When an outage occurs, for example, there could be dozens of ways to diagnose and attempt to resolve the issue.&lt;/p&gt;

&lt;p&gt;Therefore, to manage the incident properly, someone must monitor and facilitate the actions of all involved. And that requires clearly defined roles.&lt;/p&gt;

&lt;p&gt;Though not all companies include these Google-recommended incident roles, we should at least consider them. These roles include the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An incident commander who maintains a high-level view of everything occurring.&lt;/li&gt;
&lt;li&gt;The engineers who execute processes or modifications to the infrastructure or systems.&lt;/li&gt;
&lt;li&gt;A communication role for relaying the right message to customers and management.&lt;/li&gt;
&lt;li&gt;A planning role in charge of planning any meetings, handoffs, and logistical needs.&lt;/li&gt;
&lt;li&gt;Without clearly defined roles for our SREs, we could have SREs that step on each other's toes as they try different solutions without up-front coordination and communication.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Facilitate Postmortems&lt;/h3&gt;

&lt;p&gt;Now that we've lived through an incident and resolved it in the sections above, we're ready for the postmortem.&lt;/p&gt;

&lt;p&gt;Typically, an SRE facilitates or participates in these postmortems.&lt;/p&gt;

&lt;p&gt;A postmortem brings together all relevant parties for analysis of the incident. The goal is to analyze what occurred during the incident and find the root cause. The participants also determine how the incident can be prevented or fixed in the future.&lt;/p&gt;

&lt;p&gt;Some of the items that come out of a postmortem are listed below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stories to improve reliability or monitoring.&lt;/li&gt;
&lt;li&gt;Additional documentation to assist with future incidents.&lt;/li&gt;
&lt;li&gt;Further investigations or testing to prove out any hypothesis related to the incident.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Track Outages&lt;/h3&gt;

&lt;p&gt;Another responsibility of the SRE requires tracking outages. This eventually helps in identifying long-term trends and assists with creating reasonable SLOs and SLAs.&lt;/p&gt;

&lt;p&gt;One use of tracking includes monitoring low-priority incidents. These incidents may not cause real issues for consumers, but looking at the long-term trends and timing can help isolate and resolve pesky bugs that don't seem to have a root cause.&lt;/p&gt;

&lt;h3&gt;Work With SRE and Development Teams&lt;/h3&gt;

&lt;p&gt;In addition to supporting development teams during on call, SREs also provide consulting and troubleshooting.&lt;/p&gt;

&lt;p&gt;This assists both other SRE teams and software development teams that struggle with operational or reliability issues.&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%2Flibrary.scalyr.com%2F2019%2F08%2F30154258%2FWill-drive-changes.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%2Flibrary.scalyr.com%2F2019%2F08%2F30154258%2FWill-drive-changes.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this scenario, the SRE will assess current issues and determine which can be improved with automation or engineering effort. The SRE may also suggest solutions to reliability problems.&lt;/p&gt;

&lt;p&gt;And perhaps most importantly, the SRE will drive changes to team processes. These changes will ensure that site reliability engineering enhances the team's ability to deliver value.&lt;/p&gt;

&lt;h3&gt;Create Service Level Indicators and Objectives&lt;/h3&gt;

&lt;p&gt;When you hear that a service has attained or is striving toward an uptime of 99.99 percent, you're talking about service level objectives (SLO). Service level indicators (SLI) measure these objectives.&lt;/p&gt;

&lt;p&gt;In other words, the SLI is an agreement on how the SLO will be measured.&lt;/p&gt;

&lt;p&gt;SREs assist with these by providing data for historical service performance. They also help provide realistic objectives for the future and might advise on proper SLAs for customers.&lt;/p&gt;

&lt;p&gt;The SRE then works to make sure your application meets, though does not exceed, the stated SLO.&lt;/p&gt;

&lt;p&gt;Now you may think that it's odd to not work to exceed an SLO. However, it would be a waste of resources to make something more reliable than it needs to be.&lt;/p&gt;

&lt;p&gt;And SREs balance the needs of the customer with the goals of the services provided.&lt;/p&gt;

&lt;h3&gt;Responsibilities May Vary&lt;/h3&gt;

&lt;p&gt;In this post, we've discussed various activities that site reliability engineers participate in. Although these activities are done by many SREs, they aren't set in stone.&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%2Flibrary.scalyr.com%2F2018%2F07%2F19175348%2FHTTP-Monitor-What-Is-It-and-Why-Do-You-Need-It.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%2Flibrary.scalyr.com%2F2018%2F07%2F19175348%2FHTTP-Monitor-What-Is-It-and-Why-Do-You-Need-It.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Companies do vary their SRE roles and responsibilities based on need. In general, companies that are at different points in the SRE journey may have different needs.&lt;/p&gt;

&lt;p&gt;For example, a newer company may need SRE support in getting general outages under control. And most energy goes toward that base level of reliability.&lt;/p&gt;

&lt;p&gt;However, other companies that are further along in the journey may have eliminated company-wide outages. They may spend more time on improving or validating service metrics that are business related.&lt;/p&gt;

&lt;p&gt;For example, your pizza shop application may need new monitoring on its pizza recommendations once the site's general availability is stable and reliable.&lt;/p&gt;

&lt;h2&gt;Should You Become a SRE?&lt;/h2&gt;

&lt;p&gt;You should consider becoming a SRE if you have a solid foundation in automation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are you are a systems engineer who wants to improve your coding skills?&lt;/li&gt;
&lt;li&gt;Are you are a developer who wants to learn how to manage large-scale systems?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the answer for any of the questions above was "Yes," then this role is for you.&lt;/p&gt;

&lt;p&gt;There is no better way to stay in touch with the most recent developments in the DevOps world. You'd also be able to increase your knowledge and skills in areas that are currently in high-demand.&lt;/p&gt;

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

&lt;p&gt;As we discussed, SREs spend time on both technical and process-oriented responsibilities.&lt;/p&gt;

&lt;p&gt;They do more than an operation or system administration team. They employ their engineering skills to automate and reduce the manual intervention necessary for administration tasks.&lt;/p&gt;

&lt;p&gt;Additionally, they work with other engineering teams to provide proper monitoring, incident response, and management.&lt;/p&gt;

&lt;p&gt;Over time, these functions improve the reliability and maintenance costs of your distributed systems.&lt;/p&gt;

&lt;p&gt;And finally, they spread the culture of site reliability engineering through your organization so that all teams learn to make decisions with reliability in mind.&lt;/p&gt;

</description>
      <category>engineer</category>
      <category>sre</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
