<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Software-Development on MangoDriod</title><link>https://md.eknath.dev/categories/software-development/</link><description>Recent content in Software-Development on MangoDriod</description><generator>Hugo -- 0.141.0</generator><language>en-us</language><lastBuildDate>Sun, 26 Apr 2026 10:25:15 +0530</lastBuildDate><atom:link href="https://md.eknath.dev/categories/software-development/index.xml" rel="self" type="application/rss+xml"/><item><title>AI Command Center to manage multiple projects [Expriment]</title><link>https://md.eknath.dev/posts/software-development/ai-command-center-expriment/</link><pubDate>Sun, 26 Apr 2026 10:25:15 +0530</pubDate><guid>https://md.eknath.dev/posts/software-development/ai-command-center-expriment/</guid><description>&lt;p>a team of 20+ handed over a project to our team of 5. i ended up owning all the native clients: iOS, Android, Windows by mostly bymyself. There are multiple repos, multiple languages and the hardship of understanding thier 7 year codebase.&lt;/p>
&lt;p>initially the thought of this was pretty stressful, but being a good solutionist i proceeded with dicecting the issues one by one and presistent on finding a solition for them all.&lt;/p></description><content:encoded><![CDATA[<p>a team of 20+ handed over a project to our team of 5. i ended up owning all the native clients: iOS, Android, Windows by mostly bymyself. There are multiple repos, multiple languages and the hardship of understanding thier 7 year codebase.</p>
<p>initially the thought of this was pretty stressful, but being a good solutionist i proceeded with dicecting the issues one by one and presistent on finding a solition for them all.</p>
<p>The first thing is prioritizing platoforms, The stats were clear hence shared them with my manager, got iOS, Android prioritized in order and parked Windows for later as usage is extremly low. now the priority is set to the next thing.</p>
<p>The problem was not the workload. it was the cognitive overhead. i can barely understand my own code after a few months. here i am inheriting code from 6-7 people who clearly took shortcuts to ship fast. folder structure was a dump. files everywhere. and on top of reverse-engineering three codebases i had to track what is done, what is next, what is blocked: simultaneously, across all platforms this task alone without AI would be a real pain and would def take more than few months.</p>
<p>I opted to the $20 Claude subscription. so every session i was wasting the first chunk of context re-explaining the same codebase to Claude, re-orienting it to where i left off, re-answering questions it should already know. by lunch i was running out of tokens i had to use my colleague&rsquo;s accounts to do whole thing again (Thanks Arun!)</p>
<p>out of this mess i needed a single place. one terminal. one browser tab. one AI session that already knows everything and picks up exactly where we left off, an interface for me and claude to read/update/learn about the project im working and it has to be highly structured, organized and prioritized.</p>
<p>so i built one. i call it the <strong>Command Center</strong>. if you have any other name to suggest, my inbox is open. this post is the full breakdown of what it is, how it works, and how you can shape it for your your own structure if you ever are in that spot, a little future pridction i think by the end of 2026 we all might have to work in this kind of set-up working on multiple projects simultaniously or atleast we will be capabble of that level of productivity.</p>
<hr>
<h2 id="what-is-this-ai-command-center">What is this AI-Command Center</h2>
<p><img alt="The Command Center&rsquo;s Dashboard Home Screen — This is the primary human interface rendered in the browser tab with everything: repo status, today&rsquo;s focus, quick links, docs and more" loading="lazy" src="/img/command-center-images/cce-home.png"></p>
<p>the idea is simple. instead of having our docs, tasks, changelogs in multiple apps and your terminal tabs scattered across screens for different platforms wokfing with different stages of the tasks or even totally different task altogether: and your daily runner claude-code has no means to know about all these instead you put a single shared operational layer above all your repos. not inside them. above them hence the term command center.</p>
<pre tabindex="0"><code>MyWorkspace/
├── ios/               ← own git repo, untouched
├── ios-dataKit/       ← own git repo, untouched
├── android/           ← own git repo, untouched
├── win/               ← own git repo, untouched
└── .ops/              ← Command Center (its own git repo)
    ├── docs/          ← documentation per project
    ├── todo/          ← task files per project + daily focus
    ├── memo/          ← decisions, KT notes, research
    ├── diagrams/      ← architecture diagrams + companion notes
    ├── changelog/     ← per-project ship history
    ├── scripts/       ← automation scripts
    └── dashboard/     ← local web dashboard
</code></pre><p>Don&rsquo;t worry the project folders stay completely independent. <code>git -C ios/ status</code> never bleeds into <code>git -C android/ status</code>. you can add or remove a project folder without touching anything else, this is very important sepearation for corporate repositories where the restrictions are tight.</p>
<p>almost everything in <code>.ops/</code> is a markdown, here is where it might looks like the WiKi pattern shared by the Andrej Karpathy. it is readable by me and the AI, diffs cleanly, and has zero dependencies you can stop here is you want a bare simple command-center but if you are like me this is not enough and there are many flaws here like doc&rsquo;s going stale as we make changes so lets get to the text stage.</p>
<hr>
<h2 id="the-scripts-are-the-real-mvp">The scripts are the real MVP</h2>
<p>As i said earlier i still use the 20$ subscription so for me tokens are really valuable running out of limit means one less productive day that might gift me a day of guilt so making use of scripts to save some routine commands that im sure will be helpful for claude to not be too dependent on remote calls, it might be confusting so here is example:</p>
<p>when i ask Claude &ldquo;what is the git status across all my repos?&rdquo;  Claude tries to figure it out by calling tools one at a time burning tokens on reasoning and multiple tool calls to give me accurate and proper response</p>
<p>but if you have a script that does it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># .ops/scripts/git_status_all.sh</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> dir in android ios ios-dataKit ios-textEditor win; <span style="color:#66d9ef">do</span>
</span></span><span style="display:flex;"><span>    branch<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>git -C <span style="color:#e6db74">&#34;</span>$ROOT<span style="color:#e6db74">/</span>$dir<span style="color:#e6db74">&#34;</span> branch --show-current 2&gt;/dev/null<span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span>    changes<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>git -C <span style="color:#e6db74">&#34;</span>$ROOT<span style="color:#e6db74">/</span>$dir<span style="color:#e6db74">&#34;</span> status --porcelain | wc -l | tr -d <span style="color:#e6db74">&#39; &#39;</span><span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$changes<span style="color:#e6db74">&#34;</span> -gt <span style="color:#ae81ff">0</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>        echo <span style="color:#e6db74">&#34;● </span>$dir<span style="color:#e6db74"> — </span>$branch<span style="color:#e6db74"> (</span>$changes<span style="color:#e6db74"> uncommitted)&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>        echo <span style="color:#e6db74">&#34;● </span>$dir<span style="color:#e6db74"> — </span>$branch<span style="color:#e6db74"> (clean)&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span>
</span></span></code></pre></div><p>Claude runs the script. gets the answer in one shot. no reasoning, no guessing, no tool call loop you don&rsquo;t have to write this manually you can just ask it to do, just make sure you get the code though.</p>
<p>the scripts i have accumulated up over time:</p>
<table>
  <thead>
      <tr>
          <th>Script</th>
          <th>What it does</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>briefing.sh</code></td>
          <td>morning snapshot: repo status, high-priority tasks, daily focus, doc staleness — all in one output</td>
      </tr>
      <tr>
          <td><code>session_context.sh</code></td>
          <td>generates a JSON briefing injected into Claude context at session start via a hook</td>
      </tr>
      <tr>
          <td><code>daily_reset.sh</code></td>
          <td>resets <code>daily.md</code> to today, carries over incomplete items, pulls high-priority tasks from project todos</td>
      </tr>
      <tr>
          <td><code>git_status_all.sh</code></td>
          <td>git status across all repos in one command</td>
      </tr>
      <tr>
          <td><code>git_pull_all.sh</code></td>
          <td>pull latest on all repos</td>
      </tr>
      <tr>
          <td><code>git_branch_all.sh</code></td>
          <td>current branch per repo</td>
      </tr>
      <tr>
          <td><code>doc_sync.js</code></td>
          <td>diffs each doc&rsquo;s last-verified commit against HEAD, flags stale docs</td>
      </tr>
      <tr>
          <td><code>pre-push-codecheck.sh</code></td>
          <td>pre-push validation — lint, build check, etc. per platform</td>
      </tr>
      <tr>
          <td><code>log_token_saving.py</code></td>
          <td>PostToolUse hook — logs each local MCP call with estimated tokens saved, reminds Claude to tag responses with <code>[local-command-center-mcp]</code></td>
      </tr>
  </tbody>
</table>
<p>the pattern is always same: take something that would require Claude to do many tool calls or make assumptions, turn it into one script, let Claude just run it and read the output. you get a more reliable answer and you spend a fraction of the tokens.</p>
<p>the <code>session_context.sh</code> one is worth explaining. it runs as a session-start hook and injects the project context automatically before i type anything:</p>
<pre tabindex="0"><code>=== SESSION BRIEFING (2026-04-26) ===

REPOS
  ios          dev_eganathan   clean
  android      dev_eganathan   clean
  ios-dataKit  dev_eganathan   14 uncommitted  ← needs attention

HIGH PRIORITY (ios)
  - sessionId hardcoded as &#34;&#34; (TIBConverseInteractor.swift:83)
  - Localization migration uncommitted

LAST SESSION: 2026-04-22 — ios folder restructure, Settings flatten done
DOC SYNC: 8 stale docs — run /sync
=====================================
</code></pre><p>this replaces re-explaining the codebase every session. the entire briefing is generated from actual file state and costs about 100 tokens to inject i shared only a small portion of this but it basically added more relavant contexts that im sure will help claude so compare that to the 500–1000 tokens you&rsquo;d spend manually orienting Claude each time.</p>
<hr>
<h2 id="documentation-that-doesnt-go-stale">Documentation that doesn&rsquo;t go stale</h2>
<p><img alt="Docs folder — each file has watches frontmatter so the sync script knows exactly which code changes make it stale." loading="lazy" src="/img/command-center-images/cce-doc-folder.png"></p>
<p>the biggest problem with docs is they go stale the moment you stop actively maintaining them. and the honest truth is most people stop maintaining them pretty quickly.</p>
<p>so instead of relying on discipline, i wired it into the workflow. every doc has frontmatter that declares what code it describes:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span><span style="color:#f92672">project</span>: <span style="color:#ae81ff">ios</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">watches</span>: <span style="color:#ae81ff">ios/Features/Inbox/**, ios/Core/Network/**</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">lastVerified</span>: <span style="color:#ae81ff">a3f9c12</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">verifiedDate</span>: <span style="color:#e6db74">2026-04-20</span>
</span></span><span style="display:flex;"><span>---
</span></span></code></pre></div><p><code>watches</code> is a glob pattern over source paths. <code>lastVerified</code> is the git commit hash when i last checked this doc.</p>
<p><code>doc_sync.js</code> runs at session start: diffs <code>lastVerified</code> against HEAD per project, filtered by <code>watches</code>. if watched files changed, the doc is flagged stale. you get a list of exactly which docs need attention — not all of them, just the ones where the underlying code actually changed.</p>
<p>the workflow: read the diff, update the doc if needed, run <code>--mark-current</code> to stamp it with the new HEAD. stale docs are a session-start action item, not a quarterly effort.</p>
<p>one more thing worth building: a <code>doc_sync_prompt.md</code> template. when <code>doc_sync.js</code> flags a doc as stale, you need to give Claude a consistent prompt for reviewing it. the template fills in <code>{{DOC_PATH}}</code>, <code>{{GIT_DIFF_STAT}}</code>, <code>{{CHANGED_FILES}}</code>, and <code>{{DOC_CONTENT}}</code> — Claude reads the diff, decides what changed, updates only what is wrong or outdated, and preserves the frontmatter format. without a template you end up writing a different prompt every time and the quality of the review varies. one template file in <code>scripts/</code>, referenced whenever <code>/sync</code> runs.</p>
<hr>
<h2 id="task-management-across-platforms">Task management across platforms</h2>
<p><img alt="Per-platform todo files with priority buckets — high, medium, low, and completed. Daily.md pulls from these each morning." loading="lazy" src="/img/command-center-images/cce-todos.png"></p>
<p>one file per platform. <code>ios_todos.md</code>, <code>android_todos.md</code>, <code>win_todos.md</code>. same structure in all of them:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#75715e">## High Priority
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">- [ ]</span> Fix session ID bug in TIBConverseInteractor.swift:83
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Medium Priority
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">- [ ]</span> Add unit test target
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Low Priority
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">- [ ]</span> Refactor legacy auth flow
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">## Completed
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">- [x]</span> 2026-04-20 — Migrated Localizable strings
</span></span></code></pre></div><p>there is also <code>daily.md</code> — today&rsquo;s focus, separate from the long-running backlogs. <code>daily_reset.sh</code> resets it each morning, carries over anything incomplete from yesterday, and pulls the top items from each project&rsquo;s High Priority section so you are never starting from blank. at end of day you move done items back to the project file and carry over the rest.</p>
<p>it is not rocket science but it works because everything is in one place and Claude can read all of it directly — no context switching, no &ldquo;go check Linear&rdquo;, no copy-pasting.</p>
<hr>
<h2 id="memos-kt-notes-and-changelogs">Memos, KT notes, and changelogs</h2>
<p>these three are the most underrated parts of the system. they get skipped when people think about &ldquo;what does an AI need to know&rdquo; but they are exactly what the AI is missing when it gives you advice that misses context.</p>
<p><strong>Memos (<code>memo/</code>)</strong> are for anything that does not fit in a doc or a todo. decision logs, architecture choices, research, migration plans, meeting outputs. the key thing about a memo is it captures the <em>why</em>. a doc says &ldquo;the auth middleware works like this&rdquo;. a memo says &ldquo;we rewrote the auth middleware because legal flagged the session token storage in April&rdquo;. without the memo Claude treats every piece of code as a deliberate, still-valid decision. with the memo it knows what is intentional and what is technical debt inherited from a compliance scramble.</p>
<p><strong>KT notes (<code>memo/kt/&lt;platform&gt;/YYYY-MM-DD_topic.md</code>)</strong> are specifically for inheriting a codebase. when someone does a knowledge transfer session, you write it up here. when you figure out something non-obvious about how the code works, you write it up here. these are the things that would take a new person weeks to discover by reading code — undocumented conventions, &ldquo;we don&rsquo;t touch that file because&rdquo;, quirks of the build system, context behind a weird architectural choice. writing them down once means Claude knows them forever.</p>
<p><strong>Changelogs (<code>changelog/&lt;project&gt;.md</code>)</strong> are append-only per-project ship logs:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>| 2026-04-15 | Migrated inbox to VIPER          | PR #441 |
</span></span><span style="display:flex;"><span>| 2026-04-08 | Upgraded to AGP 8.3              | PR #438 |
</span></span><span style="display:flex;"><span>| 2026-03-22 | Added push notification handling | PR #421 |
</span></span></code></pre></div><p>one row per notable change. the practical use: &ldquo;did we ship X on all platforms yet?&rdquo; — you check the changelog instead of grepping git history across five repos. also useful at standup when someone asks what shipped last week.</p>
<hr>
<h2 id="the-local-web-dashboard">The local web dashboard</h2>
<p><img alt="Quick links panel — one-click access to docs, scripts, and frequently used paths across all projects." loading="lazy" src="/img/command-center-images/cce-home-quicklinks.png"></p>
<p><img alt="Keyboard shortcuts reference — configured per-project so you never forget the exact command flags." loading="lazy" src="/img/command-center-images/cce-shortcuts.png"></p>
<p>the dashboard is a local Node.js server. no framework, no build step, runs offline, starts in two seconds.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>node .ops/dashboard/server.js
</span></span><span style="display:flex;"><span><span style="color:#75715e"># opens at localhost:3000</span>
</span></span></code></pre></div><p><strong>File browser</strong> — tree sidebar over all docs, todos, memos. files render as Markdown. todo files have live checkboxes — clicking one calls <code>POST /api/toggle</code> and writes the change directly to disk.</p>
<p><strong>Git status panel</strong> — polls all repos in parallel. branch, last commit, time ago, dirty file count.</p>
<p><strong>Full-text search</strong> — index built at startup from every <code>.md</code>, <code>.txt</code>, <code>.sh</code> file. AND-matched with scoring. returns results with line-number snippets. useful when you remember something exists but can not remember which doc it is in.</p>
<p><strong>Doc staleness indicators</strong> — green/yellow/red dots next to each doc in the sidebar based on <code>doc_sync.js</code> output. a resync button re-runs the script and refreshes the cache.</p>
<p><strong>Task creation</strong> — a form on every page to add a todo at any priority level to any project. finds the right heading and inserts the item, updates the <code>Last updated:</code> stamp.</p>
<hr>
<h2 id="shape-it-to-your-problems--the-cmd-tabs-and-rss-feeds">Shape it to your problems — the CMD tabs and RSS feeds</h2>
<p>here is the thing: everyone&rsquo;s pain is different. the folder structure and scripts above are the common base. but the reason this actually works day-to-day is that you can add whatever else you actually need on top.</p>
<p>for me, the two things i added that made the biggest difference:</p>
<p><img alt="Embedded terminal with per-project tabs — each one opens a PTY in that project&rsquo;s directory. Quick-command buttons above run the commands you&rsquo;d otherwise forget." loading="lazy" src="/img/command-center-images/cce-terminal.png"></p>
<p><strong>CMD view</strong> — <code>xterm.js</code> + <code>node-pty</code> over WebSocket. a real terminal embedded in the browser, one tab per project. each tab opens a PTY session in that project&rsquo;s directory. per-project quick-command buttons — you configure a label and a shell command, they appear as buttons above the terminal. so <code>Build Debug</code> runs <code>./gradlew assembleDebug</code> in the Android tab. <code>Sync Pods</code> runs <code>pod install</code> in the iOS tab. i click once, watch it run. no switching windows, no remembering the exact command flags.</p>
<p>before this i was constantly switching terminal windows and losing track of which one was which. now everything is in one browser tab.</p>
<p><img alt="RSS feeds grouped by platform — no algorithm, no app, just the dev blogs and release channels you actually want to follow." loading="lazy" src="/img/command-center-images/cce-rss.png"></p>
<p><strong>RSS feeds / newsletters</strong> — each platform has its own dev newsletter and release channel. iOS dev forum, Android releases, Kotlin blog. i added an RSS tab. feed URLs live in a <code>feeds.json</code> file, keyed by platform:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;ios&#34;</span>: [
</span></span><span style="display:flex;"><span>    { <span style="color:#f92672">&#34;label&#34;</span>: <span style="color:#e6db74">&#34;iOS Dev Weekly&#34;</span>, <span style="color:#f92672">&#34;url&#34;</span>: <span style="color:#e6db74">&#34;https://iosdevweekly.com/issues.rss&#34;</span> },
</span></span><span style="display:flex;"><span>    { <span style="color:#f92672">&#34;label&#34;</span>: <span style="color:#e6db74">&#34;Swift Blog&#34;</span>, <span style="color:#f92672">&#34;url&#34;</span>: <span style="color:#e6db74">&#34;https://swift.org/atom.xml&#34;</span> }
</span></span><span style="display:flex;"><span>  ],
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;android&#34;</span>: [
</span></span><span style="display:flex;"><span>    { <span style="color:#f92672">&#34;label&#34;</span>: <span style="color:#e6db74">&#34;Android Developers Blog&#34;</span>, <span style="color:#f92672">&#34;url&#34;</span>: <span style="color:#e6db74">&#34;https://feeds.feedburner.com/blogspot/hsDu&#34;</span> }
</span></span><span style="display:flex;"><span>  ]
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>the server fetches them server-side (handles redirects, CDATA stripping), renders as cards per platform. i stop by when i want to catch up. no separate app, no subscriptions, no algorithm deciding what i see — just the feeds i actually want, inside the same tab i already have open.</p>
<p>neither of these exist in anyone else&rsquo;s command center because they are solving my specific workflow pain. the point is the base layer gives you the foundation. the top layer is yours to build.</p>
<p>other ideas i have seen or thought about that i haven&rsquo;t built yet: a meeting notes tab that auto-stamps today&rsquo;s date, a platform-specific analytics panel, a PR review queue for when you work with a team.</p>
<hr>
<h2 id="the-two-tier-ai-model">The two-tier AI model</h2>
<p><img alt="Local AI chat powered by Mistral 7B via Ollama — answers questions about your codebase from the RAG index, free and fully offline." loading="lazy" src="/img/command-center-images/cce-local-ai-chat.png"></p>
<p>the local web dashboard has a built-in AI chat powered by Mistral 7B via Ollama — not Claude. this is the layer that routes cheap questions away from the cloud.</p>
<p>the RAG pipeline:</p>
<pre tabindex="0"><code>question
   │
   ▼
embed ──► LanceDB vector search ──► top-k doc chunks
                                          │
                                          ▼
                             Mistral 7B ◄── context + question
                                          │
                                          ▼
                                    streamed answer
                               (with source file citations)
</code></pre><p>at startup the server walks all docs, chunks them, embeds them and stores the index in LanceDB. conversation history (last 12 turns) is passed with each request. topics can be filtered per platform.</p>
<p>but here is the part that matters more — the local model is also wired directly into Claude as an MCP tool. not just the dashboard chat, but Claude itself can call it:</p>
<pre tabindex="0"><code>search_docs(query, project?)  — semantic search over the LanceDB index
ask_local(question, project?) — full RAG query to Mistral 7B
</code></pre><p>so when you ask Claude &ldquo;where is the WebSocket manager?&rdquo; Claude does not think about it, does not run three tool calls, does not burn tokens. it calls <code>ask_local</code>, gets the answer back from the local model as a tool response, and continues. the routing decision is encoded in <code>CLAUDE.md</code> as explicit rules so it happens automatically:</p>
<pre tabindex="0"><code>You
 │
 ├── Complex reasoning ──────────────────► Claude (API tokens)
 │    debugging, architecture,
 │    multi-file refactoring, codegen
 │
 └── Lookups + summaries ──► local MCP ──► Mistral 7B (free, local)
      &#34;where is X?&#34;, todos,
      file summaries, templates
</code></pre><p>questions that go local: &ldquo;where is ClassName defined&rdquo;, &ldquo;what files are in folder X&rdquo;, &ldquo;summarise this file&rdquo;, &ldquo;what todos are open for Android&rdquo;, &ldquo;what is the VIPER template for a new scene&rdquo;, anything answerable by reading the existing docs.</p>
<p>questions that use Claude: multi-file refactoring, debugging across call chains, cross-platform analysis with real reasoning, writing new features.</p>
<p>in practice around 60–70% of session queries route to the local model. those run free on my machine. Claude gets the work that actually needs it.</p>
<h3 id="tracking-what-you-saved">Tracking what you saved</h3>
<p>there is one more hook worth adding: a PostToolUse hook on the local MCP calls. every time Claude calls <code>ask_local</code> or <code>search_docs</code>, a small Python script logs the call to a <code>token_savings.jsonl</code> file with a timestamp, the tool used, and an estimated token count saved:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{<span style="color:#f92672">&#34;ts&#34;</span>: <span style="color:#e6db74">&#34;2026-04-26T10:32:11&#34;</span>, <span style="color:#f92672">&#34;tool&#34;</span>: <span style="color:#e6db74">&#34;ask_local&#34;</span>,    <span style="color:#f92672">&#34;estTokensSaved&#34;</span>: <span style="color:#ae81ff">400</span>}
</span></span><span style="display:flex;"><span>{<span style="color:#f92672">&#34;ts&#34;</span>: <span style="color:#e6db74">&#34;2026-04-26T10:33:45&#34;</span>, <span style="color:#f92672">&#34;tool&#34;</span>: <span style="color:#e6db74">&#34;search_docs&#34;</span>,  <span style="color:#f92672">&#34;estTokensSaved&#34;</span>: <span style="color:#ae81ff">250</span>}
</span></span></code></pre></div><p>the same hook also outputs a reminder back into Claude&rsquo;s context: <em>&ldquo;you just used the local model — append <code>[tib-mcp-info]</code> to the sentence in your response that came from this result.&rdquo;</em></p>
<p>that <code>[tib-mcp-info]</code> tag in the response is how you know which parts Claude answered from local knowledge vs the local model. it is easy to skip but worth keeping — after a few weeks you can look at the JSONL and get a rough sense of how many tokens the routing saved. it also keeps you honest about whether the local model is actually being used or whether Claude is quietly doing everything itself.</p>
<hr>
<h2 id="the-session-cache--picking-up-exactly-where-you-left-off">The session cache — picking up exactly where you left off</h2>
<p>the session briefing knows &ldquo;what was worked on last session&rdquo; because <code>/callitaday</code> writes a <code>session_summary.json</code> at the end of each day. the structure:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;date&#34;</span>: <span style="color:#e6db74">&#34;2026-04-22&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;platform&#34;</span>: <span style="color:#e6db74">&#34;ios&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;done&#34;</span>: [
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Settings flatten complete — SettingsSUI/NewUI/Settings_base merged into Features/Settings&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Helpers restructured — Contacts moved to Features/Contacts&#34;</span>
</span></span><span style="display:flex;"><span>  ],
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;carriedOver&#34;</span>: [
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Android: edge to edge mandate for Play Store — not checked yet&#34;</span>
</span></span><span style="display:flex;"><span>  ],
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;decisions&#34;</span>: [
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Contacts gets Features/Contacts/ not buried in Helpers&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;URLSchemeAnalyser lives in Core/DeepLinker/&#34;</span>
</span></span><span style="display:flex;"><span>  ],
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;openQuestions&#34;</span>: [
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;CustomContextMenu still needs to move to Features/Inbox/Actions/&#34;</span>
</span></span><span style="display:flex;"><span>  ],
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;keyFiles&#34;</span>: [
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;native/TeamInbox.xcodeproj/project.pbxproj&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;native/TeamInbox/Features/Settings/&#34;</span>
</span></span><span style="display:flex;"><span>  ]
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>next morning, <code>session_context.sh</code> reads this file and includes the <code>done</code>, <code>carriedOver</code>, <code>decisions</code>, and <code>openQuestions</code> fields in the briefing. Claude starts the session knowing exactly where things were left — no re-reading git log, no &ldquo;what were we working on?&rdquo;. the <code>keyFiles</code> field is useful if you want Claude to immediately orient to the relevant parts of the code.</p>
<p><code>/callitaday</code> is the slash command that writes this. it wraps the session: moves done items from <code>daily.md</code> back to the project todo files, carries over incomplete items, writes the JSON. it is the last thing you run before closing the terminal.</p>
<hr>
<h2 id="setting-this-up-yourself">Setting this up yourself</h2>
<p>the minimum version of this is five files and an afternoon:</p>
<ol>
<li>create a parent workspace folder above all your repos</li>
<li>add a <code>.ops/</code> folder with <code>docs/</code>, <code>todo/</code>, <code>memo/</code>, <code>scripts/</code></li>
<li>write a <code>CLAUDE.md</code> at the workspace root — folder layout, git command prefixes, working conventions, routing rules</li>
<li>write <code>session_context.sh</code> or a simple briefing script that runs <code>git -C &lt;project&gt;/ status</code> across all repos and prints a summary — hook it to session start</li>
<li>write one doc per project covering the folder structure and architecture, add the <code>watches</code> frontmatter</li>
</ol>
<p>that is the base. that alone kills the &ldquo;re-explain everything every session&rdquo; problem and the &ldquo;docs live in Notion somewhere&rdquo; problem.</p>
<p>layer on top in order of payoff:</p>
<ul>
<li><code>daily_reset.sh</code> and the <code>daily.md</code> workflow — probably adds the most to day-to-day sanity</li>
<li><code>doc_sync.js</code> — if you are writing docs and want them to stay honest</li>
<li>the dashboard — once you want a visual layer over all of it</li>
<li>the CMD tabs — if you are constantly switching terminal windows for the same commands</li>
<li>the local model + MCP — when token pressure is real and your doc library is large enough to justify a RAG pipeline</li>
</ul>
<p>do not build all of it at once. start with the folder structure and the <code>CLAUDE.md</code>. add the rest as you actually feel the pain they solve.</p>
<hr>
<h2 id="what-changed">What changed</h2>
<p>before: open the right repo in Xcode, find the right Notion page, check Slack for where i left off, re-explain the codebase to Claude, watch the first 30% of my context window fill with boilerplate before writing a single line of actual code.</p>
<p>after: one terminal, one browser tab, one Claude session. the Command Center has the state of every repo, every doc, every task, every recent decision — and the cheap questions never reach the cloud.</p>
<p>the whole system is about 1,500 lines of Node.js, a handful of shell scripts, and Markdown files. no heavy dependencies, no cloud services, runs entirely offline.</p>
<p>if you are managing more than two active repos and you are constantly re-orienting your AI every session — this pattern is worth trying. you do not have to build the whole thing. start with the folder structure and a <code>CLAUDE.md</code>. that alone will change how your sessions feel.</p>
<p>the rest you will figure out as you go, shaped around whatever is actually slowing you down. that is the point.</p>
<hr>
<p><em>a note on this post — the ideas, the frustration, the architecture, the decisions are all mine. i used Claude to help structure and articulate things i already knew but was too lazy to write out properly. felt right to mention it given the whole post is about working with AI. use your tools.</em></p>
<p><em>after writing this i came across andrej karpathy&rsquo;s wiki pattern — same instinct around plain files, single source of truth, readable by humans and machines. worth looking up if this resonated.</em></p>
]]></content:encoded></item><item><title>Solutionist Mindset: Reclaiming Purpose in the Age of AI - My DevFest2025 Talk</title><link>https://md.eknath.dev/posts/software-development/devfest2025-solutionist-mindset-talk/</link><pubDate>Sun, 09 Nov 2025 00:00:00 +0000</pubDate><guid>https://md.eknath.dev/posts/software-development/devfest2025-solutionist-mindset-talk/</guid><description>&lt;p>&lt;em>This is an elaborated version of my talk at Google Developer Group Chennai&amp;rsquo;s DevFest2025, where I shared my journey from rock bottom to becoming an Android Developer at Zoho and how the &amp;ldquo;Solutionist Mindset&amp;rdquo; can help us thrive in the age of AI.&lt;/em>&lt;/p>
&lt;p>&lt;img alt="Speaking at the Platform" loading="lazy" src="https://md.eknath.dev/img/devfest_2025/speaking-at-the-platform-01.JPG">
&lt;em>Presenting the Solutionist Mindset on stage&lt;/em>&lt;/p>
&lt;script defer class="speakerdeck-embed" data-id="ae22be07dca842408af4c8ec3fd4b234" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js">&lt;/script>
&lt;p>Standing on that stage at DevFest2025 in Chennai, looking out to you all, I asked a simple question: &lt;strong>&amp;ldquo;How many of you are worried about AI taking over your job?&amp;rdquo;&lt;/strong>&lt;/p></description><content:encoded><![CDATA[<p><em>This is an elaborated version of my talk at Google Developer Group Chennai&rsquo;s DevFest2025, where I shared my journey from rock bottom to becoming an Android Developer at Zoho and how the &ldquo;Solutionist Mindset&rdquo; can help us thrive in the age of AI.</em></p>
<p><img alt="Speaking at the Platform" loading="lazy" src="/img/devfest_2025/speaking-at-the-platform-01.JPG">
<em>Presenting the Solutionist Mindset on stage</em></p>
<script defer class="speakerdeck-embed" data-id="ae22be07dca842408af4c8ec3fd4b234" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>
<p>Standing on that stage at DevFest2025 in Chennai, looking out to you all, I asked a simple question: <strong>&ldquo;How many of you are worried about AI taking over your job?&rdquo;</strong></p>
<p>The show of hands was overwhelming (some shared why they are confident too, I wish I was them). The anxiety in the room was palpable.</p>
<p>I get it. I&rsquo;ve been there. In fact, I&rsquo;m still navigating these waters myself. As an Android Developer at Zoho, I&rsquo;ve watched AI tools evolve from curiosities to formidable coding partners. They&rsquo;re impressive—spitting out code 10 to 100 times faster than we can. It&rsquo;s almost unsettling, watching something produce in minutes what would take us hours or days.</p>
<p>The predictions are scary. The layoff numbers are even scarier. Tech Twitter is full of doom-scrolling material about how AI will replace developers, how junior positions are vanishing, how the barrier to entry is impossibly high now.</p>
<p>So I did what any rational person would do—I took a step back and contemplated this deeper.</p>
<p><strong>What&rsquo;s the worst thing that can happen to me?</strong></p>
<p>And then I realized something profound: I&rsquo;ve been through worse.</p>
<hr>
<h2 id="rock-bottom-varanasi-december-2017">Rock Bottom: Varanasi, December 2017</h2>
<p>Let me share something deeply personal with you. Something I don&rsquo;t talk about often, but something that fundamentally changed how I approach adversity.</p>
<p>In December 2017, my life fell apart.</p>
<p>Not in the dramatic, movie-like way—but in the quiet, suffocating way that creeps up on you. Emotionally stuck, I watched as friends I believed would be with me forever just&hellip; disappeared. The community I had built my identity around crumbled. My entire belief system, everything I thought I knew about life and relationships, shattered.</p>
<p>Losing all hope, I set out on what I genuinely thought would be my final journey: to Varanasi.</p>
<h3 id="the-ghats-of-varanasi">The Ghats of Varanasi</h3>
<p>I spent weeks alone at the ghats with almost nothing. It was the coldest winter I&rsquo;ve ever experienced, and I wasn&rsquo;t prepared—not physically, not mentally, not emotionally.</p>
<p>Surviving on just one meal a day at a nearby temple, I would spend my days sitting by the river, gazing into the Ganges in silence. The helplessness, the solitude—it was unlike anything I had ever known before. Even now, years later, I struggle to put that experience into words.</p>
<p>Imagine this: You&rsquo;re standing at the crossroads of chaos. Motion swirls all around you—boats on the river, pilgrims performing rituals, the constant murmur of life and death existing side by side. Yet despite all this movement, you&rsquo;re paralyzed. You can&rsquo;t decide where to step next. Your mind feels numb. The whole experience is so overwhelming that language itself becomes inadequate.</p>
<p>But here&rsquo;s what that experience taught me: <strong>Clarity doesn&rsquo;t come from escaping pain. It comes from sitting with it, accepting it, and taking it in as a lesson from the universe.</strong></p>
<p>When you&rsquo;ve sat at the ghats of Varanasi, contemplating the impermanence of everything while watching funeral pyres burn and pilgrims bathe, the fear of losing a job to AI becomes&hellip; manageable. Not trivial—but definitely manageable.</p>
<hr>
<h2 id="fast-forward-finding-auroville">Fast Forward: Finding Auroville</h2>
<p>After a few more reality checks and life lessons (because apparently, Varanasi wasn&rsquo;t enough), I came across Auroville and its unique philosophy around money and community living.</p>
<p>For those unfamiliar, Auroville is an experimental township in Tamil Nadu, founded on the principles of human unity, sustainable living, and spiritual evolution. Their approach to money and work fascinated me—the idea that work should be about contribution, not just compensation.</p>
<p>I felt drawn to it. It seemed like a place that resonated with what I was searching for—a new way of living, a new framework for understanding my place in the world.</p>
<h3 id="reality-meets-philosophy">Reality Meets Philosophy</h3>
<p>When I arrived, I realized that while the philosophy was inspiring, it was still very much a work in progress—an idea in the process of becoming real. The gap between the ideal and the reality was significant. But you know what? That&rsquo;s okay. That&rsquo;s how all great experiments work.</p>
<p>Yet, amidst that gap, I found something invaluable: a warm, accepting community and my very first job at a busy guest house.</p>
<p>I started as a <strong>waiter</strong>. Then I worked my way up—biller, receptionist, whatever was needed. Each role taught me something new about human interaction, problem-solving, and the simple dignity of work.</p>
<p>It was genuinely educative in ways a classroom never could be. I learned about hospitality, about managing stress during rush hours, about the intricate dance of keeping customers happy while maintaining operational efficiency.</p>
<p>But there was one problem that bugged me daily, especially at the billing counter.</p>
<hr>
<h2 id="my-first-solution-the-python-calculator">My First Solution: The Python Calculator</h2>
<p>Restaurants in Auroville had unique discount structures that reflected their community-oriented values:</p>
<ul>
<li>10% off for volunteers</li>
<li>20% off for Auroville residents</li>
<li>Plus 5% GST for regular guests</li>
</ul>
<p>Simple enough, right? Except during rush hours, when we had to calculate all this <strong>manually using a calculator</strong>.</p>
<p>Picture this: It&rsquo;s lunch rush. The kitchen is yelling that orders are backing up. Customers are waiting, getting increasingly impatient. You&rsquo;re trying to calculate percentages on a basic calculator while keeping track of multiple bills, and someone changes their mind about their order halfway through.</p>
<p>It was absolute chaos.</p>
<p>So, I did something I had never done before—I wrote a <strong>simple Python Tkinter app</strong> to simplify this process.</p>
<h3 id="the-joy-of-building-your-first-solution">The Joy of Building Your First Solution</h3>
<p>Now, to any experienced developer reading this, a Python Tkinter calculator probably sounds laughably simple. And it is. But back then, for someone with minimal programming experience, it was <strong>transformative</strong>.</p>
<p>It took me a couple of days and several iterations. The first version was buggy. The UI was ugly. But it worked. And during the next busy lunch rush, it saved my sanity.</p>
<p>This was my first real solution. Not a tutorial project. Not a homework assignment. A real problem, solved with real code, that helped real people.</p>
<p>Looking back now, it&rsquo;s not sparkly or impressive. I wouldn&rsquo;t put it in my portfolio. But it was a <strong>huge milestone</strong> in my journey. It empowered me to believe that I could build tools to solve problems.</p>
<h3 id="the-ai-comparison">The AI Comparison</h3>
<p>Here&rsquo;s the kicker: If I faced the same problem today, with access to Claude, GPT-4, or Copilot, it would take me <strong>5 minutes or less</strong> to build the same thing. Probably better, with proper error handling and a cleaner UI.</p>
<p>That&rsquo;s both amazing and terrifying. Amazing because of the productivity boost. Terrifying because if I were starting my journey today, would I have learned the same lessons? Would I have struggled enough to truly understand the fundamentals?</p>
<p>This is the paradox we&rsquo;re living in.</p>
<hr>
<h2 id="the-bootcamp-zoho-schools-of-graduate-studies">The Bootcamp: Zoho Schools of Graduate Studies</h2>
<p>After a while working at the restaurant, things were getting repetitive. I could do the job in my sleep. The initial learning curve had flattened out completely.</p>
<p>Then, I was given an opportunity to participate in the <strong>Zoho Schools of Graduate Studies (ZSGS)</strong>—a pilot 3-month fast-track program into software development.</p>
<p>There were interviews. There were coding tests. There were problem-solving assessments.</p>
<p>But you know what stood out during my interview? <strong>That custom calculator project I built to solve the billing problem.</strong></p>
<p>It wasn&rsquo;t the fanciest project. It wasn&rsquo;t built with the latest framework or deploying cutting-edge architecture. But it demonstrated something crucial: <strong>I could identify a problem and build a solution.</strong></p>
<h3 id="the-underdog-journey">The Underdog Journey</h3>
<p>With a few more rounds of interviews and small projects, I was accepted into the program. But here&rsquo;s the thing—acceptance didn&rsquo;t guarantee employment at Zoho. It just meant you&rsquo;d get direct interviews if there were openings afterward.</p>
<p>And I wasn&rsquo;t under any illusion about my chances.</p>
<p>I was the <strong>only individual with just an SSLC (10th grade) certificate</strong> among some incredibly bright minds with degrees in Computer Science, Electronics, Mathematics, and various other technical streams. On paper, I was the least qualified person in that room.</p>
<p>But I knew one thing: I could give my absolute best and absorb everything like a sponge.</p>
<p>I was like a thirsty man stumbling upon an oasis—desperate to quench my thirst by learning everything I possibly could.</p>
<h3 id="the-learning-environment">The Learning Environment</h3>
<p>The program was intense. We learned data structures, algorithms, software design principles, databases, and practical software development. But more than the technical content, it was the <strong>mindset shift</strong> that mattered.</p>
<p>My mentors didn&rsquo;t just teach me how to code—they taught me how to <strong>think</strong>. How to break down complex problems. How to ask the right questions. How to learn independently.</p>
<p>The other students, despite their impressive credentials, were incredibly supportive. We learned from each other, challenged each other, and grew together.</p>
<p>Thanks to my mentors and the collaborative environment, I managed to not just survive, but thrive.</p>
<h3 id="the-interview">The Interview</h3>
<p>And the first team that interviewed me at the end of the program? <strong>They took me in.</strong></p>
<p>Not because of my credentials (I had none). Not because of my degree (I had none). But because I demonstrated the ability to learn, adapt, and build solutions.</p>
<p>That&rsquo;s how I became part of this wonderful tech world. Not through traditional credentials, but through small projects, relentless learning, and incredible mentors who saw potential where others might have seen only limitations.</p>
<hr>
<h2 id="a-glimpse-of-tech-life">A Glimpse of Tech Life</h2>
<p>After joining a team at Zoho, I slowly started getting accustomed to this new life—realizing how incredibly fortunate I was to be on an <strong>autodidactic journey</strong> that felt like a dream.</p>
<p>Learning, growing, and getting paid for it? It seemed almost too good to be true.</p>
<h3 id="the-difference-from-previous-jobs">The Difference from Previous Jobs</h3>
<p>Unlike any job I&rsquo;d had before—waiter, receptionist, biller—this one was fundamentally different. Everything I learned for work actually <strong>empowered me personally</strong>. It felt like one of those rare systems where the more you give, the more you grow.</p>
<p>It was like tending a bonsai tree—carefully shaped by external constraints and guidance, yet every bit of effort you put in feeds your own roots, strengthens your own foundation.</p>
<p>I was getting paid to:</p>
<ul>
<li>Learn new technologies</li>
<li>Experiment with different approaches</li>
<li>Build features that many would use</li>
<li>Solve genuinely interesting problems</li>
</ul>
<p>It felt unreal. It felt like the job I had dreamed about during those cold nights in Varanasi.</p>
<h3 id="the-honeymoon-phase">The Honeymoon Phase</h3>
<p>For a couple of years, it was blissful. The learning curve was steep but manageable. Android development was evolving rapidly—Kotlin was gaining traction, Jetpack Compose was being introduced, and the ecosystem was thriving.</p>
<p>I threw myself into it. I learned Kotlin inside and out. I became proficient in Android architecture patterns. I contributed to significant features in our products.</p>
<p>For a while, I felt secure. I had carved out expertise. I had value.</p>
<p>And then… <strong>the AI wave hit.</strong></p>
<hr>
<h2 id="then-ai-happened">Then AI Happened</h2>
<p>ChatGPT launched in November 2022. At first, it was a curiosity. We played with it, asked it silly questions, marveled at its responses.</p>
<p>Then GitHub Copilot became mainstream. Then GPT-4 arrived. Then Claude. Then specialized coding models like Codex and Replit Ghostwriter.</p>
<p>Watching AI get better at coding, debugging, and doing things that used to be uniquely ours—suddenly, that old fear came back.</p>
<p>Not the fear of losing everything (I&rsquo;d survived that in Varanasi). But the <strong>fear of becoming irrelevant</strong> was just as scary in a different way.</p>
<h3 id="the-existential-questions">The Existential Questions</h3>
<p>What happens when the skills we&rsquo;ve painstakingly built over years suddenly don&rsquo;t matter anymore?</p>
<p>What happens when a fresh graduate with AI assistance can be as productive as a senior developer?</p>
<p>What happens when companies realize they can maintain codebases with fewer people because AI handles the routine work?</p>
<p>These weren&rsquo;t hypothetical questions anymore. They were becoming reality. The layoff announcements from major tech companies included explicit mentions of &ldquo;productivity improvements through AI&rdquo; as justification.</p>
<h3 id="the-essay-that-changed-my-perspective">The Essay That Changed My Perspective</h3>
<p>Around that time, in one of our team discussions about the future of software development, my manager shared an essay from <strong>1932</strong> by Bertrand Russell called <strong>&ldquo;In Praise of Idleness.&rdquo;</strong></p>
<p>Has anyone here read it? If not, I highly recommend it.</p>
<p>Russell wrote this during the <strong>Great Depression</strong>, when millions were unemployed and the world was in economic turmoil. Yet his argument wasn&rsquo;t about working harder to save the economy—it was about working <strong>smarter</strong> and questioning the entire premise of constant labor.</p>
<h3 id="russells-radical-idea">Russell&rsquo;s Radical Idea</h3>
<p>Russell argued that modern civilization had created a <strong>moral trap</strong> where we measure human worth by hours worked, not by problems solved or lives improved.</p>
<p>He believed that if machines could handle labor, we shouldn&rsquo;t artificially create more meaningless work just to keep people busy. Instead, we should use that freedom for:</p>
<ul>
<li>Creativity</li>
<li>Learning</li>
<li>Art</li>
<li>Philosophy</li>
<li>Solving problems that actually matter</li>
</ul>
<p>Think about that. Written in <strong>1932</strong>, before:</p>
<ul>
<li>Computers</li>
<li>The Internet</li>
<li>Mobile phones</li>
<li>Artificial Intelligence</li>
</ul>
<p>Yet it feels like it was written specifically for us, right now, in 2025.</p>
<h3 id="the-question-reframed">The Question Reframed</h3>
<p>Russell&rsquo;s essay helped me reframe the question entirely.</p>
<p>It&rsquo;s not &ldquo;Will AI replace us?&rdquo;</p>
<p>It&rsquo;s <strong>&ldquo;What will we do with the freedom AI creates?&rdquo;</strong></p>
<p>Tasks that used to take weeks or months of research, development, and iteration now take hours or days thanks to AI assistance.</p>
<p>Yes, there will be side effects:</p>
<ul>
<li>Layoffs</li>
<li>Reduced entry-level positions</li>
<li>Increased pressure on individual productivity</li>
<li>Market corrections</li>
</ul>
<p>But these aren&rsquo;t permanent states—they&rsquo;re transition periods. And the question for each of us is: <strong>How do we position ourselves to thrive in this transition?</strong></p>
<hr>
<h2 id="breaking-out-of-the-box">Breaking Out of the Box</h2>
<p>For years, I had confined myself to what I call a <strong>&ldquo;boxed developer&rdquo; mindset</strong>.</p>
<p>Everything revolved around:</p>
<ul>
<li>Kotlin</li>
<li>Android</li>
<li>Jetpack Compose</li>
</ul>
<p>I was good at it. I was comfortable. I could solve most Android problems thrown my way.</p>
<p>But I realized that comfort was becoming a <strong>cage</strong>.</p>
<h3 id="the-title-trap">The Title Trap</h3>
<p>We do this to ourselves, don&rsquo;t we? We accept titles and roles that become our entire identity:</p>
<ul>
<li>&ldquo;I&rsquo;m an Android Developer&rdquo;</li>
<li>&ldquo;I&rsquo;m a Frontend Engineer&rdquo;</li>
<li>&ldquo;I&rsquo;m a Backend Specialist&rdquo;</li>
</ul>
<p>These titles are useful for resumes and LinkedIn profiles. They help us find jobs. They give us a sense of expertise.</p>
<p>But they also <strong>limit our view</strong>. They keep us from looking beyond what our immediate work needs us to see.</p>
<h3 id="developer-vs-solutionist">Developer vs. Solutionist</h3>
<p>Here&rsquo;s the crucial distinction I&rsquo;ve discovered:</p>
<p>A <strong>developer</strong> writes code to win bread. They learn what they need to stay employed. They specialize to remain valuable. It&rsquo;s transactional.</p>
<p>A <strong>solutionist</strong> goes much deeper. They enjoy and learn every bit they can, like a magnet drawn to new knowledge. They&rsquo;re driven by curiosity and the joy of solving problems, not just by paychecks.</p>
<p>The developer asks: &ldquo;What do I need to know for my job?&rdquo;</p>
<p>The solutionist asks: &ldquo;What do I need to know to solve this problem effectively?&rdquo;</p>
<p>See the difference?</p>
<hr>
<h2 id="staying-relevant-build-continuously">Staying Relevant: Build Continuously</h2>
<p>This distinction matters immensely because once the AI tsunami completes its first wave, <strong>the next one is already forming</strong>.</p>
<p>Quantum computing advancements. More sophisticated AI models. New paradigms we haven&rsquo;t even conceived of yet.</p>
<p>Staying relevant through all of these requires constant adaptation and learning.</p>
<p>My proposition for navigating this? <strong>BUILD CONTINUOUSLY.</strong></p>
<h3 id="why-build-more">Why Build More?</h3>
<p>Because what better way to learn than building projects?</p>
<p>Not theoretical knowledge. Not tutorial hell. Not certifications that gather dust.</p>
<p><strong>Actual projects</strong> that solve real problems faced by real humans (even if that human is just you).</p>
<h3 id="the-compounding-effect-of-small-projects">The Compounding Effect of Small Projects</h3>
<p>Just like that simple billing calculator I mentioned earlier—you never know where a small project might lead.</p>
<p>After experiencing the joy of building that first solution, I built many more:</p>
<ul>
<li>A personal expense tracker (because existing ones didn&rsquo;t fit my mental model)</li>
<li>A community link-sharing platform (to solve coordination problems in my friend group)</li>
<li>A personal task management system (because I needed something simpler than Notion but more structured than notes)</li>
<li>Various automation scripts for repetitive tasks</li>
</ul>
<p>All of these are available on my website. Are they perfect? Absolutely not. Do they have bugs? Definitely. Are they going to change the world? Probably not.</p>
<p>But they&rsquo;ve changed <strong>my world</strong>.</p>
<h3 id="what-building-teaches-you">What Building Teaches You</h3>
<p>Building small things consistently <strong>transforms you</strong>:</p>
<ol>
<li>
<p><strong>You see problems differently</strong> - Instead of complaining about inefficiencies, you see opportunities to build solutions.</p>
</li>
<li>
<p><strong>You stop feeling stuck</strong> - There&rsquo;s always something you can build, always some small improvement you can make.</p>
</li>
<li>
<p><strong>You develop taste</strong> - You understand what makes software feel good to use because you&rsquo;re both the builder and the user.</p>
</li>
<li>
<p><strong>You become resilient</strong> - When things break (and they will), you learn to fix them. When approaches don&rsquo;t work, you pivot.</p>
</li>
<li>
<p><strong>You evolve unexpectedly</strong> - You slowly become someone you didn&rsquo;t know you could become. Skills compound. Confidence grows.</p>
</li>
</ol>
<hr>
<h2 id="so-what-is-a-solutionist">So, What Is a Solutionist?</h2>
<p>After all these stories and reflections, let me give you a concrete definition:</p>
<p><strong>A Solutionist isn&rsquo;t defined by tools, but by problems solved.</strong></p>
<p>They are:</p>
<ul>
<li>Language-agnostic</li>
<li>Framework-flexible</li>
<li>System-aware</li>
<li>Problem-focused</li>
</ul>
<h3 id="the-four-traits-of-a-solutionist">The Four Traits of a Solutionist</h3>
<p>Through my journey and observation of people I admire, I&rsquo;ve identified four core traits:</p>
<h4 id="1-empathy--understanding-people-not-just-specs">1. Empathy — Understanding People, Not Just Specs</h4>
<p>The best solutions come from understanding the <strong>human problem</strong>, not just the technical specification.</p>
<p>This means:</p>
<ul>
<li>Putting yourself in the user&rsquo;s shoes</li>
<li>Understanding their frustrations, not just their feature requests</li>
<li>Recognizing that &ldquo;make it faster&rdquo; often means &ldquo;I feel frustrated waiting&rdquo;</li>
<li>Seeing the emotional journey, not just the user journey</li>
</ul>
<p>When I built that billing calculator, I wasn&rsquo;t solving a math problem. I was solving the <strong>stress and anxiety</strong> of my colleagues during rush hours.</p>
<h4 id="2-systems-thinking--seeing-ripple-effects">2. Systems Thinking — Seeing Ripple Effects</h4>
<p>Nothing exists in isolation. One change ripples through everything.</p>
<p>Systems thinking means:</p>
<ul>
<li>Understanding dependencies and consequences</li>
<li>Recognizing that &ldquo;fixing&rdquo; one thing might break another</li>
<li>Seeing the whole forest, not just the tree you&rsquo;re debugging</li>
<li>Appreciating long-term implications of short-term decisions</li>
</ul>
<p>In Android development, this might mean understanding how a seemingly innocent change in a shared ViewModel might affect multiple screens, or how a database migration could impact app startup time.</p>
<h4 id="3-lifelong-learning--venturing-into-the-unknown-without-fear">3. Lifelong Learning — Venturing Into the Unknown Without Fear</h4>
<p>The moment you stop learning, you start becoming obsolete.</p>
<p>Lifelong learning means:</p>
<ul>
<li>Being comfortable with being a beginner again and again</li>
<li>Exploring technologies outside your comfort zone</li>
<li>Reading papers, essays, and documentation for things you don&rsquo;t &ldquo;need&rdquo; yet</li>
<li>Understanding that every new skill multiplies with every previous skill you&rsquo;ve learned</li>
</ul>
<p>From SSLC certificate to Android Developer to exploring AI/ML, backend systems, DevOps—each layer adds new dimensions to how you solve problems.</p>
<h4 id="4-communication--bridging-technical-and-non-technical-minds">4. Communication — Bridging Technical and Non-Technical Minds</h4>
<p>The best solution is useless if no one understands it.</p>
<p>Communication means:</p>
<ul>
<li>Explaining complex technical concepts to non-technical stakeholders</li>
<li>Writing documentation that actually helps</li>
<li>Listening actively to understand requirements beneath the surface</li>
<li>Collaborating effectively across disciplines—design, product, business</li>
</ul>
<p>I&rsquo;ve seen brilliant solutions fail because they were explained poorly. And I&rsquo;ve seen simple solutions succeed because they were communicated effectively.</p>
<hr>
<h2 id="ai-as-freedom-russells-prophecy-coming-true">AI as Freedom: Russell&rsquo;s Prophecy Coming True</h2>
<p>When AI arrived, many feared job loss. And yes, that&rsquo;s happening in some sectors.</p>
<p>But what if Russell was right all along?</p>
<h3 id="what-ai-actually-removes">What AI Actually Removes</h3>
<p>AI removes:</p>
<ul>
<li>Repetitive, mechanical work</li>
<li>Boilerplate that makes our days feel routine</li>
<li>The cognitive load of remembering syntax</li>
<li>The tedium of debugging simple logic errors</li>
</ul>
<p>It gives time back for:</p>
<ul>
<li>Creativity</li>
<li>Empathy</li>
<li>Real problem-solving</li>
<li>Strategic thinking</li>
<li>Learning deeply instead of superficially</li>
</ul>
<h3 id="vibe-coding-thanks-to-andrej-karpathy">Vibe Coding: Thanks to Andrej Karpathy</h3>
<p>This is where <strong>&lsquo;vibe coding&rsquo;</strong> comes in—a term popularized by Andrej Karpathy.</p>
<p>Let AI help you move faster. Let it handle the repetition, the boilerplate, the syntax you can never quite remember.</p>
<p>But—and this is crucial—<strong>understand what it&rsquo;s changing</strong>.</p>
<p>Know the patterns. Understand the tweaks. Grasp the reasoning behind every line it suggests.</p>
<h3 id="the-danger-of-blind-coding">The Danger of Blind Coding</h3>
<p>If you code blindly, just accepting whatever AI suggests without understanding:</p>
<ul>
<li>You lose the joy of building</li>
<li>You become oblivious to your own vision</li>
<li>You can&rsquo;t debug effectively when things inevitably break</li>
<li>You stop learning and start copy-pasting</li>
</ul>
<p>AI should be your <strong>copilot</strong>, not your pilot. You&rsquo;re still flying the plane.</p>
<hr>
<h2 id="how-to-actually-start-practical-steps">How to Actually Start: Practical Steps</h2>
<p>Enough philosophy. Let&rsquo;s talk practically.</p>
<p>Want to build something? Here&rsquo;s what I&rsquo;ve learned through building multiple projects with AI assistance:</p>
<h3 id="step-1-start-with-the-problem">Step 1: Start with the Problem</h3>
<p>Write it down. Not the solution—<strong>the problem</strong>.</p>
<p>Ask yourself:</p>
<ul>
<li>What are you trying to solve?</li>
<li>Who are you solving it for?</li>
<li>Why does this problem matter?</li>
<li>What does success look like?</li>
</ul>
<p>Be specific. &ldquo;I want to build a todo app&rdquo; is not a problem. &ldquo;I keep forgetting to follow up on important emails, and existing todo apps don&rsquo;t integrate well with my email workflow&rdquo; is a problem.</p>
<h3 id="step-2-document-your-vision-first">Step 2: Document Your Vision First</h3>
<p>Before you write a single line of code, create a <strong>clear vision</strong> of what you&rsquo;re building and why.</p>
<p>Your first commit should be your vision, not your code.</p>
<p>This document becomes your North Star. When AI suggests clever solutions that drift from your vision, you can catch it. When scope creep tempts you, you can resist it.</p>
<h3 id="step-3-use-ai-to-move-fast-but-understand-everything">Step 3: Use AI to Move Fast, But Understand Everything</h3>
<p>This is the balance:</p>
<ul>
<li>Let AI generate boilerplate → But understand the structure it creates</li>
<li>Let AI suggest solutions → But understand why those solutions work</li>
<li>Let AI write tests → But understand what they&rsquo;re testing and why</li>
</ul>
<p>Know the patterns. Understand the tweaks. Grasp the reasoning behind every line.</p>
<p>If you find yourself accepting suggestions without understanding them, <strong>stop</strong>. Research. Learn. Only then proceed.</p>
<h3 id="step-4-iterate-deliberately">Step 4: Iterate Deliberately</h3>
<p>Add features <strong>one at a time</strong>.</p>
<p>Track changes with Git. See what&rsquo;s happening at each step.</p>
<p>This isn&rsquo;t just about version control—it&rsquo;s about <strong>understanding the evolution</strong> of your project. Each commit is a story. Each feature is a chapter.</p>
<p>Deliberate iteration means:</p>
<ul>
<li>Build one thing</li>
<li>Test it thoroughly</li>
<li>Document what you learned</li>
<li>Commit it</li>
<li>Move to the next thing</li>
</ul>
<h3 id="step-5-the-tools-dont-matter-the-mindset-does">Step 5: The Tools Don&rsquo;t Matter. The Mindset Does.</h3>
<p>I cannot stress this enough.</p>
<p>The language doesn&rsquo;t matter. The framework doesn&rsquo;t matter. The cloud provider doesn&rsquo;t matter.</p>
<p>What matters is:</p>
<ul>
<li>Do you understand the problem?</li>
<li>Does your solution solve it effectively?</li>
<li>Can you explain why you made the choices you made?</li>
<li>Did you learn something building it?</li>
</ul>
<p>That&rsquo;s all that matters.</p>
<hr>
<h2 id="the-real-power-wearing-all-the-hats">The Real Power: Wearing All the Hats</h2>
<p>When you build your own projects, you&rsquo;re not just a developer.</p>
<p>You&rsquo;re everything:</p>
<ul>
<li><strong>Visionary</strong> — Defining what should exist</li>
<li><strong>Product Manager</strong> — Prioritizing features</li>
<li><strong>Designer</strong> — Crafting the experience</li>
<li><strong>Developer</strong> — Building the solution</li>
<li><strong>QA</strong> — Testing and breaking things</li>
<li><strong>DevOps</strong> — Deploying and maintaining</li>
<li><strong>Support</strong> — Handling bugs and feedback</li>
</ul>
<h3 id="the-freedom-this-gives-you">The Freedom This Gives You</h3>
<p>Maybe you&rsquo;ll build something the world uses. Maybe not.</p>
<p>Either way, <strong>it&rsquo;s yours</strong>. It&rsquo;s your journey.</p>
<p>In a typical software job, you might not get to wear all these hats due to company policies and defined roles. You&rsquo;re the &ldquo;backend developer&rdquo; or the &ldquo;mobile engineer&rdquo; or the &ldquo;frontend specialist.&rdquo;</p>
<p>But here, on your own project, you are the <strong>boss</strong>. The founder. The everything.</p>
<p>This level of ownership is both daunting and incredibly empowering.</p>
<h3 id="the-career-impact">The Career Impact</h3>
<p>I&rsquo;m certain that this experience—building complete projects from vision to deployment—will help you solve day-to-day professional problems much faster.</p>
<p>Because you&rsquo;ve seen the whole picture. You understand how the pieces fit together. You&rsquo;ve debugged across the stack. You&rsquo;ve made tradeoffs and lived with the consequences.</p>
<p>That holistic understanding is <strong>invaluable</strong> and increasingly rare in our specialized world.</p>
<hr>
<h2 id="start-today-your-action-items">Start Today: Your Action Items</h2>
<p>Don&rsquo;t wait. Don&rsquo;t prepare. Don&rsquo;t plan endlessly.</p>
<p><strong>Start small. Start now.</strong></p>
<h3 id="pick-one-frustrating-problem">Pick One Frustrating Problem</h3>
<p>Look at your daily life. What frustrates you repeatedly?</p>
<ul>
<li>Tracking expenses?</li>
<li>Managing reading lists?</li>
<li>Coordinating with friends?</li>
<li>Remembering to water plants?</li>
<li>Finding recipes based on ingredients you have?</li>
</ul>
<p>Pick <strong>one</strong>. Just one.</p>
<h3 id="dont-chase-perfection-chase-progress">Don&rsquo;t Chase Perfection. Chase Progress.</h3>
<p>Your first version will be ugly. It will have bugs. It will be embarrassing to show others.</p>
<p><strong>Build it anyway.</strong></p>
<p>Because version 0.1 is infinitely better than the perfect app that exists only in your imagination.</p>
<h3 id="use-every-project-as-a-playground">Use Every Project as a Playground</h3>
<p>Want to learn a new framework? Use it for your next project.</p>
<p>Curious about a new database? Try it.</p>
<p>Interested in a new deployment strategy? Experiment.</p>
<p>Every project is an opportunity to <strong>play</strong>, to <strong>experiment</strong>, to <strong>learn</strong>.</p>
<h3 id="every-problem-solved-is-progress">Every Problem Solved Is Progress</h3>
<p>Each problem solved is one step closer to being a Solutionist.</p>
<p>Not because you&rsquo;re accumulating credentials or certificates, but because you&rsquo;re <strong>training yourself to see opportunities where others see obstacles</strong>.</p>
<hr>
<h2 id="closing-reclaiming-purpose">Closing: Reclaiming Purpose</h2>
<p>When my manager first sent me &ldquo;In Praise of Idleness,&rdquo; I thought it was ironic. Here we are, working in tech, and he&rsquo;s sending me an essay about working less?</p>
<p>Now I see the wisdom.</p>
<p>It&rsquo;s not about doing less. It&rsquo;s about <strong>doing better</strong>.</p>
<p>It&rsquo;s about focusing on work that matters, that challenges us, that makes us grow.</p>
<h3 id="what-ai-cant-replace">What AI Can&rsquo;t Replace</h3>
<p>We&rsquo;ve built technology powerful enough to automate tasks, but not powerful enough to replace people who bring <strong>meaning</strong> to them.</p>
<p>AI can:</p>
<ul>
<li>Write code</li>
<li>Debug programs</li>
<li>Architect systems</li>
<li>Generate tests</li>
<li>Refactor codebases</li>
</ul>
<p>But it can&rsquo;t:</p>
<ul>
<li>Understand <strong>why</strong> we build</li>
<li>Feel <strong>empathy</strong> for users</li>
<li>Ask deeper questions about <strong>impact</strong></li>
<li>Navigate the <strong>human</strong> complexities of real projects</li>
<li>Find <strong>purpose</strong> in the work</li>
</ul>
<p>That&rsquo;s still our job. <strong>Always will be.</strong></p>
<h3 id="the-world-needs-solutionists">The World Needs Solutionists</h3>
<p>The world doesn&rsquo;t just need coders. We have enough people who can write syntactically correct code.</p>
<p>The world needs people who:</p>
<ul>
<li>See problems and craft thoughtful solutions</li>
<li>Combine empathy with engineering</li>
<li>Explore fearlessly and learn relentlessly</li>
<li>Ask &ldquo;why&rdquo; as often as they ask &ldquo;how&rdquo;</li>
<li>Reclaim purpose in a world obsessed with productivity</li>
</ul>
<h3 id="dont-confine-yourself-to-a-box">Don&rsquo;t Confine Yourself to a Box</h3>
<p>So don&rsquo;t confine yourself to a box labeled &ldquo;Android Developer&rdquo; or &ldquo;Frontend Engineer&rdquo; or &ldquo;Data Scientist.&rdquo;</p>
<p><strong>Explore.</strong> Venture into the unknown.</p>
<p><strong>Build.</strong> Create things that matter to you.</p>
<p><strong>Reflect.</strong> Learn from what works and what doesn&rsquo;t.</p>
<p><strong>Be a Solutionist.</strong></p>
<p>Because the world doesn&rsquo;t just need more developers.</p>
<p><strong>It needs you.</strong></p>
<hr>
<h2 id="thank-you">Thank You</h2>
<p>First and foremost, a huge thank you to <strong>Google Developer Group Chennai</strong> for organizing DevFest2025 and giving me this incredible platform to share my journey and thoughts with the community.</p>
<p>To all the <strong>volunteers</strong> who worked tirelessly behind the scenes—setting up the venue, managing logistics, helping attendees, and ensuring everything ran smoothly—you are the unsung heroes who make events like this possible. Your dedication and energy created the welcoming atmosphere that made DevFest2025 special.</p>
<p>A special thanks to all the <strong>sponsors</strong> who believed in this event and invested in our developer community. Your support makes it possible for us to gather, learn, share, and grow together.</p>
<p>To the <strong>GDG Chennai organizers and core team members</strong>—thank you for building and nurturing this vibrant tech community in Chennai. Your consistent efforts to bring developers together, facilitate learning, and create opportunities for knowledge sharing are truly invaluable.</p>
<p>To everyone who <strong>attended the talk</strong> and engaged with these ideas—your questions, your reflections, your nodding heads, and even your skeptical looks made this talk so much more meaningful. The conversations we had afterward were some of the most enriching parts of the entire experience.</p>
<p>And to you, reading this now—whether you attended DevFest2025 or are discovering this for the first time—I hope something here resonates. I hope it sparks something in you.</p>
<h2 id="now-lets-build-something"><strong>Now let&rsquo;s build something.</strong></h2>
<h2 id="sone-of-the-feedbacks-from-participants">Sone of the feedbacks from Participants</h2>
<p><img alt="Feedbacks from participants" loading="lazy" src="/img/devfest_2025/updated-feedbacks-10-11-2025.png">
<em>Heartwarming feedback from the DevFest2025 participants</em></p>
<hr>
<h2 id="event-highlights">Event Highlights</h2>
<p>Here are some moments from DevFest2025:</p>
<p><img alt="Speaker Announcement" loading="lazy" src="/img/devfest_2025/speeker-annoncement-screenshot.png">
<em>The announcement that started it all</em></p>
<p><img alt="Speaking at DevFest2025" loading="lazy" src="/img/devfest_2025/talking-at-the-event.jpeg">
<em>Sharing the Solutionist Mindset with the DevFest2025 community</em></p>
<p><img alt="Speaking at the Platform" loading="lazy" src="/img/devfest_2025/speaking-at-the-platform-01.JPG">
<em>Presenting the Solutionist Mindset on stage</em></p>
<p><img alt="Speaking at the Stage" loading="lazy" src="/img/devfest_2025/speaking-at-the-stage.JPG">
<em>Engaging with the audience during the talk</em></p>
<p><img alt="DevFest 2025 Moment" loading="lazy" src="/img/devfest_2025/DevFest%2025%20(1).JPG">
<em>A memorable moment from DevFest2025</em></p>
<p><img alt="All the Volunteers" loading="lazy" src="/img/devfest_2025/DevFest%2025%20SEP%200461.-all-the%20voluntters-who-made-it-possible.JPG">
<em>All the amazing volunteers who made DevFest2025 possible - couldn&rsquo;t have done it without you!</em></p>
<p><img alt="Speaker Goodies" loading="lazy" src="/img/devfest_2025/speaker-goddies.jpeg">
<em>The speaker goodies bag - thanks GDG Chennai! For everyone who asked what&rsquo;s inside: GDG swag, stickers, and some awesome tech goodies!</em></p>
<hr>
<p><em>If you want to discuss any of these ideas further, or if you&rsquo;re building something and want to share your journey, feel free to reach out. I&rsquo;m always excited to connect with fellow solutionists.</em></p>
<p><em>All my projects are available on my website. They&rsquo;re not perfect, but they&rsquo;re mine, and they&rsquo;re continuously evolving. Just like me. Just like you.</em></p>
]]></content:encoded></item><item><title>The Journey of Commercial Computers: From ENIAC to Neuromorphic Chips</title><link>https://md.eknath.dev/posts/software-development/the-journey-of-commercial-computers/</link><pubDate>Sat, 23 Aug 2025 14:30:00 +0530</pubDate><guid>https://md.eknath.dev/posts/software-development/the-journey-of-commercial-computers/</guid><description>&lt;p>Computing didn&amp;rsquo;t start with your MacBook or the latest smartphone. It began in the 1940s with room-sized monsters that consumed more power than a small town. This is the story of how we got from there to here – a journey through seven decades of human ingenuity, each leap forward reshaping not just technology, but society itself.&lt;/p>
&lt;hr>
&lt;h2 id="the-dawn-eniac-and-the-electronic-age-1940s">The Dawn: ENIAC and the Electronic Age (1940s)&lt;/h2>
&lt;p>Picture this: 1946, University of Pennsylvania. A machine the size of a smand adall house, weighing 30 tons, consuming 150 kilowatts of power. This was &lt;strong>ENIAC&lt;/strong> – the Electronic Numerical Integrator and Computer.&lt;/p></description><content:encoded><![CDATA[<p>Computing didn&rsquo;t start with your MacBook or the latest smartphone. It began in the 1940s with room-sized monsters that consumed more power than a small town. This is the story of how we got from there to here – a journey through seven decades of human ingenuity, each leap forward reshaping not just technology, but society itself.</p>
<hr>
<h2 id="the-dawn-eniac-and-the-electronic-age-1940s">The Dawn: ENIAC and the Electronic Age (1940s)</h2>
<p>Picture this: 1946, University of Pennsylvania. A machine the size of a smand adall house, weighing 30 tons, consuming 150 kilowatts of power. This was <strong>ENIAC</strong> – the Electronic Numerical Integrator and Computer.</p>
<p>ENIAC was a beast. It used 17,468 vacuum tubes, each the size of a light bulb, generating so much heat that the room needed industrial cooling. Programming it meant physically rewiring connections – imagine debugging by crawling around inside your computer with a soldering iron.</p>
<p>But here&rsquo;s the magic: for the first time in human history, we had a machine that could perform calculations faster than any human mathematician. What took days by hand took minutes on ENIAC. The computing revolution had begun.</p>
<p><strong>The Challenge</strong>: Vacuum tubes burned out constantly. ENIAC operators became experts at hunting down failed tubes in a machine that looked more like a power plant than what we&rsquo;d recognize as a computer today.</p>
<hr>
<h2 id="the-revolution-transistors-change-everything-1950s-1960s">The Revolution: Transistors Change Everything (1950s-1960s)</h2>
<p>Then came 1947, and three guys at Bell Labs – Bardeen, Brattain, and Shockley – invented something that would change the world: the <strong>transistor</strong>.</p>
<p>Think of a vacuum tube as a traffic light that needs a massive power plant to operate. A transistor is like a tiny switch that runs on a battery. Suddenly, computers didn&rsquo;t need to be room-sized monsters anymore.</p>
<p>The <strong>IBM 7090</strong> in 1959 was a glimpse of the future. It was faster, more reliable, and – crucially – much smaller than its vacuum tube predecessors. But we were just getting started.</p>
<p><strong>The Breakthrough</strong>: Transistors were not only smaller and more efficient, but they were also incredibly reliable. Where vacuum tubes lasted months, transistors lasted years.</p>
<hr>
<h2 id="the-acceleration-integrated-circuits-1960s-1970s">The Acceleration: Integrated Circuits (1960s-1970s)</h2>
<p>Here&rsquo;s where things get interesting. Robert Noyce and Jack Kilby had the same brilliant idea around the same time: why put one transistor on a chip when you could put many?</p>
<p>The <strong>integrated circuit</strong> was born, and with it, Moore&rsquo;s Law – the observation that computing power doubles roughly every two years. Suddenly, we weren&rsquo;t just making computers smaller; we were making them exponentially more powerful.</p>
<p>Companies like <strong>Fairchild Semiconductor</strong> and later <strong>Intel</strong> began cramming more and more transistors onto single chips. The computer was shrinking from room-size to refrigerator-size to eventually&hellip; desk-size.</p>
<p><strong>The Vision</strong>: Gordon Moore&rsquo;s prediction wasn&rsquo;t just about more transistors – it was about unleashing computing power that would eventually fit in our pockets while being more powerful than ENIAC ever dreamed of being.</p>
<hr>
<h2 id="the-personal-revolution-microprocessors-1970s-1990s">The Personal Revolution: Microprocessors (1970s-1990s)</h2>
<p>1971: Intel releases the <strong>4004</strong>, the first commercial microprocessor. Four bits of processing power on a single chip smaller than your thumbnail. It sounds primitive now, but it was revolutionary.</p>
<p>The 4004 led to the 8008, then the 8080, and eventually to chips that powered the first personal computers. By the 1980s, companies like <strong>Apple</strong>, <strong>IBM</strong>, and <strong>Commodore</strong> were putting computers on desks in homes and offices worldwide.</p>
<p>This wasn&rsquo;t just a technological shift – it was a philosophical one. Computers went from being tools for scientists and governments to being personal companions. The phrase &ldquo;personal computer&rdquo; captured something profound: computing power was becoming democratized.</p>
<p><strong>The Transformation</strong>: The microprocessor didn&rsquo;t just make computers smaller; it made them personal. For the first time, individuals could own the computational power that once belonged only to universities and corporations.</p>
<hr>
<h2 id="the-mobile-era-systems-on-chips-2000s-2010s">The Mobile Era: Systems on Chips (2000s-2010s)</h2>
<p>Fast forward to the 2000s, and we faced a new challenge: how do you fit desktop-level performance into something that fits in your pocket and runs all day on a battery?</p>
<p>Enter <strong>systems-on-chip (SoCs)</strong> and mobile processors. Companies like <strong>ARM</strong> revolutionized computing by designing chips that sipped power rather than guzzling it. Apple&rsquo;s A-series chips, Qualcomm&rsquo;s Snapdragons, and Samsung&rsquo;s Exynos processors brought desktop-class performance to devices we carry everywhere.</p>
<p>Suddenly, the computer in your pocket was more powerful than the room-sized machines of the 1960s. We&rsquo;d come full circle – from massive power consumption to incredible efficiency.</p>
<p><strong>The Paradigm Shift</strong>: Mobile computing didn&rsquo;t just miniaturize computers; it reimagined what computing could be. Always-on, always-connected, always-in-your-pocket computing became the new normal.</p>
<hr>
<h2 id="the-quantum-leap-quantum-computing-2010s-present">The Quantum Leap: Quantum Computing (2010s-Present)</h2>
<p>But even as traditional computing reached incredible heights, we began bumping against physical limits. Transistors can only get so small before quantum effects start interfering with their operation.</p>
<p>So we decided to embrace those quantum effects instead.</p>
<p><strong>Quantum computing</strong> works on principles that seem to defy common sense. Where traditional computers use bits that are either 0 or 1, quantum computers use <strong>qubits</strong> that can be both 0 and 1 simultaneously – a property called superposition.</p>
<p>Companies like <strong>IBM</strong>, <strong>Google</strong>, and <strong>IonQ</strong> are building quantum computers that can solve certain problems exponentially faster than any classical computer. Google&rsquo;s <strong>Sycamore</strong> processor achieved &ldquo;quantum supremacy&rdquo; in 2019, performing a calculation in 200 seconds that would take the world&rsquo;s fastest supercomputer 10,000 years.</p>
<p><strong>The Promise</strong>: Quantum computers won&rsquo;t replace your laptop, but they could revolutionize drug discovery, financial modeling, and cryptography – problems that require exploring vast solution spaces simultaneously.</p>
<hr>
<h2 id="the-brain-inspired-future-neuromorphic-computing-present-future">The Brain-Inspired Future: Neuromorphic Computing (Present-Future)</h2>
<p>Here&rsquo;s where it gets really interesting. What if, instead of making computers faster, we made them smarter? What if we designed chips that work more like brains than calculators?</p>
<p><strong>Neuromorphic chips</strong> mimic the structure and function of biological neural networks. Companies like <strong>Intel</strong> with their Loihi processor and <strong>IBM</strong> with TrueNorth are creating chips that don&rsquo;t just process information – they learn and adapt.</p>
<p>Traditional computers are incredibly fast but energy-hungry. Your brain, running on about 20 watts (less than a light bulb), can recognize faces, understand language, and make complex decisions in milliseconds. Neuromorphic chips aim to capture that efficiency.</p>
<p><strong>The Vision</strong>: Imagine devices that learn your patterns, adapt to your needs, and operate for months on a single charge. Neuromorphic computing could enable truly intelligent edge devices – from smart prosthetics to autonomous robots that think more like humans.</p>
<hr>
<h2 id="the-pattern-each-eras-gift-to-the-next">The Pattern: Each Era&rsquo;s Gift to the Next</h2>
<p>Looking back, each era of computing didn&rsquo;t just improve on the last – it enabled entirely new possibilities:</p>
<ul>
<li><strong>ENIAC</strong> proved electronic computation was possible</li>
<li><strong>Transistors</strong> made it reliable and efficient</li>
<li><strong>Integrated circuits</strong> made it scalable</li>
<li><strong>Microprocessors</strong> made it personal</li>
<li><strong>Mobile chips</strong> made it ubiquitous</li>
<li><strong>Quantum computers</strong> make impossible problems solvable</li>
<li><strong>Neuromorphic chips</strong> make computers truly intelligent</li>
</ul>
<hr>
<h2 id="what-this-means-for-us">What This Means for Us</h2>
<p>We&rsquo;re living through the most exciting period in computing history. The smartphone in your pocket contains billions of transistors working in harmony, capable of tasks that would have seemed like magic to ENIAC&rsquo;s operators.</p>
<p>But we&rsquo;re just getting started. The convergence of quantum computing, neuromorphic processing, and traditional silicon is creating possibilities we&rsquo;re only beginning to imagine.</p>
<p>The next chapter is being written right now, in labs and garages and coffee shops around the world. And if history is any guide, it&rsquo;s going to be more revolutionary than anything we&rsquo;ve seen before.</p>
<p><strong>The question isn&rsquo;t what computers will be able to do – it&rsquo;s what problems will we choose to solve with them.</strong></p>
<hr>
<h2 id="final-thoughts">Final Thoughts</h2>
<p>From room-sized vacuum tube monsters to neuromorphic chips that think like brains, computing has been humanity&rsquo;s greatest amplifier of intelligence. Each generation of technologists has stood on the shoulders of those who came before, pushing the boundaries of what&rsquo;s possible.</p>
<p>The journey from ENIAC to quantum computers is really a story about human ambition – our relentless drive to build tools that make us more capable, more connected, and more creative. And if the past seven decades are any indication, we&rsquo;re nowhere near finished.</p>
<p>The next breakthrough might come from a small team in a garage, just like Apple and HP did decades ago. Or it might emerge from a quantum lab pushing the boundaries of physics itself.</p>
<p>Either way, one thing is certain: the best is yet to come.</p>
<hr>
<p><em>What aspect of computing history fascinates you most? Have you worked with any of these technologies, or are you building the next chapter yourself? I&rsquo;d love to hear your thoughts.</em></p>
]]></content:encoded></item><item><title>We Are Not Just Lame Developers, We Are Solutionists</title><link>https://md.eknath.dev/posts/software-development/solutionist/</link><pubDate>Sat, 16 Aug 2025 04:47:13 +0530</pubDate><guid>https://md.eknath.dev/posts/software-development/solutionist/</guid><description>&lt;h2 id="the-developers-box">The Developer&amp;rsquo;s Box&lt;/h2>
&lt;p>For too long, we&amp;rsquo;ve confined ourselves to a title: &amp;ldquo;developer.&amp;rdquo; We write code, we fix bugs, we build features. We are the architects and construction workers of the digital world. And while that is a noble and essential craft, the label itself can become a box. It can narrow our focus to the &lt;em>how&lt;/em> – the languages, the frameworks, the systems – and make us lose sight of the &lt;em>why&lt;/em>.&lt;/p></description><content:encoded><![CDATA[<h2 id="the-developers-box">The Developer&rsquo;s Box</h2>
<p>For too long, we&rsquo;ve confined ourselves to a title: &ldquo;developer.&rdquo; We write code, we fix bugs, we build features. We are the architects and construction workers of the digital world. And while that is a noble and essential craft, the label itself can become a box. It can narrow our focus to the <em>how</em> – the languages, the frameworks, the systems – and make us lose sight of the <em>why</em>.</p>
<p>We get caught up in debates about which programming language is superior, which framework is the most scalable, and which cloud provider is the most cost-effective. We specialize, we become experts in our niche, and in doing so, we sometimes build walls around ourselves. We become a &ldquo;Java developer,&rdquo; a &ldquo;frontend engineer,&rdquo; a &ldquo;mobile expert.&rdquo; These labels, while useful for a resume, can inadvertently limit our potential.</p>
<h2 id="the-call-of-the-solutionist">The Call of the Solutionist</h2>
<p>But what if we shed these self-imposed boundaries? What if we saw ourselves not as developers, but as <strong>Solutionists</strong>?</p>
<p>A Solutionist is not defined by the tools they use, but by the problems they solve. A Solutionist is language-agnostic, framework-flexible, and system-aware. Their loyalty is not to a specific technology stack, but to the most elegant, efficient, and impactful solution.</p>
<p>Being a Solutionist means stepping back from the keyboard and looking at the bigger picture. It means asking the right questions before writing a single line of code:</p>
<ul>
<li>What is the real problem we are trying to solve?</li>
<li>Who are we solving it for?</li>
<li>What is the most direct path to a solution, even if it means not writing any code at all?</li>
</ul>
<h2 id="beyond-the-code">Beyond the Code</h2>
<p>The journey from developer to Solutionist is a shift in mindset. It&rsquo;s about embracing a broader skillset and a deeper curiosity. It&rsquo;s about understanding that code is just one tool in our problem-solving arsenal.</p>
<p>Here&rsquo;s what it means to be a Solutionist:</p>
<ul>
<li><strong>Embrace Empathy:</strong> A Solutionist starts with the user. They strive to understand their needs, their frustrations, and their goals. They are part designer, part psychologist, part anthropologist.</li>
<li><strong>Think in Systems:</strong> A Solutionist sees the interconnectedness of things. They understand that a small change in one part of a system can have a ripple effect elsewhere. They think about scalability, maintainability, and the long-term impact of their decisions.</li>
<li><strong>Become a Perpetual Learner:</strong> A Solutionist is a voracious learner. They are not afraid to venture into unfamiliar territory, whether it&rsquo;s a new programming language, a different cloud platform, or a completely new domain of knowledge. They know that the best solution might lie just outside their comfort zone.</li>
<li><strong>Master the Art of Communication:</strong> A Solutionist can articulate complex technical ideas to a non-technical audience. They can collaborate effectively with designers, product managers, and business stakeholders. They are storytellers, translators, and bridge-builders.</li>
</ul>
<h2 id="the-joy-of-creation-and-the-age-of-ai">The Joy of Creation and the Age of AI</h2>
<p>Do you remember the first time you built something that worked? That spark of joy when your code compiled, your app launched, or your script ran without a hitch? There&rsquo;s an immense, selfless pleasure in creating something that can help you or others. It&rsquo;s a feeling of pure creation, of bringing an idea to life.</p>
<p>But somewhere along the way, the industry seems to have lost some of that magic. The joy of creation can get buried under layers of process, tight deadlines, and the pressure to specialize. We become so focused on our small part of a massive machine that we forget the thrill of building something whole.</p>
<p>Now, with the rapid advancement of AI, we have a unique opportunity to reclaim that joy. AI is not here to replace us; it&rsquo;s here to augment us. It can be our tireless coding partner, our creative collaborator, and our personal tutor. With AI handling the repetitive and mundane tasks, we are free to focus on what truly matters: the creative process of problem-solving.</p>
<p>This is the perfect moment to embrace the &ldquo;Solutionist&rdquo; mindset. With AI, a single person with a vision can now design, build, and deploy sophisticated applications. If you have a solid understanding of concepts like auto-scaling servers and security, you can create personal projects that can have a global reach. The barrier to entry has never been lower.</p>
<p>Of course, this doesn&rsquo;t mean that large-scale, global applications will be built by a single person. Those will always require the expertise of a dedicated team, rigorous testing, and robust security measures. But for our personal projects, for the ideas that we are passionate about, the constraints are melting away.</p>
<h2 id="the-future-is-for-solutionists">The Future is for Solutionists</h2>
<p>The world is facing a myriad of complex challenges, from climate change and healthcare to education and economic inequality. Solving these problems isn&rsquo;t just the job of large corporations; it&rsquo;s our responsibility too. A small project, a simple app, a clever script built by one of us could be the spark that inspires a breakthrough, pushing larger organizations to crack the code faster and deliver solutions to the masses. These problems will not be solved by developers who are content to stay within their boxes. They will be solved by Solutionists who are willing to think differently, to challenge the status quo, and to use technology as a force for good.</p>
<p>So, let&rsquo;s break free from the &ldquo;developer&rdquo; label. Let&rsquo;s embrace the identity of a Solutionist. Let&rsquo;s go out and solve the problems that matter. The world is waiting.</p>
]]></content:encoded></item><item><title>Vibecoding: My Experience Building Dhanika</title><link>https://md.eknath.dev/posts/software-development/vibecoding_experience_building_dhanika/</link><pubDate>Sat, 02 Aug 2025 00:00:00 +0000</pubDate><guid>https://md.eknath.dev/posts/software-development/vibecoding_experience_building_dhanika/</guid><description>&lt;p>Software development is often seen as a discipline of pure logic and rigid structures. We talk about architecture, frameworks, and design patterns – the building blocks of a rational and predictable process. But what if there&amp;rsquo;s another side to it? A more intuitive, artistic, and dare I say, &lt;em>philosophical&lt;/em> approach to building things? This is the story of my journey with &amp;ldquo;vibecoding&amp;rdquo; while building a personal project called &lt;a href="https://dhanika.eknath.dev">Dhanika&lt;/a>.&lt;/p>
&lt;h3 id="what-is-vibecoding">What is Vibecoding?&lt;/h3>
&lt;p>The term &amp;ldquo;vibecoding,&amp;rdquo; recently popularized by &lt;a href="https://x.com/karpathy/status/1886192184808149383?lang=en">Andrej Karpathy&lt;/a>, describes a software development approach that is less about rigid plans and more about the “vibe” of the project. It&amp;rsquo;s about letting your intuition and the feel of the product guide the development process. Instead of detailed specs and roadmaps, you work with a general idea, a vision, and you let the project evolve organically.&lt;/p></description><content:encoded><![CDATA[<p>Software development is often seen as a discipline of pure logic and rigid structures. We talk about architecture, frameworks, and design patterns – the building blocks of a rational and predictable process. But what if there&rsquo;s another side to it? A more intuitive, artistic, and dare I say, <em>philosophical</em> approach to building things? This is the story of my journey with &ldquo;vibecoding&rdquo; while building a personal project called <a href="https://dhanika.eknath.dev">Dhanika</a>.</p>
<h3 id="what-is-vibecoding">What is Vibecoding?</h3>
<p>The term &ldquo;vibecoding,&rdquo; recently popularized by <a href="https://x.com/karpathy/status/1886192184808149383?lang=en">Andrej Karpathy</a>, describes a software development approach that is less about rigid plans and more about the “vibe” of the project. It&rsquo;s about letting your intuition and the feel of the product guide the development process. Instead of detailed specs and roadmaps, you work with a general idea, a vision, and you let the project evolve organically.</p>
<p>It&rsquo;s a dance between logic and intuition, a form of mindfulness where you are fully present with the code and the project, responding to its needs in the moment. This might sound chaotic, and in some ways it is. But it&rsquo;s a controlled chaos. It&rsquo;s about being in tune with the project&rsquo;s needs, the user&rsquo;s needs, and your own creative flow.</p>
<h3 id="the-dhanika-project">The Dhanika Project</h3>
<p>Dhanika is a personal finance tracker I built for myself. I&rsquo;ve tried many finance apps, but none of them felt quite right. They were either too complex or too simple. I wanted something that was tailored to my specific needs and my way of thinking about money.</p>
<p>The vision for Dhanika was simple: a clean, intuitive interface to track my income and expenses, with a focus on simplicity and mindfulness about my spending habits.</p>
<p>What started as a personal tool has since been shared with some of my friends, who have started using it to gain clarity on their own financial posture. They&rsquo;ve found the ability to visualize their finances with graphs and charts particularly helpful. This has been incredibly rewarding and has reinforced the value of building something with a clear and simple vision.</p>
<h3 id="the-vibecoding-journey-with-dhanika">The Vibecoding Journey with Dhanika</h3>
<p>To be honest, the initial phase of this journey was daunting. I felt a profound sense of imposter syndrome. Was this “vibecoding” just an excuse for not having a proper plan? Was I doing things “the wrong way”? The feeling was akin to standing still while the world moved on. I had to have a serious talk with myself. I realized that the future of creation is fluid and intuitive, and clinging to old, rigid methods was like trying to carry heavy luggage onto a moving train. Once I broke free from that guilt and embraced the uncertainty, everything changed. The project took off, and I truly started to vibe with the code.</p>
<p>I started Dhanika with no grand design document. I had a single-sentence vision: &ldquo;A beautiful and simple finance tracker that feels good to use.&rdquo;</p>
<p>The first step was to create the most basic feature: adding an expense. I didn&rsquo;t worry about the database schema or the overall architecture. I just wanted to get something on the screen that worked.</p>
<p>As I used the app myself, I started to get a feel for what was missing. I&rsquo;d think, &ldquo;It would be cool if I could see a chart of my spending this month.&rdquo; So, I&rsquo;d add a chart. Then I&rsquo;d think, &ldquo;I wish I could categorize my expenses.&rdquo; So, I&rsquo;d add categories.</p>
<p>The development process was a continuous conversation between me, the user, and the code. The &ldquo;vibe&rdquo; of the project guided my decisions. If a feature felt too complicated or didn&rsquo;t align with the core vision of simplicity, I&rsquo;d scrap it.</p>
<p>Git was a magic tool in this process. Before each commit, I had to make sure that none of the existing features would break and the design on web and mobile was not compromised. This also taught me how to incrementally build a basic working PWA, then focus on the UI, then the UX, and finally other details. This iterative process of building, testing, and committing was crucial to the project&rsquo;s success.</p>
<p><strong>Pros of Vibecoding:</strong></p>
<ul>
<li><strong>Creative Freedom:</strong> It&rsquo;s incredibly liberating to not be constrained by a rigid plan. You can follow your creative instincts and explore new ideas as they come up.</li>
<li><strong>Organic Evolution:</strong> The product evolves in a very natural way, based on real usage and feedback.</li>
<li><strong>High Motivation:</strong> Working on what feels right at the moment is a great way to stay motivated and engaged.</li>
</ul>
<p><strong>Cons of Vibecoding:</strong></p>
<ul>
<li><strong>Lack of Predictability:</strong> It&rsquo;s hard to estimate timelines or even what the final product will look like. This makes it unsuitable for projects with strict deadlines or multiple stakeholders.</li>
<li><strong>Risk of Scope Creep:</strong> Without a clear plan, it&rsquo;s easy to keep adding features and never reach a &ldquo;finished&rdquo; state.</li>
<li><strong>Potential for Architectural Issues:</strong> Making design decisions on the fly can lead to a messy codebase if you&rsquo;re not careful. It requires a good sense of when to refactor and clean up.</li>
<li><strong>Risk of Project Reset:</strong> The fluid nature of vibecoding can be dangerous. If you&rsquo;re not careful, especially when using powerful CLIs, you might accept permissions that could reset your work. While Git is a lifesaver, it&rsquo;s a critical point to be mindful of.</li>
</ul>
<h3 id="tips-for-successful-vibecoding">Tips for Successful Vibecoding</h3>
<ul>
<li><strong>Embrace Version Control:</strong> Use Git religiously and commit often. It’s your best friend and safety net in a fluid development process.</li>
<li><strong>Start with a Core Idea:</strong> You don&rsquo;t need a detailed plan, but have a clear, simple vision for what you want to build.</li>
<li><strong>Listen to Your Gut:</strong> If a feature feels wrong or overly complicated, it probably is. Trust your intuition to guide you.</li>
<li><strong>Refactor Fearlessly:</strong> Vibecoding can get messy. Don&rsquo;t be afraid to pause and clean up your code when things start to feel disorganized.</li>
<li><strong>Stay Mindful and Present:</strong> Focus on the task at hand and be fully engaged with the code. The best ideas often come when you&rsquo;re in a state of flow.</li>
<li><strong>Keep Documentation Updated:</strong> Whether it&rsquo;s a <code>README.md</code> or an <code>agent.md</code> for AI collaborators, keep documentation current. Since AI models have token limitations, this helps them clearly understand the project&rsquo;s structure, philosophy, and goals, no matter which model you use.</li>
</ul>
<h3 id="lessons-learned-the-philosophy-of-vibecoding">Lessons Learned: The Philosophy of Vibecoding</h3>
<p>Vibecoding is not for every project or every person. It&rsquo;s best suited for personal projects, prototypes, or early-stage startups where the product vision is still evolving.</p>
<p>Whether a non-technical person can build complex systems with vibecoding is a valid doubt, and the reasons often go beyond the code itself. The building process might be manageable, but the technical hurdles of hosting, configuring domains, understanding DNS for services like GitHub Pages, and other deployment intricacies require a solid technical foundation. While there are excellent platforms that eliminate these complexities, they often come at a cost. This project, for instance, cost me nothing but my time, largely because I could navigate these technical challenges and utilize free tools like the Gemini CLI. This highlights a key aspect of vibecoding: the more technical skills you have, the more freedom and economic flexibility you have to bring your vision to life. It also reinforces the idea that in vibecoding, the developer is not just an engineer, but also a designer, a product manager, and a DevOps specialist, all rolled into one.</p>
<p>This approach challenges the traditional separation of roles and encourages a more holistic way of creating. It&rsquo;s about embracing the uncertainty and imperfection of the creative process. It&rsquo;s a reminder that sometimes, the most beautiful things are not planned, but discovered.</p>
<p>Another profound lesson is that when you are vibecoding, you are not just a coder; you are the manager. You have to know what model to use and when, how to order the tasks so they don&rsquo;t break the entire codebase, and when to take control and enforce some structure, even in a fluid process. This includes the often-neglected task of documentation. In a typical software job, you might not get to wear all these hats due to company policies and defined roles. But here, on your own project, you are the boss. You are the founder, the manager, the coder, and so much more. This level of ownership and responsibility is both daunting and incredibly empowering.</p>
<p>I am certain that with this vibecoding experience, I will be able to solve day-to-day problems with technology much faster than before. It has honed my ability to quickly prototype and iterate on ideas, to trust my gut, and to listen to the voice of the project itself.</p>
<h3 id="conclusion">Conclusion</h3>
<p>Building Dhanika with the vibecoding approach was a deeply rewarding experience. It allowed me to create a product that is not only functional but also has a personality, a &ldquo;vibe&rdquo; that is uniquely its own. It reminded me that software development can be as much an art as it is a science. It&rsquo;s a journey of discovery, a conversation with the digital canvas, and a testament to the power of creative intuition.</p>
]]></content:encoded></item><item><title>Abstraction in Software Development</title><link>https://md.eknath.dev/posts/software-development/abstractions-and-its-responsibility/</link><pubDate>Sun, 22 Jun 2025 10:25:15 +0530</pubDate><guid>https://md.eknath.dev/posts/software-development/abstractions-and-its-responsibility/</guid><description>&lt;p>In the world of software development, abstraction is one of the most powerful tools at our disposal. Yet, it is often taken for granted—seen merely as a technical concept or a convenience. In truth, abstraction is much more than that; I agree it&amp;rsquo;s a confusing topic for some, but it represents a currency of trust and a gateway to creative problem-solving.&lt;/p>
&lt;h2 id="abstraction-as-trust">Abstraction as Trust&lt;/h2>
&lt;p>At its core, every abstraction is built on trust. When we build or use a library, framework, API, or even a programming language, we trust the people or systems who designed it. We trust that these abstractors have already handled the intricate details—the &amp;ldquo;hows&amp;rdquo;—so that we don’t have to.&lt;/p></description><content:encoded><![CDATA[<p>In the world of software development, abstraction is one of the most powerful tools at our disposal. Yet, it is often taken for granted—seen merely as a technical concept or a convenience. In truth, abstraction is much more than that; I agree it&rsquo;s a confusing topic for some, but it represents a currency of trust and a gateway to creative problem-solving.</p>
<h2 id="abstraction-as-trust">Abstraction as Trust</h2>
<p>At its core, every abstraction is built on trust. When we build or use a library, framework, API, or even a programming language, we trust the people or systems who designed it. We trust that these abstractors have already handled the intricate details—the &ldquo;hows&rdquo;—so that we don’t have to.</p>
<p>Just as currency enables transactions by guaranteeing value, abstraction enables development by guaranteeing that, if we use it correctly, it will do its part. Each layer of abstraction makes an implicit promise:</p>
<blockquote>
<p>“I will handle this piece of complexity for you. You can rely on me.”</p>
</blockquote>
<p>This trust extends even to our own past work. If you designed a library years ago with effective separation of concerns, you don&rsquo;t need to recall its minute details to use it today. This promise allows developers to stand on the shoulders of those who came before, building ever more complex and capable systems without getting lost in the weeds of low-level implementation.</p>
<h2 id="abstraction-frees-the-mind">Abstraction Frees the Mind</h2>
<p>The true beauty of abstraction lies in its ability to liberate the developer’s mind. Instead of worrying about how a particular task is implemented under the hood—how data is stored, how a network packet is transmitted, how a sorting algorithm works—we can focus on higher-level concerns:</p>
<ul>
<li>What problem am I solving?</li>
<li>What is the best design for this situation?</li>
<li>How can I create value for the user?</li>
</ul>
<p>This mental freedom accelerates development time. By outsourcing the details to well-designed abstractions, we create space and set priority for creativity, strategy, and architectural thinking.</p>
<h2 id="examples-all-around-us">Examples All Around Us</h2>
<p>Abstraction is everywhere in software:</p>
<ul>
<li><strong>Operating systems abstract hardware complexities</strong> so we don’t write programs in assembly language for each device.</li>
<li><strong>The Retrofit HTTP client for Android</strong> takes away overhead complexities like opening and closing socket connections, formatting headers, handling encryption, and parsing responses.</li>
<li><strong>Database Object-Relational Mappers (ORMs)</strong> abstract SQL so we can think in terms of objects or models.</li>
</ul>
<p>And abstraction exists beyond software:</p>
<ul>
<li>We trust that flipping a light switch will illuminate a room without understanding the engineering behind electrical circuits, springs, or materials.</li>
<li>We drive cars without needing to know how combustion engines or electric motors work.</li>
<li>We post letters following established protocols, and the rest is handled by the postal system; we need not worry about how it&rsquo;s moved from one place to another, where it stops, or other intricacies.</li>
</ul>
<h2 id="the-developers-responsibility">The Developer’s Responsibility</h2>
<p>Of course, with trust comes responsibility. Every time we use an abstraction, we are relying on someone else’s work to solve part of our problem—and that trust should not be blind. As developers, we must approach abstractions thoughtfully and skillfully.</p>
<p>Here’s what that means in practice:</p>
<ul>
<li>Choose abstractions wisely.</li>
<li>Understand their limitations and guarantees.</li>
<li>Respect the contract they offer and use them as intended.</li>
<li><strong>Know when to peek beneath the abstraction.</strong></li>
</ul>
<p>Sometimes, it is necessary to peek beneath an abstraction’s surface, especially when debugging or optimizing. But most of the time, abstraction serves as the foundation that allows us to build faster, smarter, and better.</p>
<h2 id="not-all-interfaces-are-abstractions--differentiating-abstractions">Not all interfaces are abstractions — differentiating abstractions</h2>
<p>When I first learned about abstraction, I assumed that every interface represented an abstraction. But over time, I realized that’s not always the case.</p>
<ul>
<li>An interface is simply a contract—a way to define what methods or properties should exist.</li>
<li>Abstraction, on the other hand, goes beyond that. It hides internal complexity and provides a simpler way to achieve a goal.</li>
</ul>
<p>For something to qualify as a meaningful abstraction, it must do more than just define methods. It must:</p>
<ul>
<li>Fulfill a purpose in the easiest way possible</li>
<li>Hide unnecessary complexity</li>
<li>Offer a clean and reliable interface that lets developers focus on what they want to achieve, not how it’s implemented</li>
</ul>
<p>Take libraries like <strong>Retrofit</strong> or <strong>Ktor</strong> as examples.
These libraries have been thoughtfully designed to abstract away the complexities of network communication—things like:</p>
<ul>
<li>Opening and managing connections</li>
<li>Formatting HTTP requests and parsing responses</li>
<li>Handling retries, timeouts, redirects, and errors</li>
<li>Managing threading and background execution</li>
</ul>
<p>As app developers, we don’t need to worry about these internal details. We simply declare what API we want to talk to, and the library takes care of the rest.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span><span style="color:#a6e22e">@GET</span>(<span style="color:#e6db74">&#34;users&#34;</span>)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">getUsers</span>(): List&lt;User&gt;
</span></span></code></pre></div><p>That’s abstraction at work: you focus on what you need (the list of users) and trust that the library handles the how (HTTP calls, JSON parsing, etc.).</p>
<p>Not all interfaces are abstractions, but every good abstraction provides an interface—one that lets you work at a higher level of thinking, free from unnecessary details.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Abstraction is more than a coding technique—it is a profound enabler of progress. By trusting in the work of others and leveraging the abstractions they create, we free ourselves to focus on what truly matters: solving problems, creating value, and pushing the boundaries of what software can do.</p>
]]></content:encoded></item></channel></rss>