<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Pulkit's Substack]]></title><description><![CDATA[My personal Substack]]></description><link>https://pulkitchaturvedi.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!j8Vv!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d34bf7-862d-46b7-8aa2-fbf4c442eaf6_144x144.png</url><title>Pulkit&apos;s Substack</title><link>https://pulkitchaturvedi.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sat, 16 May 2026 10:58:12 GMT</lastBuildDate><atom:link href="https://pulkitchaturvedi.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Pulkit Chaturvedi]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[pulkitchaturvedi@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[pulkitchaturvedi@substack.com]]></itunes:email><itunes:name><![CDATA[Pulkit Chaturvedi]]></itunes:name></itunes:owner><itunes:author><![CDATA[Pulkit Chaturvedi]]></itunes:author><googleplay:owner><![CDATA[pulkitchaturvedi@substack.com]]></googleplay:owner><googleplay:email><![CDATA[pulkitchaturvedi@substack.com]]></googleplay:email><googleplay:author><![CDATA[Pulkit Chaturvedi]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Stop Chasing Individual Failures: The Case for Flaky Test Grouping]]></title><description><![CDATA[Why a dedicated dashboard &#8212; not your CI tool &#8212; is what your team actually needs]]></description><link>https://pulkitchaturvedi.substack.com/p/stop-chasing-individual-failures</link><guid isPermaLink="false">https://pulkitchaturvedi.substack.com/p/stop-chasing-individual-failures</guid><dc:creator><![CDATA[Pulkit Chaturvedi]]></dc:creator><pubDate>Thu, 26 Feb 2026 22:50:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Oqb8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Flaky tests consume an enormous amount of a team&#8217;s time. More than most engineering leads realize, and more than most post-mortems ever capture.</p></blockquote><p>Let me share something that happened in our team. One engineer was deep into debugging a failing test &#8212; two days in, context fully loaded, convinced it was an environment issue. Meanwhile, a different engineer on the same team was debugging a completely different test. Different name, different module, different stack trace on the surface. Two days of parallel work. And then, almost by accident, they compared notes &#8212; and realized they had been fixing the exact same underlying issue all along.</p><p>Two engineers. Two days each. Four days of engineering time, completely duplicated.</p><p>That moment sparked a question that stayed with me: <em>what if I could group flaky test failures together?</em> If those two tests had been clustered and surfaced as a single root cause, one engineer fixes it once &#8212; and the other moves on to something else entirely.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pulkitchaturvedi.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Pulkit's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>But to get there, you first have to tackle the problem at its source: flaky tests and bad tests. They&#8217;re not the same thing, they don&#8217;t have the same fix, and yet they both live in the same noisy CI output where nobody can tell them apart.</p><p>And here&#8217;s the insight that really motivated this work: you don&#8217;t need to fix all of them. Not even close.</p><p>This is where the <strong>Pareto Principle</strong> comes in. In almost every test suite we&#8217;ve analysed, roughly <strong>20% of issues are responsible for 80% of the noise</strong> &#8212; the blocked builds, the re-runs, the wasted investigation hours. A small number of high-impact root causes, repeating themselves across dozens of test failures that look unrelated on the surface. Fix those, and the majority of your CI pain disappears.</p><p>The problem is that without grouping, you can&#8217;t see the 20%. Every failure looks equally important &#8212; or equally ignorable. You end up either chasing everything and burning out, or ignoring everything and shipping with your fingers crossed.</p><p></p><p>A <strong>Flaky Test Analysis Dashboard</strong> changes that equation. It groups failures by root cause, ranks them by impact, and hands your team a prioritised list: fix these three clusters first, and you&#8217;ve addressed 70% of your flakiness problem. The rest can wait.</p><p>Every organization has some kind of dashboard to track their test results. And that&#8217;s genuinely important &#8212; knowing whether your suite is green or red is table stakes for any engineering team that takes quality seriously. But a generic test results view doesn&#8217;t solve this. It shows you that something failed. It doesn&#8217;t tell you that three failing tests are the same problem, or that two engineers are currently solving the same issue from different angles.</p><p>What if instead you had an intelligent dashboard built specifically to surface, group, and prioritize these failures? One that tells you <em>why</em> something failed, <em>how often</em>, and <em>which ones to fix first</em> &#8212; before your team wastes another four days?</p><p>In this article, I want to make the case for exactly that: a <strong>Flaky Test Analysis Dashboard</strong> &#8212; what it is, how it works, and why it might be one of the highest-leverage investments your engineering team can make.</p><div><hr></div><h2>The Six Root Causes a Dashboard Must Recognize</h2><p>When you look at test failure data at scale, failures don&#8217;t distribute randomly across root causes. Analysis of 60-day test result datasets consistently shows the same pattern: a small number of root cause categories account for the overwhelming majority of failures. Here&#8217;s the taxonomy worth building your dashboard around:</p><p><strong>1. Timing and Race Conditions (~30% of failures)</strong> Tests that assume operations complete in a fixed time, or that multiple threads/processes produce results in a predictable order. The symptom: passes locally, fails in CI under load; or fails intermittently with timeout errors and async state mismatches. The fix is almost always explicit waits, proper synchronization primitives, or test isolation.</p><p><strong>2. Shared State and Test Pollution (~25% of failures)</strong> Tests that leave behind database records, modified config, or in-memory state that bleeds into subsequent test runs. The symptom: tests pass in isolation but fail when run as part of a suite, or fail in a specific sequence. The failure message often looks like a data assertion error on something the test under examination never touched.</p><p><strong>3. Resource Contention (~15% of failures)</strong> CPU/memory pressure, file descriptor exhaustion, or port conflicts &#8212; typically during parallel test execution. The symptom: failures that correlate with build machine load or time of day, and disappear when tests are run serially. Appears frequently in integration test suites that spin up services or containers.</p><p><strong>4. Environment and Infrastructure Sensitivity (~15% of failures)</strong> Tests that make real network calls, depend on third-party APIs, or assume specific environment configuration. The symptom: passes in one environment, fails in another; correlated with infrastructure changes or external service degradation. These are arguably the easiest to identify and the hardest to fix cleanly, because the fix requires either proper mocking or explicit environment contracts.</p><p><strong>5. Resource Cleanup Failures (~10% of failures)</strong> Tests that fail to tear down what they set up &#8212; open connections, temp files, spawned processes, database transactions. Similar to shared state but distinct in that the issue is missing teardown rather than missing isolation. Particularly common in test suites that evolved organically without a strict setup/teardown discipline.</p><p><strong>6. Bad Assertions and Poorly Written Tests (~10% of failures)</strong> This is the category that&#8217;s hardest to see without a dashboard &#8212; because these tests often pass more than they fail, giving a false sense of health. Symptoms include: tests that assert on irrelevant fields, tests whose failure message doesn&#8217;t match the code change that triggered them, tests with no assertions at all (always green), or tests that fail consistently but are dismissed as &#8220;known flaky&#8221; when they&#8217;re actually catching real issues with incorrect assertions. A bad test isn&#8217;t just unreliable &#8212; it&#8217;s misleading.</p><div><hr></div><h2>Why Grouping Failures is the Core Problem</h2><p>Individual test failures are low-information events. The failure of <code>CheckoutServiceTest::testPaymentTimeout</code> at 14:32 on a Tuesday tells you almost nothing on its own. But when you see that this test, <code>OrderServiceTest::testInventoryLock</code>, and <code>PaymentGatewayTest::testConcurrentRequests</code> are all failing with variations of the same timeout error across the same time window and the same builds &#8212; that&#8217;s a pattern. That&#8217;s a race condition in your payment processing layer. That&#8217;s one fix, not three.</p><p>Without grouping, your team chases 30 individual failures. With grouping, they fix 4 root causes. This is the fundamental value proposition of the dashboard, and it&#8217;s worth being explicit about the mechanics.</p><h3>How Clustering Works</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LlAj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LlAj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic 424w, https://substackcdn.com/image/fetch/$s_!LlAj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic 848w, https://substackcdn.com/image/fetch/$s_!LlAj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic 1272w, https://substackcdn.com/image/fetch/$s_!LlAj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LlAj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic" width="1456" height="778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:778,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88715,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pulkitchaturvedi.substack.com/i/189303800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LlAj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic 424w, https://substackcdn.com/image/fetch/$s_!LlAj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic 848w, https://substackcdn.com/image/fetch/$s_!LlAj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic 1272w, https://substackcdn.com/image/fetch/$s_!LlAj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c185fd6-877e-4e56-bb4f-464ad1eeb215_1700x908.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A well-implemented failure grouping system uses a <strong>hybrid approach</strong> &#8212; not pure machine learning, not pure rule-based logic, but both working together.</p><p><strong>Similarity-based clustering</strong> uses algorithms like HDBSCAN (Hierarchical Density-Based Spatial Clustering) with custom distance metrics applied to:</p><ul><li><p>Stack trace similarity &#8212; two failures with 80% overlapping stack frames are almost certainly the same issue</p></li><li><p>Error message tokenization &#8212; normalized error messages compared using token-level similarity (TF-IDF or embedding-based)</p></li><li><p>Test metadata &#8212; suite, module, and ownership signals that help prevent false groupings across unrelated components</p></li></ul><p>The output is a set of clusters where each cluster represents a likely common root cause. No human involvement required to form the initial groups.</p><p><strong>Rule-based classification</strong> layers on top to label clusters by root cause category. Known patterns &#8212; &#8220;NullPointerException in @Before method&#8221; &#8594; shared state; &#8220;SocketTimeoutException in service call&#8221; &#8594; environment sensitivity; &#8220;AssertionError on field X which test never sets&#8221; &#8594; bad assertion &#8212; get recognized immediately and routed to the right remediation playbook.</p><p><strong>Feature extraction</strong> that feeds both layers:</p><ul><li><p>Test name and file path parsing (ownership signals, suite classification)</p></li><li><p>Failure context: which branch, which environment, what time of day</p></li><li><p>Historical pass/fail ratio per test (distinguishes newly flaky from chronically flaky)</p></li><li><p>Correlation with deployments and infrastructure changes</p></li></ul><p>The practical result: ~80% of flaky test failures cluster into patterns that share stack traces and error messages. The top 25 failure clusters typically account for 70% of all test flakiness. You don&#8217;t need to fix everything. You need to identify and fix the right things.</p><h3>The Impact Score</h3><p>Clustering tells you what&#8217;s related. The impact score tells you what to fix first.</p><p>A well-designed impact score is a composite metric:</p><pre><code><code>Impact Score = (Failure frequency &#215; 0.3)
             + (Unique PRs blocked &#215; 0.3)
             + (Estimated dev time lost &#215; 0.25)
             + (Recency weight &#215; 0.15)
</code></code></pre><p>This surfaces clusters that are both frequent and high-cost &#8212; not just the ones that fail the most. A test that fails 50 times on a rarely-used branch matters less than one that fails 10 times and blocks your main branch merge queue.</p><div><hr></div><h2>What the Dashboard Shows</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Oqb8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Oqb8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png 424w, https://substackcdn.com/image/fetch/$s_!Oqb8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png 848w, https://substackcdn.com/image/fetch/$s_!Oqb8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png 1272w, https://substackcdn.com/image/fetch/$s_!Oqb8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Oqb8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png" width="1427" height="903" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:903,&quot;width&quot;:1427,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Oqb8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png 424w, https://substackcdn.com/image/fetch/$s_!Oqb8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png 848w, https://substackcdn.com/image/fetch/$s_!Oqb8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png 1272w, https://substackcdn.com/image/fetch/$s_!Oqb8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea467626-3d88-4137-afc9-00d8a3fa8c89_1427x903.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The dashboard translates all of this into four interconnected views:</p><p><strong>Home &#8212; Cluster List:</strong> The prioritized view of all active failure clusters, sorted by impact score by default. Each row shows the cluster name, root cause category badge (Timing / State / Environment / Resource / Bad Test / Other), flake rate with trend indicator, failures in the last 7 days, number of affected tests, and current status in the cluster lifecycle. Filters for time range, root cause category, branch, suite, and status. This is the view your on-call engineer opens on Monday morning.</p><p><strong>Cluster Detail:</strong> Clicking any cluster opens the full picture. A trend chart showing failures over time with deployment annotations. The list of all affected tests with their individual flake rates. Sample failure logs with full stack traces and build context. Pattern analysis &#8212; which branches, environments, and hours of day see this failure most. And critically, the root cause recommendation: &#8220;This cluster shows characteristics of shared state pollution. Check @Before setup methods and database rollback configuration.&#8221; Remediation history, linked tickets, and investigation notes complete the picture.</p><p><strong>Individual Test View:</strong> Every test in the suite gets its own view &#8212; full execution history (pass/fail over time), associated clusters, flakiness score and trend, and quick actions: Quarantine, Skip, or View in codebase. This is where you investigate a specific test someone flagged without needing to navigate through clusters first.</p><p><strong>Analytics &#8212; Test Health:</strong> The macro view across the entire suite. Green build percentage trending over time. Flakiness by root cause category (so you can see if &#8220;bad assertions&#8221; is growing as a share of failures &#8212; a sign of test quality degradation, not just reliability drift). New vs. fixed clusters per sprint. CI/CD cost impact. Remediation velocity: how long does it take your team to go from &#8220;identified&#8221; to &#8220;fixed&#8221; for each root cause type?</p><p>Pros of the dashboard: </p><ul><li><p><strong>Faster Triage</strong>: Automated grouping eliminates manual pattern detection</p></li><li><p><strong>Reduced Noise</strong>: Focus on root causes instead of individual test failures</p></li><li><p><strong>Better Prioritization</strong>: Data-driven decisions on which issues to fix first</p></li><li><p><strong>Improved Efficiency</strong>: Eliminate redundant debugging efforts</p></li><li><p><strong>Increased Stability</strong>: Address systemic issues rather than symptoms</p></li></ul><div><hr></div><h2>So, Is This Worth It For Your Team?</h2><p>If you&#8217;ve read this far, you&#8217;ve probably already mentally mapped this to your own CI pipeline. You know which tests get dismissed every sprint. You know which failures your team re-runs without investigating. You know the engineers who&#8217;ve quietly stopped trusting the test suite.</p><p>The question isn&#8217;t really whether a Flaky Test Analysis Dashboard would help &#8212; it almost certainly would. The question is whether your team is ready to treat flaky tests as a first-class engineering problem rather than background noise.</p><p></p><p><em><strong>A starting point, not a finish line</strong></em></p><p>The dashboard I&#8217;ve described in this article &#8212; with its clustering logic, confidence scoring, trend tracking, and platform-specific root cause detection &#8212; took several iterations to get right. </p><p>But I wanted to share where it all started.</p><p>The HTML prototype below is a standalone, zero-dependency version that captures the core idea: stop looking at test failures one by one, and start looking at them as patterns. Load your CSV, and within seconds you get AI-grouped clusters, trend direction, and the root causes most worth your time.</p><p>Every team&#8217;s failure data looks different. Your stack traces, error codes, and flakiness patterns will push you to adapt the grouping logic, tune the confidence thresholds, and build in context that&#8217;s specific to your stack. That&#8217;s the point &#8212; this is meant to be a thinking tool, not a drop-in solution.</p><p><a href="https://github.com/alwayspulkit/FlakeyTestDashboard">https://github.com/alwayspulkit/FlakeyTestDashboard </a></p><div><hr></div><p><em>Found this useful? I write about engineering productivity, quality systems, and developer tooling. Subscribe for more.</em></p><div><hr></div><p><strong>Tags:</strong> #SoftwareEngineering #TestAutomation #QualityEngineering #DeveloperExperience #CICD #EngineeringLeadership #TestFlakiness</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pulkitchaturvedi.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Pulkit's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Career Shortcut Nobody Talks About: Solving Invisible Problems]]></title><description><![CDATA[Why doing your job well isn't enough anymore &#8212; and what actually creates career momentum &#8220;OKRs keep you employed. Solving real problems gets you noticed, trusted, and promoted.&#8221;]]></description><link>https://pulkitchaturvedi.substack.com/p/the-career-shortcut-nobody-talks</link><guid isPermaLink="false">https://pulkitchaturvedi.substack.com/p/the-career-shortcut-nobody-talks</guid><dc:creator><![CDATA[Pulkit Chaturvedi]]></dc:creator><pubDate>Thu, 29 Jan 2026 07:42:18 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/87c1f232-cabc-4626-8456-c913fb53b240_800x1000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You are crushing your sprint goals. Your tickets are moving to &#8220;Done&#8221; faster than ever. Your velocity metrics look great.</p><p>So why aren&#8217;t you getting promoted?</p><p>Here&#8217;s the uncomfortable truth: Completing assigned work well is table stakes, not a differentiator.</p><p><strong>In this article, I will share how to spot, frame, and solve problems that actually move your team and organisation forward.</strong></p><p></p><h4><strong>&#10060; What Most People Do</strong></h4><p>Walk into any tech company and you&#8217;ll see the same pattern:</p><ul><li><p>Engineers work only on assigned tickets</p></li><li><p>They focus on velocity metrics, not business impact</p></li><li><p>They assume: &#8220;If I deliver my features on time, I&#8217;ll get promoted&#8221;</p></li></ul><p>This is the career equivalent of running on a treadmill. Lots of motion, zero progress.</p><h4><strong>&#9888;&#65039; The Brutal Reality</strong></h4><p>Here&#8217;s what your manager actually thinks when you complete your assigned work well:</p><p><strong>&#8220;That&#8217;s expected behaviour.&#8221;</strong></p><p>Not impressive. Not promotion-worthy. Just baseline competence.</p><p>Your Jira tickets getting moved to &#8220;Done&#8221; doesn&#8217;t differentiate you from the dozens of other engineers doing the exact same thing. You&#8217;re optimizing for the wrong metrics.</p><p></p><h4>&#128640; What Actually Makes You Stand Out</h4><p>Real career growth happens when you shift from task completion to problem ownership. Here&#8217;s the framework that changes everything:</p><p><strong>&#11088; Impact = Solving problems that:</strong></p><ul><li><p>Affect multiple people or teams</p></li><li><p>Waste significant time or money</p></li><li><p>Creates business risk</p></li><li><p>Are discussed in frustration but not owned by anyone</p></li></ul><p>That last point is pure gold: <strong>&#8220;The problems everyone complains about but nobody owns &#8212; those are career opportunities.&#8221;</strong></p><p>While everyone else is heads-down in their sprint backlog, you&#8217;re identifying the inefficiencies that actually matter to the business.</p><h4>1. Identify a &#8220;Real Problem&#8221; </h4><p>Stop waiting for problems to be assigned to you. Start listening for the signals that are hiding in plain sight:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6Q5z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6Q5z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png 424w, https://substackcdn.com/image/fetch/$s_!6Q5z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png 848w, https://substackcdn.com/image/fetch/$s_!6Q5z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png 1272w, https://substackcdn.com/image/fetch/$s_!6Q5z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6Q5z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png" width="724" height="228.3644859813084" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:1712,&quot;resizeWidth&quot;:724,&quot;bytes&quot;:172863,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pulkitchaturvedi.substack.com/i/185951596?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58ffd50-cf60-414f-a26d-6c026550b4d7_1802x540.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!6Q5z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png 424w, https://substackcdn.com/image/fetch/$s_!6Q5z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png 848w, https://substackcdn.com/image/fetch/$s_!6Q5z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png 1272w, https://substackcdn.com/image/fetch/$s_!6Q5z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5114a407-49a1-4b1d-8c3b-e6cf32abf999_1712x540.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>&#8220;When you write, you are feeding your nervous system&#8221; </p><p><strong>&#11088; </strong>Golden rule - Track your daily activities and challenges </p><ul><li><p><strong>Notice patterns</strong> others miss</p></li><li><p><strong>Spot inefficiencies</strong> hiding in routine</p></li><li><p><strong>Clarify fuzzy thinking</strong> into actionable ideas</p></li><li><p><strong>Convert frustration</strong> into structured solutions</p></li></ul><p><strong>Daily reflection prompts that create impact projects:</strong></p><ul><li><p>What slowed me down today?</p></li><li><p>What frustrated the team this week?</p></li><li><p>What problems keep repeating?</p></li><li><p>What manual process could be automated or eliminated?</p></li></ul><p>Over time, these observations become your pipeline of high-impact initiatives.</p><p>Another habit that sharpens your problem radar is consistently <strong>reading high&#8209;quality engineering and tech blogs</strong>. They expose you to how other teams solve real problems at scale and give you language and patterns you can reuse in your own context.</p><h4>2. Overcoming the Imposter Syndrome Trap</h4><p>I know what you&#8217;re thinking:</p><ul><li><p>&#8220;I&#8217;m not senior enough to suggest this&#8221;</p></li><li><p>&#8220;What if it&#8217;s a stupid idea?&#8221;</p></li><li><p>&#8220;Someone smarter must have already considered this&#8221;</p></li></ul><p>This is a very common pattern, but if you want to grow fast, you must learn to push through it.</p><p>Here&#8217;s the truth that breaks this mental trap:</p><p><strong>Seniority doesn&#8217;t make ideas valuable. Problem awareness does.</strong></p><p>Junior engineers often have the clearest view of inefficiencies because they&#8217;re not yet blind to the &#8220;way things have always been done.&#8221;</p><p>When you spot a problem, here&#8217;s your action plan:</p><ol><li><p><strong>Validate before building</strong> &#8212; don&#8217;t build in isolation.</p></li><li><p><strong>Ask your manager</strong>: &#8220;I noticed X is causing delays. I have some ideas to improve it. Is this worth exploring?&#8221;</p></li><li><p><strong>Get a sanity check</strong> from a mentor: &#8220;Am I thinking about this the right way? What am I missing?&#8221;</p></li></ol><p>This shows strategic thinking and maturity, not incompetence.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oQYt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oQYt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png 424w, https://substackcdn.com/image/fetch/$s_!oQYt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png 848w, https://substackcdn.com/image/fetch/$s_!oQYt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png 1272w, https://substackcdn.com/image/fetch/$s_!oQYt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oQYt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png" width="500" height="474.03314917127074" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:858,&quot;width&quot;:905,&quot;resizeWidth&quot;:500,&quot;bytes&quot;:1295891,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pulkitchaturvedi.substack.com/i/185951596?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaec9b71-12ee-491e-91e6-be93fb31ed60_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!oQYt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png 424w, https://substackcdn.com/image/fetch/$s_!oQYt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png 848w, https://substackcdn.com/image/fetch/$s_!oQYt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png 1272w, https://substackcdn.com/image/fetch/$s_!oQYt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52c7953e-6ef1-4970-a2cb-0b0cbfbaedb4_905x858.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>3. Use AI to ideate and solve problems</h4><p>Here&#8217;s something most people haven&#8217;t realised yet: AI fundamentally shifted what makes engineers valuable.</p><p><strong>Before:</strong></p><ul><li><p>Writing code = rare, valuable skill</p></li><li><p>Senior engineers = those who could build complex systems</p></li></ul><p><strong>Now:</strong></p><ul><li><p>Writing code = AI-assisted, commoditized</p></li><li><p><strong>Problem framing = </strong>the new rare skill</p></li></ul><p>The value has shifted from &#8220;who can build fastest&#8221; to &#8220;who can define the right thing to build.&#8221; Start using AI to explore solution spaces, generate options, and stress&#8209;test your thinking &#8212; not just to write code faster.</p><p>That&#8217;s leadership-level thinking. And it&#8217;s available to engineers at every level.</p><h4><strong>4. Take ownership</strong></h4><p>Here&#8217;s where most people fail. They spot a problem, suggest a solution... then move on to their next ticket.</p><p><em>High-impact engineers do something different. They <strong>own the entire journey</strong> from problem identification to measurable improvement.</em></p><p><strong>The Ownership Loop:</strong></p><ol><li><p><strong>Identify</strong> the real problem (not just symptoms)</p></li><li><p><strong>Propose </strong>a specific solution (write an RFC or detailed proposal)</p></li><li><p><strong>Align</strong> stakeholders on the approach</p></li><li><p><strong>Build</strong> a small prototype or proof-of-concept</p></li><li><p><strong>Measure</strong> the actual improvement</p></li><li><p><strong>Share</strong> results and lessons learned</p></li></ol><p>This transforms you from task executor &#8594; problem owner. That&#8217;s the mindset shift that creates career momentum.</p><p><em>Final thought: Stop thinking like a code compiler. Start thinking like a problem detective</em>.</p><p><strong>Your job gives you tasks. Your career grows when you remove obstacles for others.</strong></p><p>The next time you are tempted to just complete your assigned work and call it a day, ask yourself:</p><p><em><strong>What broken thing could I fix that would make everyone&#8217;s life better?</strong></em></p><p>That question, pursued consistently, is the difference between being replaceable and becoming irreplaceable.</p><div><hr></div><p><em><strong>The bottom line:</strong></em> If you only complete what&#8217;s assigned, you&#8217;re optimizing for the wrong game. The engineers who get promoted, who get the interesting projects, who become technical leaders &#8212; they&#8217;re the ones solving problems that matter.</p><p>Your career isn&#8217;t built in the sprint backlog. It&#8217;s built in the gaps between what&#8217;s assigned and what actually needs to happen.</p><p>Start looking for those gaps. Your future self will thank you.</p><h4><strong>ACTION ITEMS</strong></h4><p>&#9633; Start daily reflection journal this week </p><p>&#9633; Subscribe to 2&#8211;3 solid engineering blogs or newsletters and read one post a day. Treat them as case studies in how others frame and solve problems, not just as tech news.</p><p>&#9633; Identify 1 team frustration everyone complains about</p><p>&#9633; Schedule 15-min chat with manager about process improvements </p><p>&#9633; Write down 3 manual processes that waste time </p><p>&#9633; Pick 1 problem and go through the ownership loop.</p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pulkitchaturvedi.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Pulkit's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[This is Pulkit&#39;s Substack.]]></description><link>https://pulkitchaturvedi.substack.com/p/coming-soon</link><guid isPermaLink="false">https://pulkitchaturvedi.substack.com/p/coming-soon</guid><dc:creator><![CDATA[Pulkit Chaturvedi]]></dc:creator><pubDate>Tue, 27 Jan 2026 11:54:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!j8Vv!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d34bf7-862d-46b7-8aa2-fbf4c442eaf6_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is Pulkit&#39;s Substack.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://pulkitchaturvedi.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://pulkitchaturvedi.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>