<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Five 9's Newsletter]]></title><description><![CDATA[Helping engineers build reliable software systems five 9's at a time.]]></description><link>https://5x9s.svix.com</link><image><url>https://substackcdn.com/image/fetch/$s_!U0Do!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ba4d545-f98e-4685-94cd-eb7061c1dc7f_1000x1000.png</url><title>Five 9&apos;s Newsletter</title><link>https://5x9s.svix.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 14 Apr 2026 23:12:12 GMT</lastBuildDate><atom:link href="https://5x9s.svix.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Five 9's]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[five9s@svix.com]]></webMaster><itunes:owner><itunes:email><![CDATA[five9s@svix.com]]></itunes:email><itunes:name><![CDATA[The Five 9's Newsletter]]></itunes:name></itunes:owner><itunes:author><![CDATA[The Five 9's Newsletter]]></itunes:author><googleplay:owner><![CDATA[five9s@svix.com]]></googleplay:owner><googleplay:email><![CDATA[five9s@svix.com]]></googleplay:email><googleplay:author><![CDATA[The Five 9's Newsletter]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Adding Friction]]></title><description><![CDATA[Today, we're diving into an interesting topic: friction in development processes.]]></description><link>https://5x9s.svix.com/p/adding-friction</link><guid isPermaLink="false">https://5x9s.svix.com/p/adding-friction</guid><dc:creator><![CDATA[The Five 9's Newsletter]]></dc:creator><pubDate>Wed, 10 Jul 2024 16:52:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WwlV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WwlV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WwlV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!WwlV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!WwlV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!WwlV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WwlV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:413007,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WwlV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!WwlV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!WwlV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!WwlV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62a42d13-7994-4a1d-940e-e0db6be0c231_1280x720.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Today, we're diving into an interesting topic: friction in development processes. I recently had a conversation with Tom about this, and it brought some new perspectives to light.</p><h3><strong>An Initial Confusion</strong></h3><p>During a call with our engineering team, our CEO Tom suggested adding a bit of friction to our processes. This was strange because I always want to remove friction to make things smoother and faster. Velocity is crucial for us&#8212; Tom harps on how we want to move quickly and efficiently. So, why would we want to add friction?</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://5x9s.svix.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Five 9's Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h3><strong>Friction Generates Heat</strong></h3><p>While friction does slow things down, it also generates benefits.</p><p>For example, we conduct code reviews, which slow down development but lead to increased stability, better product alignment, and reduced technical debt. These processes, though seemingly slowing us down, actually contribute to a more sustainable and team-involved development</p><p>This reminded me of a decision made at at a security awareness company I used to work for. We conducted typically annual security awareness training on a monthly basis. We had data from our customers that conducting these tests/lessons quarterly had a significant improvement over annual training, but monthly training didn&#8217;t really yield better results than quarterly training. So why did we do it monthly?</p><p>First, we wanted to make sure we never got hacked. It was an existential threat to the business if one of our own employees fell for a phishing attack.</p><p>Second, we wanted to make a point of how important this was and to build it into the identity of the company. It became part of the culture that our courses were espousing to our customers.</p><p>In essence, adding friction in certain areas can yield significant benefits. It's like in physics&#8212;more friction can generate beneficial heat. For us, it's about strategically introducing pauses and checks to enhance the overall process.</p><h3><strong>Slowing Down to Move Faster</strong></h3><p>Sometimes, we need to slow down in order to move fast. At first this makes no sense but there is a simple analogy that makes it blindly obvious: Formula 1.</p><p>The software development process isn&#8217;t a drag strip where you can put the pedal to the metal and go in a straight line. There are many twists and turns and you don&#8217;t even know where or when they&#8217;ll show up!</p><p>The prime example here is writing tests. Writing tests can seem like an additional, time-consuming step that slows down the development process. However, by integrating tests early and consistently, developers can identify bugs and issues before they become costly problems. This proactive approach not only improves the stability and reliability of the software but also enhances the team's confidence in their codebase. The initial slowdown caused by writing tests is offset by the time saved in debugging and fixing errors later on, leading to faster, more efficient development cycles in the long run.</p><p>In this sense, adding friction strategically to ensure you&#8217;re not driving off a cliff, or in software terms, bring down production actually lets you move faster than if there were no guardrails.</p><h3><strong>The Cost and Risk of Adding Friction</strong></h3><p>One challenge is maintaining a balance. Large companies often introduce excessive friction, leading to bureaucratic slowdowns. It&#8217;s important to focus on velocity while continuously re-evaluating and fine-tuning the process. Tight feedback loops and minimizing unnecessary latency are crucial.</p><h3><strong>Recognizing and Implementing Useful Friction</strong></h3><p>It's crucial to recognize when friction is necessary. Friction should not be added randomly but should serve a clear purpose. For example, implementing a mandatory pause between merging and deploying code forces developers to reflect and catch potential issues.</p><p>You should also continuously evaluate any added friction. If it's not yielding the desired benefits, remove it. Optimizing for velocity ensures that unnecessary friction doesn't become a permanent hindrance.</p><h3><strong>Final Thoughts</strong></h3><p>Friction can be incredibly beneficial when applied thoughtfully. It helps prevent errors, enhances security, and fosters a culture of careful consideration. However, you need to strike a balance to make sure you&#8217;re not grinding to a halt. If you add friction and slow down your process in the right places, you&#8217;ll be amazed at how much faster you can go!</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://5x9s.svix.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Five 9's Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Shhhh...The Secret to Secrets Management]]></title><description><![CDATA[Interview with Vlad Matsiiako from Infisical]]></description><link>https://5x9s.svix.com/p/shhhhthe-secret-to-secrets-management</link><guid isPermaLink="false">https://5x9s.svix.com/p/shhhhthe-secret-to-secrets-management</guid><dc:creator><![CDATA[The Five 9's Newsletter]]></dc:creator><pubDate>Wed, 26 Jun 2024 15:11:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/z0NC89nZJrM" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Secrets management is not just about safeguarding sensitive information; it is about ensuring seamless and secure access to this information whenever and wherever it's needed. Leaked secrets are the root cause of many prominent security breaches so we talked to Vlad Matsiiako from <a href="https://infisical.com/">Infisical</a> to learn more about secret management and why it&#8217;s still a big problem for many companies.</p><p>Here is the full video interview: </p><div id="youtube2-z0NC89nZJrM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;z0NC89nZJrM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/z0NC89nZJrM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>What is Secrets Management?</h2><p>Secrets management involves the secure handling of sensitive information, such as API keys, passwords, certificates, and access tokens. These secrets are necessary for various parts of an infrastructure to interact securely. For instance, databases need to connect to applications, and servers need to communicate with each other. Secrets management solutions ensure that these interactions happen securely and efficiently, without exposing sensitive information to unauthorized parties.</p><h2>What is the Problem?</h2><p>As software systems become more complex, the challenge of securely managing and distributing secrets intensifies. Different parts of a system&#8212;whether they are databases, applications, or servers&#8212;need to be securely interconnected. The traditional methods of managing these secrets are often manual, prone to errors, and not scalable. This can lead to significant security vulnerabilities, such as secret leaks or unauthorized access, which can have severe repercussions, including data breaches and compliance issues.</p><h2>Different Approaches</h2><p>There are several approaches to secrets management:</p><p>1. <strong>Manual Management</strong>: Some companies opt to manage secrets manually, using secure storage solutions like Key Management Systems (KMS). While this method can be straightforward, it often lacks automation and scalability, leading to potential security gaps.</p><p>2. <strong>Automated Solutions</strong>: Tools like Terraform Vault have become popular, offering automated secrets management. These tools provide a more structured and scalable way to manage secrets but can be complex to implement and maintain.</p><p>3. <strong>Dynamic Secrets</strong>: More advanced solutions offer dynamic secrets management, where secrets are generated on-the-fly and are valid for a limited time or a specific number of requests. This approach minimizes the risk of secret leaks and unauthorized access.</p><p>4. <strong>Integrated Solutions</strong>: Platforms like Infisical offer integrated secrets management solutions that provide seamless access control, secret rotation, and automation across different environments (development, staging, production).</p><h2>Types of Companies, When They Adopt a Solution, and Their Motivations</h2><p>The adoption of secrets management solutions varies based on the company's size, industry, and stage of development:</p><p>1. <strong>Early-Stage Startups</strong>: These companies often adopt secrets management solutions early, especially if they operate in highly regulated industries like finance or healthcare. The motivation here is to establish strong security foundations from the beginning.</p><p>2. <strong>Growth-Stage Companies</strong>: Companies at this stage (Series B and beyond) adopt secrets management solutions to improve operational efficiency and enhance their security posture. As their infrastructure becomes more complex, managing secrets manually becomes impractical.</p><p>3. <strong>Large Enterprises and Governments</strong>: These organizations have strict security requirements and often have specific policies on how secrets should be managed. Their motivation is not only security but also compliance with regulatory standards.</p><h2>Security</h2><p>Security is the primary driver behind secrets management. Effective secrets management minimizes the risk of unauthorized access and data breaches. It ensures that sensitive information is only accessible to those who need it, and it is done so in a secure and controlled manner. Implementing features like automatic secret rotation and dynamic secret generation further enhances security by reducing the attack surface and limiting the potential damage of a compromised secret.</p><h2>Why Isn&#8217;t This Solved Already?</h2><p>Despite the existence of secrets management solutions, many companies still experience secret leaks and security breaches. This is often due to the complexity of these solutions, which can be challenging for developers to implement and use effectively. If a secrets management tool is overly complicated, developers might bypass it, leading to security vulnerabilities. Moreover, the dynamic nature of modern infrastructures, with multiple environments and a myriad of integration points, adds to the complexity.</p><p>At Infisical, the focus is on making secrets management more accessible and user-friendly for developers, ensuring that security practices are embedded into their workflows without adding unnecessary friction. By providing robust tools and seamless integrations, Infisical aims to reduce the complexity and enhance the security of secrets management.</p><h2>Conclusion</h2><p>Secrets management is a critical aspect of modern cybersecurity, ensuring that sensitive information is handled securely and efficiently across different environments. While there are various approaches and solutions available, the key to effective secrets management lies in balancing security with ease of use. By understanding the unique needs and motivations of different types of companies, we can better tailor secrets management solutions to address their specific challenges and enhance their overall security posture.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://5x9s.svix.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Five 9's Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Evolution of Incident Management]]></title><description><![CDATA[w/ Chris Evans, Co-founder & CPO of Incident.io]]></description><link>https://5x9s.svix.com/p/evolution-of-incident-management</link><guid isPermaLink="false">https://5x9s.svix.com/p/evolution-of-incident-management</guid><dc:creator><![CDATA[The Five 9's Newsletter]]></dc:creator><pubDate>Wed, 12 Jun 2024 19:04:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BUxs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BUxs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BUxs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png 424w, https://substackcdn.com/image/fetch/$s_!BUxs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png 848w, https://substackcdn.com/image/fetch/$s_!BUxs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png 1272w, https://substackcdn.com/image/fetch/$s_!BUxs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BUxs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png" width="1456" height="619" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e774a993-1600-4506-8ab2-49df7540a610_1902x808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:619,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:541765,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BUxs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png 424w, https://substackcdn.com/image/fetch/$s_!BUxs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png 848w, https://substackcdn.com/image/fetch/$s_!BUxs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png 1272w, https://substackcdn.com/image/fetch/$s_!BUxs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe774a993-1600-4506-8ab2-49df7540a610_1902x808.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Incident management is a critical aspect of maintaining the reliability and integrity of systems. Recently, we had the pleasure of speaking with Chris Evans, Co-founder and CPO of <a href="https://incident.io/">Incident.io</a>, to learn how incident response has evolved, and how engineers can prepare themselves for modern incident response. You can see a recording of the full conversation <a href="https://youtu.be/WVpJDb18kXs">here</a>.</p><div id="youtube2-WVpJDb18kXs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;WVpJDb18kXs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/WVpJDb18kXs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3><strong>The Centralized Operations Team</strong></h3><p>Traditionally, incident management was handled by a centralized operations team. These experts monitored dashboards, identified issues, and coordinated responses. However, the advent of DevOps has decentralized this function, distributing the responsibility across the entire engineering team. Today, the very people who build and deploy software are also tasked with managing incidents, which introduces both challenges and opportunities.</p><h3><strong>The Decentralization of Incident Response</strong></h3><p>The advent of DevOps has distributed the responsibility of incident response across the entire engineering team. Today, the engineers who build and deploy software are also tasked with managing incidents. This shift has led to a broader, more inclusive approach to incident management, where everyone in the organization is involved in the response process.</p><h3><strong>Why the Shift?</strong></h3><p>This shift is largely driven by the need for faster, more flexible incident response. As software development cycles accelerate, the traditional centralized model struggles to keep pace. By involving the entire engineering team in incident management, organizations can respond more quickly to issues as they arise.</p><p>This shift to distributed incident management also means more people need to be trained in incident response. While this democratization of incident management can introduce complexities, it also enables organizations to be more resilient. When every team member is prepared to handle incidents, the organization as a whole can respond more swiftly and effectively.</p><h3><strong>Pros and Cons of Each Approach</strong></h3><p>The centralized operations team approach has its advantages, such as consistent processes and highly trained experts handling incidents. However, it can also be slower and less adaptable to rapid changes.</p><p>On the other hand, the decentralized model offers greater flexibility and faster response times, but it can introduce inconsistencies and require more extensive training across a larger group of people.</p><h3><strong>Hybrid Approaches</strong></h3><p>Many organizations are now adopting hybrid approaches that combine elements of both models. For instance, they may still have a central team that handles major incidents and coordinates responses across the entire organization (Marketing, Support, Customer Success, PR, etc.), while also empowering individual engineering teams to manage smaller, more routine incidents. This approach maintains consistency and leverages specialized expertise when needed, while benefiting from the speed and flexibility of a decentralized model.</p><h3><strong>What does this mean for engineers?</strong></h3><p><strong>Redefining What Constitutes an Incident. </strong>For engineers, this evolution means a shift in how incidents are defined and managed. For example, at Incident.io, an incident is defined as anything that disrupts planned work with a degree of urgency. This can range from a minor bug affecting a key customer to a complete database failure. By broadening the definition, organizations can gain valuable insights into their operations and better prioritize their efforts.</p><p><strong>Documenting and Communicating During Incidents. </strong>Engineers should document their debugging process in real-time, creating a clear trail of their actions and thoughts. This practice helps in troubleshooting and serves as a learning resource for other team members. Clear documentation can streamline the handover process if the incident escalates and requires additional support.</p><p><strong>Leveraging AI for Incident Management. </strong>AI can automatically summarize incident channels, making it easier for teams to stay updated on ongoing issues. However, it's still important to keep humans in the loop. While AI is good at summarizing information, they&#8217;re not perfect. AI-generated summaries should be reviewed by incident leads to ensure accuracy and prevent the dissemination of incorrect information.</p><p><strong>Running Effective Post-Incident Reviews. </strong>Post-incident reviews are crucial for learning and improvement. Serious incidents should always be followed by a face-to-face review. This allows for comprehensive discussions, clarifying any uncertainties and ensuring that the entire team benefits from the insights gained.</p><p><strong>Shifting the Culture Around Incidents. </strong>A key takeaway from our conversation is the cultural shift required to handle incidents effectively. Organizations must foster an environment where incidents are not seen as failures but as opportunities to learn and improve. Encouraging open communication and collaboration across all departments, from engineering to PR and Legal, is essential.</p><p>For the full details and first hand suggestions from Chris, check out our <a href="https://youtu.be/WVpJDb18kXs">video interview</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://5x9s.svix.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Five 9's Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[APIs are an Unbreakable Contract]]></title><description><![CDATA[You can't break your APIs, so be conservative with what you send, and be conservative with what you accept.]]></description><link>https://5x9s.svix.com/p/apis-are-an-unbreakable-contract</link><guid isPermaLink="false">https://5x9s.svix.com/p/apis-are-an-unbreakable-contract</guid><dc:creator><![CDATA[Tom Hacohen]]></dc:creator><pubDate>Fri, 02 Feb 2024 20:11:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bbc16ec-b1fa-46b6-99b5-18dbea44c33a_1000x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>APIs are an unbreakable contract between your service and its customers. While humans can (reluctantly) adjust to drastic UI redesigns, API clients will just stop working with even the slightest change. This is why it's important for API providers and API consumers to agree on how to interact.</p><p>Because this contract can't change unilaterally, being precise and strict is extremely important. Undefined behavior is de-facto defined behavior, and if you are too lenient with what you accept, you will forever be stuck supporting all the unpredictable ways people use your APIs.</p><p>When talking about APIs I often hear people quoting the robustness principle: "be conservative in what you send, be liberal in what you accept". I strongly disagree with this principle, as it leads to fragile, insecure, and inefficient systems.</p><p>For example, consider an API endpoint that expects a query parameter called <code>sort</code> which according to the docs accepts the values <code>asc</code> for ascending, and <code>desc</code> for descending.</p><p>Here is an example psuedo-code implementation:</p><pre><code><code>function list_items(sort: string) {
    if (sort === "asc") {
        return fetch_sorted_asc(...);
    } else {
        return fetch_sorted_desc(...);
    }
}
</code></code></pre><p>This function, as you can see accepts <code>sort</code> as a string, and then checks the value to sort the data accordingly. The problem is that the input is not validated to be one of two values, so in practice <code>Desc</code>, <code>descending</code>, and <code>dscnding</code> will all lead to the input correctly being sorted in a descending manner. Which in turn means that anyone that uses this API incorrectly like this will see it working correctly and therefore will start relying on this behavior.</p><p>This means we are now stuck supporting endless variations of <code>desc</code> until the end of time without even realizing. Which most likely also means we are going to break some implementations by accident when we change this code without even realizing it.</p><p>Additionally, it's easy to become more lenient later, but it's impossible to become more strict. So if you start more strict you keep your options open, if you start more lenient you don't.</p><h2>Formulating the contract</h2><p>As I said above, APIs are a contract, which is why it's important to formulate that contract as well as humanly (computerly?) possible. Therefore having an OpenAPI spec for your API goes a long way. Preferably also having validation that the actual implementation is compatible with the spec.</p><p>You should also be as specific as you can with both the definition, and therefore the validation of the fields. For example, the <strong><a href="https://www.svix.com/">Svix</a></strong> user defined IDs (<code>uid</code>s) follow a specific pattern: they have to be between 1 and 256 characters long, and match this regex <code>^[a-zA-Z0-9\-_.]+$</code>. This is both documented in the spec and validated at runtime.</p><p>The advantage of having it documented in the spec, is that you can generate rich and specific documentation for your customers. Your customers don't need to guess what values are allowed for a <code>uid</code>, they can see it right there.</p><p>Validating the spec at runtime, when API calls are made, means that even if someone made a mistake and accidentally passed the wrong value, this will be caught immediately and they would be able to rectify the mistake.</p><p>Another advantage of having an OpenAPI spec, is that your API consumers can also generate validation on their end. Having schemas type checked on their end at compile time, so issues never hit production.</p><h2>Tagging IDs with their type</h2><p>Many APIs use <code>uuid</code>s internally as their ID representation, which they then expose in their APIs. Those <code>uuid</code>s usually look something like this: <code>12455207-ab83-5602-8d93-67999e204cff</code>. First of all, I think the base62 representation (not a typo, it's 62) is much nicer: <code>2bd6zcCxa8v3fx1nj9XVlQp3WR3</code>. It's more concise and more aesthetically pleasing, but to each their own.</p><p>The problem with using <code>uuid</code>s, whether in their standard string representation or the base62 one, is that they are just generic IDs. This means that you can accidentally use an ID in the wrong place (which will usually return a <code>404</code>) and be very confused on why it doesn't work.</p><p>A much better system is to tag IDs with their type, so the example above when tagged would look like this: <code>app_2bd6zcCxa8v3fx1nj9XVlQp3WR3</code> for an "application" and <code>msg_2bd6zcCxa8v3fx1nj9XVlQp3WR3</code> for a message.</p><p>Tagged IDs mean that you can have strict validation in your API and great examples in your docs that show exactly the kind of ID that's expected. Passing the wrong ID will no longer result in a <code>404</code>, but rather with a validation error that explains exactly what's going on.</p><p>This makes debugging much much easier, but it also makes support much easier. Because it makes it very obvious when someone is accidentally passing the wrong IDs.</p><h2>It's a wrap</h2><p>I hope you enjoyed this post! For more content like this subscribe to <strong><a href="https://5x9s.svix.com/">the 5x9s newsletter</a></strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://5x9s.svix.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Five 9's Newsletter! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Hello, World!]]></title><description><![CDATA[Introducing the Five 9's Newsletter]]></description><link>https://5x9s.svix.com/p/hello-world</link><guid isPermaLink="false">https://5x9s.svix.com/p/hello-world</guid><dc:creator><![CDATA[The Five 9's Newsletter]]></dc:creator><pubDate>Thu, 01 Feb 2024 15:57:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16aa7cab-abfd-47a4-9fc5-193c4e115fab_1000x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We&#8217;re starting this newsletter to talk about building and scaling reliable software services.</p><p>It will be a source to help engineers overcome the challenges they face day to day to make their systems more reliable and scalable. Some articles will be technical guides while others may be interviews with industry experts (if you&#8217;ve built and scaled a software product we&#8217;d love to talk!).</p><p>If you&#8217;re an engineer looking to learn from others who&#8217;ve built and scaled products to millions of users, subscribe here and join our community on Slack. We look forward to seeing you in the Five 9&#8217;s community!</p><p>Five 9&#8217;s</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://5x9s.svix.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://5x9s.svix.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>