<?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"><channel><title><![CDATA[Runtime Notes]]></title><description><![CDATA[Ruidy Nemausat | Fractional CTO & Strategic Tech Advisor. I help Seed and Series A founders bridge the gap between business vision and scalable technical execution using first-principle thinking]]></description><link>https://blog.nemausat.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1727435800197/8d9a73a9-fce1-46a5-bc4f-2301299313f3.png</url><title>Runtime Notes</title><link>https://blog.nemausat.com</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 01:17:34 GMT</lastBuildDate><atom:link href="https://blog.nemausat.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Engineering Strategy: Buy vs. Build]]></title><description><![CDATA[The most expensive mistake in tech isn’t picking the wrong database. It’s picking the wrong battle.
Every line of code your team writes is a future liability. Every custom-built system is a maintenance tax that your company will pay for the lifetime ...]]></description><link>https://blog.nemausat.com/buy-vs-build-engineering-strategy</link><guid isPermaLink="true">https://blog.nemausat.com/buy-vs-build-engineering-strategy</guid><category><![CDATA[cto]]></category><category><![CDATA[Strategy]]></category><category><![CDATA[buy]]></category><category><![CDATA[build]]></category><dc:creator><![CDATA[Ruidy Nemausat (PhD)]]></dc:creator><pubDate>Fri, 23 Jan 2026 13:25:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1769174626057/749f13f3-bca4-4e87-9982-16c285c6cfaf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>The most expensive mistake in tech isn’t picking the wrong database. It’s picking the wrong battle.</strong></p>
<p>Every line of code your team writes is a future liability. Every custom-built system is a maintenance tax that your company will pay for the lifetime of the product. As a Principal Engineer, my primary job is not just to deliver software. It is to protect the company’s ability to win. If we are building things that don’t make us unique, we aren’t innovating. We are just creating overhead.</p>
<h2 id="heading-what-is-the-secret-sauce">What is the secret sauce</h2>
<p>When a Product Manager or a Lead Engineer suggests building a custom solution, they are usually focused on the perfect fit. To make sure the business wins, I have to focus on the opportunity cost.</p>
<p>The rules are simple:</p>
<ul>
<li><p><strong>Build the Core:</strong> If the technology provides a unique competitive advantage, the capability that makes customers choose us over a competitor, we build it. This is where we want our best minds focused.</p>
</li>
<li><p><strong>Buy the Context:</strong> If the technology is a standard industry requirement (Auth, Payments, CRM, Messaging), we buy it. Building a custom billing system does not make us a better Fintech or AI company. It creates a maintenance burden that steals velocity from the work that actually differentiates us.</p>
</li>
</ul>
<h2 id="heading-the-framework-the-core-vs-context-matrix">The Framework: The Core vs. Context Matrix</h2>
<p>To make this decision objective rather than emotional, I use the <strong>Core vs. Context Matrix,</strong> inspired by the <a target="_blank" href="https://en.wikipedia.org/wiki/Time_management#Eisenhower_method">Eisenhower matrix</a>. It forces us to ask two questions:</p>
<ul>
<li><p>Is this mission-critical? (<em>e.g.</em> if it’s down, we can’t sell or serve customers, or we breach legal requirements or SLAs)</p>
</li>
<li><p>And does it differentiate us? (<em>e.g.</em> it changes win-rate, retention, or unit economics in a way competitors can’t easily copy)</p>
</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td><strong>Mission Critical</strong></td><td><strong>Non-Critical</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Differentiating (Core)</strong></td><td><strong>BUILD:</strong> This is your competitive advantage. Own it.</td><td><strong>INVESTMENT:</strong> R&amp;D for future Core.</td></tr>
<tr>
<td><strong>Standard (Context)</strong></td><td><strong>BUY:</strong> Use market leaders (Stripe, Okta, AWS, <em>etc</em>).</td><td><strong>OUTSOURCE/IGNORE:</strong> Get it off your plate entirely.</td></tr>
</tbody>
</table>
</div><p>Two caveats.</p>
<p>Not all decisions are equal. Some are easy to undo, while others become permanent architecture. When a decision is hard to reverse, we bias toward proven vendors. When it is reversible, we can afford to experiment and learn quickly. A useful heuristic is this: if it would take quarters and a migration to undo, treat it as irreversible.</p>
<p><strong>The Non-critical + Differentiating</strong> quadrant is essentially Research and Development. My experience as a professional researcher taught me that this is the preferred hiding spot for pet projects. These investments must be time-boxed with explicit success criteria to avoid a backlog of never-ending experiments.</p>
<h2 id="heading-building-the-core">Building the Core</h2>
<p>Even when the matrix says <strong>Build</strong>, the trap is overbuilding. A Principal Engineer avoids the perfect fit fallacy by focusing on opportunity cost. When we decide to build the Core, we must do it with lean execution.</p>
<ul>
<li><p><strong>Define interfaces early</strong> to allow parallel work</p>
</li>
<li><p><strong>Build thin and iterate fast</strong> to prove the differentiation hypothesis</p>
</li>
<li><p><strong>Instrument heavily</strong> to see if the custom build is actually moving the needle</p>
</li>
<li><p><strong>Invest in testability and operability</strong> from day one to prevent the system from becoming a burden</p>
</li>
</ul>
<h3 id="heading-the-maintenance-tax">The Maintenance Tax</h3>
<p>Engineers love to build. Teams often believe they can do better or cheaper than a vendor. But the sticker price of a vendor is often lower than the Total Cost of Ownership (TCO) in the early years. When you build Context, you are paying for future security patches and documentation that a specialized vendor would have already provided. I would rather pay a vendor to handle the boring complexity of global tax compliance so my engineers can focus on work that provides value to the business.</p>
<h2 id="heading-buying-is-not-a-silver-bullet-the-integration-tax">Buying is Not a Silver Bullet: The Integration Tax</h2>
<p>Buying has its own risks. As I discussed in my previous post on <a target="_blank" href="https://www.google.com/search?q=https://blog.nemausat.com/evaluating-software-vendors">evaluating software vendors</a><a target="_blank" href="https://www.google.com/search?q=https://blog.nemausat.com/evaluating-software-vendors">.</a> the <strong>Buy</strong> path introduces the <strong>Integration Tax</strong>. You must watch out for:</p>
<ul>
<li><p><strong>Operational coupling:</strong> A vendor outage becomes your outage</p>
</li>
<li><p><strong>Data model mismatch:</strong> Forcing your logic into a vendor’s rigid schema</p>
</li>
<li><p><strong>Observability gaps:</strong> The system becomes a black box when things go wrong</p>
</li>
<li><p><strong>Contract and Security review overhead:</strong> The hidden time spent with legal and compliance</p>
</li>
</ul>
<p>Even with these risks, a complex buy is usually safer than a distracted build. When we buy <strong>Context</strong>, we are buying time. In a high growth environment, time is the only resource we cannot manufacture.</p>
<h2 id="heading-adopt-integrate"><strong>Adopt + Integrate</strong></h2>
<p>Sometimes the best answer is <strong>Adopt + Integrate</strong>. This means adopting a market leader and integrating it deeply enough to meet product needs without owning the full complexity. You buy the foundation (Stripe, Okta, AWS) and build a thin abstraction layer around it. This allows you to own the workflows and data model boundaries while preserving an exit strategy by designing for migration up front. This approach works best when:</p>
<ul>
<li><p>The capability is Context, but must feel seamless in the product experience</p>
</li>
<li><p>The vendor solves most of the problem, and the remaining gap is specific to your workflow</p>
</li>
<li><p>The system needs strong internal controls, observability, and governance</p>
</li>
</ul>
<h3 id="heading-the-context-to-core-transition">The Context to Core transition</h3>
<p>A common misconception, especially in the cloud-computing age, is that infrastructure is never Core. However, you must also recognize that some foundations become differentiating as the company scales. For instance, infrastructure cost efficiency becomes a competitive advantage for high-volume platforms. Latency can become a product feature in fintech. In these cases, what started as a Buy decision may eventually need to move to a Build strategy to protect your unit economics or performance edge.</p>
<h2 id="heading-decision-checklist-for-your-next-meeting">Decision Checklist for Your Next Meeting</h2>
<p>Use these five questions to audit your next Build vs. Buy proposal:</p>
<ol>
<li><p><strong>Differentiation:</strong> Does this feature help us win a deal or retain a customer in a way a vendor cannot?</p>
</li>
<li><p><strong>Time to Value:</strong> Can a vendor get us to market in weeks instead of the quarters a custom build would take?</p>
</li>
<li><p><strong>The Maintenance Owner:</strong> Who is the named engineer responsible for security patches and updates for this custom system in two years?</p>
</li>
<li><p><strong>Reversibility:</strong> If we build this and fail, or buy this and it sucks, how hard is it to switch?</p>
</li>
<li><p><strong>The Exit Strategy:</strong> If the vendor triples their price or goes bankrupt, do we have a plan to migrate?</p>
</li>
<li><p><strong>Data Ownership and Portability:</strong> If we need to leave this vendor, can we export our data in a complete, usable format, and migrate without losing history, integrity, or critical workflows?</p>
</li>
</ol>
<h3 id="heading-the-real-outcome"><strong>The Real Outcome</strong></h3>
<p>The goal of a Buy vs. Build strategy isn’t to save money in the short term. It’s to ensure that when we do decide to build, we are doing it with maximum focus and zero distractions.</p>
<p>We buy the foundations so we can build the skyscraper.</p>
]]></content:encoded></item><item><title><![CDATA[The 15 Invisible Risks That Kill Series A Rounds]]></title><description><![CDATA[I’ve watched $10M Series A rounds stall, not because the product didn’t work, but because diligence exposed invisible risks. An infrastructure held together by a single script no one could understand or reproduce. Or an unsigned contractor agreement ...]]></description><link>https://blog.nemausat.com/series-a-technical-due-diligence-checklist</link><guid isPermaLink="true">https://blog.nemausat.com/series-a-technical-due-diligence-checklist</guid><category><![CDATA[production readiness]]></category><category><![CDATA[cto]]></category><category><![CDATA[fundraising]]></category><category><![CDATA[Series A]]></category><category><![CDATA[seed]]></category><category><![CDATA[Scaling Startup]]></category><dc:creator><![CDATA[Ruidy Nemausat (PhD)]]></dc:creator><pubDate>Thu, 01 Jan 2026 20:46:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767123471898/493986ca-1cb7-4f56-959a-b6aa42352d85.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I’ve watched $10M Series A rounds stall, not because the product didn’t work, but because diligence exposed invisible risks. An infrastructure held together by a single script no one could understand or reproduce. Or an unsigned contractor agreement quietly lingering from three years prior.</p>
<p>I’ve also been on the other side of it. While scaling a product into new markets, expansion surfaced risks we didn’t expect. The system was running, customers were paying, and momentum was real. But when we load-tested the platform for global scale, uncomfortable gaps appeared. We had to slow down on purpose, refocus on a small set of foundational checks, and be honest about what was production-ready versus what was merely functioning. That pause protected speed later and made the next phase of growth possible.</p>
<p>This is the difference between Seed and Series A. In a Seed round, investors bet on the founder. In a Series A, they bet on the engine. Diligence isn’t a code review and it isn’t about perfection. It’s about risk containment. Investors aren’t trying to eliminate risk. They’re trying to price it. Unidentified risk can’t be priced. It gets flagged. And during a fundraise, a “wait” is effectively a silent <strong>no</strong>.</p>
<h2 id="heading-debt-vs-deal-breakers">Debt vs. Deal-Breakers</h2>
<p>As I’ve written before, <a target="_blank" href="https://blog.nemausat.com/product-vs-engineering-strategic-balance">tension between Product and Engineering is healthy</a>. Shipping always comes before polishing, and learning in production is part of the game. Technical debt isn’t a failure. It’s a deliberate trade.</p>
<p>The problem isn’t debt. The problem is when debt stops being priced and starts becoming unmanaged risk.</p>
<p>In practice, the line is simple. If a technical risk can’t be explained to an investor in one sentence, along with who owns it and when it gets resolved, it’s no longer debt. It’s a liability. VCs aren’t looking for perfect code. They’re looking for evidence that you understand your risk surface and actively control it.</p>
<p>This is where Series A diligence breaks teams. Under questioning, systems that mostly work suddenly reveal brittle assumptions. Decisions that made sense at Seed speed can’t be justified under Series A scrutiny. Not because they were wrong, but because no one owns them anymore.</p>
<p>Investors don’t eliminate risk. They price it. Risk that’s named, bounded, and owned can be priced. Risk that’s vague, undocumented, or tribal knowledge can’t. That’s what turns a conversation from <strong>yes</strong> into <strong>come back later</strong>.</p>
<h2 id="heading-four-examples-of-unpriced-risk"><strong>Four Examples of Unpriced Risk</strong></h2>
<p>These aren’t edge cases. They’re the first questions that surface when an investor starts pressure-testing a Series A stack.</p>
<h3 id="heading-the-bus-factor"><strong>The Bus Factor</strong></h3>
<p>If your lead engineer disappears tomorrow, can someone unfamiliar with the system deploy, debug, and roll back within 48 hours? When core knowledge lives in one person’s head, velocity looks high until it isn’t. Investors don’t fear complexity. They fear single points of failure.</p>
<h3 id="heading-the-license-trap"><strong>The License Trap</strong></h3>
<p>Are you building critical parts of your product on copyleft licenses that quietly force you to open-source your IP? This often isn’t discovered by engineering at all. It surfaces late through legal diligence, when timelines are tight and options are expensive.</p>
<h3 id="heading-the-snowflake-infrastructure"><strong>The Snowflake Infrastructure</strong></h3>
<p>If your cloud environment is a collection of hand-crafted settings rather than reproducible infrastructure, you don’t have scale. You have fragility. Systems that can’t be recreated from code can’t be trusted under growth or incident response.</p>
<h3 id="heading-the-mystery-cloud-bill"><strong>The Mystery Cloud Bill</strong></h3>
<p>If you can’t tie your monthly cloud spend to specific features or customers, you can’t explain your margins at 10× scale. Under diligence, “we’ll optimize later” isn’t a strategy. It’s an unanswered question.</p>
<p>Each of these maps to a different category of risk: people, legal, infrastructure, and financial. And they’re only part of the picture. Other risks don’t show up as outages or invoices, but as delivery bottlenecks, ownership gaps, and governance blind spots that only appear under scrutiny.</p>
<h2 id="heading-what-should-founders-do">What Should Founders Do?</h2>
<p>Most founders don’t discover these risks while building. They discover them when an investor, lawyer, or technical auditor starts asking questions they weren’t expecting. By then, timelines are tight, options are limited, and the conversation shifts from momentum to remediation.</p>
<p>To avoid that, I use a Series <a target="_blank" href="https://ruidy.nemausat.com/services/due-diligence-audit">A Technical Readiness Scorecard</a> to pressure-test systems before diligence begins. It’s the same framework I’ve used when helping teams prepare for expansion, audits, and investor scrutiny. It’s designed to surface unpriced risk while there’s still time to act.</p>
<p>The Scorecard covers five areas that routinely come up in Series A diligence and expansion reviews, and helps you:</p>
<ul>
<li><p>Identify risks that could stall or slow a round before your first VC meeting</p>
</li>
<li><p>Replace vague answers with clear ownership and timelines</p>
</li>
<li><p>Focus effort on the issues that actually affect valuation and confidence</p>
</li>
</ul>
<blockquote>
<p><em>Use the Series A</em> <a target="_blank" href="https://ruidy.nemausat.com/services/due-diligence-audit"><em>Technical Readiness Scorecard</em></a> <em>to pressure-test your stack before diligence begins.</em></p>
</blockquote>
<p>If you’re planning to raise, or preparing your stack for the next phase of scale, the goal isn’t perfection. It’s knowing where the risks are, which ones matter, and being able to speak to them with confidence.</p>
<p><a target="_blank" href="https://ruidy.nemausat.com/services/due-diligence-audit"><strong>Get the Scorecard &amp; Prepare for Diligence</strong></a></p>
<p><a target="_blank" href="https://ruidy.nemausat.com/services/due-diligence-audit/"><em>I also offer a 1-week</em> <strong><em>Technical Due Dil</em></strong></a><strong><em>ig</em></strong><a target="_blank" href="https://ruidy.nemausat.com/services/due-diligence-audit"><strong><em>ence Audit</em></strong> <em>for teams that need a deep-dive</em></a> <em>assessment, a prioritized remediation plan, and a scorecard they can take straight to their board.</em></p>
]]></content:encoded></item><item><title><![CDATA[Product-Engineering collaboration]]></title><description><![CDATA[The most expensive friction in a tech company isn’t technical, it’s the gap between Product and Engineering. At exmox (my current employer), these are sister organizations with the same goal: building the best possible value-creation engine. They sim...]]></description><link>https://blog.nemausat.com/product-vs-engineering-strategic-balance</link><guid isPermaLink="true">https://blog.nemausat.com/product-vs-engineering-strategic-balance</guid><category><![CDATA[Product Engineering]]></category><category><![CDATA[cto]]></category><category><![CDATA[engineering-management]]></category><category><![CDATA[leadership]]></category><dc:creator><![CDATA[Ruidy Nemausat (PhD)]]></dc:creator><pubDate>Mon, 29 Dec 2025 01:44:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1766972912194/54b38a4c-b219-49be-8992-5469f36ce5cd.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>The most expensive friction in a tech company isn’t technical, it’s the gap between Product and Engineering.</strong> At <a target="_blank" href="https://exmox.com">exmox</a> (my current employer), these are sister organizations with the same goal: building the best possible value-creation engine. They simply approach it from different angles, which naturally creates tension.</p>
<p>That tension is not a failure of alignment. It is a feature of a healthy organization.</p>
<p>Left unmanaged, tension turns into friction. Managed well, it becomes one of the organization’s greatest sources of leverage. My goal is not to eliminate this tension, but to ensure it consistently produces business value rather than organizational drag.</p>
<p>This is the lens I use to evaluate whether Product–Engineering collaboration is working well at exmox: <strong>do we convert tension into outcomes, without degrading systems or sacrificing long-term execution speed?</strong></p>
<h2 id="heading-the-trade-off-velocity-vs-stability">The trade-off: Velocity vs. Stability</h2>
<p>My perspective as Principal Engineer is that Product-Engineering collaboration is never a battle to be won. It is a continuous negotiation between two equally valid forces:</p>
<ul>
<li><p><strong>Velocity:</strong> Driven by Product’s need to learn quickly, ship, and capture opportunity.</p>
</li>
<li><p><strong>Stability:</strong> Driven by Engineering’s responsibility to protect systems, users, and long-term execution speed.</p>
</li>
</ul>
<p>Velocity without stability leads to outages, churn, and compounding rework. Stability without velocity leads to missed markets and stalled growth. The job is not to choose one over the other; it is to channel both toward the same outcome.</p>
<h2 id="heading-the-common-goal-framework">The Common Goal Framework</h2>
<p>The most effective way to align these forces is to replace the us <em>vs.</em> them narrative with a shared business objective. Instead of starting with positions like <em>"Product wants this tomorrow"</em> versus <em>"Engineering says it will break"</em>, the conversation starts with <strong>purpose</strong>:</p>
<blockquote>
<p><strong>"We need this launch to unlock the next phase of growth.”</strong><br />“<strong>WIthout this we miss a critical market opportunity.”</strong></p>
</blockquote>
<p>Once the goal is clear, the conversation changes. The question is no longer who is right, but what is the fastest acceptable path to the outcome. That framing turns conflict into design.</p>
<h2 id="heading-the-middle-layer-architecture-as-an-enabler">The Middle Layer: Architecture as an Enabler</h2>
<p>As Principal Engineer at exmox, I work closely with both the CTO and the CPO, I see architecture as the <strong>creation of business options.</strong> If Engineering builds systems that are too rigid to adapt under pressure, they have failed the business just as surely as if they had built something unreliable. High-quality architecture deliberately prices in change. It ensures that today’s speed does not become tomorrow’s constraint.</p>
<p>This work begins early, during <strong>Discovery</strong>. When Engineering is involved from the start, we identify <strong>The $0 Feature</strong>: technical shortcuts where we achieve 80% of the value with 5% of the effort by leveraging existing tools or clever architectural tweaks.</p>
<p>Discovery is where we decide whether we are intentionally building a disposable prototype to learn, or a foundation meant to scale.</p>
<h2 id="heading-facilitating-trade-offs-the-end-of-year-dilemma">Facilitating Trade-Offs: The End-of-Year Dilemma</h2>
<p>When Product pushes for speed and Engineering raises concerns, the answer is rarely a hard yes or no. It is a <strong>priced trade-off.</strong> Consider a common high-stakes scenario: it’s November. Product wants to launch a campaign to capture end-of-year traffic. Engineering warns that the architecture is brittle and may fail under 2× load.</p>
<p>We don’t pick a side. We <strong>re-engineer the risk</strong>:</p>
<ul>
<li><p><strong>Reducing Surface Area:</strong> Aggressively disabling non-essential services via feature flags so the checkout flow survives peak load.</p>
</li>
<li><p><strong>Accepting Operational Debt:</strong> Agreeing to a manual database cleanup in January in exchange for December revenue.</p>
</li>
<li><p><strong>Strategic Throttling:</strong> Introducing a virtual waiting room to protect system integrity, sacrificing some conversion to preserve brand trust and uptime.</p>
</li>
</ul>
<p>In this model, risk isn't ignored; it’s priced. Debt isn't hidden; it’s tracked. Everyone understands what is being gained now and what must be paid back later.</p>
<h2 id="heading-the-value-arbitrator">The Value Arbitrator</h2>
<p>In these moments, the key is to arbitrate value, not to defend a function or department.</p>
<p>That means weighing business impact against technical integrity. Sometimes that requires telling Product that a shortcut is too expensive because the <strong>Cost of Delay</strong> for the next three months would be catastrophic. Sometimes it means asking Engineering to accept risk because the <strong>Opportunity Cost</strong> of missing the market is higher than the cost of a January rewrite.</p>
<p>This arbitration must also protect <strong>Operational Excellence.</strong> Every new feature increases the tax on the system. Treating maintenance as optional is how roadmaps slow down invisibly. Sustainable velocity comes from systems that are actively cared for, not just extended.</p>
<h2 id="heading-the-real-outcome">The Real Outcome</h2>
<p>The success of this approach isn’t measured by a single launch date. It’s measured by <strong>trust</strong>.</p>
<p>When teams see that trade-offs are explicit, technical debt is repaid, and business goals are shared rather than weaponized, conflict fades. Product and Engineering don't need to agree on everything. They need to share responsibility for outcomes.</p>
<p>That shared responsibility is how organizations ship faster over time without breaking the systems, or the people, that power them.</p>
]]></content:encoded></item><item><title><![CDATA[Meet Your Autonomous AI Marketer]]></title><description><![CDATA[Hey my fellow Indie Hackers,
Ever feel like you’re juggling a million things at once? Building a product, talking to users, fixing bugs, and guess what—oh yeah, marketing too! If you're a solo founder or part of a lean team, you know the hustle is re...]]></description><link>https://blog.nemausat.com/meet-your-autonomous-ai-marketer</link><guid isPermaLink="true">https://blog.nemausat.com/meet-your-autonomous-ai-marketer</guid><category><![CDATA[AI]]></category><category><![CDATA[marketing]]></category><dc:creator><![CDATA[Ruidy Nemausat (PhD)]]></dc:creator><pubDate>Mon, 17 Mar 2025 08:13:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1742199172594/99e77e7f-9578-40e3-b3da-681455ee9f24.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey my fellow Indie Hackers,</p>
<p>Ever feel like you’re juggling a million things at once? Building a product, talking to users, fixing bugs, and guess what—oh yeah, marketing too! If you're a solo founder or part of a lean team, you know the hustle is real.</p>
<p>Well, imagine having a full-fledged marketing guru by your side, but without the coffee breaks or 3 PM slumps.</p>
<h2 id="heading-lets-build-an-autonomous-ai-marketer">Let’s build an Autonomous AI Marketer?</h2>
<p>Picture this: an AI-powered tool that doesn’t just automate tasks but actually learns and optimizes your entire marketing strategy. It’s like having a seasoned strategist who knows your target audience, crafts personalized campaigns, and adapts on the fly—all while you focus on building your product.</p>
<h2 id="heading-why-its-perfect-for-indie-hackers">Why It’s Perfect for Indie Hackers</h2>
<ol>
<li><p><strong>Time-Saver Extraordinaire</strong>: Marketing can be a time sink. With an AI marketer, you can automate everything from social media scheduling to email campaigns, freeing up hours for you to focus on other critical aspects of your business.</p>
</li>
<li><p><strong>Budget-Friendly</strong>: Traditional marketing agencies can be expensive. An autonomous AI won’t break the bank and can often operate on a fraction of the cost of hiring a human team.</p>
</li>
<li><p><strong>Data-Driven Decisions</strong>: Forget guesswork. This AI dives into analytics, pulls data-driven insights, and can even predict trends. It’s like having a crystal ball but way more accurate.</p>
</li>
<li><p><strong>Personalization at Scale</strong>: Crafting personalized messages manually can be a nightmare. AI handles it effortlessly, creating tailored interactions that connect with your audience on a deeper level.</p>
</li>
<li><p><strong>Adaptability</strong>: Markets evolve, and so does your AI marketer. It continuously learns from campaigns, adapts strategies, and ensures you’re never left in the dust of changing trends.</p>
</li>
</ol>
<h2 id="heading-taking-the-plunge">Taking the Plunge</h2>
<p><a target="_blank" href="https://ruidy.nemausat.com/">I</a> am building a <a target="_blank" href="https://dealmaestro.netlify.app/">tool</a> to help me market my side projects.</p>
<p>The first step is content generation catered to a target audience.</p>
<p><a target="_blank" href="https://dealmaestro.netlify.app/"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742198861439/3f0505ae-83c1-4eca-beeb-273f4f454dad.png" alt class="image--center mx-auto" /></a></p>
<h3 id="heading-roadmap">Roadmap</h3>
<ul>
<li>The next step will automated content sharing on the platforms used by your audience</li>
</ul>
<p>The goal is to automate reach and have data at your fingertips.</p>
<h2 id="heading-the-human-touch">The Human Touch</h2>
<p>While an AI marketer is powerful, it’s not a complete replacement for the human touch. Think of it as a supercharged assistant ready to amplify your efforts. Use the insights it provides to get creative and add your unique human flair to campaigns.</p>
<h2 id="heading-final-thoughts">Final Thoughts</h2>
<p>The entrepreneurial journey is exciting and full of challenges. By embracing tools like Autonomous AI Marketers, you're not just surviving the hustle; you're thriving. Let the tech handle the grind, while you focus on big-picture innovation.</p>
<p>So, fellow indie hackers, are you ready to supercharge your marketing efforts and give your business the edge it deserves?</p>
<p>Happy hacking! 🚀</p>
]]></content:encoded></item><item><title><![CDATA[Overcoming Content Hoarding: Leveraging AI to Find Balance]]></title><description><![CDATA[If you're anything like me, your inbox is a graveyard of unread newsletters, promotions, and updates. Every morning, I’d open my email, see the overwhelming number of unread messages, and promptly close it again. I was drowning in a sea of content, a...]]></description><link>https://blog.nemausat.com/overcoming-content-hoarding-leveraging-ai-to-find-balance</link><guid isPermaLink="true">https://blog.nemausat.com/overcoming-content-hoarding-leveraging-ai-to-find-balance</guid><category><![CDATA[AI]]></category><category><![CDATA[software development]]></category><dc:creator><![CDATA[Ruidy Nemausat (PhD)]]></dc:creator><pubDate>Thu, 30 Jan 2025 05:41:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1738215658479/4c4491c1-0e28-4fca-b482-6503c63f60ff.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you're anything like me, your inbox is a graveyard of unread newsletters, promotions, and updates. Every morning, I’d open my email, see the overwhelming number of unread messages, and promptly close it again. I was drowning in a sea of content, and it was starting to feel like a full-blown addiction. That’s when I decided to fight back—with the help of AI.</p>
<p>Here’s how I built <a target="_blank" href="https://briefly-server.nemausat.com/feed"><strong>Briefly</strong></a>, an AI-powered system that helped me declutter my inbox, organize my newsletters, and finally take control of my content consumption. And the best part? I built the first version in just <strong>one day</strong>.</p>
<h2 id="heading-the-problem-content-overload"><strong>The Problem: Content Overload</strong></h2>
<p>I love staying informed, but my inbox has become a black hole. I was subscribed to dozens of newsletters, from tech updates to finance tips, and couldn’t keep up. The more I ignored them, the more they piled up. It wasn’t just emails—it was a symptom of a larger issue: <strong>content hoarding</strong>.</p>
<p>When I finally found the time to catch up, I’d spend hours reading dozens of articles in one sitting. However, during one of these marathon sessions, it struck me that <strong>many of the tech newsletters I subscribed to shared the same articles</strong>. I was wasting time reading the same content over and over again.</p>
<p>I realized I needed a system to:</p>
<ol>
<li><p><strong>Automatically sort and categorize</strong> my newsletters.</p>
</li>
<li><p><strong>Remove duplicates</strong> and irrelevant content.</p>
</li>
<li><p><strong>Deliver a curated feed</strong> of the most important updates.</p>
</li>
</ol>
<h2 id="heading-the-solution-briefly-version-1"><strong>The Solution: Briefly (Version 1)</strong></h2>
<p>I have been <a target="_blank" href="https://blog.nemausat.com/ai-advent-of-code-2024-day-1">using LLM a lot recently</a>. So I decided to build <a target="_blank" href="https://briefly-server.nemausat.com/feed"><strong>Briefly</strong></a>, an AI-powered tool that would process my emails, organize them, and present them in a clean, easy-to-read feed. Here’s how I did it in just one day:</p>
<h3 id="heading-1-the-ai-agent-my-email-assistant"><strong>1. The AI Agent: My Email Assistant</strong></h3>
<p>The first step was creating a Python agent to handle my emails. This agent:</p>
<ul>
<li><p><strong>Fetches Emails</strong>: Using the Gmail API, it accesses my inbox every morning.</p>
</li>
<li><p><strong>Deduplicates Content</strong>: It uses hashing techniques to identify and remove duplicate emails.</p>
</li>
<li><p><strong>Categorizes Newsletters</strong>: It sorts emails into categories like Tech, Finance, and Health.</p>
</li>
</ul>
<p>This agent became my personal email assistant, tirelessly working behind the scenes to declutter my inbox.</p>
<p>I built the agent with <a target="_blank" href="https://ai.pydantic.dev/">Pydantic AI</a>: <em>a Python agent framework designed to make it less painful to build production-grade applications with Generative AI</em> built by the team behind <a target="_blank" href="https://docs.pydantic.dev/latest/">Pydantic</a>.</p>
<p>It was a pleasant experience. The framework helped me focus on the core logic using tools I am already familiar with.</p>
<h3 id="heading-2-the-feed-a-simple-web-app"><strong>2. The Feed: A Simple Web App</strong></h3>
<p><a target="_blank" href="https://briefly-server.nemausat.com/feed"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1738214591897/f99f92db-7e9f-423c-a6be-dd86bb39fd27.png" alt="screenshot of Briefly feed" /></a></p>
<p>For the first version, I built a <a target="_blank" href="https://briefly-server.nemausat.com/feed"><strong>server-rendered web app</strong></a> using <a target="_blank" href="https://fastapi.tiangolo.com/"><strong>FastAPI</strong></a>. It’s not fancy, but it gets the job done. The app:</p>
<ul>
<li><p>Fetches newsletters from the database.</p>
</li>
<li><p>Displays them in a simple, no-frills feed.</p>
</li>
<li><p>Allows me to see my curated newsletters in one place.</p>
</li>
</ul>
<p>I spent most of my time fighting the <strong>OAuth2 specification</strong> to authenticate with the Gmail API. It was a headache, but I finally got it working!</p>
<p>Of course, the UI is AI-generated!</p>
<h3 id="heading-3-the-database-turso"><strong>3. The Database: Turso</strong></h3>
<p>I needed a fast, scalable, and easy-to-use database to store the processed articles. That’s where <a target="_blank" href="https://turso.tech/"><strong>Turso</strong></a> came in. Turso is a serverless, globally distributed <a target="_blank" href="https://www.sqlite.org/">SQLite</a> database that allowed me to:</p>
<ul>
<li><p>Store all my newsletters in one place.</p>
</li>
<li><p>Access them quickly, no matter where I was.</p>
</li>
<li><p>Scale effortlessly as my data grew.</p>
</li>
</ul>
<p>With Turso, I had a reliable foundation for my system.</p>
<h2 id="heading-the-results-so-far"><strong>The Results (So Far)</strong></h2>
<p>Even in its early stages, <strong>Briefly</strong> has already made a difference. Every morning, I wake up to a curated feed of the most important newsletters, neatly organized and free of duplicates. I no longer feel overwhelmed by the sheer volume of content—instead, I feel in control.</p>
<p>Here’s what <strong>Briefly</strong> has done for me so far:</p>
<ul>
<li><p><strong>Saved Time</strong>: No more sifting through hundreds of emails.</p>
</li>
<li><p><strong>Reduced Stress</strong>: A clean inbox is a happy inbox.</p>
</li>
<li><p><strong>Improved Focus</strong>: I can now focus on the content that matters most.</p>
</li>
</ul>
<h2 id="heading-whats-next"><strong>What’s Next?</strong></h2>
<p>This is just the <strong>first version</strong> of <strong>Briefly</strong>, and I’m excited to keep improving it. Here’s what I’m planning next:</p>
<ol>
<li><p><strong>A Full-Fledged Nuxt 3 Web App</strong>:</p>
<ul>
<li><p>I’ll replace the FastAPI feed with a modern, responsive Nuxt 3 app.</p>
</li>
<li><p>This will include better UI/UX, search, and filtering features.</p>
</li>
<li><p>Content management</p>
</li>
</ul>
</li>
<li><p><strong>Summarization</strong>:</p>
<ul>
<li>Use AI to summarize long newsletters into bite-sized updates.</li>
</ul>
</li>
<li><p><strong>Personalization</strong>:</p>
<ul>
<li>Learn my preferences and prioritize the content I care about.</li>
</ul>
</li>
</ol>
<h3 id="heading-open-sourcing-briefly"><strong>Open-Sourcing Briefly</strong></h3>
<p>As I continue to improve <strong>Briefly</strong>, I plan to <strong>open-source</strong> future versions. My goal is to make it accessible to others who might be facing the same challenges with content overload. By sharing the code, I hope to:</p>
<ul>
<li><p>Encourage collaboration and innovation.</p>
</li>
<li><p>Help others learn from my approach (and mistakes!).</p>
</li>
<li><p>Build a community around tools that make our digital lives easier.</p>
</li>
</ul>
<p>Stay tuned for updates, and feel free to reach out if you’re interested in contributing or just want to chat about AI, productivity, or battling inbox chaos!</p>
<p>I might even turn it into a <strong>platform</strong> to allow others to use it without coding and hosting it themselves.</p>
<h2 id="heading-lessons-learned"><strong>Lessons Learned</strong></h2>
<p>Building <strong>Briefly</strong> taught me a few valuable lessons:</p>
<ol>
<li><p><strong>Start Small</strong>: You don’t need a perfect product on day one. A simple prototype can already make a big difference.</p>
</li>
<li><p><strong>OAuth2 is Tricky</strong>: Most of my time was spent wrestling with OAuth2 authentication. If you’re working with APIs, be prepared for some frustration!</p>
</li>
<li><p><strong>AI is a Game-Changer</strong>: Even a basic AI agent can solve real-world problems in ways that feel almost magical.</p>
</li>
</ol>
<h2 id="heading-final-thoughts"><strong>Final Thoughts</strong></h2>
<p>Content hoarding is a modern problem, but it’s not insurmountable. With a little creativity and the power of AI, I was able to take control of my inbox and reclaim my time—all in just one day. If you’re struggling with content overload, I encourage you to explore how technology can help. Who knows? You might just build the next <strong>Briefly</strong>.</p>
<p>What about you? Have you ever used AI to solve a personal problem? Let me know in the comments!</p>
]]></content:encoded></item><item><title><![CDATA[How to Deal with Software Vendors]]></title><description><![CDATA[Navigating the world of software vendors can be tricky, especially when you’re trying to ensure that their product aligns with your business needs. This guide is for software engineers and technical leaders who want to make the most of their interact...]]></description><link>https://blog.nemausat.com/how-to-deal-with-software-vendors</link><guid isPermaLink="true">https://blog.nemausat.com/how-to-deal-with-software-vendors</guid><category><![CDATA[software development]]></category><dc:creator><![CDATA[Ruidy Nemausat (PhD)]]></dc:creator><pubDate>Tue, 14 Jan 2025 08:56:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1736844983329/81ecef09-36ae-400e-8864-7ce0044a22b9.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Navigating the world of software vendors can be tricky, especially when you’re trying to ensure that their product aligns with your business needs. This guide is for software engineers and technical leaders who want to make the most of their interactions with vendors. By focusing on key strategies, you can maximize value and avoid common pitfalls. Let’s dive in.</p>
<h2 id="heading-sell-your-company">Sell your Company</h2>
<p>When you engage with a software vendor, you’re not just evaluating their product—you’re selling them your business. You want to show that you are a serious customer and provide the account manager with the context they need to offer a proposal tailored to your needs.</p>
<p>Here’s how to do it effectively:</p>
<ul>
<li><p><strong>Explain What You Do</strong>: Share clearly and concisely explaining your business. Highlight your industry, core mission, and what sets you apart.</p>
</li>
<li><p><strong>Clarify Your Business Model</strong>: Help the vendor understand how your organization operates and how their software fits into your processes.</p>
</li>
<li><p><strong>Provide Scale Numbers and Customer Names</strong>: Share metrics like team size, number of users, or transaction volumes. If you work with well-known customers, name-drop them to showcase your credibility.</p>
</li>
</ul>
<h2 id="heading-get-technical">Get Technical</h2>
<p>While your counterpart at the vendor might not always be technical, it’s crucial to dive into the most important technical details.</p>
<ul>
<li><p><strong>Share Key Technical Details</strong>: Be upfront about your tech stack, infrastructure, and integration requirements. This ensures the vendor understands what’s needed to make the software work for you.</p>
</li>
<li><p><strong>Walk Through Use Cases</strong>: Describe one or two of your primary use cases. This will help you clearly articulate your needs and set expectations.</p>
</li>
<li><p><strong>Gauge Their Expertise</strong>: Vendors hear similar questions daily. If they struggle to answer, it’s a red flag that they’re not skilled or your use case isn’t common. Ask for examples of existing customers with similar use cases to validate the vendor’s claims.</p>
</li>
<li><p><strong>Name-Drop Competitors</strong>: Mentioning that you’re evaluating other vendors prompts the salesperson to highlight their product’s advantages. Keep the focus on your requirements to prevent the conversation from derailing into generic sales pitches. Discussing technical details ensures the software meets your requirements and minimizes surprises down the road.</p>
</li>
</ul>
<h2 id="heading-support">Support</h2>
<p>Support can make or break your experience with a new tool. Ask the right questions upfront:</p>
<ul>
<li><p><strong>See the Tool in Action</strong>: Request a live demo or a detailed walkthrough to see how the software performs.</p>
</li>
<li><p><strong>Understand Migration Support</strong>: Determine what tools or resources the vendor provides to help you transition from your current stack to theirs. This will ensure you have the necessary assistance for a smooth implementation.</p>
</li>
</ul>
<h2 id="heading-money">Money</h2>
<p>Budgeting is an essential part of the evaluation process. Here’s how to handle pricing discussions:</p>
<ul>
<li><p><strong>Get a Quote Based on Real Use Cases</strong>: Vendors often offer generic pricing until you provide specifics. Use your use cases to get a customized quote.</p>
</li>
<li><p><strong>Name-Drop Competitors Again</strong>: It’s fair to let them know you’re exploring other options. This can encourage them to provide competitive pricing.</p>
</li>
<li><p><strong>Ask for a Demo and Trial</strong>: Push for a demo if it’s not readily offered. Many vendors are willing to negotiate free trials, even if it’s not mentioned on their website. A little flattery, like acknowledging their expertise or a feature you genuinely admire about their product, can set a positive tone for negotiations.</p>
</li>
</ul>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>Interacting with software vendors is both an art and a science. You can make informed decisions that benefit your business by clearly communicating your needs, evaluating their expertise, and strategically handling pricing and support discussions. Remember: the goal is a partnership, not just a purchase.</p>
]]></content:encoded></item><item><title><![CDATA[Day 2: Learning, Testing, and Junior Dev Vibes]]></title><description><![CDATA[It’s Day 2 of Advent of Code, and my AI assistant, Aider (+ Claude Sonnet), is already showing signs of learning and adapting. Today’s challenge was all about parsing and analyzing data, with a mix of predictable successes, unexpected issues, and a s...]]></description><link>https://blog.nemausat.com/ai-advent-of-code-2024-day-2</link><guid isPermaLink="true">https://blog.nemausat.com/ai-advent-of-code-2024-day-2</guid><category><![CDATA[AI]]></category><category><![CDATA[AdventOfCode2024]]></category><category><![CDATA[Elixir]]></category><dc:creator><![CDATA[Ruidy Nemausat (PhD)]]></dc:creator><pubDate>Mon, 02 Dec 2024 08:46:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1733129170855/466d8fc5-4850-4872-b305-e48f51511d07.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It’s Day 2 of Advent of Code, and my AI assistant, Aider (+ Claude Sonnet), is already showing signs of learning and adapting. Today’s challenge was all about parsing and analyzing data, with a mix of predictable successes, unexpected issues, and a sprinkle of junior dev behavior from the AI.</p>
<p>The full code is available on <a target="_blank" href="https://github.com/rjNemo/ai_advent_code_2024">GitHub</a>.</p>
<h1 id="heading-part-1-red-nosed-reindeer-data-analysis">Part 1: Red-Nosed Reindeer Data Analysis</h1>
<p>The <strong>Red-Nosed Reindeer nuclear fusion/fission plant</strong> engineers needed help analyzing unusual data from their reactor. Each report contains a list of numbers called levels. A report is considered “safe” if it meets two criteria:</p>
<ol>
<li><p>All the levels are either increasing or decreasing.</p>
</li>
<li><p>Any two adjacent levels differ by at least 1 and at most 3.</p>
</li>
</ol>
<h2 id="heading-ai-behavior-a-clever-start"><strong>AI Behavior: A Clever Start</strong></h2>
<p>When I asked Aider to scrape the challenge and store it as a file, it surprised me. Instead of copying the entire challenge, it <strong>summarized</strong> the problem, extracting the key requirements and ignoring the fluff. Its output included a short description and an example, which was oddly efficient! It’s learning how to cut to the chase – a promising sign.</p>
<h2 id="heading-red-green-refactor"><strong>Red, Green, Refactor</strong></h2>
<ol>
<li><strong>Red: Writing Failing Tests</strong></li>
</ol>
<p>Following the test-driven development (TDD) approach, I wrote tests based on the example input. Aider generated:</p>
<ul>
<li><p>Tests for valid inputs to compute individual parts of the solution.</p>
</li>
<li><p>Failing test cases for edge cases like empty input or invalid formats.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733121619737/8b90d518-d7c0-4b81-992a-8ea64a037d7e.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><strong>Green: Implementation Code</strong></li>
</ol>
<p>Aider then implemented the code. The solution was surprisingly clean and idiomatic for Elixir. It:</p>
<ul>
<li><p>Followed Elixir conventions and project structure.</p>
</li>
<li><p>Handled all test cases, including edge cases and error conditions.</p>
</li>
<li><p>Broke down the problem into smaller, reusable functions:</p>
<ul>
<li><p><code>parse_reports/1</code>: Validates the input.</p>
</li>
<li><p><code>parse_line/1</code>: Converts strings to numbers.</p>
</li>
<li><p><code>safe_report?/1</code>: Contains the main logic.</p>
</li>
</ul>
</li>
<li><p>Used helper functions for checking increasing or decreasing patterns.</p>
</li>
</ul>
<p>It even employed the <code>with</code> keyword, elegantly focusing the logic on the happy path while bubbling errors up.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733122165518/94353b75-8351-4cab-9e5a-c90f81bb55b6.png" alt class="image--center mx-auto" /></p>
<p>The <code>parse_report</code> function handled errors gracefully</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733122358889/3b8cb23d-cde7-4f09-9dcf-a5ca4684859b.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><strong>Refactor</strong></li>
</ol>
<p>There wasn’t much refactoring needed – the code was already better than I expected! It followed idiomatic patterns and was well-structured.</p>
<h2 id="heading-hallucination-alert"><strong>Hallucination Alert!</strong></h2>
<h3 id="heading-december-2023">December 2023?!</h3>
<p>At one point, Aider claimed the puzzle input wasn’t available until <strong>December 2024</strong> (spoiler: it’s December 2nd, 2024). After I pushed back, it acknowledged the mistake and told me to fetch the data myself. Classic junior dev vibes: “If I can’t do it, it must be impossible!”</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733122639620/0d9da10f-012d-4b07-94ed-d6d011442f51.png" alt class="image--center mx-auto" /></p>
<p>Fine, I retrieved the data manually.</p>
<h3 id="heading-wrong-puzzle">Wrong Puzzle?!</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733123409572/7986ecce-60c8-4b6f-b874-233fdaa105c4.png" alt class="image--center mx-auto" /></p>
<p>With the real input in hand, I ran into another hiccup. The AI struggled because the test inputs had uniform rows, but the real input didn’t. This was a case of <strong>overfitting</strong> to the test cases – a valuable lesson in ensuring tests are as generic as possible.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733123415350/43169e51-9927-4c90-922a-d2daf4e28a85.png" alt class="image--center mx-auto" /></p>
<p>Once I clarified the issue, the AI fixed the solution and apologized. Success! However, it inadvertently broke the tests during the process. After a quick nudge to run the tests during refactoring, it resolved the issue quickly. A good reminder to be explicit in instructions when collaborating with an AI.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733123713209/638cfd51-ef6e-4eba-b2f5-22c9b4633f78.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-part-2-the-harder-variant"><strong>Part 2: The Harder Variant</strong></h1>
<p>As always, Advent of Code’s second part added complexity to the challenge.</p>
<ol>
<li><strong>New Tests</strong></li>
</ol>
<p>I started by creating tests for the updated requirements. Aider adapted smoothly, generating comprehensive tests for the additional logic.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733124530700/b7615f09-8dff-4b76-a695-70209afde437.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><strong>Implementation</strong></li>
</ol>
<p>The implementation phase went smoothly. Aider continued to follow the idiomatic patterns established earlier and handled the new requirements without much trouble.</p>
<ol start="3">
<li><strong>Success!</strong></li>
</ol>
<p>The solution worked on the first try. It felt great to see the AI growing more reliable with each iteration.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733125048186/b4a66a1e-e89e-4b38-9d0a-5590f4651baf.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-reflections-on-day-2"><strong>Reflections on Day 2</strong></h2>
<p>Today reinforced some key takeaways for working with AI assistants:</p>
<ul>
<li><p><strong>Testing discipline is non-negotiable.</strong> Overfitting to edge cases can derail your progress, so always aim for generic tests.</p>
</li>
<li><p><strong>Be explicit in your instructions.</strong> Even smart tools like Aider need clear guidance to avoid breaking things inadvertently.</p>
</li>
<li><p><strong>AI can be a great collaborator.</strong> Its ability to focus on implementation details lets me stay focused on the higher-level logic and architecture—a fantastic productivity boost for senior engineers and engineering managers.</p>
</li>
</ul>
<p>Day 2 was a mix of learning, problem-solving, and junior dev humor. Can’t wait to see what Day 3 has in store!</p>
]]></content:encoded></item><item><title><![CDATA[Day 1: Advent of Code, Elixir, and Aider]]></title><description><![CDATA[It’s official – I’m diving into Advent of Code 2024 with Elixir, one of my all-time favorite programming languages. Elixir has this elegant simplicity and scalability that I adore. While it’s not as mainstream as JavaScript or Python, its growing pop...]]></description><link>https://blog.nemausat.com/ai-advent-of-code-2024-day-1</link><guid isPermaLink="true">https://blog.nemausat.com/ai-advent-of-code-2024-day-1</guid><category><![CDATA[AI]]></category><category><![CDATA[AdventOfCode2024]]></category><category><![CDATA[Elixir]]></category><dc:creator><![CDATA[Ruidy Nemausat (PhD)]]></dc:creator><pubDate>Sun, 01 Dec 2024 12:45:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/M9zrXZunxJg/upload/11e06b7486510b2922e5aee29ecf7407.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It’s official – I’m diving into Advent of Code 2024 with <a target="_blank" href="https://elixir-lang.org/"><strong>Elixir</strong></a>, one of my all-time favorite programming languages. Elixir has this elegant simplicity and scalability that I adore. While it’s not as mainstream as JavaScript or Python, its growing popularity makes it perfect for this kind of challenge. Plus, it’s a great excuse to brush up on my skills. You can follow along or grab the code here: <a target="_blank" href="https://github.com/rjNemo/ai_advent_code_2024">GitHub Repository</a>. Feel free to submit pull requests for your favorite language!</p>
<p>For this journey, I’m using <a target="_blank" href="https://aider.chat/"><strong>Aider</strong></a> as my AI assistant, powered by <a target="_blank" href="https://www.anthropic.com/news/3-5-models-and-computer-use"><strong>Claude Sonnet 20241022</strong></a> from Anthropic. The setup includes the <a target="_blank" href="https://github.com/joshuavial/aider.nvim">aider.nvim plugin</a> integrated with <a target="_blank" href="https://neovim.io/">Neovim</a>. So far, Aider + Claude has been surprisingly reliable – it feels like working with a junior dev with a large memory who’s super confident but occasionally clueless. Dangerous? Yes. Manageable? Absolutely, with strict testing practices.</p>
<p>In the rest of the article I will mention Aider but keep in mind that the results vary greatly based on the model used.</p>
<h1 id="heading-part-1-getting-started-with-the-first-challenge"><strong>Part 1: Getting Started with the First Challenge</strong></h1>
<p>First up, let’s fetch the Day 1 challenge. Aider makes this easy with its <code>/web</code> command, which uses Playwright to scrape web pages.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733053700581/925808c8-a9c9-4264-94d9-f20614a47205.png" alt class="image--center mx-auto" /></p>
<p>One cool feature of Aider is its ability to commit changes directly to Git and run CLI commands. It’s a little like having an overachieving intern who documents everything meticulously.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733053905561/52f27a2e-45de-429d-b9ef-fe4828be71dc.png" alt class="image--center mx-auto" /></p>
<p><strong>Here’s my process:</strong></p>
<ol>
<li><strong>Write Tests First</strong></li>
</ol>
<p>I began by asking Aider to create tests based on the examples provided in the challenge. It generated:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733053538039/9c3ec2f7-26d3-40b2-97a0-575320c4179a.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><strong>Generate Production Code</strong></li>
</ol>
<p>Next, I asked Aider to write the production code to pass those tests. It required explicitly adding files for context, which I found useful for keeping the AI focused.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733054048235/d1f5f547-3c20-4826-9c54-41ae825ce6c7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733054193725/bef11ffc-07ec-4c49-8e00-56fd72457297.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733053580854/e221f15e-91ef-4a62-855b-beef388b0ebe.png" alt class="image--center mx-auto" /></p>
<p>3. <strong>Run the Tests</strong></p>
<p>Running the tests confirmed that the example passed. A solid start.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733054245821/e2642ff9-d4f2-43c8-9a2c-21bdb1bbc416.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733054252670/852e4cb0-9864-434f-a9fe-974b6338b5db.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-solving-the-challenge"><strong>Solving the Challenge</strong></h2>
<p>Advent of Code provides unique inputs for each participant. I asked Aider to fetch my input and store it in a file.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733054550695/f3d8a956-b754-4c8c-ac82-c6ca14e12587.png" alt class="image--center mx-auto" /></p>
<p>The result?</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733053551060/8aff1f59-2fc9-4686-97cb-e1aaffff9379.png" alt class="image--center mx-auto" /></p>
<p>Great success!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733054306562/d8a5ee9e-fc5f-40cd-9be3-d34b83ab9651.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-my-thoughts-so-far">My thoughts so far</h2>
<p>I’m impressed by how effective Aider is with minimal and sometimes vague prompts. While I didn’t love every stylistic choice it made, the experience reminded me of reviewing code from junior developers at work: functional, decent style, but room for improvement. It’s oddly nostalgic.</p>
<h1 id="heading-part-2-the-harder-variant"><strong>Part 2: The Harder Variant</strong></h1>
<p>Advent of Code challenges always include a second part—a more difficult twist on the original problem. Here’s how it went:</p>
<ol>
<li><strong>Fetch the Challenge</strong></li>
</ol>
<p>For the first time, Aider struggled to retrieve the content automatically. Perhaps the site’s structure was to blame. No worries; I added it manually.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733054773570/23a4ea41-29ad-4c05-a20c-1aa24fa62634.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><strong>Repeat the Process</strong></li>
</ol>
<p>Just like Part 1, I wrote tests based on the example and asked Aider to implement the solution. It delivered:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733054885324/2d497d26-679b-4218-9420-4c3a3a6826f5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733053558682/48cb4aeb-1b02-461c-b11c-bc7ce43925c0.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><strong>Great Success Again!</strong></li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733054928660/548d128a-662b-4296-9bdc-4f3b658718b8.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-refactoring">Refactoring</h1>
<p>To wrap things up, I spent some time refactoring the code. While Aider’s solutions worked, there’s always room to clean up and improve readability. Refactoring is a satisfying part of the process, turning a rough draft into something polished.</p>
<h1 id="heading-conclusion">Conclusion</h1>
<p>Day 1 is in the books, and it’s been a blast so far. Using Aider feels like a hybrid experience between mentoring and pair programming.</p>
<p>It has been an eye-opener. Collaborating with Aider has shown me just how far AI tools have come – not just as coding assistants but as reliable collaborators for problem-solving. For <strong>senior engineers</strong> and <strong>engineering managers</strong>, I believe this kind of tool is invaluable for keeping in touch with the code by building prototypes. It allows you to focus on higher levels of abstraction, like architecture and overall design, while letting the AI handle implementation details.</p>
<p>That said, this experience has reinforced an important lesson: <strong>testing discipline is crucial</strong> when working with AI. Reliable software isn’t just about getting things to work – it’s about ensuring they keep working as expected. With proper testing practices, tools like Aider can become powerful allies in any developer’s toolkit.</p>
<p>Stay tuned for Day 2. Here’s to more challenges, more learning, and a productive Advent of Code 2024!</p>
]]></content:encoded></item><item><title><![CDATA[AI-Driven Advent of Code 2024]]></title><description><![CDATA[Day 0: The Start of Something Different
This year marks a new chapter for me in Advent of Code – one that involves ChatGPT and Large Language Models (LLMs). It’s the first time I’ll be integrating AI into my problem-solving process, and I’m curious (...]]></description><link>https://blog.nemausat.com/ai-advent-of-code-2024-day-0</link><guid isPermaLink="true">https://blog.nemausat.com/ai-advent-of-code-2024-day-0</guid><category><![CDATA[AI]]></category><category><![CDATA[AdventOfCode2024]]></category><dc:creator><![CDATA[Ruidy Nemausat (PhD)]]></dc:creator><pubDate>Sun, 01 Dec 2024 08:21:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/nGoCBxiaRO0/upload/16c0b956baf11ba83efe9f0ab67c419b.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-day-0-the-start-of-something-different"><strong>Day 0: The Start of Something Different</strong></h1>
<p>This year marks a new chapter for me in Advent of Code – one that involves ChatGPT and Large Language Models (LLMs). It’s the first time I’ll be integrating AI into my problem-solving process, and I’m curious (and a little excited) to see how it changes the experience. Will it speed me up? Will it change how I think about problems? Will it completely break my brain by solving everything before I even get my coffee? Let’s find out.</p>
<h1 id="heading-what-is-advent-of-code"><strong>What is Advent of Code?</strong></h1>
<p>If you’re unfamiliar with it, Advent of Code is an annual programming event from December 1st to December 25th. Each day, a new coding puzzle is released, increasing in complexity as the month progresses. It’s a perfect blend of brain-teasing challenges, algorithm design, and competitive fun. Some people use it to learn a new programming language, while others try to dominate the leaderboard. For me, it’s always been about exploring creative solutions – and now, experimenting with AI.</p>
<h1 id="heading-what-impact-can-llms-have-on-the-advent-of-code"><strong>What Impact Can LLMs Have on the Advent of Code?</strong></h1>
<p>LLMs, like ChatGPT, bring something new to the table. They’re great at quickly generating boilerplate code, explaining complex algorithms, or even debugging tricky issues. However, using them during Advent of Code isn’t without challenges. LLMs might:</p>
<ul>
<li><p>Solve problems too quickly, taking away the fun of struggling and figuring things out.</p>
</li>
<li><p>Suggest solutions that are overly complex or not optimized for the leaderboard.</p>
</li>
<li><p>Miss nuances in the problem statement (because hey, even AI can misread).</p>
</li>
</ul>
<p>That’s why I’ve decided to set a few rules to keep things fair, challenging, and enjoyable.</p>
<h1 id="heading-rules-for-my-ai-engineer"><strong>Rules for My AI Engineer</strong></h1>
<p>I’ve defined some ground rules for how I’ll collaborate with my AI assistant this year:</p>
<ol>
<li><strong>AI is a collaborator, not a substitute.</strong></li>
</ol>
<p>I’ll guide the AI and review every suggestion it makes. No copy-pasting solutions without understanding them.</p>
<ol start="2">
<li><strong>Use AI for learning, not cheating.</strong></li>
</ol>
<p>If I’m stuck, the AI can help explain concepts or suggest approaches, but I’ll avoid direct solutions unless necessary. Also, I will not use it to automate my participation in the leaderboard. (I am curious though about what others will do.)</p>
<ol start="3">
<li><strong>Stay human-driven.</strong></li>
</ol>
<p>Creativity and problem-solving are still the priority. The AI will support me, but it won’t drive the process.</p>
<h1 id="heading-the-setup"><strong>The Setup</strong></h1>
<p>Here’s the tech stack I’ll be using this year, including my AI assistant:</p>
<ul>
<li><p><strong>Aider</strong>: A fascinating tool (found at <a target="_blank" href="https://aider.chat/">aider.chat</a>) that acts as an autonomous AI agent. It’s capable of:</p>
<ul>
<li><p>Fetching the daily instructions,</p>
</li>
<li><p>Writing and editing code,</p>
</li>
<li><p>Creating and running tests,</p>
</li>
<li><p>Committing changes to a Git repository.</p>
</li>
</ul>
</li>
</ul>
<p>This setup is robust enough for the AI to participate independently in Advent of Code if I let it. It could even climb the leaderboard on its own—though I’m not planning to let it take over entirely.</p>
<p>That’s it for <strong>Day 0!</strong> I’m excited to see how this setup evolves over the next 25 days. Stay tuned as I share insights, challenges, and maybe even a few AI-driven “aha” moments along the way. Happy coding!</p>
]]></content:encoded></item><item><title><![CDATA[Meetings are useless (most of them)]]></title><description><![CDATA[Meetings suck!
Not because they do but because of how we do them.
They are long, not well-defined, and most people attending don’t know what they are doing here and would like to go back to their activities.
The typical meeting experience expects you...]]></description><link>https://blog.nemausat.com/meetings-are-useless-most-of-them</link><guid isPermaLink="true">https://blog.nemausat.com/meetings-are-useless-most-of-them</guid><category><![CDATA[meetings]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[Ruidy Nemausat (PhD)]]></dc:creator><pubDate>Wed, 22 Jun 2022 08:29:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/Q80LYxv_Tbs/upload/v1655886500694/X0DDppheQ.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Meetings suck!</p>
<p>Not because they do but because of how we do them.</p>
<p>They are long, not well-defined, and most people attending don’t know what they are doing here and would like to go back to their activities.</p>
<p>The typical meeting experience expects you to come into a room, be told about a subject, and you should start throwing ideas, and asking relevant questions on the spot…</p>
<p>It is not a delightful experience…</p>
<p>I don’t know, but I don’t work like that. Most engineers don’t. We tend to be analytical people. We prefer to think, to check some ideas first, and we like to sound smart…</p>
<h2 id="heading-why-do-meetings-suck">Why do meetings suck?</h2>
<p>Most meetings are useless. In my experience with some processes, we can cancel most of them.</p>
<p>Calling for a meeting should be forbidden if we don’t answer the following questions upfront.</p>
<ul>
<li><p>Agenda</p>
<ul>
<li><p>What are we going to talk about? (why is it important)</p>
</li>
<li><p>Who will lead the discussion?</p>
</li>
<li><p>What outcome is expected?</p>
</li>
</ul>
</li>
<li><p>Participation</p>
<ul>
<li><p>Why is your presence required?</p>
</li>
<li><p>What is expected from every participant before, during, and after the meeting?</p>
</li>
</ul>
</li>
<li><p>Documentation</p>
<ul>
<li><p>Supporting documents that must be reviewed, and read before attending the meeting</p>
</li>
<li><p>List of questions, answers</p>
</li>
<li><p>Link to an internal chat channel to discuss the topic at hand</p>
</li>
</ul>
</li>
</ul>
<p>You should write down a document containing at least the meeting agenda when calling for a meeting. You should also explain why this meeting is essential, what outcome is expected, and the documents that must be consulted to support the meeting.</p>
<p>Your document should invite participants to write down their questions <strong>ahead of time</strong> so we can start the conversation asynchronously. That’s why I prefer to put a link to a Slack thread where the Q&amp;A can happen. Then we put the final answers in the document.</p>
<p>Doing so the actual meeting may be no longer relevant.</p>
<h2 id="heading-why-do-we-need-meetings">Why do we need meetings?</h2>
<p>Writing down the expected outcome, providing the documentation, and inviting participants to communicate is the essence of meetings.</p>
<p>We don’t need to sit together in a physical or virtual room to do that. At least we can initiate the process offline so that the actual gathering makes more sense.</p>
]]></content:encoded></item></channel></rss>