<?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[IncrementallyHQ]]></title><description><![CDATA[A newsletter about data engineering, thoughts, and practices. Incrementally improving myself.]]></description><link>https://incrementallyhq.com</link><image><url>https://substackcdn.com/image/fetch/$s_!AMXm!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94d83a-9af3-4e4b-8ea8-bcf5cb83afc4_144x144.png</url><title>IncrementallyHQ</title><link>https://incrementallyhq.com</link></image><generator>Substack</generator><lastBuildDate>Sat, 13 Jun 2026 13:15:27 GMT</lastBuildDate><atom:link href="https://incrementallyhq.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[IncrementallyHQ]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[incrementallyhq@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[incrementallyhq@substack.com]]></itunes:email><itunes:name><![CDATA[Nazmi Asri]]></itunes:name></itunes:owner><itunes:author><![CDATA[Nazmi Asri]]></itunes:author><googleplay:owner><![CDATA[incrementallyhq@substack.com]]></googleplay:owner><googleplay:email><![CDATA[incrementallyhq@substack.com]]></googleplay:email><googleplay:author><![CDATA[Nazmi Asri]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Build vs Buy]]></title><description><![CDATA[The worst decisions don't fail on a spreadsheet, they fail when the loudest voice in the room answers the wrong question.]]></description><link>https://incrementallyhq.com/p/build-vs-buy</link><guid isPermaLink="false">https://incrementallyhq.com/p/build-vs-buy</guid><dc:creator><![CDATA[Nazmi Asri]]></dc:creator><pubDate>Mon, 08 Jun 2026 05:01:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AMXm!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94d83a-9af3-4e4b-8ea8-bcf5cb83afc4_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This time is a bit different, it&#8217;s turning into an essay but hope you enjoy the read.</em></p><p>There was this decision from a few years ago I&#8217;ve carried as a quiet regret, the call to build a custom solution rather than adopting an industry-standard managed service. At the time, the team treated it as a win, and I let myself be talked into the same view, even though something felt off. We finally walked it back recently. I wish I&#8217;d trusted that instinct sooner.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://incrementallyhq.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 IncrementallyHQ! 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>The story about making bad calls on build vs buy is never new. I&#8217;ve also seen the other side of the coin: teams that bought an expensive platform, used 40% of its features, then couldn&#8217;t unwind the contract when their needs changed.</p><p>It&#8217;s one of the most common decisions engineering leaders make, and one of the most consistent misses. This experience taught me an expensive lesson: it&#8217;s almost never because the math is hard. It&#8217;s because the question was framed wrong, or because the loudest voice in the room had the strongest preference, not the strongest reasoning.</p><p>I would like to break this into few chapters:</p><ol><li><p>Why are we getting this wrong?</p></li><li><p>The questions that actually matter</p></li><li><p>What does this look like at different scales?</p></li><li><p>The traps that we watched people fall into</p></li><li><p>A practical way to actually decide</p></li><li><p>A closing honest thought</p></li></ol><div><hr></div><h2>Why are we getting this wrong?</h2><p>Before the framework, it helps to be honest about who&#8217;s pulling on what.</p><p>Engineers tend to lean towards Build. Building is more interesting than integrating. It&#8217;s better on your resume, and it carries a sense of ownership. I&#8217;m also guilty of this.</p><p>Leaders on the other hand, tend to lean towards buying. Buying spreads accountability. A vendor letting you down is an easier conversation than your team failing.  Procurement feels safer than a headcount ask, and vendors are very good at making &#8220;Buy&#8221; feel like the obvious adult decision.</p><p>Vendors will tell you that maintenance is your real cost. They&#8217;re right.</p><p>Internal advocates will tell you that licenses compound forever. They&#8217;re also right.</p><p>Both can be true. The job is figuring out which one matters more for your specific situation, and not letting the people with the strongest preferences sway the decision.</p><p></p><div><hr></div><h2>The questions that actually matter</h2><p>The wrong question is: &#8220;Is it cheaper to build or buy?&#8221; Cost matters, but it&#8217;s downstream of bigger things. Four questions move me more than the spreadsheet does.</p><h3>Is this a core differentiating factor?</h3><p>As engineering leaders, we need to be ruthless about where we spend our team&#8217;s cycles. If the business doesn&#8217;t care how a system works, they only care that it delivers data reliably, then you should default to &#8220;Buy&#8221;.</p><p>Take a data catalog. Engineering teams often want to build a custom internal discovery platform because stitching together metadata from the warehouse and transformation layers is a genuinely interesting technical challenge. But no business user cares about the elegant architecture behind your internal catalog. They just want to find their tables and trust their metrics so they can make decisions.</p><p>The data models and the insights they generate are your differentiator. The catalog is just the search bar. Buy the tool off the shelf, and keep your engineering cycles focused on building the data products that actually power the business.</p><h3>Do we have team capacity and continuity for the next 3 to 5 years?</h3><p>This is the question most often skipped, and the one that kills the most Build decisions.</p><p>Building is never expensive, owning it is.<strong>.</strong> Owning means on-call rotations, documentation, onboarding new engineers, security patches, dependency upgrades, and the slow drift of &#8220;the original team has all left and nobody really knows why this works.&#8221;</p><p>This one hits especially hard for stretched teams. If your engineers are already firefighting and context-switching, adding a custom-built system to their plate doesn&#8217;t save money. It just hides the cost in burnout and missed roadmap commitments.</p><p>If you can&#8217;t credibly commit to staffing the maintenance team for three to five years, don&#8217;t build.</p><h3>Is our scale or constraint profile unique enough that vendors fail us?</h3><p>This is the legitimate &#8220;Build&#8221; case.</p><p>If you process <strong>petabytes</strong> a day and the vendor&#8217;s pricing assumes <strong>terabytes</strong>, the math falls apart. This is when building makes more sense.</p><p>This is why hyperscalers (cloud services) build so much. At their scale, vendor solutions either don&#8217;t exist or cost more than building. There might be one, but hopefully it&#8217;s not an overkill for your business.</p><p>Notice the inversion, though: most organizations citing this reason aren&#8217;t actually at that scale. They&#8217;re using &#8220;scale&#8221; as a justification for a decision they already made for other reasons, where in reality it is never the case.</p><h3>How reversible is this decision?</h3><p>The best way to evaluate this is the <a href="https://www.inc.com/jeff-haden/amazon-founder-jeff-bezos-this-is-how-successful-people-make-such-smart-decisions.html">&#8220;one-way vs. two-way door&#8221; framework</a>. Two-way doors are reversible. If you don&#8217;t like what&#8217;s on the other side, you just walk back. They deserve a fast decision. One-way doors are practically irreversible and demand careful debate.</p><p>Buying a SaaS tool you can swap out next quarter is a two-way door. Hand-rolling a custom architecture that becomes the spine of your data stack is a one-way door.</p><p>The harder it is to back out, the more conservative your default should be. Always look for the two-way door first: Buy the tool, integrate it, and learn your actual edge cases. If it proves insufficient, you can still <br>&#8220;Build&#8221; later.</p><p>Living with a vendor solution for a year gives you the exact blueprint you need, making any future &#8220;Build&#8221; dramatically cheaper.</p><p></p><div><hr></div><h2>What does this look like at different scales?</h2><p>The same framework lands in different places depending on where you sit.</p><p>Bigger organization build a lot because scale breaks vendors, they have the engineering bench, and the differentiation case is genuinely real for most of the stack. But even they don&#8217;t build everything. They buy CRMs, HR systems, and most of their corporate IT. The discipline isn&#8217;t &#8220;build everything.&#8221; It&#8217;s drawing the boundary clearly and resisting the urge to redraw it because a senior engineer fancies an interesting project.</p><p>Mid size companies usually do best buying about 80% of the data stack and building the 20% that genuinely differentiates them. The failure mode here is creep: each individual Build decision looks reasonable, but they accumulate into a homegrown stack the team can no longer maintain. By year three, half the engineering org is stuck keeping the lights on for tools nobody else uses.</p><p>SMEs should buy almost everything. The cost of context-switching between maintaining custom tools and delivering business value is brutal at small scale. The exception is when no vendor exists for the specific thing you need, or when the thing is so centric to your product. Otherwise: buy, integrate well, and focus your engineering energy on what your business actually does.</p><p>A useful gut check for smaller teams: if you have to ask whether you should build it, the answer is almost certainly no. Building should feel obviously right, not like a close call.</p><p></p><div><hr></div><h2>The traps that we watched people fall into</h2><p>A few patterns show up again and again, regardless of company size.</p><h3>The &#8220;we&#8217;re special&#8221; trap. </h3><p>Almost every team I&#8217;ve worked with has, at some point, argued their requirements are too unique for any vendor. About 10% of the time this is true. The other 90%, the requirements are normal but emotionally familiar, which makes them feel unique. To solve this, get a third party opinion before betting on this.</p><h3>The &#8220;open source is free&#8221; trap.</h3><p>Self-hosting an open-source tool is not Buy. It&#8217;s Build with a head start. You still own the operations, upgrades, security posture, and the deep expertise required to debug it at 2 a.m. People treating it as a free Buy are usually about to learn an expensive lesson.</p><h3>The &#8220;engineer ego&#8221; trap. </h3><p>Sometimes a Build proposal is really a senior engineer asking for an interesting project, dressed up as a business case. This isn&#8217;t malicious. It&#8217;s human. But the cost doesn&#8217;t disappear because the motivation was personal. Ask: would we still want to build this if it had to be owned by our most junior engineer for the next three years?</p><h3>The &#8220;outsource accountability&#8221; trap.</h3><p>The mirror image: sometimes a Buy decision is risk-aversion in a suit. The vendor becomes the throat to choke when things go wrong, even when Build would have been the right call. Buying doesn&#8217;t make a project succeed. It just changes who gets blamed when it doesn&#8217;t.</p><p></p><div><hr></div><h2>A practical way to actually decide</h2><p>When I&#8217;m sitting in front of one of these decisions, I work through something like this.</p><h3>Sketch the three-year total cost of ownership for both paths.</h3><p>Include people, not just dollars. For Build, count the engineers you&#8217;ll need to maintain it, not just ship v1. For Buy, count the integration work, vendor management overhead, and a realistic price increase at renewal. Most renewal increases are not 5%.</p><h3>Write down what you&#8217;d need to believe for each option to be right.</h3><p>If the Build case requires believing you can hire and retain three specialized engineers for five years, and you&#8217;re already struggling to fill the openings you have, that&#8217;s a signal. If the Buy case requires believing a particular vendor will still be competitive in three years, look at their funding, their churn, and how often they&#8217;ve been acquired in their category.</p><h3>Talk to two or three peers who&#8217;ve made the same decision. </h3><p>Not vendors, not your account executive. Actual engineering leaders who&#8217;ve owned the outcome. The hour you spend on those calls is more valuable than any analyst report.</p><h3>Default to Buy unless Build is obviously the right answer. </h3><p>This is the part most engineering cultures get wrong. The default in our industry is &#8220;we can build it&#8221; because we can. The question isn&#8217;t whether we can. It&#8217;s whether we should.</p><h3>Build is the obvious answer.</h3><p>There are times regardless of whether you want to buy or get a vendor to build it, after checking the vendor&#8217;s pricing and negotiations, the price just doesn&#8217;t make sense and you are asked to build it yourself. </p><p>We just had one recently! One of our most used services that we would like to procure, has a unique pricing mechanism and forces user-based pricing, rather than consumption-based. When it doesn&#8217;t make sense to buy while we can still survive after the above four questions, we can just continue to maintain it (and still cost less, with minimal maintenance). </p><p></p><div><hr></div><h2>A closing honest thought</h2><p>The reason this decision is hard isn&#8217;t that the framework is complicated. It&#8217;s that the framework forces you to be honest about things that are uncomfortable: how special your team really is, how long your engineers will actually stay, how much you really know about your future requirements, whose ego is in the room.</p><p>When I was asked to build a framework around this, it mostly landed on a set of questions and with scoring on every question that contributed to whether to build or buy, the theme is almost the same, just different ways of asking and looking at the big picture.</p><p>I&#8217;m currently working with the best leaders I could ask for, who don&#8217;t have a bias toward one or the other. They have a bias toward asking the harder questions before either side wins the argument. Most of the time, the right answer becomes obvious once everyone in the room is willing to say what they actually think.</p><p>Irregardless as engineering leader, we should own whichever decision, clearly have the documentation on why such decisions were made, and when the &#8220;why&#8221; are no longer important or solved, it&#8217;s time to reconsider it again.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://incrementallyhq.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 IncrementallyHQ! 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[Career Dilemma: Manager or Individual Contributor]]></title><description><![CDATA[Navigating the dual-track reality of tech's most common fork in the road.]]></description><link>https://incrementallyhq.com/p/career-dilemma-manager-or-individual</link><guid isPermaLink="false">https://incrementallyhq.com/p/career-dilemma-manager-or-individual</guid><dc:creator><![CDATA[Abid Ebna Saif Utsha]]></dc:creator><pubDate>Tue, 26 May 2026 05:01:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AMXm!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94d83a-9af3-4e4b-8ea8-bcf5cb83afc4_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For a long time, I believed the only way &#8220;up&#8221; in tech was through management. I also, somewhat contradictorily, didn&#8217;t want to be a manager. After a few years on the management track, I&#8217;m reverting to my original plan to be an individual contributor (IC). Not because management failed me, but because the detour clarified where I actually want to go.</p><p>Here&#8217;s what I learned along the way.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://incrementallyhq.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 IncrementallyHQ! 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><h2>The early bias</h2><p>When I started out, I didn&#8217;t really understand what an Engineering Manager does. My main exposure to &#8220;management&#8221; was through Product Managers, and in those early days it felt like my best ideas kept getting shot down. I was proposing what I thought were elegant technical solutions, however what I got from them was a straight no.</p><p>This resulted in me building a quiet, defensive belief: Managers are the people who push back on innovation.</p><blockquote><p>&#8220;We don&#8217;t see things as they are; we see them as we are.&#8221; &#8211; <a href="https://www.goodreads.com/quotes/5030-we-don-t-see-things-as-they-are-we-see-them">Ana&#239;s Nin</a></p></blockquote><p>Looking back, my ideas weren&#8217;t being shot down. They were being weighed against a reality I couldn&#8217;t yet see. A multi-week delay against a critical launch. A long-term roadmap that would make my &#8220;elegant&#8221; fix irrelevant in three months. A customer problem I hadn&#8217;t yet framed as one. I was solving for technical elegance. The business was solving for survival.</p><p>That gap wasn&#8217;t a lack of support. It was a lack of shared context, and honestly, a lack of effort on my part to look for it. The pandemic-era remote setup certainly didn&#8217;t help, but I also wasn&#8217;t proactive enough to close the loop.</p><p>The pushback I felt wasn&#8217;t resistance; it was context I hadn&#8217;t yet uncovered.</p><h2>The shift</h2><p>My view started changing as I worked with managers who didn&#8217;t just say no but also explained the whys.</p><p>In one role, even when my ideas weren&#8217;t picked, I got clear, business-aligned reasons most of the time. 1:1s shifted from status updates into deep dives on technical problems and personal growth. I won&#8217;t pretend I instantly came around. I still quietly believed some of my &#8220;optimal&#8221; solutions were being passed over. But I also got to ship a few of them, which built trust on both sides. And a few years later, I watched some of those same world-class solutions of mine failed catastrophically in production. That was its own kind of education.</p><p>In a later role with a different manager, the conversation evolved again. We stopped talking only about my work and started talking about the team. Bottlenecks ahead, focus areas, team health. The dynamic became collaborative rather than one-directional. I could surface frustrations openly and stress-test whether something was a real problem or just my pessimism looking for one.</p><p>Management, I realized, wasn&#8217;t about stopping ideas. It was about curating them, so the team kept solving the right problems.</p><h2>Trying it out</h2><p>When the chance to take on direct reports came up, I took it. Partly to test my own assumptions, partly because I was genuinely curious whether the version of management I&#8217;d come to respect was something I could practice myself.</p><p>It wasn&#8217;t easy. I leaned heavily on my own manager when I felt stuck, and was lucky to be given room to try my own approach before anyone stepped in. Over the years, a few things became clear:</p><ol><li><p>Business context isn&#8217;t a tax on engineering. It&#8217;s the input that makes engineering decisions actually good.</p></li><li><p>Soft skills do real, measurable work. Most of what I once dismissed as &#8220;management overhead&#8221; was actually trust-building.</p></li><li><p>The big picture is easier to see, and harder to act on, than I&#8217;d assumed.</p></li><li><p>A single template doesn&#8217;t work across direct reports. The job is to figure out what each person needs, then adapt.</p></li></ol><p>I&#8217;ll go deeper on these in a follow-up post. For now, the short version: I didn&#8217;t dislike management. That realization made my next decision harder, not easier.</p><h2>Why I&#8217;m choosing IC route</h2><p>Despite enjoying the people side, I noticed where my real flow state lived: heads-down on a hard technical problem, designing a system from scratch, untangling a gnarly bug. That granular satisfaction wasn&#8217;t something I could replicate with the overhead of people management challenges.</p><p>I&#8217;m returning to IC path not because I disliked management, but because I still believe the staff engineering path is equally vital, and more aligned with the work I want to be remembered for. I can still lead, influence, and mentor without a roster of direct reports. The leverage just looks different.</p><p>I want my legacy to be the systems I built, the standards I set, and the engineers I influenced.</p><p>The manager&#8217;s detour wasn&#8217;t a failed experiment. It&#8217;s the thing that makes me a better staff engineer than I would have been otherwise. I now understand the trade-offs I used to push against, the context my managers were operating in, and the reasons &#8220;no&#8221; sometimes is the right answer.</p><h2>Resources that helped</h2><p>If you&#8217;re weighing the same choice, these shaped my thinking:</p><ol><li><p><a href="https://www.pathtostaff.com/">Path to staff engineer substack</a>: Excellent deep dives into the nuances of senior technical roles</p></li><li><p><a href="https://softskills.audio/">Soft Skills Engineering Podcasts</a>: A great resource for navigating the &#8220;human&#8221; side of technical work, regardless of title.</p></li><li><p><a href="https://www.goodreads.com/book/show/61058107-the-staff-engineer-s-path">The Staff Engineer&#8217;s Path by Tanya Reily</a>: A must-read for anyone who wants to lead without leaving the keyboard.</p></li></ol><p>That&#8217;s it for now!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://incrementallyhq.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 IncrementallyHQ! 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[Using AI to Write Your Commit Messages]]></title><description><![CDATA[Most commit histories aren&#8217;t as useful as they could be]]></description><link>https://incrementallyhq.com/p/using-ai-to-write-your-commit-messages</link><guid isPermaLink="false">https://incrementallyhq.com/p/using-ai-to-write-your-commit-messages</guid><dc:creator><![CDATA[Jeremy Tee]]></dc:creator><pubDate>Mon, 04 May 2026 05:01:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AMXm!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94d83a-9af3-4e4b-8ea8-bcf5cb83afc4_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>I remember debugging a broken pipeline and tracing it back to a commit message that just said &#8220;<em>fix&#8221;</em></p></blockquote><p>Many of us are familiar with standards like <a href="https://www.conventionalcommits.org/en/v1.0.0/">Conventional Commits</a> that define what a good commit message should look like. But in practice, people still rush through this step. By the time the code is ready, nobody wants to spend extra effort describing it properly.</p><p>As a result, commit history often ends up being far less useful than it should be. Instead of helping with debugging, code review, and understanding why a change happened, it becomes another thing engineers have to work around.</p><p>That is why using AI to generate commit messages is a practical use case as it helps to reduce the friction of writing commit messages that are actually useful.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://incrementallyhq.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 IncrementallyHQ! 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><div><hr></div><h3>Where AI Actually Helps</h3><p>AI does not magically make commit messages important. It just removes the worst part of writing them:<em> starting from nothing</em>.</p><p>The model only needs to read a diff, identify the dominant change, summarize it into a sentence, and format it consistently.</p><p>Instead of this:</p><div class="callout-block" data-callout="true"><p><code>update auth logi</code>c</p></div><p>You get this:</p><div class="callout-block" data-callout="true"><p><code>feat(auth): add token refresh flow for expired sessions</code></p></div><p>AI drafts the message, you review it.</p><div><hr></div><h3>Tooling Options</h3><p>You do not need to overthink the tooling. Pick the path that matches your workflow.</p><ul><li><p><strong><a href="https://code.visualstudio.com/docs/copilot/copilot-smart-actions#_generate-a-commit-message-and-pr-information">Copilot in VS Code</a></strong> if you want the easiest built-in experience.</p></li><li><p><strong><a href="https://github.com/nutlope/aicommits">AICOMMITS</a></strong><a href="https://github.com/nutlope/aicommits"> </a>if you want to use your own API key, choose your provider, or run against local backends.</p></li><li><p><strong><a href="https://help.gitkraken.com/gitlens/gl-gk-ai/">GitLens</a></strong> if you already use it heavily, but note that AI-generated commit messages are part of the paid Pro tier.</p></li></ul><p>Do not skip the instructions - the tool matters less than the instructions.</p><p>Even a good model will generate average commit messages if you do not tell it what good looks like.</p><p>Here is a simple example:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;ecf4ffe6-26f1-49e3-8ebc-384086731b34&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">Generate a commit message using Conventional Commits.

Format:
&lt;type&gt;(&lt;scope&gt;): &lt;subject&gt;

Optional body:
- Include only if extra context is useful
- Keep it brief
- Focus on why the change was made if it is obvious from the diff

Footer:
Jira: https://your-company.atlassian.net/browse/&lt;TICKET-ID&gt;

Rules:
- Allowed types: feat, fix, refactor, chore, docs, test, perf, ci, build
- Use a scope when relevant
- Keep the subject under 72 characters when possible
- Use imperative mood
- Do not end the subject with a period
- Avoid vague wording like "update", "change", "fix issue", or "misc"
- Prefer the user or system impact over file names
- Return only the final commit message in plain text</code></pre></div><p>One thing worth checking before using any of these tools: Make sure your company allows code or diffs to be sent to external AI providers :)</p><div><hr></div><h2>Final Thought</h2><p>This is not about replacing judgment. It is about making useful commit history easier to maintain.</p><p>Your future self might thank you when you are debugging a regression, and AI agents will have a better trail to follow when they need to figure out where a bug was introduced.</p><p>Stop settling for bad commit messages!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://incrementallyhq.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 IncrementallyHQ! 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[Hello, IncrementallyHQ!]]></title><description><![CDATA[Because in data engineering, you&#8217;re never really finished.]]></description><link>https://incrementallyhq.com/p/hello-incrementallyhq</link><guid isPermaLink="false">https://incrementallyhq.com/p/hello-incrementallyhq</guid><dc:creator><![CDATA[Nazmi Asri]]></dc:creator><pubDate>Mon, 20 Apr 2026 05:01:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AMXm!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94d83a-9af3-4e4b-8ea8-bcf5cb83afc4_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There is a simple truth in software and data engineering: you never really &#8220;finish&#8221; building.</p><p>Once a pipeline hits production, the clock starts ticking. Data sources drift, requirements change, and scale eventually breaks your initial assumptions. The architecture that worked yesterday is almost immediately facing its next bottleneck.</p><p>In this field, success isn't about finding a silver bullet. It's about engineering for the chaos before it hits.</p><p>That&#8217;s why we&#8217;re calling this <strong>IncrementallyHQ</strong>. We&#8217;re here because we believe the only way to build anything worth keeping is to get 1% better every day. No giant leaps - just one PR, one query optimization, and one lesson learned the hard way.</p><p>We&#8217;re starting this newsletter to document our journey. We want to build in public, share the real-world, unpolished realities of working in data, the architecture wins, the debugging nightmares, and the lessons learned along the way. <br><br>Essentially, this is our brain dump - unfiltered.</p><div><hr></div><h3>Meet the Team</h3><ul><li><p><strong>Nazmi Asri:</strong> Our pragmatic architect who has spent a career building AI and data workflows from the ground up in the world of Fintech and Banking. He&#8217;s less about the hype and more about the real-world grind of making a modern tech stack actually play nice together. He&#8217;s the reason our architecture remains grounded in logic rather than just buzzwords. Outside of work, Nazmi is a bit of a technical article junkie, always hunting for the latest trends.</p></li><li><p><strong>Jeremy Tee:</strong> Our infrastructure anchor for all things streaming and cloud spend. Whether it&#8217;s a streaming pipeline having a meltdown in the middle of the night or our cloud spend suddenly trying to hit a new high score, Jeremy is the one who pulls us back from the edge. He&#8217;s the reason our systems stay both rock-solid and lean. Outside the terminal, he&#8217;s recently fallen deep into the running rabbit hole.</p></li><li><p><strong>Abid:</strong> Our heavy lifter for the weirdest technical bugs. If there&#8217;s a deep-seated technical bottleneck or an architectural knot that no one can untie, Abid is usually the one fixing it. He&#8217;s the reason our engineering standards stay high and our systems remain resilient as they scale. When the laptop is shut, he&#8217;s usually decompressing with a gaming stream or deep in books related to self-improvement and growth.</p></li></ul><div><hr></div><h3>What&#8217;s Actually in This Newsletter?</h3><p>We aren&#8217;t interested in rewriting documentation you can already find on Google. We want to talk about the &#8220;Synthesis&#8221; of our work:</p><ul><li><p><strong>No-BS Architecture:</strong> The &#8220;teardowns&#8221; of our tech stacks - why we chose them, how we built them, and exactly where they let us down.</p></li><li><p><strong>The Cost of Data:</strong> Real talk on FinOps. How to keep the bill from spiraling while optimizing complex ETL pipelines for performance.</p></li><li><p><strong>The &#8220;Plumbing&#8221; for AI:</strong> The unglamorous infrastructure work required to make LLMs and agentic workflows actually useful in production.</p></li><li><p><strong>Scaling the Humans:</strong> Our notes on building teams - from hiring and setting engineering standards to the messy reality of jumping from IC to Lead.</p></li><li><p><strong>The Failure Archive:</strong> An honest look at the debugging nightmares and architectural dead-ends we&#8217;ve hit, so you don&#8217;t have to repeat them.</p></li></ul><h3>A Shared Space</h3><p>We want this to be a collective home for fellow builders. If you&#8217;ve got a hard-won lesson or a nightmare debug you want to document, the door is wide open.</p><p>We&#8217;re excited to build this. Let&#8217;s get to work - incrementally.</p><p><strong>&#8212; Nazmi, Jeremy, and Abid</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://incrementallyhq.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 IncrementallyHQ! 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></channel></rss>