<?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>Forem: Dhruv Agarwal</title>
    <description>The latest articles on Forem by Dhruv Agarwal (@dhruvagarwal).</description>
    <link>https://forem.com/dhruvagarwal</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%2F1231577%2F5d98fa80-dea8-473d-8d9b-bc4980494bbe.jpeg</url>
      <title>Forem: Dhruv Agarwal</title>
      <link>https://forem.com/dhruvagarwal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dhruvagarwal"/>
    <language>en</language>
    <item>
      <title>5 ways to skip QA approval forever!</title>
      <dc:creator>Dhruv Agarwal</dc:creator>
      <pubDate>Thu, 04 Jul 2024 13:07:39 +0000</pubDate>
      <link>https://forem.com/middleware/5-ways-to-skip-qa-approval-forever-9b6</link>
      <guid>https://forem.com/middleware/5-ways-to-skip-qa-approval-forever-9b6</guid>
      <description>&lt;p&gt;3 days of planning, 5 days of execution and then the whole work gets stuck for weeks on QA. On the flip side if it gets picked up, it   results in a poor job of testing leading to a reactive firefighting later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does that sound familiar?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Well that was atleast my team’s state at Shuttl for every new feature our devs picked. No matter how big or small, the QA was the bottleneck for every change. &lt;/p&gt;

&lt;p&gt;It was unavoidable because in the absence of the QA, the quality risk was even higher.&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%2Fmedia1.tenor.com%2Fm%2FebYFr6Kj_80AAAAd%2Fhizzie-cat.gif" 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%2Fmedia1.tenor.com%2Fm%2FebYFr6Kj_80AAAAd%2Fhizzie-cat.gif" alt="Whack Mole GIFs | Tenor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nobody likes firefighting consistently. So, what’s the fix?&lt;/p&gt;

&lt;p&gt;In this blog, we’ll talk about 5 steps (in order) which will help you get unblocked from a QA approval:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Shift Left when QA gets involved&lt;/li&gt;
&lt;li&gt;You code it, you own it&lt;/li&gt;
&lt;li&gt;Always have their back when needed&lt;/li&gt;
&lt;li&gt;Look back to find improvement patterns&lt;/li&gt;
&lt;li&gt;Get inspiration from industry benchmarks&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Shift left when QA gets involved
&lt;/h2&gt;

&lt;p&gt;A typical development process starts from planning, then you program it, test it, release it and monitor incase of any failures. (as shown below)&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%2Fpaper-attachments.dropboxusercontent.com%2Fs_2BFACEC1FB99EAA5A13FC8B84F99057A210680A4683D7ACCF98DAC4F24EDA7B2_1719904105727_Screenshot%2B2024-07-02%2Bat%2B12.38.18%2BPM.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%2Fpaper-attachments.dropboxusercontent.com%2Fs_2BFACEC1FB99EAA5A13FC8B84F99057A210680A4683D7ACCF98DAC4F24EDA7B2_1719904105727_Screenshot%2B2024-07-02%2Bat%2B12.38.18%2BPM.png" alt="Software Development Life Cycle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a typical software team, there are multiple engineers building features however 1 or 2 manual QA attached per team(or pod). Once the features/bug fixes are ready by the devs, the QAs are responsible to do systemic tests to ensure correctness and then it is released.&lt;/p&gt;

&lt;p&gt;The problems occur when multiple features have to be released together.&lt;br&gt;
That’s when the QA bandwidth gets crushed in toggling between different features.&lt;br&gt;
That’s when the development team despite having a ready feature gets delayed to production.&lt;/p&gt;

&lt;p&gt;Cherry on top is: after a long wait, there is a feedback and then again a long wait - so the cycle continues!&lt;/p&gt;

&lt;p&gt;To fix this, the first step is to shift the QA towards the left in the process.&lt;/p&gt;

&lt;p&gt;Instead of them testing the changes manually, ask them to create a test plan during the planning of the feature&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%2Fpaper-attachments.dropboxusercontent.com%2Fs_2BFACEC1FB99EAA5A13FC8B84F99057A210680A4683D7ACCF98DAC4F24EDA7B2_1719904307022_Screenshot%2B2024-07-02%2Bat%2B12.41.41%2BPM.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%2Fpaper-attachments.dropboxusercontent.com%2Fs_2BFACEC1FB99EAA5A13FC8B84F99057A210680A4683D7ACCF98DAC4F24EDA7B2_1719904307022_Screenshot%2B2024-07-02%2Bat%2B12.41.41%2BPM.png" alt="Software Development Life Cycle with QA involved in planning"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test plan&lt;/strong&gt;&lt;br&gt;
A document which consists of all scenarios where the product should work, all corner cases and cascading risks covered. &lt;/p&gt;

&lt;p&gt;Since, the QAs are specialists of thinking about the corner cases, freeing them up from the grind will enable more quality and coverage in the test cases.&lt;/p&gt;

&lt;p&gt;Once, the test plan is ready, we move to the next step ⬇️&lt;/p&gt;
&lt;h2&gt;
  
  
  You code it, you own it
&lt;/h2&gt;

&lt;p&gt;We developers are more than able and smart to run everything end to end. The test plan takes the load off of thinking sad cases and now all we have to do is check, check, check&lt;/p&gt;

&lt;p&gt;One of the benefits of having a test plan before programming is that you can fix your design in accordance to the test plan itself and save many days (and nights) from your life.&lt;/p&gt;

&lt;p&gt;So, now nothing stopping you!&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%2Fmedia.pinatafarm.com%2Fprotected%2F13C23573-190B-4CD5-8692-28D5AEE4DC73%2Fddf381d7-4e99-4102-9697-de91ffc364fd-1678378890979-pfarm-with-png-watermarked.webp" 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%2Fmedia.pinatafarm.com%2Fprotected%2F13C23573-190B-4CD5-8692-28D5AEE4DC73%2Fddf381d7-4e99-4102-9697-de91ffc364fd-1678378890979-pfarm-with-png-watermarked.webp" alt="You Got It Dude"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Always have their back when needed
&lt;/h2&gt;

&lt;p&gt;However, life is not so ideal. And sometimes you might need to make fake data, set up new environments or knowing additional context which might totally derail your flow. &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%2Fmedia.tenor.com%2FFa5GKCxVw3QAAAAM%2Fstop-it-get-some-help.gif" 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%2Fmedia.tenor.com%2FFa5GKCxVw3QAAAAM%2Fstop-it-get-some-help.gif" alt="Stop It Get Some Help"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then is the moment where you must remember QAs are our team mates 😄 and inform them beforehand what test plan items might require their help so that when you’re ready to test, they can support you with activating those activities.&lt;/p&gt;

&lt;p&gt;Common ways to involve them in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mark the items in the planning stage itself&lt;/li&gt;
&lt;li&gt;When you are about to finish development, book their time in advance to get your environment ready&lt;/li&gt;
&lt;li&gt;Request their help in your stand-ups&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Look back to find improvement patterns
&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%2Fpaper-attachments.dropboxusercontent.com%2Fs_2BFACEC1FB99EAA5A13FC8B84F99057A210680A4683D7ACCF98DAC4F24EDA7B2_1719834858385_1559899200679.gif" 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%2Fpaper-attachments.dropboxusercontent.com%2Fs_2BFACEC1FB99EAA5A13FC8B84F99057A210680A4683D7ACCF98DAC4F24EDA7B2_1719834858385_1559899200679.gif" alt="Retro"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Throughout this change, there will certainly be different phases of problem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[Pre Change] Lot of time spent in just waiting for QA approval&lt;/li&gt;
&lt;li&gt;[During Change] Teething issues and process adjustment to your team’s comfort&lt;/li&gt;
&lt;li&gt;[Post Change] Iterations to find what can be improved to achieve your peak productivity as a team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One practice that will always help you will be doing a retrospective after every sprint basis on actual data (as below)&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%2Fpaper-attachments.dropboxusercontent.com%2Fs_4B8FCD309425E91FDF8F923DAA2CA70BC55F0ACDBE93F8D98AF3D4FB4C2707FD_1719931253647_Screenshot%2B2024-07-02%2Bat%2B8.10.24%2BPM.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%2Fpaper-attachments.dropboxusercontent.com%2Fs_4B8FCD309425E91FDF8F923DAA2CA70BC55F0ACDBE93F8D98AF3D4FB4C2707FD_1719931253647_Screenshot%2B2024-07-02%2Bat%2B8.10.24%2BPM.png" alt="Sprint Flow  and effort investment"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Collating data can be time consuming and hence has a risk of de-railing all retrospectives. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Disclaimer: I am also the co-founder)&lt;/em&gt; A tool like &lt;a href="https://middlewarehq.com" rel="noopener noreferrer"&gt;MiddlewareHQ&lt;/a&gt; helps you be focussed on your work by bringing all the process insights at one place from your tools like Jira, Git, etc.&lt;/p&gt;

&lt;p&gt;Consider this as a fitness band for the whole team while the athlete (the team) is training 🏃🏼‍♀️&lt;/p&gt;
&lt;h2&gt;
  
  
  Get inspiration from industry benchmarks
&lt;/h2&gt;

&lt;p&gt;We as software engineers have grown up looking at technology benchmarks and language benchmarks. However, when it comes to our productivity, there’s no standard practice.&lt;/p&gt;

&lt;p&gt;QA being a bottleneck is one of the many challenges in your software delivery journey. &lt;/p&gt;

&lt;p&gt;A great way to keep improving(IMO) is to leverage the industry benchmarks for teams like yours. DORA metrics is a great framework by Google and they publish an annual report every year with benchmarks on delivery process and quality. (Read more about DORA metrics)&lt;/p&gt;

&lt;p&gt;That was the aim with which we decided to launch an open source offering to measure DORA metrics for any team in the environment of your choice. &lt;/p&gt;

&lt;p&gt;Our mission is to remove friction out of the development process and enable builders to build better! Do consider giving us a ⭐️ if you like what we’re building!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/middlewarehq" rel="noopener noreferrer"&gt;
        middlewarehq
      &lt;/a&gt; / &lt;a href="https://github.com/middlewarehq/middleware" rel="noopener noreferrer"&gt;
        middleware
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ✨ Open-source DORA metrics platform for engineering teams ✨
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
&lt;a href="https://www.middlewarehq.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmiddlewarehq%2Fmiddleware%2Fraw%2Fmain%2Fmedia_files%2Flogo.png" alt="Middleware Logo" width="300px"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Open-source engineering management that unlocks developer potential&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://github.com/middlewarehq/middleware/actions/workflows/build.yml" rel="noopener noreferrer"&gt;&lt;img alt="continuous integration" src="https://camo.githubusercontent.com/d72013fe354cb76bdb62fae188d011c4d1bce7723189bacad6cbde6387cf52e6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6d6964646c657761726568712f6d6964646c65776172652f6275696c642e796d6c3f6272616e63683d6d61696e266c6162656c3d6275696c64267374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
&lt;a href="https://github.com/middlewarehq/middleware/graphs/commit-activity" rel="noopener noreferrer"&gt;&lt;img alt="Commit activity per month" src="https://camo.githubusercontent.com/b694441288287fd6f4c8750f3887fcc6853aef9bfc84ee8a0e1e490a7633639a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f6d2f6d6964646c657761726568712f6d6964646c65776172653f7374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
&lt;a href="https://github.com/middlewarehq/middleware/graphs/contributors" rel="noopener noreferrer"&gt;&lt;img alt="contributors" src="https://camo.githubusercontent.com/15f7e201a0b0e240425157b1a7251f24a91dcd6b6bbec76af4ad66efda00eeba/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732d616e6f6e2f6d6964646c657761726568712f6d6964646c65776172653f636f6c6f723d79656c6c6f77267374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;a href="https://opensource.org/licenses/Apache-2.0" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/44fae73fb8fb80dc9f5673dc4e1d0e57b1ac81da1166a70c8a5ce52bb39ed67f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f617061636865253230322e302d707572706c652e7376673f7374796c653d666f722d7468652d6261646765266c6162656c3d6c6963656e7365" alt="license"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/eab8dfd78113b2679d98f9f33a66e3a157276c68cc4cf3541fa1287f4dddb379/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6d6964646c657761726568712f6d6964646c65776172653f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/eab8dfd78113b2679d98f9f33a66e3a157276c68cc4cf3541fa1287f4dddb379/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6d6964646c657761726568712f6d6964646c65776172653f7374796c653d666f722d7468652d6261646765" alt="Stars"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mhq.link/oss-community" rel="nofollow noopener noreferrer"&gt;Join our Open Source Community&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/middlewarehq/middleware/blob/main/media_files/banner.gif"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmiddlewarehq%2Fmiddleware%2Fraw%2Fmain%2Fmedia_files%2Fbanner.gif" alt="Middleware Opensource"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introduction&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Middleware&lt;/strong&gt; is an open-source tool designed to help engineering leaders measure and analyze the effectiveness of their teams using the &lt;a href="https://dora.dev" rel="nofollow noopener noreferrer"&gt;DORA metrics&lt;/a&gt;. The DORA metrics are a set of &lt;a href="https://dora.dev/guides/dora-metrics-four-keys/" rel="nofollow noopener noreferrer"&gt;four key values&lt;/a&gt; that provide insights into software delivery performance and operational efficiency.&lt;/p&gt;

&lt;p&gt;They are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Frequency&lt;/strong&gt;: The frequency of code deployments to production or an operational environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lead Time for Changes&lt;/strong&gt;: The time it takes for a commit to make it into production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mean Time to Restore&lt;/strong&gt;: The time it takes to restore service after an incident or failure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change Failure Rate&lt;/strong&gt;: The percentage of deployments that result in failures or require remediation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/middlewarehq/middleware#introduction" rel="noopener noreferrer"&gt;Middleware - Open Source&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/middlewarehq/middleware#-quick-start" rel="noopener noreferrer"&gt;Quick Start&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-installing-middleware" rel="noopener noreferrer"&gt;Installing Middleware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-troubleshooting" rel="noopener noreferrer"&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/middlewarehq/middleware#-developer-setup" rel="noopener noreferrer"&gt;Developer Setup&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-using-gitpod" rel="noopener noreferrer"&gt;Using Gitpod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-using-docker" rel="noopener noreferrer"&gt;Using Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-manual-setup" rel="noopener noreferrer"&gt;Manual Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-usage" rel="noopener noreferrer"&gt;Usage&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-how-we-calculate-dora-metrics" rel="noopener noreferrer"&gt;How we Calculate DORA&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-roadmap" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-contributing-guidelines" rel="noopener noreferrer"&gt;Contributing guidelines&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;…&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/middlewarehq/middleware" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;All the best and hope nothing blocks what you want to achieve! &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%2Fujkwruvwefkezdw3u64w.gif" 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%2Fujkwruvwefkezdw3u64w.gif" alt="The end"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Write Less, Fix Never: The Art of Highly Reliable Code</title>
      <dc:creator>Dhruv Agarwal</dc:creator>
      <pubDate>Mon, 17 Jun 2024 11:14:20 +0000</pubDate>
      <link>https://forem.com/middleware/write-less-fix-never-the-art-of-highly-reliable-code-5a0i</link>
      <guid>https://forem.com/middleware/write-less-fix-never-the-art-of-highly-reliable-code-5a0i</guid>
      <description>&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%2Faygtgwad96xzq2pr944q.gif" 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%2Faygtgwad96xzq2pr944q.gif" alt="Burnt out engineer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're a developer tirelessly pushing out new changes, only to be dragged back by errors in your past work, this post is incredibly relevant for you.&lt;/p&gt;

&lt;p&gt;Over the past decade in software development, one of the key mistakes I've made and seen others make repeatedly — is focusing on doing more work rather than ensuring the work done (no matter how small) is robust and will continue to work properly. These recurring errors can significantly hamper productivity and motivation.&lt;/p&gt;

&lt;p&gt;From my own share of mistakes, I’ve learned valuable lessons. Here, I’d like to share a few strategies that will not only help you &lt;strong&gt;ship robust software&lt;/strong&gt; but also &lt;strong&gt;free you from the shackles of your past work&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa85h4md8p9xwd1ooq7zc.gif" 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%2Fa85h4md8p9xwd1ooq7zc.gif" alt="Tell me more"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will talk about the top 5 strategies that worked for me:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Plan for 10x&lt;/li&gt;
&lt;li&gt;Psst: Your old work got a bug and is calling you back&lt;/li&gt;
&lt;li&gt;Make the Systems Work for You, Not the Other Way Around&lt;/li&gt;
&lt;li&gt;Always Answer with a Link&lt;/li&gt;
&lt;li&gt;
Understand software building is a team sport.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1. Plan for 10x
&lt;/h2&gt;

&lt;p&gt;There are two types of engineers IMHO: those who hack their way through for today and those who design for the distant future. Neither approach is sustainable on its own.&lt;/p&gt;

&lt;p&gt;Your code should be able to handle the growth your business is about to experience. However, over-designing for future challenges can lead to unnecessary complexity. There's a term dedicated to this - &lt;a href="https://thedecisionlab.com/biases/bikeshedding" rel="noopener noreferrer"&gt;Bike Shedding&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedi9uv0o8bxjg58qr0wm.gif" 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%2Fedi9uv0o8bxjg58qr0wm.gif" alt="Scaling up"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's my practical rule of thumb: plan for 10 times the current scale or consider how much your business is expected to grow in the next 2-3 years. Ensure your plans align with your business goals.&lt;/p&gt;

&lt;p&gt;For example, if you're a cab company designing a booking module, and today your company handles 10,000 rides a day with an expectation to reach 100,000 rides a day in 2 years, use that as your benchmark. Designing a system for 10 million rides a day when you're only doing 10,000 rides might result in an overly complex and expensive solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Psst: Your old work got a bug and is calling you back
&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%2Fcsf7rulcx55smffdqyyi.gif" 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%2Fcsf7rulcx55smffdqyyi.gif" alt="Broken system"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Days and weeks of debugging can save you a few hours of writing tests" - someone wise.&lt;/p&gt;

&lt;p&gt;Shipping code without testing all the edge cases is like a spray and pray strategy. The simplest way to ensure your code works as expected is by adding unit tests. This might sound obvious, but the importance of thorough testing cannot be overstated.&lt;/p&gt;

&lt;p&gt;Unit tests not only act as the first line of defense against obvious errors but also serve as insurance for your code against unintended changes that could violate business requirements. Hence, reducing those adhoc bugs being assigned to you every sprint 😉&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A trick for the lazy (like me)&lt;/strong&gt;: Before you write the code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write tests covering every corner case you can think of.&lt;/li&gt;
&lt;li&gt;Pretend you're trying to break someone else's system.&lt;/li&gt;
&lt;li&gt;Write assert False in all the tests and run them.&lt;/li&gt;
&lt;li&gt;Naturally, all tests will fail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, just work towards making each test pass. This approach takes less time overall and produces robust code every time!&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Make the Systems Work for You, Not the Other Way Around
&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%2F8teb74yr1dgfq2tpolxf.gif" 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%2F8teb74yr1dgfq2tpolxf.gif" alt="Monitoring systems"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of my managers once gave me the most impactful advice: "Act, don't react." This advice came when I was constantly being tagged on different Slack channels for problems, customer complaints, and payment failures. I was just reacting to each request, having no clue what might happen next.&lt;/p&gt;

&lt;p&gt;That's when I started asking three questions for every feature I built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How will I know it's working?&lt;/li&gt;
&lt;li&gt;How will I know it failed?&lt;/li&gt;
&lt;li&gt;How will I know it succeeded?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I then answered these questions at every level (feature, screens, app) by sending metrics to our APM tools like Datadog or NewRelic.&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%2Fc8werj18bl8p6zhwc61d.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%2Fc8werj18bl8p6zhwc61d.png" alt="APM sample"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After setting this up, I configured alerts to notify me if anything went wrong.&lt;/p&gt;

&lt;p&gt;By doing this, I became aware of bugs before they escalated into major issues, preventing reactive measures, poor customer experiences, and my own uncertainty about what might come next.&lt;/p&gt;

&lt;p&gt;Start answering these three fundamental questions every time you build something to ensure you always act instead of react.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Always Answer with a Link
&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%2Fe8utxvlj2pt1ojjq7kk8.gif" 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%2Fe8utxvlj2pt1ojjq7kk8.gif" alt="Replying with documentation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just like bad work gets you tagged on various Slack channels for fixes, great work gets you tagged for context in areas you've worked on.&lt;/p&gt;

&lt;p&gt;This can drain your energy when you least expect it, or worse, it can make you the go-to person for the same tasks because you know the complete picture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep this secret trick to yourself:&lt;/strong&gt;&lt;br&gt;
Document everything. Include the context, architecture, and business-specific decisions you made while building the feature. When someone asks about the context of an area (feature, screen, app), just send them the link to the updated document. This will save you a few hours every time.&lt;/p&gt;

&lt;p&gt;Additionally, thorough documentation makes onboarding new team members easier and ensures that your work remains accessible and understandable over time.&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Understand software building is a team sport.
&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%2Fwitndxix4fs05xy3fjie.gif" 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%2Fwitndxix4fs05xy3fjie.gif" alt="Ted Lasso appreciation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Software engineering often emphasizes the individual contributor path. However, reaching the end goal alone is impossible—you only reach it with your team (and vice versa).&lt;/p&gt;

&lt;p&gt;Understanding and adopting a process excellence mindset helps you leverage the team's collective productivity.&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%2Fiwk1ubf1tcuq8wio2v7x.gif" 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%2Fiwk1ubf1tcuq8wio2v7x.gif" alt="Confused"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sorry for that worded statement 😄&lt;br&gt;
To simplify, ensuring that reviews, deployments, and any collaborative activities involving code don't have significant wait times boosts your productivity immensely!&lt;/p&gt;

&lt;p&gt;The best way to identify high waiting or blocked times in your team is to measure DORA metrics. You can use an open-source tool like &lt;a href="https://github.com/middlewarehq/middleware" rel="noopener noreferrer"&gt;Middleware&lt;/a&gt;, which provides &lt;a href="https://www.middlewarehq.com/blog/what-are-dora-metrics-how-they-can-help-your-software-delivery-process" rel="noopener noreferrer"&gt;DORA metrics&lt;/a&gt; out of the box.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/middlewarehq" rel="noopener noreferrer"&gt;
        middlewarehq
      &lt;/a&gt; / &lt;a href="https://github.com/middlewarehq/middleware" rel="noopener noreferrer"&gt;
        middleware
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ✨ Open-source DORA metrics platform for engineering teams ✨
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
&lt;a href="https://www.middlewarehq.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmiddlewarehq%2Fmiddleware%2Fraw%2Fmain%2Fmedia_files%2Flogo.png" alt="Middleware Logo" width="300px"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Open-source engineering management that unlocks developer potential&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://github.com/middlewarehq/middleware/actions/workflows/build.yml" rel="noopener noreferrer"&gt;&lt;img alt="continuous integration" src="https://camo.githubusercontent.com/d72013fe354cb76bdb62fae188d011c4d1bce7723189bacad6cbde6387cf52e6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6d6964646c657761726568712f6d6964646c65776172652f6275696c642e796d6c3f6272616e63683d6d61696e266c6162656c3d6275696c64267374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
&lt;a href="https://github.com/middlewarehq/middleware/graphs/commit-activity" rel="noopener noreferrer"&gt;&lt;img alt="Commit activity per month" src="https://camo.githubusercontent.com/b694441288287fd6f4c8750f3887fcc6853aef9bfc84ee8a0e1e490a7633639a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f6d2f6d6964646c657761726568712f6d6964646c65776172653f7374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
&lt;a href="https://github.com/middlewarehq/middleware/graphs/contributors" rel="noopener noreferrer"&gt;&lt;img alt="contributors" src="https://camo.githubusercontent.com/15f7e201a0b0e240425157b1a7251f24a91dcd6b6bbec76af4ad66efda00eeba/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732d616e6f6e2f6d6964646c657761726568712f6d6964646c65776172653f636f6c6f723d79656c6c6f77267374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;a href="https://opensource.org/licenses/Apache-2.0" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/44fae73fb8fb80dc9f5673dc4e1d0e57b1ac81da1166a70c8a5ce52bb39ed67f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f617061636865253230322e302d707572706c652e7376673f7374796c653d666f722d7468652d6261646765266c6162656c3d6c6963656e7365" alt="license"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/eab8dfd78113b2679d98f9f33a66e3a157276c68cc4cf3541fa1287f4dddb379/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6d6964646c657761726568712f6d6964646c65776172653f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/eab8dfd78113b2679d98f9f33a66e3a157276c68cc4cf3541fa1287f4dddb379/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6d6964646c657761726568712f6d6964646c65776172653f7374796c653d666f722d7468652d6261646765" alt="Stars"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mhq.link/oss-community" rel="nofollow noopener noreferrer"&gt;Join our Open Source Community&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/middlewarehq/middleware/blob/main/media_files/banner.gif"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmiddlewarehq%2Fmiddleware%2Fraw%2Fmain%2Fmedia_files%2Fbanner.gif" alt="Middleware Opensource"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introduction&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Middleware&lt;/strong&gt; is an open-source tool designed to help engineering leaders measure and analyze the effectiveness of their teams using the &lt;a href="https://dora.dev" rel="nofollow noopener noreferrer"&gt;DORA metrics&lt;/a&gt;. The DORA metrics are a set of &lt;a href="https://dora.dev/guides/dora-metrics-four-keys/" rel="nofollow noopener noreferrer"&gt;four key values&lt;/a&gt; that provide insights into software delivery performance and operational efficiency.&lt;/p&gt;

&lt;p&gt;They are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Frequency&lt;/strong&gt;: The frequency of code deployments to production or an operational environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lead Time for Changes&lt;/strong&gt;: The time it takes for a commit to make it into production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mean Time to Restore&lt;/strong&gt;: The time it takes to restore service after an incident or failure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change Failure Rate&lt;/strong&gt;: The percentage of deployments that result in failures or require remediation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/middlewarehq/middleware#introduction" rel="noopener noreferrer"&gt;Middleware - Open Source&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/middlewarehq/middleware#-quick-start" rel="noopener noreferrer"&gt;Quick Start&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-installing-middleware" rel="noopener noreferrer"&gt;Installing Middleware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-troubleshooting" rel="noopener noreferrer"&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/middlewarehq/middleware#-developer-setup" rel="noopener noreferrer"&gt;Developer Setup&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-using-gitpod" rel="noopener noreferrer"&gt;Using Gitpod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-using-docker" rel="noopener noreferrer"&gt;Using Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-manual-setup" rel="noopener noreferrer"&gt;Manual Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-usage" rel="noopener noreferrer"&gt;Usage&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-how-we-calculate-dora-metrics" rel="noopener noreferrer"&gt;How we Calculate DORA&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-roadmap" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-contributing-guidelines" rel="noopener noreferrer"&gt;Contributing guidelines&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;…&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/middlewarehq/middleware" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;PS: I'm also co-founder of &lt;a href="https://middlewarehq.com" rel="noopener noreferrer"&gt;Middleware&lt;/a&gt; and our mission is to make engineering frictionless for engineers. Do consider giving us a star if you like what we've built!&lt;/p&gt;

&lt;h2&gt;
  
  
  Ship code like a boss!
&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%2Fr2qrf8s8gmb9cx5f8b6f.gif" 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%2Fr2qrf8s8gmb9cx5f8b6f.gif" alt="Boss person"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By adopting these suggestions, you can significantly reduce the time spent revisiting and fixing past work. This will not only enhance your productivity but also ensure that your focus remains on innovating and delivering new features.&lt;/p&gt;

&lt;p&gt;Be productive, not busy! All the best 😊&lt;/p&gt;

</description>
      <category>developer</category>
      <category>productivity</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>Top 5 Mistakes Engineering Managers Do 🤦🏻</title>
      <dc:creator>Dhruv Agarwal</dc:creator>
      <pubDate>Tue, 11 Jun 2024 07:08:44 +0000</pubDate>
      <link>https://forem.com/middleware/top-5-mistakes-engineering-managers-do-2819</link>
      <guid>https://forem.com/middleware/top-5-mistakes-engineering-managers-do-2819</guid>
      <description>&lt;p&gt;Just became a manager or aspire to be one soon? This post might save you a couple of weeks by bringing you insights and learnings from other engineering managers’ mistakes.&lt;/p&gt;

&lt;p&gt;In my past two companies, I’ve had the privilege of leading an engineering team. During this time, I experienced and learnt from the common mistakes that managers tend to make. Believe me, it can drastically hamper the team productivity and growth. When I started Middleware, I was fortunate enough to interact with 100s of engineering leaders and learn from their experiences.&lt;/p&gt;

&lt;p&gt;In this article, I’ll be sharing the top 5 mistakes engineering managers make and their possible solutions.&lt;/p&gt;

&lt;p&gt;Let’s dive right in!&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistake 1: Macro management first, Micro management later
&lt;/h2&gt;

&lt;p&gt;Every manager starts with high trust on their team. Hence, they start off by purely delegating the tasks to the report assuming it’ll be done. However, it is not un-common to get blocked or stuck during execution of the task. In the case where a manager is oblivious to this blockage, they only get to know when the task is on a delay.&lt;/p&gt;

&lt;p&gt;That’s when they panic and start micro managing because now they don’t trust. Of course, this lack of trust does make their people unhappy(even more unhappier than they were happy) leading to burnouts.&lt;/p&gt;

&lt;p&gt;Hence, always..&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Trust, but verify”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa28qzzqk617hn8drz5sw.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%2Fa28qzzqk617hn8drz5sw.png" alt="Team"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What you can instead do is, micro manage first and macro manage later. Here’s how:&lt;/p&gt;

&lt;p&gt;Create a detailed plan with the team&lt;br&gt;
Bring a consensus on a timeline which they believe is right&lt;br&gt;
Now, always follow up on the execution of that plan and be available to unblock them whenever they need you&lt;br&gt;
This makes the discussion objective and constructive than a blameful one and hence fosters more trust and ownership in the team.&lt;/p&gt;
&lt;h2&gt;
  
  
  Mistake 2: Never say “No”
&lt;/h2&gt;

&lt;p&gt;Said yes to ad hoc tasks every sprint and now you can’t seem to complete the spilled tasks?&lt;/p&gt;

&lt;p&gt;This is what you call a negative spiral. I’ll give you an example of our team’s early days.&lt;/p&gt;

&lt;p&gt;A few sprints back, my team was working constantly while still spilling their planned work. They were starting to feel burnt out and that’s when I observed the sprint flow below.&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%2Fdf6kh78qsxv9iomplgf8.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%2Fdf6kh78qsxv9iomplgf8.png" alt="Source: MiddlewareHQ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our ad-hoc task % was rising sprint on sprint and that made our team de-focus from the planned work, resulting into spillage and hence missing the product delivery targets.&lt;/p&gt;

&lt;p&gt;Solution: We put a threshold of 20% on the ad-hoc tasks. This meant, we dedicated only 20% of our effort towards ad-hoc. Anything beyond 20% was alarmed(by Middleware) and said “No” to those tasks. This reduced our planned task spillage and also team burnout. A tool like &lt;a href="https://github.com/middlewarehq/middleware" rel="noopener noreferrer"&gt;Middleware&lt;/a&gt; can help track this&lt;/p&gt;

&lt;p&gt;The result of it? Our product delivery became more predictable.&lt;/p&gt;

&lt;p&gt;In fact, in the sprints where there was no ad-hoc work, we started shipping tech level enhancements more!&lt;/p&gt;

&lt;p&gt;In all, I’m glad we started saying “no” beyond our threshold. It’s simply because it was not aligned with our goal.&lt;/p&gt;
&lt;h2&gt;
  
  
  Mistake 3: Become the most important person in the room
&lt;/h2&gt;

&lt;p&gt;If you think that you are the most important person in the room, it’s time to flip your perspective.&lt;/p&gt;

&lt;p&gt;Instead of being part of every discussion, empower the team to run without you. It not only enhances productivity of each team member, but boosts their morale too! As a bonus, you also get time on your hands to make other vital decisions.&lt;/p&gt;

&lt;p&gt;Now, how to relinquish control when all you have been doing is ensuring that you are part of each and every discussion?&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%2F6x4mom03gq16dk5y0t2k.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%2F6x4mom03gq16dk5y0t2k.png" alt="Collaboration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s talk about this with the help of a common example:&lt;/p&gt;

&lt;p&gt;The majority of meetings on your calendar are product discussions with the team where you also need to give approval on what is supposed to go as a part of development.&lt;/p&gt;

&lt;p&gt;Till now, you were conducting meetings to give your context. Now what you can do is to just pass over a note of context and expected outcomes to the concerned team members.&lt;/p&gt;

&lt;p&gt;To prevent another open discussion, the devs can use technical documents to achieve success.&lt;/p&gt;

&lt;p&gt;Lastly, in case there is any context missing, you can write it in the same doc itself. Easy-peasy, right?&lt;/p&gt;
&lt;h2&gt;
  
  
  Mistake 4: Expect the product managers to give perfectly written tickets
&lt;/h2&gt;

&lt;p&gt;Chances are, you must have faced these situations as an engineering manager -&lt;/p&gt;

&lt;p&gt;“The team is blocked because the stories didn’t have the details”&lt;/p&gt;

&lt;p&gt;“The stories have the edge case missing, please revert on those”&lt;/p&gt;

&lt;p&gt;These scenarios block product delivery.&lt;/p&gt;

&lt;p&gt;To avoid the above situations from occurring, an engineering manager should not directly pass the user story written by the product manager to the engineer.&lt;/p&gt;

&lt;p&gt;Instead, you should sit with the product manager and refine these user stories to add engineering details like constraints of scale and the expected deliverables. You should also break down the user story into atomic deliverables.&lt;/p&gt;

&lt;p&gt;I call it the “pre-planning” stage.&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%2Fjpnsuxmoziqm2gj97q3z.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%2Fjpnsuxmoziqm2gj97q3z.png" alt="Pre-planning between PM and EM"&gt;&lt;/a&gt;&lt;br&gt;
After this, the developer gets the complete context and they can then act upon these atomic deliverables.&lt;/p&gt;

&lt;p&gt;The advantage of this entire practice? It saves tons of back and forth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip:&lt;/strong&gt; If you’re able to break down the user story into independent tasks, you can also get them built in parallel. Doing so will decrease your time for delivery.&lt;/p&gt;
&lt;h2&gt;
  
  
  Mistake 5: Have different definitions of “Done”
&lt;/h2&gt;

&lt;p&gt;Let’s admit it — We all have faced this at some point of time in our work journeys.&lt;/p&gt;

&lt;p&gt;Having different definitions of “Done” can lead to no or delayed delivery to the actual customer. Hence, it becomes more important than ever to ensure everyone you are working with is on the same page with what “Done” actually means!&lt;/p&gt;

&lt;p&gt;“Done” means released to the customer. That’s it, that’s the definition it should have.&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%2Fw9ilep81c1dny7wa2a6o.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%2Fw9ilep81c1dny7wa2a6o.png" alt="Checklist"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; As you know, multiple team members are involved on one particular feature. What you can do is, create a primary owner for the feature. This means, this person will communicate about the feature’s progress on behalf of the entire group. The benefit of it all?&lt;/p&gt;

&lt;p&gt;Apart from fostering a sense of ownership among your team members, it will also highlight the visibility of your team’s efforts.&lt;/p&gt;
&lt;h2&gt;
  
  
  Bonus Mistake: Only focus on tickets and not on development pipeline
&lt;/h2&gt;

&lt;p&gt;A lot of managers end up only doing general management focusing only on tickets, making excel sheets and manual follow ups with the team. Engineering is one of the special teams whose most operational work is digital and most of the times the productivity gains are hidden in the simplest of things - PR review delays/rework, deployment pipeline being slow or errors pushing back our team from working on new stuff - Essentially key stages of shipping software once planning is done.&lt;/p&gt;

&lt;p&gt;As an engineering manager, you can do much better! You can take care of the small things like these processes and the big things(delivery) will fall into place. You can use a tool like Middleware for measuring the pipeline improvements for your team using DORA metrics!&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/middlewarehq" rel="noopener noreferrer"&gt;
        middlewarehq
      &lt;/a&gt; / &lt;a href="https://github.com/middlewarehq/middleware" rel="noopener noreferrer"&gt;
        middleware
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ✨ Open-source DORA metrics platform for engineering teams ✨
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
&lt;a href="https://www.middlewarehq.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmiddlewarehq%2Fmiddleware%2Fraw%2Fmain%2Fmedia_files%2Flogo.png" alt="Middleware Logo" width="300px"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Open-source engineering management that unlocks developer potential&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://github.com/middlewarehq/middleware/actions/workflows/build.yml" rel="noopener noreferrer"&gt;&lt;img alt="continuous integration" src="https://camo.githubusercontent.com/d72013fe354cb76bdb62fae188d011c4d1bce7723189bacad6cbde6387cf52e6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6d6964646c657761726568712f6d6964646c65776172652f6275696c642e796d6c3f6272616e63683d6d61696e266c6162656c3d6275696c64267374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
&lt;a href="https://github.com/middlewarehq/middleware/graphs/commit-activity" rel="noopener noreferrer"&gt;&lt;img alt="Commit activity per month" src="https://camo.githubusercontent.com/b694441288287fd6f4c8750f3887fcc6853aef9bfc84ee8a0e1e490a7633639a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f6d2f6d6964646c657761726568712f6d6964646c65776172653f7374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
&lt;a href="https://github.com/middlewarehq/middleware/graphs/contributors" rel="noopener noreferrer"&gt;&lt;img alt="contributors" src="https://camo.githubusercontent.com/15f7e201a0b0e240425157b1a7251f24a91dcd6b6bbec76af4ad66efda00eeba/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732d616e6f6e2f6d6964646c657761726568712f6d6964646c65776172653f636f6c6f723d79656c6c6f77267374796c653d666f722d7468652d6261646765"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;a href="https://opensource.org/licenses/Apache-2.0" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/44fae73fb8fb80dc9f5673dc4e1d0e57b1ac81da1166a70c8a5ce52bb39ed67f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f617061636865253230322e302d707572706c652e7376673f7374796c653d666f722d7468652d6261646765266c6162656c3d6c6963656e7365" alt="license"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/eab8dfd78113b2679d98f9f33a66e3a157276c68cc4cf3541fa1287f4dddb379/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6d6964646c657761726568712f6d6964646c65776172653f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/eab8dfd78113b2679d98f9f33a66e3a157276c68cc4cf3541fa1287f4dddb379/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6d6964646c657761726568712f6d6964646c65776172653f7374796c653d666f722d7468652d6261646765" alt="Stars"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mhq.link/oss-community" rel="nofollow noopener noreferrer"&gt;Join our Open Source Community&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/middlewarehq/middleware/blob/main/media_files/banner.gif"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmiddlewarehq%2Fmiddleware%2Fraw%2Fmain%2Fmedia_files%2Fbanner.gif" alt="Middleware Opensource"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introduction&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Middleware&lt;/strong&gt; is an open-source tool designed to help engineering leaders measure and analyze the effectiveness of their teams using the &lt;a href="https://dora.dev" rel="nofollow noopener noreferrer"&gt;DORA metrics&lt;/a&gt;. The DORA metrics are a set of &lt;a href="https://dora.dev/guides/dora-metrics-four-keys/" rel="nofollow noopener noreferrer"&gt;four key values&lt;/a&gt; that provide insights into software delivery performance and operational efficiency.&lt;/p&gt;

&lt;p&gt;They are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Frequency&lt;/strong&gt;: The frequency of code deployments to production or an operational environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lead Time for Changes&lt;/strong&gt;: The time it takes for a commit to make it into production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mean Time to Restore&lt;/strong&gt;: The time it takes to restore service after an incident or failure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change Failure Rate&lt;/strong&gt;: The percentage of deployments that result in failures or require remediation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/middlewarehq/middleware#introduction" rel="noopener noreferrer"&gt;Middleware - Open Source&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/middlewarehq/middleware#-quick-start" rel="noopener noreferrer"&gt;Quick Start&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-installing-middleware" rel="noopener noreferrer"&gt;Installing Middleware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-troubleshooting" rel="noopener noreferrer"&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/middlewarehq/middleware#-developer-setup" rel="noopener noreferrer"&gt;Developer Setup&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-using-gitpod" rel="noopener noreferrer"&gt;Using Gitpod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-using-docker" rel="noopener noreferrer"&gt;Using Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-manual-setup" rel="noopener noreferrer"&gt;Manual Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-usage" rel="noopener noreferrer"&gt;Usage&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#-how-we-calculate-dora-metrics" rel="noopener noreferrer"&gt;How we Calculate DORA&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-roadmap" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/middlewarehq/middleware#%EF%B8%8F-contributing-guidelines" rel="noopener noreferrer"&gt;Contributing guidelines&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;…&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/middlewarehq/middleware" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Say goodbye to manual follow ups and never ending RCAs, welcome a process excellence mindset which will help you add method to the madness 😄&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning from the mistakes!
&lt;/h2&gt;

&lt;p&gt;Since there is no silver bullet to engineering management, every manager has to pave their own path. However, it helps to learn from the common ‘eeks’ and ‘oops’ of the people who have walked this path before you.&lt;/p&gt;

&lt;p&gt;Hope you recognised some of the mistakes you would have encountered, let me know in the comments 💬&lt;/p&gt;

&lt;p&gt;If you’re interested to know the next 5 mistakes, comment on this story and as we hit 5 comments, I’ll write the next 5 mistakes and their remedies ✨&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>management</category>
      <category>growth</category>
      <category>leadership</category>
    </item>
    <item>
      <title>An open source Spotify-like yearly recap using your Github contributions</title>
      <dc:creator>Dhruv Agarwal</dc:creator>
      <pubDate>Tue, 12 Dec 2023 19:49:51 +0000</pubDate>
      <link>https://forem.com/middleware/an-open-source-spotify-like-yearly-recap-using-your-github-contributions-43p</link>
      <guid>https://forem.com/middleware/an-open-source-spotify-like-yearly-recap-using-your-github-contributions-43p</guid>
      <description>&lt;p&gt;Hey there, Dev Community!&lt;/p&gt;

&lt;p&gt;You know that feeling when Spotify drops your annual Wrapped? Well, imagine that, but for your GitHub grind. We've crafted &lt;a href="https://unwrapped.dev/"&gt;Unwrapped&lt;/a&gt;, an open-source tool that takes your year of commits, pull requests, and code adventures and transforms it into a neat, personalized recap with pop references.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the Lowdown?
&lt;/h2&gt;

&lt;p&gt;Think of it as a summary card highlighting your coding journey. It compiles your GitHub activity - from commits and code stats to your reviews. It's like a snapshot of your year in code!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It's Worth It:
&lt;/h2&gt;

&lt;p&gt;For us devs on Dev.to, this tool is a bit more than just numbers. It's a pat on the back for your hard work, a reminder of your wins, and a way to celebrate your growth. Plus, who wouldn't want to share a slick summary card with the coding crew?&lt;/p&gt;

&lt;h2&gt;
  
  
  Take a Peek:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faltkk8atqyx6cy5676nb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faltkk8atqyx6cy5676nb.png" alt="Carousel of cards on unwrapped.dev" width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Join the Collaboration:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/middlewarehq/unwrapped"&gt;This tool&lt;/a&gt; is a team effort! It's all about open-source love and community collaboration. Jump in, help us refine it, and let's make this tool even better together!&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping It Up:
&lt;/h2&gt;

&lt;p&gt;Ready to revisit your coding journey? Our GitHub-inspired recap tool is your backstage pass! Relive your milestones, acknowledge your progress, and why not, show off that recap with your fellow developers.&lt;/p&gt;

&lt;p&gt;Cheers to your amazing dev journey in 2023. Hoping you like reflecting on it using &lt;a href="https://unwrapped.dev"&gt;Unwrapped&lt;/a&gt;. Do share your feedback, it matters!&lt;/p&gt;

&lt;p&gt;If you liked using the tool, you can also look around and contribute to our &lt;a href="https://github.com/middlewarehq/unwrapped"&gt;open source repo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>devjournal</category>
      <category>tooling</category>
      <category>developers</category>
    </item>
  </channel>
</rss>
