<?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: Jess Blevins</title>
    <description>The latest articles on DEV Community by Jess Blevins (@jkblev).</description>
    <link>https://dev.to/jkblev</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%2F133828%2F93f3ade9-9deb-4ef9-9e9b-0c500a3fbd63.jpg</url>
      <title>DEV Community: Jess Blevins</title>
      <link>https://dev.to/jkblev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jkblev"/>
    <language>en</language>
    <item>
      <title>How to develop a team-based onboarding experience</title>
      <dc:creator>Jess Blevins</dc:creator>
      <pubDate>Wed, 10 Aug 2022 16:08:00 +0000</pubDate>
      <link>https://dev.to/jkblev/how-to-develop-a-team-based-onboarding-experience-2fbi</link>
      <guid>https://dev.to/jkblev/how-to-develop-a-team-based-onboarding-experience-2fbi</guid>
      <description>&lt;h2&gt;
  
  
  Background/Motivation
&lt;/h2&gt;

&lt;p&gt;In a large enterprise environment, you may have a high-level onboarding experience for all developers at your company.  However, such an experience will not necessarily prepare new hires or transfers for actually working in their individual teams.&lt;/p&gt;

&lt;p&gt;Within a large company, you may have teams using lots of different technology stacks or practices. There may be no single developer onboarding experience at the company level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Individual teams&lt;/em&gt; have the greatest impact on whether new developers have the material and support they need to do their work. This is a guide for writing your team's specific onboarding material.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips and Best Practices for Onboarding New Developers to Your Team
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Document &lt;em&gt;everything!&lt;/em&gt; The goal is to reduce verbal-based "tribal knowledge" by writing things down. By documenting everything, you enable developers to work  asynchronously and learn things when team members are not available to help. This is especially important for organizations that allow people to work flexible hours or different time zones. 🌎🌏&lt;/li&gt;
&lt;li&gt;At the same time, recognize that people have different learning styles! It's not always going to be appropriate to  send a bunch of documentation links to the new member of your team.  Try to strike a balance between sharing documentation and talking to your new teammate so that they can learn to help themselves while still connecting with you, their new team.&lt;/li&gt;
&lt;li&gt;Make minimal assumptions about what people "should" know! New hires or transfers may join your team with zero experience working with the specific tools and technologies that your team uses. This goes for programming languages, infrastructure, design patterns, Computer Science concepts, etc. Don't worry - this does not mean that you need to write something like a Beginner's Guide to JavaScript. It means that you should be mindful that your new teammate may not be super familiar with a given topic.&lt;/li&gt;
&lt;li&gt;Use links to direct people where to learn more about a topic. A "references" section at the top or bottom of your documentation is a helpful place to include links for learning more about topics.&lt;/li&gt;
&lt;li&gt;Writing about code is hard! Consider using diagrams! ⏹🔄⏺&lt;/li&gt;
&lt;li&gt;Spend some time considering which processes and technologies that your code depends on. What do developers need to understand about these dependencies? &lt;strong&gt;Do you know who to contact or where to look if you need to learn more about something your team doesn't directly own or maintain?&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Team Onboarding Documentation Checklist 📝
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Your team has its own documentation page in the space where R&amp;amp;D documentation is kept (e.g. Confluence)&lt;/li&gt;
&lt;li&gt;Team contact information. Things to consider:

&lt;ul&gt;
&lt;li&gt;How to contact the team for escalations or production incidents 🚨&lt;/li&gt;
&lt;li&gt;Where to ask for help / non-urgent questions 🤔&lt;/li&gt;
&lt;li&gt;How to ask for feature requests 🙏🏻&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Team members and their roles&lt;/li&gt;
&lt;li&gt;Team Charter or Mission Statement (usually a 1-2 sentence describing what your team does)&lt;/li&gt;
&lt;li&gt;Team's current &lt;a href="https://felipecastro.com/en/okr/what-is-okr/"&gt;Objectives and Key Results&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;List of owned &lt;a href="https://dev.to/jkblev/production-ready-feature-documentation-checklist-3idk"&gt;features and links to their documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Slack or Microsoft Teams Channels that team members should know about

&lt;ul&gt;
&lt;li&gt;Required channels ⭐️&lt;/li&gt;
&lt;li&gt;Optional channels&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Email distribution lists to join&lt;/li&gt;
&lt;li&gt;Things to get access to (e.g. authorization roles)&lt;/li&gt;
&lt;li&gt;Team processes (if different from company processes)

&lt;ul&gt;
&lt;li&gt;What is expected in your team's code review and QA testing process?&lt;/li&gt;
&lt;li&gt;Developer on-call duties 📟

&lt;ul&gt;
&lt;li&gt;Rotation Schedule&lt;/li&gt;
&lt;li&gt;Requirements (get access to X, subscribe to status updates with Y, etc)&lt;/li&gt;
&lt;li&gt;Responsibilities (respond to alerts, write on-call shift notes, etc)&lt;/li&gt;
&lt;li&gt;What to do if you can't respond to a page&lt;/li&gt;
&lt;li&gt;Links to any feature-level on-call runbooks&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related Posts I've written
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/jkblev/production-ready-feature-documentation-checklist-3idk"&gt;Production-Ready Feature Documentation Checklist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/jkblev/tanking-for-your-team-a-tech-lead-s-guide-to-the-on-call-developer-role-km6"&gt;Tanking For Your Team: A Tech Lead's Guide to the On-Call Developer Role&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="http://shop.oreilly.com/product/0636920053675.do"&gt;Production-Ready Microservices: Building Standardized Systems Across an Engineering Organization&lt;/a&gt; by Susan Fowler&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://itrevolution.com/book/the-devops-handbook/"&gt;The DevOps Handbook: How to Create World-Class Agility, Reliability, &amp;amp; Security in Technology Organizations&lt;/a&gt; by Gene Kim, Jez Humble, John Willis, Patrick Debois&lt;/li&gt;
&lt;li&gt;&lt;a href="https://felipecastro.com/en/okr/what-is-okr/"&gt;OKR: Learn Google's Goal System with Examples and Templates&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>documentation</category>
      <category>onboarding</category>
    </item>
    <item>
      <title>Production-Ready Feature Documentation Checklist</title>
      <dc:creator>Jess Blevins</dc:creator>
      <pubDate>Wed, 10 Aug 2022 15:44:00 +0000</pubDate>
      <link>https://dev.to/jkblev/production-ready-feature-documentation-checklist-3idk</link>
      <guid>https://dev.to/jkblev/production-ready-feature-documentation-checklist-3idk</guid>
      <description>&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;This list is intended to cover everything developers need to know to maintain a production-ready feature (or microservice). In an enterprise environment, documentation may sometimes just mean linking to existing policies rather than writing your own.  Some things in the list may not apply to your feature or microservice at all!&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature Documentation Checklist 📝
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;READMEs and Code Comments are Not Documentation&lt;/strong&gt;&lt;br&gt;
Many developers limit the documentation of their microservices to a README file in their repository or to comments scattered throughout the code. While having a README is essential, and all microservice code should contain appropriate comments, this is &lt;em&gt;not&lt;/em&gt; production-ready documentation and requires that developers check out and search through the code.&lt;br&gt;
- Production-Ready Microservices, page 119&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;The feature or microservice has its own Documentation Page wherever your company keeps R&amp;amp;D Documentation (e.g. Confluence).&lt;/li&gt;
&lt;li&gt;A high-level description of the feature.&lt;/li&gt;
&lt;li&gt;Contact information

&lt;ul&gt;
&lt;li&gt;Paging Information to contact for Production Escalations 🚨&lt;/li&gt;
&lt;li&gt;If applicable, contact info includes a link to your team's website or separate documentation page.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;An architecture diagram 🎨&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;This diagram should detail the architecture of the service, including its components, its endpoints, the request flow, its dependencies (both upstream and downstream), and information about any databases or caches... Architecture diagrams are essential for several reasons. It's nearly impossible to understand how and why a microservice works just by reading through the code, and so a well-designed architecture diagram is an easily understandable visual description and summary of the microservice.&lt;br&gt;
- Production-Ready Microservices, page 121&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Information about the component's request flow(s), endpoints, dependencies, and stakeholders

&lt;ul&gt;
&lt;li&gt;Document all API endpoints of the service or feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upstream Dependencies:&lt;/strong&gt; which features or technologies does your component rely on? For each dependency, consider documenting:

&lt;ul&gt;
&lt;li&gt;Links to documentation for the upstream dependencies&lt;/li&gt;
&lt;li&gt;Frequency of maintenance updates required due to these dependencies (e.g. if you are using something like Nodejs or Java, how often should you be checking for version updates?)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Downstream Stakeholders (e.g. specific features or other teams that rely on your feature)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Decision Log&lt;/li&gt;
&lt;li&gt;On-call Runbook / Pager Playbook

&lt;ul&gt;
&lt;li&gt;Operations SOPs&lt;/li&gt;
&lt;li&gt;Monitoring / Telemetry Dashboards&lt;/li&gt;
&lt;li&gt;Alerts SOPs (step-by-step instructions that explain how  to review logs and debug the issue that caused the alert)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Developer's (or DevOps) Guide to the Feature

&lt;ul&gt;
&lt;li&gt;Links to relevant Developer Tools and Resources needed for the feature&lt;/li&gt;
&lt;li&gt;Links to beginner's or quickstart guides to the tools and resources&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Automated Testing Suites - where to find them, how to run  them, best practices, etc&lt;/li&gt;
&lt;li&gt;List of infrastructure resources that are deployed with the feature or microservice&lt;/li&gt;
&lt;li&gt;Step-by-step guide to setting up the feature for local development

&lt;ul&gt;
&lt;li&gt;Where is a good "entry point" for developers looking to read through the feature code? (e.g. file name, function name, etc)&lt;/li&gt;
&lt;li&gt;How to set up local environment for development. Consider whether you need to document things like config files that are used, which authorization credentials are needed, etc&lt;/li&gt;
&lt;li&gt;How to start the feature and step through the workflows of the feature. Include all commands or scripts that need to be run&lt;/li&gt;
&lt;li&gt;How to verify that the feature is up and running correctly&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Links to documented Code Conventions, Style Guides used, or Lint Tool Configs&lt;/li&gt;
&lt;li&gt;Development Cycle and Deployment Pipeline

&lt;ul&gt;
&lt;li&gt;How do developers commit code to your feature? What are your expectations for pull requests?&lt;/li&gt;
&lt;li&gt;How often is your code deployed to production? Do you  follow a CI/CD model?&lt;/li&gt;
&lt;li&gt;Do you use &lt;a href="https://martinfowler.com/articles/feature-toggles.html"&gt;feature toggles&lt;/a&gt; to gate changes?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Deep Dive on Technical Designs and Documentation. This is where you document your architecture design.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.oreilly.com/library/view/production-ready-microservices/9781491965962/"&gt;Production-Ready Microservices: Building Standardized Systems Across an Engineering Organization by Susan Fowler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.oreilly.com/library/view/documenting-software-architectures/9780132488617/"&gt;Documenting Software Architectures: Views and Beyond&lt;/a&gt; by Judith Stafford, Robert Nord, Paulo Merson, Reed Little, James Ivers, David Garlan, Len Bass, Felix Bachmann, Paul Clements&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://martinfowler.com/articles/feature-toggles.html"&gt;Feature Toggles (aka Feature Flags)&lt;/a&gt; by Martin Fowler&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>documentation</category>
    </item>
    <item>
      <title>Tanking For Your Team: A Tech Lead's Guide to the On-Call Developer Role</title>
      <dc:creator>Jess Blevins</dc:creator>
      <pubDate>Mon, 29 Mar 2021 14:16:15 +0000</pubDate>
      <link>https://dev.to/jkblev/tanking-for-your-team-a-tech-lead-s-guide-to-the-on-call-developer-role-km6</link>
      <guid>https://dev.to/jkblev/tanking-for-your-team-a-tech-lead-s-guide-to-the-on-call-developer-role-km6</guid>
      <description>&lt;h1&gt;
  
  
  The Purpose of This Blog Post
&lt;/h1&gt;

&lt;p&gt;This blog post is a comprehensive look at what I believe it means to be an effective on-call developer for your team. The on-call developer can be a rewarding and deeply impactful role for every team to have alongside other scrum team roles. I will share my thoughts about why the on-call developer can and &lt;em&gt;should&lt;/em&gt; do more than respond to pager duty.&lt;/p&gt;

&lt;p&gt;This blog post is also a love letter to team-based ownership of code features and microservices. The on-call developer can only be so effective without having ownership of the code they are responsible for maintaining.&lt;/p&gt;

&lt;p&gt;This blog post is a little bit about what we can learn from role-playing games.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2iapbokatofbiy0g0mr7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2iapbokatofbiy0g0mr7.png" alt="Four adventurers standing in front of a large dragon."&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;"Iconic Party" from Dungeons &amp;amp; Dragons Player Handbook, 5th edition.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;What does it mean to be on-call for a developer? I'll start with a definition from &lt;a href="https://www.atlassian.com/incident-management/on-call" rel="noopener noreferrer"&gt;Atlassian Incident Management&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On call is the practice of designating specific people to be available at specific times to respond in the event of an urgent service issue, even though they are not formally on duty.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Usually, an "urgent service issue" refers to a high severity incident affecting end users. When the Network Operations Center or Site Reliability Engineers are paging a developer on-call, it's probably an urgent service issue.&lt;/p&gt;

&lt;p&gt;However, we often have other non-urgent, but-still-more-urgent-than-next-sprint issues come up &lt;em&gt;all the time.&lt;/em&gt; And that's why we can expand the on-call developer to shielding the rest of the development team by taking care of any interruptions during a sprint.&lt;/p&gt;

&lt;p&gt;I believe we can solve a lot of organizational problems by creating room for the On-Call Developer role alongside the other important scrum team roles (e.g. Product Owner, Scrum Master). It is possible to make the role work so that your organization’s knowledge management and incident response times scale well. &lt;strong&gt;Most importantly, this role gets rid of the need for singularly heroic acts from tech leads.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tanking For Your Team – An Analogy
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foyo8pwpwu6z6bttn89jd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foyo8pwpwu6z6bttn89jd.jpg" alt="A woman wearing plate armor and holding an enormous shield in her hand."&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Johanna, Crusader of Zakarum, from "Heroes of the Storm." Blizzard Entertainment.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;In role-playing games (RPGs), a team’s “tank” is the character class designed to withstand damage for the team and, secondly, ensure they can draw the enemy’s attention to themselves.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does this have to do with being an on-call developer?
&lt;/h3&gt;

&lt;p&gt;In writing this post, I realized more and more that the on-call developer works as the team’s tank. The rest of the development team are damage dealers, trying to burn down sprint goals. Using this analogy, the on-call developer needs to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be able to mitigate themselves (and our business) from the damage of costly interruptions.&lt;/li&gt;
&lt;li&gt;“Pull aggro” - draw attention to themselves so that nobody else is necessarily distracted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a team’s enemies are focused on your tank, your team’s damage dealers are free to maximize their damage per second (DPS) on the team’s main targets. By balancing dungeon encounter responsibilities across the different classes, the entire team can achieve glorious victory!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is also true for your scrum team.&lt;/em&gt; 🌈&lt;/p&gt;

&lt;h2&gt;
  
  
  "Damage" Mitigation -- Ensuring the On-Call Developer is Supported
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa65s4p034i1bsp4480hi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa65s4p034i1bsp4480hi.jpg" alt="Tank and Healer working together."&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Reinhardt and Lúcio from "Overwatch." Blizzard Entertainment.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Before setting up your on-call rotation, how do you ensure your developers have the support they need to handle high severity issues? It’s stressful, being on-call, and sometimes a long Mean Time To Repair (MTTR) a high-severity incident can cost the company a lot of money.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In other words, how can we keep our Tank from immediately getting squished by a large mob? What is the developer version of plate armor?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have some suggested prerequisites for putting together an on-call rotation. These prerequisites are designed to support your on-call developer and make this process as painless as possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your tech lead has onboarded the dev team to the features and/or microservices that your team owns.

&lt;ul&gt;
&lt;li&gt;Ideally, those features and microservices are well-documented.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;You have runbooks (i.e. how-to guides) for handling high severity issues.&lt;/li&gt;

&lt;li&gt;You have a system in place for knowledge transfers across rotation changes.&lt;/li&gt;

&lt;li&gt;On-call rotations should not be too large (or too small). The ideal size is probably ~5 developers. On a much larger rotation, developers are not performing on-call duties enough to gain expertise and sharpen their skills to reduce MTTR metrics.&lt;/li&gt;

&lt;li&gt;At the same time, individuals should not be on-call more than 25% of the time, or there is a risk of burnout.&lt;/li&gt;

&lt;li&gt;You have created a psychologically safe environment.

&lt;ul&gt;
&lt;li&gt;At a minimum, you should provide psychological safety for your on-call rotation by using &lt;a href="https://www.atlassian.com/incident-management/postmortem/blameless" rel="noopener noreferrer"&gt;blameless post-mortems&lt;/a&gt;. You should also cultivate a culture of teaching and learning.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;The team’s Engineering Manager (EM) and Product Owner (PO) understand that middle-of-the-night pages are MAJOR issues and should not occur regularly. If an on-call developer is responding to non-working hour pages, that person needs to be compensated appropriately.&lt;/strong&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Onboarding, Runbooks, and Shift Notes
&lt;/h3&gt;

&lt;p&gt;The first form of risk mitigation is to have your tech leads or Subject Matter Experts (SMEs) train the rest of the development team on the code components or owned microservices. Set an expectation that the SME is not going to be the primary responder to all incidents. Moving forward, that person is there to provide back-up when asked or needed by the on-call developer.&lt;/p&gt;

&lt;p&gt;This acts as a forcing function for the SME to write documentation for others to follow.&lt;/p&gt;

&lt;p&gt;The next form of mitigation is to have production operation runbooks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxjwbkmxe63vzjt2mfme.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxjwbkmxe63vzjt2mfme.png" alt="Sam from Lord of the Rings sarcastically commenting, "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Runbooks are a specific type of documentation tailored to the types of issues you may see happen in production.&lt;/p&gt;

&lt;h4&gt;
  
  
  Writing a runbook sounds hard – how do you write step-by-step instructions for handling a problem you don't know about yet?
&lt;/h4&gt;

&lt;p&gt;In my experience, most teams kind of do it already! We write documents outlining the team's risk assessment and mitigation plans for features. We write ticket comments about how to handle code that might cause a problem in production. We have release day monitoring practices. We have a vague idea of what to do if something looks bad on a dashboard.&lt;/p&gt;

&lt;p&gt;Write that stuff down in the form of a runbook for your on-call developer to reference!&lt;/p&gt;

&lt;p&gt;Many times, it’s as simple as having a documentation page for your feature that says, “if x is happening, turn off this &lt;a href="https://martinfowler.com/articles/feature-toggles.html" rel="noopener noreferrer"&gt;feature toggle&lt;/a&gt;.” Other times, you want to think about monitoring things like production error logs or a specific &lt;a href="https://grafana.com/" rel="noopener noreferrer"&gt;grafana&lt;/a&gt; dashboard.&lt;/p&gt;

&lt;p&gt;Write. It. Down.&lt;/p&gt;

&lt;h4&gt;
  
  
  Write down shift notes
&lt;/h4&gt;

&lt;p&gt;Finally, be sure to keep everyone in your rotation up-to-date with shift notes. My current team keeps a record of all Production Incident Notes. We have a template to record the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incident description&lt;/li&gt;
&lt;li&gt;Resolution&lt;/li&gt;
&lt;li&gt;Root cause&lt;/li&gt;
&lt;li&gt;Takeaways and next steps&lt;/li&gt;
&lt;li&gt;Timeline of events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On a previous team that owned several microservices, our shift notes included entries about operational duties and maintaining our staging environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep Your Rotation Small (But Not Too Small!)
&lt;/h3&gt;

&lt;p&gt;For developers to gain confidence and strengthen our skills in being on-call, we need to do it regularly! Just like anything else, we need to practice being on-call so that we can get good at it.&lt;/p&gt;

&lt;p&gt;In her blog post, “&lt;a href="https://dev.to/molly/making-on-call-not-suck-490"&gt;Making On-Call Not Suck&lt;/a&gt;,” Molly Struve writes about the characteristics of a broken on-call system and how to fix it. In describing the broken on-call system, she writes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Eventually, the team was so big that people were going on-call once every 3-4 months. This may seem like a dream come true, but in reality, it was far from it. […] The large rotation meant that on-call shifts were so infrequent that devs were not able to get the experience and reps they needed to know how to handle on-call issues effectively. […] As backward as it may sound, being on-call more is a benefit because devs have become a lot more comfortable with it and are able to really figure out a strategy that works best for them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Molly's experience rings true to my own at a large enterprise company. I am much more confident and comfortable responding to pages for my specific team than I am the larger organization's rotation.&lt;/p&gt;

&lt;p&gt;In summary, support your on-call rotation by keeping the size at around 5 developers so that people get experience but do not burn out.&lt;/p&gt;

&lt;h3&gt;
  
  
  But Who's the Healer?!
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5y96039wv2fl6ktqgbe4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5y96039wv2fl6ktqgbe4.png" alt="A battlefield bathed in light. The source is a man in the middle lifting his hand, healing his teammates."&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Anduin Wrynn from "World of Warcraft: Battle for Azeroth." Blizzard Entertainment.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I don't know. Probably the EM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pulling Aggro for the Team
&lt;/h2&gt;

&lt;p&gt;In role-playing games, aggro is a mechanism used by enemies to prioritize which characters to attack. The player who generates the most aggro will be preferentially targeted by the enemy. This is referred to as “pulling aggro.”&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/dQ_-rmuPZC4"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;em&gt;Eowyn, Shieldmaiden of Rohan, pulling aggro for Théoden.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In a development team, the person with the highest baseline priority for interruption is typically the tech lead. But the tech lead should not always be the team’s tank. There are a couple of reasons for this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It leads to a low &lt;a href="https://en.wikipedia.org/wiki/Bus_factor" rel="noopener noreferrer"&gt;Bus Factor&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;It impedes the growth of the entire development team.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To handle this, the tech lead needs to cede responsibilities to the on-call developer and allow that person to pull aggro for the team. This means the on-call developer should be the primary developer responsible for context-switching out of sprint work and handling interruptions. Such responsibilities may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responding to all incident pages.&lt;/li&gt;
&lt;li&gt;Release day monitoring.&lt;/li&gt;
&lt;li&gt;Helping the team’s PO and EM triage incoming bugs.&lt;/li&gt;
&lt;li&gt;Reviewing any non-owner changes made to the team’s owned code components.&lt;/li&gt;
&lt;li&gt;Helping the PO and EM respond to stakeholder questions about owned functionality.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Responding to stakeholder interruptions
&lt;/h3&gt;

&lt;p&gt;Sometimes, stakeholders (customer service managers, POs, other developers) can interrupt scrum teams with non-trivial technical questions. And if you work on a team that owns any kind of framework or utility used by other developers, you probably get hit with a lot of questions. (And this is despite your best efforts to document everything for your downstream users! 😢)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I have spent most of my career working on teams responsible for enabling other development teams. Through trial and error, I have found that the most effective way of handling these kinds of interruptions is by explicitly assigning someone the duty of answering them. &lt;em&gt;And&lt;/em&gt; it shouldn’t always be the same person.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I suggest the on-call developer because they’re already being interrupted with costly context switching.&lt;/p&gt;

&lt;p&gt;Everyone else on the development team can stay concentrated on sprint goals, and the stakeholder gets a prompt and meaningful answer.&lt;/p&gt;

&lt;p&gt;With a collective responsibility model, it is not always clear who should take the time to respond, let alone perform any kind of research or analysis. Sometimes it’s the tech lead answering everything, which leads to a low Bus Factor. Sometimes there’s a &lt;a href="https://en.wikipedia.org/wiki/Bystander_effect" rel="noopener noreferrer"&gt;bystander effect&lt;/a&gt;, where anyone or no one may take responsibility for answering incoming questions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F620x696fpq35qswk2dfg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F620x696fpq35qswk2dfg.jpg" alt="A skeleton sitting on a bench."&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Stakeholder waiting for an answer from a team with a collective responsibility model.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Your team needs to take responsibility for unblocking stakeholders without hurting your own team’s needs. The on-call developer can do that for you while the rest of the development team focuses on the main target – your sprint goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maximizing DPS – Ensuring the rest of your team is effective at burning down sprint goals
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yqvn0enlyb2hgmdkl15.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yqvn0enlyb2hgmdkl15.jpg" alt="A group of heroes in the foreground is fighting a large dragon in the background."&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Onyxia's Lair from "World of Warcraft." Blizzard Entertainment.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In this last section, I want to talk about the little ways a tank supports their team and makes everyone else better at their job of killing the dragon. (The dragon is your sprint goal).&lt;/p&gt;

&lt;p&gt;Ok... My tanking analogy is falling apart here.&lt;/p&gt;

&lt;p&gt;But here’s a section about how the on-call developer role makes everyone else a better and more productive developer working on sprint goals.&lt;/p&gt;

&lt;h3&gt;
  
  
  Being on-call encourages developers to build a better product
&lt;/h3&gt;

&lt;p&gt;Being on-call makes us better developers when we’re not on-call. By handling production incidents and triaging bugs directly, everyone in the rotation gains the benefit of insight into how our code affects production and our clients. This makes us better day-to-day developers as we work on improving the product or building new ones.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Developers should follow their work downstream – by seeing customer difficulties firsthand, they make better and more informed decisions in their daily work. By doing this, we create feedback on the non-functional aspects of our code – all the elements that are not related to the customer-facing feature – and identify ways that we can improve manageability, operability, and so on. - DevOps Handbook, pg 233&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  On-call developers can fix things hindering the development team
&lt;/h3&gt;

&lt;p&gt;Ideally, on-call developers should not be expected to perform sprint work. They are already responsible for so much context-switching that anything they can accomplish towards burning down sprint goals is nice-to-have.&lt;/p&gt;

&lt;p&gt;I think a better use of the on-call developer’s “free” time is to work on things that improve the on-call experience. This includes things like automating manual processes, improving alerts, writing dev tools -- anything that lowers the operational burden of being on-call is fair game.&lt;/p&gt;

&lt;p&gt;I have been smitten with this idea since I saw it in Charity Majors’ blog post, “&lt;a href="https://charity.wtf/2020/10/03/on-call-shouldnt-suck-a-guide-for-managers/" rel="noopener noreferrer"&gt;On-Call Shouldn’t Suck: A Guide for Managers&lt;/a&gt;:”&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When an engineer is on call, they are not responsible for normal project work — period. That time is sacred and devoted to fixing things, building tooling, and creating guard-rails to protect people from themselves. If nothing is on fire, the engineer can take the opportunity to fix whatever has been annoying them. Allow for plenty of agency and following one’s curiosity, wherever it may lead, and it will be a special treat.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How is this maximizing your sprint output potential? The on-call developer is improving everyone’s output by working on improving our environments and tools. 🛠&lt;/p&gt;

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

&lt;p&gt;Thank you for reading my very geeky blog post about creating an effective on-call developer role for your team. Thanks very much to those that have written about this topic before me.&lt;/p&gt;

&lt;h3&gt;
  
  
  Postscript
&lt;/h3&gt;

&lt;p&gt;I am not a Tank main. I prefer range DPS and healer roles, but sometimes you need to play the role your team needs. 😏&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.geeknative.com/48262/art-inside-dd-5e-players-handbook/" rel="noopener noreferrer"&gt;https://www.geeknative.com/48262/art-inside-dd-5e-players-handbook/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/incident-management/on-call" rel="noopener noreferrer"&gt;https://www.atlassian.com/incident-management/on-call&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Tank_(video_games" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Tank_(video_games&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.icy-veins.com/wow/tanking-guide" rel="noopener noreferrer"&gt;https://www.icy-veins.com/wow/tanking-guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dungeonsolvers.com/2019/05/10/i-fight-for-my-friends-how-to-be-a-tank-in-dd-5e/" rel="noopener noreferrer"&gt;https://www.dungeonsolvers.com/2019/05/10/i-fight-for-my-friends-how-to-be-a-tank-in-dd-5e/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dotesports.com/overwatch/news/reinhardt-camera-control-patch-17485" rel="noopener noreferrer"&gt;https://dotesports.com/overwatch/news/reinhardt-camera-control-patch-17485&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sre.google/sre-book/being-on-call/" rel="noopener noreferrer"&gt;https://sre.google/sre-book/being-on-call/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/incident-management/postmortem/blameless" rel="noopener noreferrer"&gt;https://www.atlassian.com/incident-management/postmortem/blameless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/incident-management/on-call/improving-on-call" rel="noopener noreferrer"&gt;https://www.atlassian.com/incident-management/on-call/improving-on-call&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/molly/making-on-call-not-suck-490"&gt;https://dev.to/molly/making-on-call-not-suck-490&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Hate_(video_games)" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Hate_(video_games)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Bus_factor" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Bus_factor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Bystander_effect" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Bystander_effect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/opsgenie/why-every-team-in-your-organization-should-embrace-on-call-1b43b31f6d8a" rel="noopener noreferrer"&gt;https://medium.com/opsgenie/why-every-team-in-your-organization-should-embrace-on-call-1b43b31f6d8a&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Gene Kim, Patrick Debois, Jez Humble, John Willis. The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://charity.wtf/2020/10/03/on-call-shouldnt-suck-a-guide-for-managers/" rel="noopener noreferrer"&gt;https://charity.wtf/2020/10/03/on-call-shouldnt-suck-a-guide-for-managers/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

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