<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://www.akashtandon.in/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.akashtandon.in/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-10-07T12:10:11+00:00</updated><id>https://www.akashtandon.in/feed.xml</id><title type="html">Akash Tandon</title><subtitle>The personal website of Akash Tandon. Writings, work and some other bits of relevant information.
</subtitle><author><name>Akash Tandon</name></author><entry><title type="html">Loose opinions on future of software, developers and corporations</title><link href="https://www.akashtandon.in/technology/2026-10-05-loose-opinions-on-software/" rel="alternate" type="text/html" title="Loose opinions on future of software, developers and corporations" /><published>2026-10-05T00:00:00+00:00</published><updated>2026-10-05T00:00:00+00:00</updated><id>https://www.akashtandon.in/technology/loose-opinions-on-software</id><content type="html" xml:base="https://www.akashtandon.in/technology/2026-10-05-loose-opinions-on-software/"><![CDATA[<p>There has been a lot of speculation about the future of software development and knowledge work recently. I have been a software developer for 10+ years and ran a venture-backed SaaS startup for 4+ years that got acquired. Naturally, I am trying to make sense of it all.</p>

<p>With respect to software development in particular, different questions often get muddled up. I realized this during a spirited discussion with a friend. These questions are:</p>

<ul>
  <li>Will software as an artefact remain valuable?</li>
  <li>Will software development continue to be an economically valuable professional trade/craft?</li>
  <li>Will businesses where software is the primary differentiator, not physical hardware or operations,  remain valuable?</li>
</ul>

<p>These are all related but looking at them separately from first principles helps me clear my head.</p>

<h2 id="software-as-an-artefact">Software as an artefact</h2>

<p>This one’s easy. Software is not going away. The hosts (think R2-D2 or Hal) or interfaces (e.g. voice) will change dramatically but consumption of software should continue to trend up. By consumption, I don’t necessarily mean us staring at screens.</p>

<p>Optimistically, the increased usage can take the form of proactive assistants, background agents or robots making lives easier across economic levels. We will need new interfaces, delivery mechanisms and economic models. The evolution will be rapid and humanity’s going to ask for better software.</p>

<p>As software becomes cheaper to produce, we build more of it. Something that was not worth automating before can be automated. Irrespective of who builds it or who makes money from it, software should become more abundant.</p>

<h2 id="software-development-jobs">Software development jobs</h2>

<p>The question is not whether software development remains useful. It obviously will. The question is whether it remains economically valuable as a primary skill for as many individual developers as it is today. My current hunch is no.</p>

<p>The last few months have been a whirlwind. Meaningful parts of software development have been automated across companies of all sizes. The craft is evolving even if the opinions about the <a href="https://world.hey.com/dhh/endless-execution-4157e065">direction</a> <a href="https://mariozechner.at/posts/2026-03-25-thoughts-on-slowing-the-fuck-down/">differ</a>. Agents can write code, navigate repositories, debug problems and increasingly execute longer-running tasks.</p>

<p>You still need human developers to call the shots, with or without an army of agents, to build and operate meaningful production software in 2026. Theoretically, far fewer people can generate the same amount of output compared to a couple of years back though.</p>

<p>AI also makes software development capability accessible to people who would never have become professional programmers. Provided a foundational platform exists, end users should be able to direct their agents to customize software they own or subscribe to.</p>

<p style="text-align: center;">
  <a href="https://x.com/AkashTandon/status/2090094911869878489"><img src="/assets/img/india_enterprise_ai_software_tweet.png" alt="Tweet by Akash Tandon about a friend running a manufacturing-heavy mid-scale enterprise in India, whose team members with no software experience now build small Python and browser-based tools with ChatGPT, leading to the cancellation of a CRM service contract" style="width: 100%; max-width: 696px;" /></a>
</p>

<p>The economic benefits of software development may accrue to a smaller group of people tackling problems where technical judgment and depth remain scarce. The ability to build software itself diffuses across a much larger group as a secondary skill.</p>

<h2 id="software-companies">Software companies</h2>

<p>The recent downturn where traditional software companies lost market value, poetically termed SaaSocalypse, led many to believe that software businesses* won’t be valuable in future.</p>

<p>I don’t believe this. Software companies can and will generate significant market value in the future. Increased software consumption helps but that is not enough. As building software gets easier, the ability to create software itself becomes less scarce. Most of a company’s alpha will have to come from what surrounds the software. This means distribution, proprietary data, workflow ownership, customer relationships, trust or deep expertise in a particular problem.</p>

<p>There’s also the matter of focus. Companies with heavy hardware or operations focus will still benefit from vendors doing the heavy-lifting on the software front instead of building everything in-house.</p>

<p>AI-driven changes could make software companies easier to start but harder to defend on the strength of good software products alone. I still expect significant market value to be created by software companies but the number of highly valuable ones may not grow in proportion to the amount of software being created and consumed.</p>

<p>*<em>By “software businesses”, I mean companies whose primary differentiator is software services or products as opposed to hardware or operations. This definition is fuzzy but bear with me for the sake of simplicity.</em></p>

<h2 id="road-ahead">Road ahead</h2>

<p>The above points are about the future 4-5 years from now. We are likely to consume more software while needing less human effort to produce it. But more software does not automatically imply more software developers or more economic benefits for software companies.</p>

<p>If you are someone who loves software development, feel free to ignore the above and continue to focus on your craft. The world needs good software more than ever even if it doesn’t need as many developers.</p>

<p>Predictions regarding AI are as good as the roll of a dice at this point. However, a mental model is helpful as an individual. Feel free to poke holes in mine.</p>

<p><em>Thanks to <a href="https://ankitamat.com/">Ankita</a> for reading the draft.</em></p>]]></content><author><name>Akash Tandon</name></author><category term="technology" /><summary type="html"><![CDATA[Will software remain valuable? Will software development remain a valuable trade? What about software companies? These questions often get muddled up. Here is my attempt at looking at them separately.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.akashtandon.in/assets/img/twilight_rooftop_overlooking_neon_city.jpg" /><media:content medium="image" url="https://www.akashtandon.in/assets/img/twilight_rooftop_overlooking_neon_city.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The craft of software scoping</title><link href="https://www.akashtandon.in/technology/2026-09-06-the-craft-of-software-scoping/" rel="alternate" type="text/html" title="The craft of software scoping" /><published>2026-09-06T00:00:00+00:00</published><updated>2026-09-06T00:00:00+00:00</updated><id>https://www.akashtandon.in/technology/the-craft-of-software-scoping</id><content type="html" xml:base="https://www.akashtandon.in/technology/2026-09-06-the-craft-of-software-scoping/"><![CDATA[<p>As an engineer or a product lead, you have been asked:</p>

<ul>
  <li>Can we do this?</li>
  <li>How hard is this?</li>
  <li>How long will this take?</li>
  <li>What is the best way to solve this?</li>
</ul>

<p>These questions touch on different aspects of <a href="https://www.svpg.com/four-big-risks/">risks</a> (value, usability, feasibility, viability) that come up when building any product. If you have been building software long enough, you realize the importance of these questions. Scoping is one way to answer them well.</p>

<p>AI can make software development dramatically faster but that doesn’t remove the need for judgment. If anything, this makes good scoping, i.e. deciding what and how to build, more important. Before getting into the principles for scoping well, let me clarify what I mean by the term.</p>

<h2 id="scoping-not-estimation">Scoping, not estimation</h2>

<p>By scoping, I mean the craft of going from a technical problem statement or business requirement to a precise proposed solution. This is different from pure time estimation where you come up with a timeline number in days/weeks/months for a particular solution to a problem. Scoping includes elements of estimation but focuses more on the validity and context of the problem statement in addition to coming up with an eventual solution.</p>

<p>Much has been written about the <a href="https://world.hey.com/dhh/software-estimates-have-never-worked-and-never-will-a41a9c71">failure to estimate</a> <a href="https://erikbern.com/2019/04/15/why-software-projects-take-longer-than-you-think-a-statistical-model.html">software work</a>. I agree with those opinions. This doesn’t mean we should give up and never provide timelines. Instead, our goal should be to scope a problem well and often work our way backwards from a time budget instead of providing unreliable time estimates upfront.</p>

<h2 id="scoping-principles">Scoping principles</h2>

<p>Despite advances in AI, you still have limits. They can be in terms of tokens, mental bandwidth or infrastructure cost in addition to time. There is still no free lunch. In fact, as the cost of building falls, these constraints become more important.</p>

<p>Below, I am sharing pointers that helped me and my teams consistently deliver production software with limited resources and often with ambiguity.</p>

<ul>
  <li><a href="#1-understand-the-why">Understand the why</a></li>
  <li><a href="#2-sometimes-saying-no-is-the-right-thing">Sometimes, saying no is the right thing</a></li>
  <li><a href="#3-experience-dont-just-show-or-tell">Experience, don’t just show or tell</a></li>
  <li><a href="#4-address-the-unknown">Address the unknown</a></li>
  <li><a href="#5-start-with-a-time-budget-not-the-other-way-round">Start with a time budget, not the other way round</a></li>
</ul>

<h3 id="1-understand-the-why">1. Understand the why</h3>

<p>Everything happens for a reason. Every problem statement or request that comes your way has a why behind it. That doesn’t mean the why may be justified or worth your team’s resources and time. Even in cases where the problem statement warrants work, the understanding may be incomplete. As someone tasked with building a solution, you should get as good an understanding as possible.</p>

<p>Depending on the stage, culture and domain of your company, this can involve anything from asking a lot of questions and reading documents to directly engaging with a customer.</p>

<p>For example, you may be asked to build integrations with Google Drive to ingest PDF/CSV as data sources for your customers in a month. This sounds like a straightforward integration task.</p>

<p>But the real question is whether customers need a unified searchable repository or simply better access to their raw files. You should aim to understand:</p>

<ul>
  <li>what building the feature will solve from a business point of view</li>
  <li>what triggered this requirement from an end user</li>
  <li>where the timeline originated</li>
</ul>

<p>The end goal can range from closing a couple of large enterprise deals to solving a repeated ask from customers dealing with a variety of data sources. Knowing the why will help you better define the scope of your solution.</p>

<p>Sometimes, you need to build with incomplete information. In those cases, your scope can include the need to gather more information without putting in a large amount of resources.</p>

<p>In most early stage startups, finding PMF is the single most important thing. To do that, sometimes you should just build that feature. But your decision-making and implementation can be much better if you know why something is needed at a particular date.</p>

<h3 id="2-sometimes-saying-no-is-the-right-thing">2. Sometimes, saying no is the right thing</h3>

<p>Saying no is the simplest thing to do in theory. It may be the hardest point to practice well from this list. You can’t just shoot down something because it is hard or agree because it is easy.</p>

<p>Once you understand why something needs to be built, the next question is whether it is worth building at all. Your decision should be based on relevant trade-offs: technical, business and/or cost to name a few.</p>

<p>Even if AI agents let you build a feature 10 times as easily, it may negatively affect an end-user’s experience or increase your infrastructure cost. It can also waste all kinds of resources from your team that could’ve been put to better use elsewhere - tokens, focus, sales collateral, marketing budget.</p>

<p>For example, a feature may take an AI agent a few hours to build but require significant infrastructure work to satisfy an enterprise customer’s requirement around data residency.</p>

<p>There are many times when you should not hesitate or overthink. For example, at a pre-PMF startup, moving fast can give you a high alpha if you learn from a mistake. I am not talking about those situations as much because in my experience, builders are more prone to saying yes than no. 🙂</p>

<h3 id="3-experience-dont-just-show-or-tell">3. Experience, don’t just show or tell</h3>

<p>With AI agents, it has become ridiculously easy to build a minimal usable version of a small app or a feature. When building becomes this cheap, sitting in a crude version of the user’s seat can be more valuable than discussing the idea abstractly. This can lead to better brainstorming, feasibility evaluations and more. There is no excuse to not take this approach now.</p>

<p>For example, a couple of years ago, instead of debating whether our users would want a natural language search, I built a crude version, put our own research data into it and asked our team to try it out. We were then able to build conviction, quickly iterate with internal feedback and finalize its scope in a few days.</p>

<p style="text-align: center;">
  <img src="/assets/img/scoping-just-build-a-prototype.jpeg" alt="Bell curve meme: the low and high ends both say &quot;Just build a prototype&quot; while the middle says &quot;Nooo you must first write a PRD, then make a design, then make tickets, then...&quot;" style="width: 100%; max-width: 675px;" />
</p>

<h3 id="4-address-the-unknown">4. Address the unknown</h3>

<p>The previous point was about reducing uncertainty by simulating user experience. This one is about identifying the potential implementation details that you don’t yet understand.</p>

<p>Many software projects get delayed because of uncertain aspects. This can include a new API, a marketplace listing process or a new framework. That is why simply breaking down a problem statement into smaller chunks is not enough. You need to identify and isolate the most uncertain parts, and systematically address them before anything else.</p>

<p>As a rule of thumb, third-party dependencies are almost never a hoot. Even if you plan to use an industry-standard tool, marketplace or API, you better familiarize yourself quickly. If there is an approval process involved, go take a look at forums and independent experiences, not just the official docs. (<em>Yes, I have been burnt in the past.</em>)</p>

<p>AI can now help you reduce the uncertainties quicker than manual research or building. For example, create deep research reports, build working prototypes or, if token limits allow, ask your agent to do whatever it takes (with a clearly specified goal of course). I recommend that you <a href="https://en.wikipedia.org/wiki/RTFM">RTFM</a> but you can cover a lot of ground beforehand or in parallel.</p>

<h3 id="5-start-with-a-time-budget-not-the-other-way-round">5. Start with a time budget, not the other way round</h3>

<p>We had started by talking about the failure of software estimation. That being said, you can’t just wave your hand and work without any timelines.</p>

<p>If something is worth doing, you should decide how much time you are willing to spend on it. If you have collaborators or stakeholders, align on a time budget for a project. If you are working solo, practice <a href="https://en.wikipedia.org/wiki/Timeboxing">timeboxing</a>.</p>

<p>This need not be set in stone on day 1 either. As your understanding of the reasons, goals, and unknowns improve, you may improvise on either the scope or the timeline.</p>

<p style="text-align: center;">
  <img src="/assets/img/xkcd-1425-tasks.png" alt="xkcd comic: a user asks for an app that checks whether a photo was taken in a national park (&quot;easy GIS lookup, a few hours&quot;) and whether the photo is of a bird (&quot;I'll need a research team and five years&quot;)" style="width: 100%; max-width: 267px;" />
  <br />
  <em><a href="https://xkcd.com/1425/">xkcd #1425, "Tasks"</a></em>
</p>

<h2 id="wrapping-up">Wrapping up</h2>

<p>My point of view on this topic has been shaped by my experiences at early-stage, fast-moving and growing startups with no appetite for bureaucracy. If you work at a large enough company, e.g. FAANG or a Fortune 500 enterprise, there will be additional considerations that I won’t get into. You can look at <a href="https://www.seangoedecke.com/how-i-estimate-work/">this blog</a> for some perspective.</p>

<p>However, considering the current AI-charged environment, I hope even large companies will continue to focus more on the craft of building software and less on the bureaucratic side.</p>

<p>AI hasn’t made scoping obsolete. It has changed what good scoping looks like. When building and experimentation become cheaper, judgment becomes precious. This includes understanding why a problem matters, deciding what not to build, setting constraints, experiencing the solution and identifying uncertainty early.</p>

<p>You can build more than ever before. Good scoping helps you decide what to build and do it well.</p>

<h3 id="resources">Resources</h3>

<ul>
  <li><a href="https://highgrowthengineering.substack.com/p/how-to-scope-work-">How to scope work</a></li>
  <li><a href="https://www.seangoedecke.com/how-i-estimate-work">How I estimate work</a></li>
  <li><a href="https://world.hey.com/dhh/software-estimates-have-never-worked-and-never-will-a41a9c71">Software estimates have never worked and never will</a></li>
  <li><a href="https://erikbern.com/2019/04/15/why-software-projects-take-longer-than-you-think-a-statistical-model.html">Why software projects take longer than you think: a statistical model</a></li>
</ul>

<p><em>Thanks to <a href="https://ankitamat.com/">Ankita</a>, <a href="https://www.linkedin.com/in/mittalashutosh/">Ashutosh</a> and <a href="https://www.linkedin.com/in/aayushsarva/">Aayush</a> for reading the draft of this.</em></p>]]></content><author><name>Akash Tandon</name></author><category term="technology" /><summary type="html"><![CDATA[AI has made software significantly faster to build but human judgment remains critical. Here are some principles that helped me go from vague problem statements to precise solutions, often with limited resources and plenty of ambiguity (aka startups).]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.akashtandon.in/assets/img/scoping_blog_cover_image.png" /><media:content medium="image" url="https://www.akashtandon.in/assets/img/scoping_blog_cover_image.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Turning Strava data and gym photos into a training recap with my coding agent</title><link href="https://www.akashtandon.in/ai/2026-06-29-strava-photos-training-recap-coding-agent/" rel="alternate" type="text/html" title="Turning Strava data and gym photos into a training recap with my coding agent" /><published>2026-06-29T00:00:00+00:00</published><updated>2026-06-29T00:00:00+00:00</updated><id>https://www.akashtandon.in/ai/strava-photos-training-recap-coding-agent</id><content type="html" xml:base="https://www.akashtandon.in/ai/2026-06-29-strava-photos-training-recap-coding-agent/"><![CDATA[<p>This has been a good year so far with respect to my workouts and running routine. That’s why I wanted a nice half-year-in-review infographic. That’s all.</p>

<p>This is a quick story, not so much a tutorial, of how I got what I wanted using Strava and my coding agent. Here is what the final infographic looked like:</p>

<p style="text-align: center;">
  <img src="/assets/img/strava-recap-infographic.png" alt="Half-year training recap infographic titled “How I trained in 2026, so far” with counts for strength, runs, mobility and swims, plus a training mix breakdown" style="width: 100%; max-width: 520px;" />
</p>

<p>The fun part to getting to the above was that Strava’s numbers alone could not really tell this story.</p>

<h2 id="data-gym-board-photos-and-a-pipeline">Data, gym board photos and a pipeline</h2>

<p>I use Samsung Fit 3 to track my workouts and the Strava mobile app to track my runs. The fitness tracker data syncs with Strava app on a periodic basis. This means Strava has the obvious metadata: activity type (workout/run, distance, duration, elevation, dates).</p>

<p>But here’s the interesting bit. For most of my gym sessions, the workout routines are in photos I attach to my posts. They were photographs of the day’s workout routine from my gym’s board. Lazy, I know.
The board contains the actual session structure: movements, focus area, and the difference between a strength day, a mobility day, and something in between.</p>

<p style="text-align: center;">
  <img src="/assets/img/strava-recap-gym-board.jpg" alt="A Strava post titled “Evening Weight Training” with a photo of a gym whiteboard listing the day’s power-phase workout" style="width: 100%; max-width: 420px;" />
</p>

<p>Strava only knows that I did a workout. So part of the project became a small image extraction and parsing pipeline. The core idea is to combine Strava’s structured data with the image-based context I had been casually attaching to posts.</p>

<p><em>Fetch Strava activities + photos -&gt; local cache -&gt; agent reads and processes gym-board photos -&gt; JSON-based description -&gt; HTML infographic -&gt; PNG poster</em></p>

<p>The above pipeline consists of a couple of simple Python scripts. If some photos were already downloaded, the relevant script skipped them. If an image had already been processed, it was not processed again. If one extracted workout looked wrong, I could delete just that JSON file and regenerate it.</p>

<h2 id="using-coding-agent-for-the-vision-task">Using coding agent for the vision task</h2>

<p>Claude Code’s image-reading ability acted as a convenient vision layer. A script downloads the Strava photos and then prints the list of images that still need an associated JSON. For each relevant gym-board photo, the agent writes a small JSON file describing the workout.</p>

<p>Something like:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"workout"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"exercises"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Goblet squat"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"sets"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
      </span><span class="nl">"reps"</span><span class="p">:</span><span class="w"> </span><span class="s2">"8-10"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"weight"</span><span class="p">:</span><span class="w"> </span><span class="s2">"24kg"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"muscle_groups"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"legs"</span><span class="p">]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"notes"</span><span class="p">:</span><span class="w"> </span><span class="s2">"optional"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>For a personal project, this agent-in-the-loop workflow was fast and easy. Once a JSON description exists, that image is considered processed. This made the vision step resumable and easy to fix.</p>

<h2 id="a-little-classification-goes-a-long-way">A little classification goes a long way</h2>

<p>My Strava activity labels were not perfectly consistent. Some strength sessions were tagged as “weight training” and others as generic “workouts”. Mobility sessions also sometimes showed up as “workouts”.</p>

<p>So the code uses a mix of Strava activity type, activity title, and the extracted photo data to decide whether something is strength, mobility, running, swimming, yoga, or something else. That was enough to make the final poster feel accurate without turning this into a more complex classification project.</p>

<h2 id="trying-out-strava-mcp">Trying out Strava MCP</h2>

<p>I briefly tried using the recently released <a href="https://press.strava.com/articles/strava-launches-mcp-connector">Strava MCP server</a> to see if it could replace the scripts. It could have been useful if we only required activity metadata, but not for this project since there was no way to fetch the photos.</p>

<h2 id="to-sum-up">To sum up</h2>

<p>This was a nice example of AI helping me do something I wouldn’t have had the time to do earlier. You can find or build on top of the code here: <a href="https://github.com/analyticalmonk/strava-reporting/tree/master">analyticalmonk/strava-reporting</a>. The easiest way to build on it is probably to clone the repo, point your coding agent at the README, update the config, and let it help you shape the report around your own Strava data.</p>

<p>For me, the output was an infographic. For you, it could be a running year-in-review, a cycling summary, a race-prep log, or just a better-looking personal fitness recap.</p>

<p>I may set up a personalized fitness agent with local models next. Meanwhile, if you build on top of this project or have a fitness/health-related agent workflow, I’ll love to hear about it!</p>

<p><em>Thanks to <a href="https://ankitamat.com/">Ankita</a> for reading the draft.</em></p>]]></content><author><name>Akash Tandon</name></author><category term="ai" /><summary type="html"><![CDATA[Strava’s metrics alone couldn’t tell the story of my training, because important context lived in photos of my gym’s whiteboard. Here’s how I combined Strava data with a coding agent’s vision layer to build a half-year-in-review infographic.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.akashtandon.in/assets/img/strava_infographic_post_header.png" /><media:content medium="image" url="https://www.akashtandon.in/assets/img/strava_infographic_post_header.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Debugging in the age of agents</title><link href="https://www.akashtandon.in/ai/2026-06-24-debugging-in-the-age-of-agents/" rel="alternate" type="text/html" title="Debugging in the age of agents" /><published>2026-06-24T00:00:00+00:00</published><updated>2026-06-24T00:00:00+00:00</updated><id>https://www.akashtandon.in/ai/debugging-in-the-age-of-agents</id><content type="html" xml:base="https://www.akashtandon.in/ai/2026-06-24-debugging-in-the-age-of-agents/"><![CDATA[<p>A junior engineer once asked me how I had pinpointed possible causes for a bug introduced by code changes I hadn’t worked on. I was surprised by this question at first and didn’t immediately have a great answer. The best I could come up with was that this ability was developed with practice, pattern recognition and awareness of involved systems.</p>

<p>The question feels more important to me now as coding agents have taken off. It is tempting to treat debugging as a tedious software development task that will be automated. But software engineers who have spent time in production trenches can recall not only frustration caused by bugs but also the feeling of exhilaration after successfully debugging and fixing a tricky issue.</p>

<p><img src="/assets/img/debugging-agents-tweet-1.png" alt="Greg Brockman tweet on the satisfaction of isolating and fixing a hard bug after a week of work" /></p>

<p><img src="/assets/img/debugging-agents-tweet-2.png" alt="Greg Brockman tweet: &quot;sometimes there is no way to debug besides staring at the code until you become enlightened&quot;" /></p>

<p>Effective debugging is a mix of hypothesis construction, evidence gathering and rigorous examination. Sometimes the answer can be handed to you on a platter by your observability stack, logs or an agent, but often it requires a mix of intuition and skillful decision making.</p>

<p>I love coding agents and I’m bullish on AI for knowledge work. But there is a particular type of failure I have run into over the last few months when debugging a reasonably large pre-LLM codebase. An agent can produce a confident, detailed, and wrong explanation. This wrong answer can be accompanied with strong evidence.</p>

<p>For example, I was investigating a failure, and a coding agent blamed it on a recent code change, even though the behaviour had existed before the diff. Another time, the agent’s proposed explanation could not have occurred because of the application’s schema.</p>

<p>The defense against such agent-side failures is the same discipline good engineers already apply. When something looks like a regression, questions worth asking are:</p>

<ul>
  <li>Was this regression actually introduced by the code/change being looked into, or does it have a different origin?</li>
  <li>Is this code path even triggered in the scenario I’m worried about?</li>
  <li>Does the data model permit the failure being described?</li>
</ul>

<p>Many confident-but-wrong findings collapse the moment you force them through such questions. Otherwise, an agent can happily attribute long-standing behavior to a new diff, or invent a failure mode the data model doesn’t allow.<br />
Scaffolding around agents can help: a structured review process, good context retrieval, schema information, targeted searches to validate assumptions. But scaffolding only narrows the gap between the possible and correct explanation. For now, that gap often needs a human in the loop.</p>

<p>This lesson matters even more for those new to software development. Agents can confidently develop theories and at times lose confidence about their own results in the face of questioning as well.  If developers rely heavily on agents without developing enough muscle for understanding code and failure modes, they may <a href="https://larsfaye.com/articles/agentic-coding-is-a-trap">not be</a> <a href="https://mariozechner.at/posts/2026-03-25-thoughts-on-slowing-the-fuck-down">prepared</a> to judge an agent’s output in critical situations.</p>

<p>So how does one get better at debugging? I don’t think there is a repeatable formula but here are some pointers that can help.</p>

<ul>
  <li>First, develop a habit of starting from the symptom and working backwards. Articulate the failure. Identify the starting point and recent changes. Track parts of the system that may be responsible.</li>
  <li>Second, make your hypotheses explicit. Don’t just say “maybe it’s the cache” or “maybe the query is wrong.” Write down what would have to be true for that explanation to work, and then look for evidence that confirms or falsifies it.</li>
  <li>Third, learn the invariants of the systems you work on. Which fields are always present? Which jobs are idempotent? Which paths are impossible? Which services are eventually consistent? A surprising amount of debugging comes down to knowing which possible explanations cannot actually happen.</li>
  <li>Finally, when using agents, don’t only ask them for answers. Ask them to show their debugging path. Ask about the assumptions being made, and evidence supporting any claim. You are responsible for verification of the agent’s hypothesis as well.</li>
</ul>

<p>Yes, you should have test suites, observability and great contextual retrieval pipelines for agents. But production codebases, old or new, aren’t perfect. They have their quirks, technical debt and aren’t being overhauled overnight.<br />
That is why the craft of debugging remains important. As someone building software, you should actively nurture it.</p>

<p><em>Thanks to <a href="https://ankitamat.com/">Ankita</a>, <a href="https://www.linkedin.com/in/mittalashutosh/">Ashutosh</a> and <a href="https://x.com/raghavio">Raghav</a> for reading the draft of this.</em></p>]]></content><author><name>Akash Tandon</name></author><category term="ai" /><summary type="html"><![CDATA[Coding agents can hand you a confident, detailed, and wrong explanation backed by persuasive evidence. The craft of debugging - building hypotheses, gathering evidence, and knowing a system's internals - matters as much as ever.]]></summary></entry><entry><title type="html">Four years a founder - Time</title><link href="https://www.akashtandon.in/startup/2025-01-05-four-year-founder-time/" rel="alternate" type="text/html" title="Four years a founder - Time" /><published>2025-01-05T00:00:00+00:00</published><updated>2025-01-05T00:00:00+00:00</updated><id>https://www.akashtandon.in/startup/four-year-founder-time</id><content type="html" xml:base="https://www.akashtandon.in/startup/2025-01-05-four-year-founder-time/"><![CDATA[<p><em>Note: This is part of a series of blog posts which are descriptive rather than prescriptive. Don’t consider them as advice.</em></p>

<p>Context is important. This post is about my experience as a tech startup co-founder for the past 4 years. I spent my late 20s with the former as my primary identity, for better or worse.</p>

<p>I am 31 years old, and based out of India. I have been a misfit since much of my adolescence in most social situations. I had a middle class upbringing and spent much of my childhood in tier-2 cities. I am fascinated by technology, especially AI, and its impact on the human experience.</p>

<p>My startup, <a href="https://looppanel.com">Looppanel</a>, operates remotely and was started in late 2021 during the pandemic and is VC-backed. Along with an amazing team, I am responsible for ensuring that we solve our customer’s problems by building the best possible product using the best available technology. We serve customers in more than a dozen countries in 6 continents including large enterprises and some names that you would have heard of.</p>

<h2 id="overview">Overview</h2>

<p>The startup experience is interesting because you don’t just learn new things, you get to dig deeper into the meaning of lessons you already knew.</p>

<p>Three big learnings in my journey are related to time. They are:</p>

<ul>
  <li>Timing matters</li>
  <li>Accept the past</li>
  <li>Good things take time</li>
</ul>

<p>Over the last few years, I faced situations with an intensity and frequency which instilled a deep appreciation of the above principles.</p>

<h2 id="timing-matters">Timing matters</h2>

<p>The most tactical and frequent way I have seen the importance of timing play out at Looppanel is when prioritising product decisions. We frequently make decisions, right and wrong, to deal with unexpected occurrences such as sales requirements or taking advantage of a market tailwind. The scale of the relevant time period in such situations can vary from hours to years.</p>

<p>If you do something a week later than it was supposed to be done, it may turn out to be meaningless. If you are too early to market, you will struggle. We were early when we introduced our AI features and struggled with customer scepticism. As AI became mainstream, our approach gained wide acceptance quickly.</p>

<p>This principle plays out in personal life too. A difference in personal situations compared to professional life is you can’t and maybe shouldn’t rely on logic as much. Your gut/heart can often give a better answer than cold reasoning would. This can mean something as simple as returning a friend’s call when they need you for a few minutes instead of waiting until the weekend.</p>

<p>Shifting back to work, Looppanel benefited from starting up during a global lockdown. Our product’s first version was a meeting assistant and analysis tool for user research calls. We were able to get our first customer even before I wrote any code.<br />
<em>Related: <a href="https://avichal.com/2017/11/27/why-now/">Why now?</a></em></p>

<p>On the flip side, I am also aware of multiple startups that started before the 2020 pandemic with a similar idea and struggled simply because not enough research sessions were being conducted remotely. This leads me to my second learning about time.</p>

<h2 id="accept-the-past">Accept the past</h2>

<p>You may understand the importance of timing and take decisions to the best of your ability. You will still often be wrong and plans won’t work out. For example, when starting Looppanel, we focused on building the best possible product for a significant time period at the expense of monetization. There’s no substitute for building a great product early on but we could have revised our business goals earlier than we did.</p>

<p>There have also been times when I made a decision informed by emotion instead of objectivity. I can recall more instances from work where I wish I’d acted differently. Such wishful thinking isn’t productive though. It’s great to learn from the past but obsessing over it is wasteful at best and destructive at worst.</p>

<p>In hindsight, I should have managed my personal relationships differently over the last few years as well. I became comfortably distant from a lot of friends and family members. As an introverted person, it didn’t help that I spent much of the pandemic starting a startup and writing an <a href="https://www.oreilly.com/library/view/advanced-analytics-with/9781098103644/">O’Reilly book</a>. All I can do now is to mend relationships to the best of my abilities and look forward.</p>

<p>A habit that’s helped me immensely with managing my emotions about the past is journaling. You can’t always shut down how you feel but writing about it can be therapeutic.</p>

<h2 id="good-things-take-time">Good things take time</h2>

<p>We have all heard this since childhood. It’s hard to live it though. This is especially true in the startup world where ‘overnight’ successes and rapid growth are celebrated with an almost religious fervour.</p>

<p>I distinctly recall an entrepreneurship lecture at my college where a business owner had mentioned that if your company survives its first 3 years, the chances of becoming successful become disproportionately high compared to the average. More recently, I recall Michael Seibel from YCombinator mentioning how the period from 18 to 36 months is the toughest for most first-time startup founders, including ones which eventually succeed. I have experienced this first-hand in the last 3 years.</p>

<p>2024 has been the most successful year of Looppanel by a distance. Much of our success is built on the foundation we laid for ourselves as individuals, a team and a company previously. This includes learning from the failures we endured. Even then, it was harder to envision, if not hope or believe, this success at the beginning of last year.</p>

<p>At a personal level, it would’ve helped immensely had I been half as good at thinking about building products and empathizing with users, not just application of technology, when we’d started out. However, I needed time and experience to become better.</p>

<h2 id="summing-up">Summing up</h2>

<p>While hard work is often overrated in the professional sphere, persistence or grit is underrated, particularly in startups. The best results (and stories) emerge not just from working hard, but from staying in the game long enough and remaining mindful of timing.<br />
<em>Note: Knowing when to give up is equally important but more on that later.</em></p>

<p>The startup journey has taught me about understanding when to move, accepting what you can’t change, and having the grit to persist when immediate results aren’t visible. This is true as much for building a company as it’s for living your life.</p>]]></content><author><name>Akash Tandon</name></author><category term="startup" /><summary type="html"><![CDATA[Learnings and anecdotes from four years as a startup founder - timing matters, accept the past and good things take time.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.akashtandon.in/assets/gare_nord_clock.jpg" /><media:content medium="image" url="https://www.akashtandon.in/assets/gare_nord_clock.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Lessons from building an AI feature that works - chunking and summarization</title><link href="https://www.akashtandon.in/ai/2024-06-23-lessons-from-building-ai-feature-that-works-chunking-summarization/" rel="alternate" type="text/html" title="Lessons from building an AI feature that works - chunking and summarization" /><published>2024-06-23T00:00:00+00:00</published><updated>2024-06-23T00:00:00+00:00</updated><id>https://www.akashtandon.in/ai/lessons-from-building-ai-feature-that-works-chunking-summarization</id><content type="html" xml:base="https://www.akashtandon.in/ai/2024-06-23-lessons-from-building-ai-feature-that-works-chunking-summarization/"><![CDATA[<p>It’s been over a year since my team at <a href="https://www.looppanel.com/">Looppanel</a> shipped our first LLM-powered feature. We have added more such capabilities since then but the first one taught us some lessons that are worth sharing.</p>

<p>The feature I’m referencing - AI notes - generates high-quality notes on top of user interview transcripts. Many of our users tried out similar tools but told us over and over that our version was superior.</p>

<p><img src="/assets/img/ai_notes_feedback.png" alt="Looppanel AI notes feedback" /></p>

<p>To someone who’s not analyzing user research data, these notes will not appear to be any different than those from a <a href="https://www.zoom.com/en/ai-assistant/">generic AI meeting assistant</a>.</p>

<p><img src="/assets/img/ai_note_demo_screenshot.png" alt="Looppanel AI notes" /></p>

<p>When our user looks at these notes, there are 2 aspects that they often evaluate them on - does the note capture a relevant part of the interview (chunking), and does the note describe the part correctly and objectively (summarization)? These 2 aspects are what we will dive a little deeper into.</p>

<p>Specifically, we will talk about 2 components of our AI notes pipeline - chunking and summarization - and lessons learnt while building them. <strong>These components also highlight how crucial data transformation/engineering and user experience (UX) are for an LLM-based feature in addition to the underlying model.</strong></p>

<p><em>Note: please keep in mind that a lot more work went into making a successful feature in addition to the 2 components being discussed. They stand out from a technical and product POV but are only pieces of a bigger puzzle which involves user research, design and software development. In addition, I am not sharing the specific technical implementation but a high level overview and lessons. I hope that you will be able to apply them to your specific situation if relevant.</em></p>

<h2 id="chunking">Chunking</h2>

<p>Search for ‘chunking text for LLMs’ and you will come across many <a href="https://www.pinecone.io/learn/chunking-strategies/">articles</a> and <a href="https://python.langchain.com/v0.2/docs/concepts/#text-splitters">documentation pages</a>. They describe multiple methods to break down text documents into smaller parts (chunks). Chunking is mostly talked about in the context of <a href="https://stackoverflow.blog/2024/06/06/breaking-up-is-hard-to-do-chunking-in-rag-applications/">RAG or search</a>.</p>

<p>In our case, we were doing a version of text <a href="https://en.wikipedia.org/wiki/Text_mining">mining</a>. We wanted to break down a user interview transcript into multiple chunks. Each chunk needed to make sense as a semantic unit in context of the entire interview. It was early 2023 and we were severely restricted by context length and semantic boundaries.</p>

<p><em>Note: 4k context length limit sounds like a distant memory compared to the 100k+ limits that have become <a href="https://www.reddit.com/r/MachineLearning/comments/1c7pzf0/discussion_are_there_specific_technicalscientific/">the norm for large language models</a> now.</em></p>

<p><a href="https://python.langchain.com/v0.2/docs/how_to/semantic-chunker/">Semantic chunking</a> sounded cool as a concept but out-of-the-box implementations didn’t satisfy our use case, same as all of the other techniques on offer. For example, if you simply broke down a conversation based on number of sentences or even semantic similarity, there was a high probability that the natural flow of the conversation would not be captured. This would result in the end user spending signficant cognitive energy reviewing the chunks and the corresponding notes.</p>

<p>With user context and use case in mind, we wrote a chunking implementation that specifically worked for user interviews. <strong>It accounted for distinction between interviewer and interviewee speech, and identified topic changes in the conversation, to find relevant boundaries. This was an example of a domain-specific chunking methodology.</strong></p>

<p>The output from this method made a lot of sense for the users and their relevance contributed to not just AI notes but multiple features that we built afterwards.</p>

<h2 id="summarization">Summarization</h2>

<p>Summaries of text documents are seen as a commodity at this point. I am fascinated by how the term can take different meanings based on the use case and who they are meant for. For us, chunking was technically challenging but generating the summary text turned out to be one of the most nuanced parts from a user experience perspective.</p>

<p><strong>In addition to correctness, a user can care deeply about the tone, length, and choice of words of a summary.</strong> If you don’t get this right, the user will not care about all the fancy data engineering or modelling work you may have done until that point.</p>

<p><img src="/assets/img/looppanel_ai_notes_single.png" alt="Single AI note" /></p>

<p>This is something we learnt after releasing a beta version. The beta users would fixate on the language of notes and ignore everything else. We iterated multiple times on relevant prompts used to create the summary by experimenting with the length, tone, etc.</p>

<p>In hindsight, I would’ve leveraged domain expertise earlier and a lot more to finalize the prompts used to generate the note text that a user read. That’s the approach we ended up taking for similar problem statements since then.</p>

<h2 id="wrapping-up">Wrapping up</h2>

<p>LLMs are evolving rapidly and so is the ecosystem and user expectations around them. When building an LLM-powered product, technology can play an even bigger role than has been the norm in the last decade or so. Hence, it gets easier to ignore the user experience when working on an AI product more than usual. However, building something that actually works involves maintaining a fine balance between the technology and UX.</p>]]></content><author><name>Akash Tandon</name></author><category term="ai" /><summary type="html"><![CDATA[Lessons from creating a successful LLM-based feature for breaking down and summarizing user interviews, emphasizing how we nailed it by focusing on context, user feedback, and the right balance of AI and user experience.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.akashtandon.in/assets/img/robotlab_writing_robot.jpg" /><media:content medium="image" url="https://www.akashtandon.in/assets/img/robotlab_writing_robot.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Brief lessons from using LLM APIs in production</title><link href="https://www.akashtandon.in/ai/2023-08-20-lessons-llm-production/" rel="alternate" type="text/html" title="Brief lessons from using LLM APIs in production" /><published>2023-08-20T00:00:00+00:00</published><updated>2023-08-20T00:00:00+00:00</updated><id>https://www.akashtandon.in/ai/lessons-llm-production</id><content type="html" xml:base="https://www.akashtandon.in/ai/2023-08-20-lessons-llm-production/"><![CDATA[<p>One day, I will write a nuanced post about using large language models in production. It will be better than all the nuanced posts published so far about using large language models in production. Until then, here are some brief lessons learnt from building and operating LLM APIs in a production environment for the last 6 months.</p>

<p><em>Note: As hard as it may be for you to believe, the above introduction was written by a human. Or not. It’s <a href="https://decrypt.co/149826/openai-quietly-shutters-its-ai-detection-tool">hard to tell</a>.</em></p>

<p><strong>Outline</strong></p>
<ol>
  <li>Chat isn’t always the answer</li>
  <li>You don’t need to know everything<br />
a. It doesn’t hurt to know a bit more than you need</li>
  <li>Tinker</li>
  <li>Open source is your friend but APIs are not your enemy</li>
  <li>Demos will take a weekend, production will keep you up on weekends</li>
</ol>

<p><strong>Lesson 1: Chat isn’t always the answer</strong></p>

<p>By now, you must know. If you don’t, you sure should be glad that you are reading this. You probably don’t need to make ChatGPT for X. Maybe you do. Most probably, you don’t.</p>

<p>Chat can be great because it’s flexible. For a lot of use-cases, it’s not great because it’s too flexible. Your users don’t always want to stare at a canvas of infinite possibilities. Sometimes, they need help. If they want to get their professional work done, they definitely could use some help.</p>

<p>What interface do they need then? I don’t know. That’s for you to figure out by <a href="https://www.momtestbook.com?ref=akashtandon.in">talking with them</a>. I can only provide great lessons, not answers.</p>

<p><em>Note: Here’s what we have built at <a href="https://www.looppanel.com?ref=akashtandon.in">Looppanel</a>. We don’t allow our users to talk with their interview transcripts. Not yet anyway.
Instead, we provide them with meaningful interview notes tied to evidence (transcript text and timestamp) and their inputs (themes and questions). <a href="https://en.wikipedia.org/wiki/Hallucination_(artificial_intelligence)">Hallucination</a> isn’t an option when your job is to find out the truth.</em></p>

<p><img src="/assets/img/ai_note_demo_screenshot.png" alt="Looppanel AI notes" /></p>

<p><strong>Lesson 2: You don’t need to know everything</strong></p>

<p>There’s too much happening all the time. I am not talking about the significant issues of global warming or geopolitics. I am referring to your X (previously Twitter) feed and <a href="https://arxiv.org/list/cs.AI/recent">Arxiv</a>.</p>

<p>You tried but are barely able to keep up. That’s okay. If you try too hard to drink from a firehose, there’s a chance that you will drown.</p>

<p>First, try to figure out what you need to know to make whatever it is you need to make.</p>

<p><strong>Lesson 2a: It doesn’t hurt to know a little extra</strong></p>

<p>It’s okay to not know what <a href="https://www.promptingguide.ai/techniques/rag?ref=akashtandon.in">RAG</a> stands for and why <a href="https://www.cbinsights.com/research/generative-ai-infrastructure-vector-database/">vector databases are the talk of VC town</a>. However, if you have a rudimentary understanding of <a href="https://platform.openai.com/docs/guides/embeddings">embeddings</a>, that will be helpful if a potential business use-case presents itself.</p>

<p>Skim <a href="https://twitter.com/karpathy/">Andrej Karpathy</a> and <a href="https://twitter.com/jeremyphoward">Jeremy Howard</a>’s X feeds occasionally. Subscribe to a couple of newsletters or blogs even if you skim them once a week. Don’t try too hard to keep up but use your downtime to explore. If you are feeling adventurous, <a href="https://www.deeplearning.ai/short-courses/?ref=akashtandon.in">try a MOOC</a>.</p>

<p><strong>Lesson 3: Tinker</strong></p>

<p>If you want to explore, it’s better to be hands-on. <a href="https://www.reddit.com/r/ChatGPT/comments/15et6f2/well_i_got_what_i_asked_for/">Talk shit with ChatGPT/Claude/Llama</a> or <a href="https://github.com/ggerganov/llama.cpp">port a SOTA LLM in C</a>. The world’s your oyster. You can learn a lot by tinkering in a field moving as fast as good-old AI is.</p>

<p>It took the experts a while to figure out that asking an LLM to “<a href="https://arxiv.org/abs/2205.11916">think step by step</a>” can make it work better. Maybe you could’ve done it had you tinkered with a model (while being polite).</p>

<p><strong>Lesson 4: Open source is your friend but APIs are not your enemy</strong></p>

<p>Open source is great. Use them as much as you can and give back whenever possible. But if you are on a strict timeline or working out of a VC-funded garage, picking up an API before going through the <a href="https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard?ref=akashtandon.in">Open LLM board</a> may make more sense.</p>

<p>Once you have a validated use-case and method, it can be easier to fine-tune or go all-in on open source.</p>

<p>Note: I can be wrong with this one and starting with OSS may be the answer. I hope to find out more as I tinker with fine-tuning and smaller models.</p>

<p><strong>Lesson 5: Demos will take a weekend, production will keep you up on weekends</strong></p>

<p>Sometimes, I wish it were as easy to make an LLM work in production as it is to make a mindblowing demo.<br />
Then again, where’s the fun in that? I can’t convincingly answer because I was busy figuring out why our GPT-powered pipeline had inexplicably timed out again. :)</p>

<p>Test, test some more and then monitor. Implement some guardrails and checks when passing data to downstream tasks. Add a cache if that makes sense for your use-case.</p>

<p>Things can go wrong on multiple parameters (cost, latency, model drift) and there’s a lot to think about. Chip Huyen wrote about this in <a href="https://huyenchip.com/2023/04/11/llm-engineering.html?ref=akashtandon.in">Building LLM applications for production</a> that I recommend you read in case you haven’t.</p>

<p><strong>(Bonus) Lesson 6: Have fun and be responsible</strong></p>

<p>If you have the privilege of working with the fascinating technology of LLMs, remember to have fun tinkering with it. Be curious and help others understand the technology. Be responsible in its usage and encourage others to do the same.</p>

<p><strong>In conclusion</strong></p>

<p>It’s both a joy and occasionally terrifying to witness the shift that’s currently underway. The world has changed recently due to the breakthroughs in AI technology. It will continue to change in ways we can’t imagine right now. Let’s gear up for the ride!</p>]]></content><author><name>Akash Tandon</name></author><category term="ai" /><summary type="html"><![CDATA[Lessons that can help you when using large language models (LLMs) in a software production environment]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.akashtandon.in/assets/thinker_pixel_art.png" /><media:content medium="image" url="https://www.akashtandon.in/assets/thinker_pixel_art.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Beyond Utility - The Role of User Experience in Enterprise Software</title><link href="https://www.akashtandon.in/startup/2023-05-28-ux-role-enterprise/" rel="alternate" type="text/html" title="Beyond Utility - The Role of User Experience in Enterprise Software" /><published>2023-05-28T00:00:00+00:00</published><updated>2023-05-28T00:00:00+00:00</updated><id>https://www.akashtandon.in/startup/ux-role-enterprise</id><content type="html" xml:base="https://www.akashtandon.in/startup/2023-05-28-ux-role-enterprise/"><![CDATA[<p>During the first 2-3 years of my career, I used to think that enterprise software can get by with average UX (user experience). I don’t believe that anymore. It depends a lot on the type of work the end-user does. The extent of involvement of managers and executives also plays a part.</p>

<p>Let me clarify what I mean by enterprise and user experience here.</p>
<ul>
  <li>“Enterprise software” refers to software which are used for business use-cases. Tools like Notion, GitHub or Figma which have enterprise versions but are frequently used outside of a workplace qualify too.</li>
  <li>User experience refers to how a user feels when interacting with a system. It goes beyond utility. It includes the emotions of joy, empowerment and satisfaction.</li>
</ul>

<p>When thinking about this topic, I came across a <a href="https://calv.info/ux-doesnt-end-with-the-user" target="_blank">related blog post</a> by Calvin French-Owen, Segment’s co-founder and ex-CTO. He differentiates B2B UX based on the sales motion (top-down or bottom-up). The UX will match the buyer, not the end-user. If the practitioner is the end-user, UX and aesthetics matter significantly in the buying decision. Visibility and reporting takes precedence over UX for an executive. That makes a lot of sense. <br />
I explore adjacent theories. My opinions are loosely held and I believe there’s something interesting as well as useful to be found along this line of thought.</p>

<h3 id="ux-sales-motion-and-type-of-work">UX, sales motion and type of work</h3>

<p>Building on Calvin’s idea, I hypothesise that a bottom-up approach works out better on average for software for people directly building products. Hence, software meant for them has better UX on average too.</p>

<p>Examples of builder roles include designers, developers or data scientists. Individual contribution with low high-level stakeholder intervention in day-to-day goal-setting is more common. Pain points that can have an outsized impact are often discovered during daily work rather than meetings.<br />
In contrast, visibility is critical in software meant for roles such as sales or customer success. Pain points that are prioritised to be solved by tools are often aligned on in meetings involving managers and executives.</p>

<p>As a result, a designer or developer is likely to try and find a tool to make their lives better. Preliminary adoption and validation can be done more easily by an end-user in such cases. The bottom-up approach kicks in and UX becomes important.</p>

<h3 id="how-much-do-they-care">How much do they care?</h3>

<p>There may also be a correlation between how much a person cares about their work and how much they will think actively about improving the UX of their tools.</p>

<p>If you are creating bottom-up software, this correlation can help you qualify users. People who deeply care about their day-to-day work in addition to having a painful problem will provide you with the best possible feedback. They are more likely to have tried hacky solutions too. You can learn from them. The business implications aside, startups can be good early product users for the same reason. It will be harder to satisfy these users but you will have higher chances to make a good product that works for even the laziest of users.</p>

<p>Do people in certain roles tend to care more about their work on average? I don’t know but it’s an interesting question. That can relate this hypothesis with the previous one.</p>

<h3 id="in-conclusion">In conclusion</h3>

<p>My hypotheses are based on observations and experiences. More than being definite, it can open up interesting lines of thought. No matter who you are building for, user experience is becoming more important. It will be interesting to see the direction our software experiences take with the advent of AI too. It’s an exciting time to build!</p>

<p><em>Thanks to Ankita Mathur for reading drafts of this post.</em></p>

<p><strong>Hacker News thread for this post: https://news.ycombinator.com/item?id=36104092</strong></p>]]></content><author><name>Akash Tandon</name></author><category term="startup" /><summary type="html"><![CDATA[Frameworks to think about role of user experience when creating enterprise software]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.akashtandon.in/assets/enterprise_ux_pixel_art.png" /><media:content medium="image" url="https://www.akashtandon.in/assets/enterprise_ux_pixel_art.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Understanding the state of natural language technology through a project-first approach</title><link href="https://www.akashtandon.in/ai/2020-07-30-hacking-to-understand-language-technology/" rel="alternate" type="text/html" title="Understanding the state of natural language technology through a project-first approach" /><published>2020-07-30T00:00:00+00:00</published><updated>2020-07-30T00:00:00+00:00</updated><id>https://www.akashtandon.in/ai/hacking-to-understand-language-technology</id><content type="html" xml:base="https://www.akashtandon.in/ai/2020-07-30-hacking-to-understand-language-technology/"><![CDATA[<p>In early June 2020, I decided to learn about the current state of NLP and correspondingly, role of (narrow) AI. My usual approach to understanding a topic is bottom-up. Understand the fundamentals thoroughly before starting out with a project. Constrained by time and inspired by a pedagogy promoted by the likes of <a href="https://www.fast.ai/">Fast AI</a>, I decided to go project-first instead.</p>

<p>This article provides a higher-level overview of the projects and underlying motivations. You may decide to pursue or replicate this path. I may decide to write about individual pieces. For now, I present a summary of my experience and learnings.</p>

<p><em>Sidenote: From a knowledge perspective, I was already comfortable with <a href="https://en.wikipedia.org/wiki/Machine_learning">machine learning</a>, <a href="neuralnetworksanddeeplearning.com/">neural networks</a>, the <a href="https://pydata.org/">PyData</a> stack and <a href="https://medium.com/hackernoon/a-tale-of-cloud-containers-and-kubernetes-b6fb18edcfcd">cloud computing</a>. Keep that in mind if you plan on replicating this approach.</em></p>

<h2 id="getting-started">Getting started</h2>

<p>My initial list of projects was as follows:</p>

<ul>
  <li>Project(s) with OpenAI’s <a href="https://openai.com/blog/better-language-models/">GPT-2</a> to better understand language models</li>
  <li>An ML-powered chatbot with an aim to understand <a href="https://en.wikipedia.org/wiki/Natural-language_understanding">NLU</a> better</li>
  <li>A tool to transcript and analyze audio conversations (online or phone calls)</li>
</ul>

<p>The list was intentionally open-ended. The plan was to do projects of interest and refine ideas along the way. The choice of exploring the GPT-2 language model was because of abundance of related learning resources and discussion.
Experiments around the first two set of ideas are described below. I haven’t had a chance to start working on the third one yet.</p>

<p><em>Sidenote: A week after I had started this project, <a href="https://openai.com/blog/openai-api/">OpenAI released their API</a>. If you are taken in by the buzz, next section may be of particular interest.</em></p>

<h2 id="playing-around-with-gpt-2">Playing around with GPT-2</h2>

<p>GPT-2 showed up during the emergence of <a href="https://medium.com/inside-machine-learning/what-is-a-transformer-d07dd1fbec04">transformer architecture</a> and <a href="https://ruder.io/nlp-imagenet/">transfer learning in NLP</a> in 2018-19. Transfer learning is a powerful concept. It allows pretrained large neural networks (language models in this case) to be finetuned for downstream tasks. This saves practitioners the trouble of retraining entire models from scratch. This flexibility is a big reason behind language models’ success.</p>

<p>When starting out, I searched around for existing GPT-2 projects to replicate. That is when I stumbled upon related <a href="https://github.com/minimaxir/gpt-2-simple">Python packages by Max Woolf</a>. His work makes it easy for even absolute beginners to start out. It was then that I decided to make a parody Twitter bot as a first project.</p>

<h3 id="parody-twitter-bot">Parody Twitter bot</h3>

<p>A <a href="https://twitter.com/drilgpt2archive">parody bot of Twitter user dril</a> had become popular in 2019. It was powered by a GPT-2 model finetuned on dril’s tweets.<br />
In the same spirit, I made a parody bot account that was trained on a mix of 5 different parody accounts. These included personas of <a href="https://twitter.com/queen_uk?lang=en">Queen Elizabeth</a>, <a href="https://twitter.com/lord_voldemort7?lang=en">Lord Voldemort</a>, <a href="https://twitter.com/DarthVader">Darth Vader</a> and <a href="https://twitter.com/boredelonmusk?lang=en">Bored Elon Musk</a>. To get the tweets, I used the amazing <a href="https://github.com/twintproject/twint">twint</a> package.</p>

<p>The resultant bot account is named <a href="https://twitter.com/ai_gpt2">Queen Darth Voldemort Musk, first of their name</a>. Yep, you read that right.</p>

<p><img src="/assets/img/gpt_twitter_1.png" alt="GPT-2 bot tweets" /></p>

<p>The information required to replicate this project can be found <a href="https://minimaxir.com/2020/01/twitter-gpt2-bot/">here</a>.</p>

<h3 id="transformers-bert-and-gpt-2">Transformers, BERT and GPT-2</h3>

<p>Then, I took a little detour to read about the theory behind GPT-2 and transfer learning in NLP. <a href="https://en.wikipedia.org/wiki/BERT_(language_model)">BERT</a> is another language model that kept coming up. Both GPT and BERT are based off of the transformer architecture. However,BERT has just the encoder blocks and GPT-2 has just the decoder blocks from the transformer. That makes them more suitable for different kind of tasks.<br />
Trying to understand the technical differences and capabilities of these two popular models is a helpful exercise. I highly recommend doing that!</p>

<p>Here are some relevant links around this topic:</p>

<ul>
  <li><a href="https://ruder.io/nlp-imagenet/">NLP’s ImageNet moment has arrived</a></li>
  <li><a href="https://eigenfoo.xyz/transformers-in-nlp/">Transformers in NLP - a brief survey</a></li>
  <li><a href="https://www.kaggle.com/residentmario/transformer-architecture-self-attention">Notes on the transformer architecture</a></li>
  <li><a href="https://www.kaggle.com/residentmario/notes-on-gpt-2-and-bert-models">Notes on GPT-2 and BERT</a></li>
</ul>

<p>This detour also led me to my next project idea.</p>

<h3 id="evaluating-nlp-benchmarks">Evaluating NLP benchmarks</h3>

<p>Triumphs in machine learning are tied to their performance on standard benchmarks. Even if you are not a researcher, knowing about, a benchmark such as <a href="https://gluebenchmark.com/">GLUE</a> will give you important insights about the field.
If you set about contrasting BERT with GPT-2 even without in-depth expertise, looking at the benchmarks they are evaluated on will let you know the problems they are suited for. That is helpful as a practitioner.</p>

<p>NLP benchmarks such as GLUE and <a href="https://rajpurkar.github.io/SQuAD-explorer/">SQuAD</a> are comprised of multiple tasks. Different tasks test for proficiency in different aspects of language such as <a href="https://en.wikipedia.org/wiki/Named-entity_recognition">entity recognition</a>, <a href="https://en.wikipedia.org/wiki/Question_answering">question-answering</a> and <a href="https://nlp.stanford.edu/projects/coref.shtml">coreference resolution</a>. In combination, they test for <strong>general language understanding</strong>.</p>

<p>For this project, I had two goals:</p>

<ul>
  <li>Evaluate both BERT and GPT-2 on at least one task from relevant benchmarks</li>
  <li>Implement various tasks from popular benchmarks</li>
</ul>

<p>For implementation, I used the <a href="https://github.com/huggingface/transformers">transformers</a> Python library by HuggingFace. I will release the associated notebook soon and hopefully write more about this subtopic.</p>

<p>Meanwhile, here are some helpful links:</p>

<ul>
  <li><a href="https://mccormickml.com/2019/11/05/GLUE/">GLUE Explained: Understanding BERT Through Benchmarks</a></li>
  <li><a href="https://www.youtube.com/watch?v=uz_eYqutEG4">Video - State of the art in NLP</a></li>
  <li><a href="https://www.reddit.com/r/LanguageTechnology/comments/dz7xae/why_isnt_gpt2_on_the_glue_leadership_board/">Why isn’t GPT-2 on the GLUE leadership board?</a></li>
  <li><a href="https://huggingface.co/transformers/examples.html#the-big-table-of-tasks">The Big Table of (NLP) Tasks by HuggingFace</a></li>
</ul>

<h2 id="practical-nlu-conversational-interfaces">Practical NLU: conversational interfaces</h2>

<p>Conversational interfaces are becoming increasingly prevalent. They are going to be increasingly important for consumer-facing applications. This is especially true for emerging economies where voice-first interfaces can add immense value for new internet users.</p>

<p>As I was thinking about conversational interfaces, I came across an <a href="https://www.l3-ai.dev/">online event by RASA</a>. I attended some of the talks. They helped me get an intuition from the perspective of a developer. Post that, my inclination towards voice interfaces helped me pick my next project.</p>

<h3 id="ai-voice-assistant">AI voice assistant</h3>

<p>This is a great tutorial - <a href="https://blog.rasa.com/how-to-build-a-voice-assistant-with-open-source-rasa-and-mozilla-tools/">How to build a voice assistant with open source Rasa and Mozilla tools</a>. I simply followed it end to end.</p>

<p>Most of the functionalities implemented in this are available as managed services. As a matter of personal choice, I chose to start off with open source tools. There are trade-offs to be considered when thinking about a production scenario, of course.</p>

<p><a href="https://rasa.com/">RASA</a> has developed a <a href="https://rasa.com/">rich set of resources</a> and an active community. They are extremely helpful.</p>

<h3 id="customer-service-chatbot">Customer service chatbot</h3>

<p>Having worked with open source tools, I wanted to try out a managed service. Options are provided by the likes of GCP, AWS, Azure and IBM. I chose to go with Google’s <a href="dialogflow.cloud.google.com/">Dialogflow</a>.</p>

<p>Once you are familiar with fundamentals such as intents and actions, it is straightforward to build a bot. The pretrained bots are a convenient feature but importing them was not a smooth experience. The one-bot-per-project feature and the lag it took for it to show up confused me for a few minutes.</p>

<p><img src="/assets/img/dialogflow_bankbot_screenshot1.png" alt="DialogFlow banking chatbot screenshot" /></p>

<h2 id="concluding-thoughts">Concluding thoughts</h2>

<p>It has been an interesting experience going about the above experiments. At times, I had an itch to go deeper into topics. Choosing to let that go allowed me to explore the breadth at hand. It also let me squeeze short hacking sessions into my schedule.</p>

<p>There have been some exciting developments in the natural language processing field of late. In emerging economies, voice as an interface is increasingly gaining adoption. Improved machine understanding of language will also improve democratization of technology.</p>

<p>At the same time, we need to be realistic about its limits. Use-cases of OpenAI’s GPT-3 powered API have gone viral. So much so that their CEO, Sam Altman, made a <a href="https://twitter.com/sama/status/1284315896735883264">sarcastic tweet</a> about the hype.<br />
RASA has laid out a concept of <a href="https://blog.rasa.com/5-levels-of-conversational-ai-2020-update/">5 levels of conversational AI</a>. They also mention that we are perhaps a decade away from the fifth level.</p>

<p>Language has been key to humanity’s progress. Exploring it through the lens of emerging technologies is an interesting endeavour. I hope that the train of innovation will continue in a responsible manner.<br />
If you want to have a discussion or share thoughts, feel free to reach out.</p>

<hr />

<p>Follow the discussion on <a href="https://news.ycombinator.com/item?id=23997870">Hacker News</a></p>

<hr />

<p>Source for header image: <a href="https://commons.wikimedia.org/wiki/File:Bios_robotlab_writing_robot.jpg">WikiMedia</a></p>]]></content><author><name>Akash Tandon</name></author><category term="ai" /><summary type="html"><![CDATA[Blueprint to understand recent advances in natural language technology in a hands-on manner. Topics covered include transformers, language models (BERT, GPT-2), evaluation benchmarks, and conversational interfaces/chatbots.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.akashtandon.in/assets/img/robotlab_writing_robot.jpg" /><media:content medium="image" url="https://www.akashtandon.in/assets/img/robotlab_writing_robot.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Frameworks and philosophy for thinking about a startup co-founder</title><link href="https://www.akashtandon.in/startup/2020-07-12-cofounder-frameworks-philosophy/" rel="alternate" type="text/html" title="Frameworks and philosophy for thinking about a startup co-founder" /><published>2020-07-12T00:00:00+00:00</published><updated>2020-07-12T00:00:00+00:00</updated><id>https://www.akashtandon.in/startup/cofounder-frameworks-philosophy</id><content type="html" xml:base="https://www.akashtandon.in/startup/2020-07-12-cofounder-frameworks-philosophy/"><![CDATA[<p><em>Note: In addition to experience as an early startup employee, the below content has been derived from my time at the <a href="https://www.joinef.com/">Entrepreneur First</a> program.</em></p>

<p>We have all heard the stories. They met, they started up and they conquered. They are the co-founders.<br />
There are a ton of variables at play in an entrepreneurial journey. These include the market, capital and good ol’ luck. The market won’t care about whether a startup team has been awake for days or not drawn a salary. The humans you work with will. Good co-founders and founding teams can help each other manage a startup’s variability and chaos. Thinking deeply about who you want to work with is as important as anything else as an entrepreneur.</p>

<p>There are no strict rules or absolutes when it comes to a startup. Popular startup folklore may lead you to believe that finding a co-founder is almost entirely down to luck. Luck is a factor, yes. That doesn’t mean there is no method to the madness.<br />
This article aims to lay down some frameworks and a philosophy to think about a co-founder and to a lesser extent, founding team. There are no easy answers to be found. But if you can ask the right questions, that can immensely help your journey.</p>

<h2 id="starting-with-self">Starting with self</h2>

<p>Before ‘product-market’ fit comes ‘founder-market’, ‘founder-product’ and ‘founder-founder’ fit. You need to be honest with yourself before you can go about expecting the same of others. It does not come easy. It is easily worth the effort though. Ask questions such as:</p>

<ul>
  <li>Why are you doing this startup?</li>
  <li>Do you really care about the problem?</li>
  <li>What is your financial position? How important is money to you?</li>
  <li>How much time are you willing to commit?</li>
  <li>Do you think deeply about things or want to get shit done quickly?</li>
  <li>What kind of work-life balance do you want?</li>
  <li>Are you comfortable delegating or do you prefer to micro-manage?
    <ul>
      <li>Alternatively, are you a control freak or not?</li>
    </ul>
  </li>
</ul>

<p>.. and so on.</p>

<p>I am not qualified to comment on right or wrong answers. A relevant article in that regard is Mark Andreessen’s <a href="https://pmarchive.com/guide_to_startups_part1.html">Why not to do a startup</a>. I can tell you this much - the clarity will help you make decisions quickly and decisively. That is a big positive.</p>

<h2 id="solo-or-not">Solo or not</h2>

<p>“Do you even need a co-founder?”</p>

<p>If you plan to startup and don’t have a college dormmate co-founder, you most likely have asked the above. Paraphrasing a founder friend, “if you want to stay healthy and not wear yourself out, do not go solo.” That does make sense but there’s more to it.</p>

<p>Below framework helps you think about this question.</p>

<p><img src="/assets/img/cofounder_control_skill_matrix.jpeg" alt="Co-founder control-skill matrix" /></p>

<p>X-axis refers to the core skill that your startup requires. For example, a deep tech startup will hinge heavily on technology and engineering. An ops-heavy one requires relevant operations expertise.<br />
Y-axis refers to your need for control or micro-management as a professional. The term “control freak” doesn’t have a negative connotation here.</p>

<p>I am still trying to digest this skill-control framework. It does offer some clarity though.</p>

<h2 id="the-dream-team">The dream team</h2>

<p>This is the big question. What makes a good co-founder? There are couple of common-sense frameworks that I have recently come across which try to answer this.</p>

<h3 id="weighing-the-skills-ideas-and-values">Weighing the skills, ideas and values</h3>

<p>Assess skills, ideas and values on an individual level.</p>

<ul>
  <li>‘Skills’ are self-explanatory.</li>
  <li>‘Ideas’ refers to the way of thinking and approaching problems. An example of contrasting approaches is an instinct to get shit done quickly versus thinking deeply first.</li>
  <li>‘Values’ are the principles that someone uses to make decisions, big or small. It is an abstract concept. You assess it the same way that you would possibly do it for a life-partner. It’s hard to ascertain, I know.</li>
</ul>

<p><img src="/assets/img/cofounder_skill_idea_value_matrix.jpeg" alt="Co-founder skill-idea-value matrix " /></p>

<p>The above table describes the most probable scenarios that can arise as a result of the corresponding skill-idea-value dynamic between the co-founders. It is a neat way to simplify a complex equation.</p>

<h3 id="thinking-about-edge">Thinking about edge</h3>

<p><a href="https://www.joinef.com/">Entrepreneur First</a> (EF) is a global program that helps ambitious individuals build deep-tech startups. It helps you find a co-founder and raise capital. Their philosophy heavily uses the concept of ‘<a href="https://medium.com/entrepreneur-first/ideas-pt-ii-finding-your-edge-8808121b591b">edge</a>’. EF defines 3 broad edge types:</p>

<ul>
  <li>Domain (D): Years of experience in a certain industry along with insights on how it can be improved</li>
  <li>Technical (T): Experts and researchers in a particular technology</li>
  <li>Catalyst (C): Business or technology generalists</li>
</ul>

<p>EF’s thesis states that successful deep tech companies are primarily formed by relevant combinations of edges. For example, D+T or D+C(tech).</p>

<h3 id="boiling-it-down">Boiling it down</h3>

<p>In simpler words, you need complimentary skillsets and temperament on a good co-founding team. If someone is building a product, someone needs to sell it. There will be exceptions but this holds true in most cases.
Another key takeaway is that the values need to be aligned from the get go. That is the most human element of the lot. It may be overlooked if you rush through things. Avoid that at all costs.</p>

<h2 id="parting-words">Parting words</h2>

<p>Take all of the above with a pinch of salt. I am not a successful entrepreneur. In fact, I am looking for a co-founder these days. That is why I refrain from being prescriptive. That being said, I have tapped into enough collective wisdom and gained experience to know that the above frameworks are helpful.</p>

<p>Do not fret too much about the nitty-gritties. The frameworks will guide you but that is all they will do. The journey is yours to make. Try to be self-aware and honest. Enjoy along the way.</p>

<p>May the force be with you!</p>

<hr />

<p>Source for header image: <a href="https://www.pikrepo.com/fqexf/two-man-fist-hands">Pikrepo</a></p>]]></content><author><name>Akash Tandon</name></author><category term="startup" /><summary type="html"><![CDATA[A guiding philosophy and collection of frameworks for thinking about a startup co-founder.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.akashtandon.in/assets/img/fist_bump.jpg" /><media:content medium="image" url="https://www.akashtandon.in/assets/img/fist_bump.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>