<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Kavisha Mathur on Medium]]></title>
        <description><![CDATA[Stories by Kavisha Mathur on Medium]]></description>
        <link>https://medium.com/@KavishaMathur?source=rss-6b02ab98ac00------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*wVA7gq_AZSa3fxB_HCWlYw.jpeg</url>
            <title>Stories by Kavisha Mathur on Medium</title>
            <link>https://medium.com/@KavishaMathur?source=rss-6b02ab98ac00------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Mon, 29 Jun 2026 05:02:21 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@KavishaMathur/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[The Backend Concepts Every Engineer Revisits (And Should Actually Understand)]]></title>
            <link>https://medium.com/javarevisited/the-backend-concepts-every-engineer-revisits-and-should-actually-understand-399b40c8a243?source=rss-6b02ab98ac00------2</link>
            <guid isPermaLink="false">https://medium.com/p/399b40c8a243</guid>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[backend]]></category>
            <category><![CDATA[api]]></category>
            <category><![CDATA[middleware]]></category>
            <dc:creator><![CDATA[Kavisha Mathur]]></dc:creator>
            <pubDate>Fri, 19 Jun 2026 15:48:14 GMT</pubDate>
            <atom:updated>2026-06-19T15:48:14.976Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/876/1*XmOnKONvMGFf3awNbdVS5w.png" /></figure><p>There’s a specific kind of embarrassment that hits mid-interview or mid-PR review when someone asks <em>“why did you pick JWT here?”</em> and you go blank for half a second. You’ve used JWT in five projects. You know it works. But explaining <em>why </em>the actual tradeoffs is harder than it should be.</p><p>This is that refresher. Not a beginner tutorial. More like: you’ve built things, you’ve copy-pasted some boilerplate, and now you want the mental model to actually stick.</p><p>While going through these: <br>1. <a href="https://www.youtube.com/watch?v=SubuU1iOC2s&amp;list=PLCuXwbTYPNWf8_a0YjVQ6xTjhhmAMe2-h&amp;index=6">https://www.youtube.com/watch?v=SubuU1iOC2s&amp;list=PLCuXwbTYPNWf8_a0YjVQ6xTjhhmAMe2-h&amp;index=6</a> <br>2. <a href="https://www.youtube.com/watch?v=vzg90tY3uM0&amp;list=PLCuXwbTYPNWf8_a0YjVQ6xTjhhmAMe2-h&amp;index=7">https://www.youtube.com/watch?v=vzg90tY3uM0&amp;list=PLCuXwbTYPNWf8_a0YjVQ6xTjhhmAMe2-h&amp;index=7</a> 3. <a href="https://www.youtube.com/watch?v=A95rliroC8Q&amp;list=PPSV">https://www.youtube.com/watch?v=A95rliroC8Q&amp;list=PPSV</a> <br>4. <a href="https://www.youtube.com/watch?v=qedj_JjjL-U&amp;list=PPSV">https://www.youtube.com/watch?v=qedj_JjjL-U&amp;list=PPSV</a> <br>5. <a href="https://www.youtube.com/watch?v=hyc-7w3pee8&amp;list=PPSV">https://www.youtube.com/watch?v=hyc-7w3pee8&amp;list=PPSV</a></p><p>The playlist for “Backend Engineering from First Principles” I made a list of notes on Obsidian. These notes have been converted to a structured format for this article :)</p><h3>Routes First -&gt; Static, Dynamic, and Query Params</h3><p>Before auth even enters the picture, let’s talk about how APIs express intent through their URLs.</p><p><strong>Static routes</strong> return the same structure every time. /api/status, /api/config — nothing dynamic, nothing context-dependent. Easy.</p><p><strong>Dynamic routes</strong> are where it gets semantic. /api/users/123 — that 123 isn&#39;t just a number, it&#39;s the identifier that scopes the entire request. The route <em>means</em> something: &quot;give me the resource for this specific entity.&quot; REST treats this as a resource representation, not a function call.</p><p><strong>Query params</strong> sit outside the resource path and carry filters, sorts, or search intent. /search?q=some+value&amp;page=2 — notice the ? separating the resource from the parameters. Query params don&#39;t define the resource; they refine how you access it.</p><p>A common pattern that trips people up: one endpoint returns a collection (/api/books) and the individual items have IDs that need to be threaded into subsequent calls (/api/books/42/chapters). The resource hierarchy in the URL is doing real design work -it&#39;s telling the consumer how the data is structured.</p><h3>REST Isn’t Just “use HTTP correctly”</h3><p>Roy Fielding designed the constraints for REST because the early web couldn’t handle scale. He wasn’t building an API spec — he was describing an architectural style. The constraints:</p><ol><li><strong>Client-server</strong> — separation of concerns between UI and data</li><li><strong>Uniform interface</strong> — consistent, predictable URL and method conventions</li><li><strong>Layered system</strong> — clients don’t know if they’re talking to the origin server or a CDN</li><li><strong>Cache</strong> — responses declare their cacheability</li><li><strong>Stateless</strong> — every request carries all the context needed; the server holds nothing between calls</li><li><strong>Code on demand</strong> (optional) — servers can send executable code to clients</li></ol><p>The acronym REST itself tells you:</p><ul><li><strong>Representational</strong> — resources exist in a format. JSON for server-to-server, HTML for server-to-client, XML when it’s 2009.</li><li><strong>State</strong> — you’re transferring the <em>state</em> of a resource. On Amazon, the cart object has a state: items, quantities, prices. That’s what gets transferred.</li><li><strong>Transfer</strong> — you’re moving that state over the wire.</li></ul><p>One thing worth locking in: POST is the <strong>only non-idempotent HTTP method</strong>. Every other method — GET, PUT, PATCH, DELETE — can be called multiple times with the same result. POST creates something new each time. This is why custom actions (anything that doesn&#39;t fit neatly into CRUD) default to POST.</p><h3>Authentication: The Four Models We Actually Encounter</h3><p>Authentication isn’t one thing. There are four patterns, and which one you reach for depends entirely on <em>what’s talking to what</em>.</p><h3>1. Stateful Authentication (Sessions)</h3><p>This is the classic web pattern. User submits credentials → server verifies → server generates a session ID → that session ID lives in the server’s persistent storage → gets sent back to the client inside a cookie.</p><p>Every subsequent request, the browser sends that cookie automatically. The server looks up the session ID in storage, finds the associated user data, and continues.</p><p>The session ID itself can be any cryptographically random string — doesn’t need to be JWT, can be completely opaque. Its only job is to be a key that maps to server-side state.</p><p><strong>Why this works for browsers:</strong> Browsers handle cookies natively. It’s stateful on the server, which means you have complete control — revoke a session ID and the user is immediately logged out. No questions.</p><p><strong>The downside:</strong> You need that persistent storage. Every server in your cluster needs access to the same session store, or sticky sessions, or some other headache.</p><h3>2. Stateless Authentication (JWT)</h3><p>This is where it gets interesting. Instead of the server storing state, the state travels <em>with the request</em>.</p><p>After verifying credentials, the server creates a JWT — a token with three parts:</p><ul><li><strong>Header</strong> — algorithm and token type</li><li><strong>Payload</strong> — claims: who the user is, what their role is, when it expires</li><li><strong>Signature</strong> — created with a secret key; verifies the token hasn’t been tampered with</li></ul><p>The server sends this token to the client. For subsequent API calls, the client sends it in the Authorization header. The server verifies the signature, reads the payload, and trusts what&#39;s in it — no database lookup needed.</p><p>This is what “stateless” means in practice: <strong>the server doesn’t remember you between requests</strong>. The token is self-contained proof of identity.</p><p><strong>Why this scales:</strong> Horizontal scaling becomes trivial. Ten servers, a hundred — none of them need shared session storage. Each one can independently verify any JWT with the same secret key. That’s a genuine architectural advantage when you’re dealing with distributed systems.</p><p><strong>The real disadvantage (don’t skim this part):</strong> You cannot invalidate a JWT before it expires. None. If a token is stolen, it’s valid until expiry — and the server has no mechanism to say “ignore this specific token.” To invalidate one token, you’d have to rotate the secret key, which invalidates <em>every</em> token for every user on every machine simultaneously.</p><p>This is not a hypothetical concern. It’s a real operational tradeoff.</p><h3>The Hybrid Approach</h3><p>Here’s how teams actually solve the revocation problem: they combine stateless tokens with a server-side blacklist.</p><p>The JWT still carries the user identity. But the server also does a quick lookup against a blacklist stored somewhere (Redis, usually). If the token’s ID appears on that list, deny access — regardless of what the signature says.</p><p>You get most of the scalability benefits of JWT while keeping the ability to revoke specific tokens. The payload still offloads most of the state. The blacklist is small and fast to query.</p><p>The natural follow-up question: if we’re doing a server-side lookup anyway, why not just use sessions? Fair question. The answer usually comes down to what the token carries — with JWT, you’re avoiding a full user record lookup for <em>every</em> request. You’re only doing the blacklist check, which is lighter.</p><h3>3. API Keys</h3><p>API keys are for machine-to-machine communication. When you use the OpenAI API, you’re not “logging in” — you’re presenting a key that identifies your application and gates access based on permissions.</p><p>Keys are long-lived (compared to session tokens), permission-scoped, and designed for automated systems rather than human users. The server generates them, associates them with an account, and checks them on every request.</p><p>Simple. Effective. Not ideal for user-facing auth where you’d want finer control over sessions.</p><h3>4. OAuth 2.0 (and OIDC)</h3><p>OAuth 2.0 is the industry-standard authorization protocol that solves a specific problem: how does App A access your data on Service B, <em>without you giving App A your Service B password?</em></p><p>The answer: time-limited access tokens, issued by Service B, that grant App A scoped access. Your credentials never touch App A.</p><p>OAuth 2.0 handles <em>authorization</em> (what can this app do). It does not handle <em>authentication</em> (who is this user). That’s what <strong>OpenID Connect (OIDC)</strong> adds — an identity layer on top of OAuth 2.0 that issues an ID token (a JWT, specifically) containing user identity claims like user ID and when the token was issued.</p><p>OAuth 2.0 also has the concept of <em>flows</em> — different grant types for different contexts. A web app uses the Authorization Code flow. A CLI tool or device with no browser might use the Device Authorization flow. A server-to-server integration uses Client Credentials. Picking the wrong flow for your context is a real security issue, not just a code smell.</p><h3>Cookies vs. Tokens: A Quick Clarification</h3><p>These get conflated constantly. A cookie is a <em>storage mechanism</em> — a way of persisting something on the client side. A token is a <em>credential format</em>. A JWT can live in a cookie. A session ID can live in a cookie. These are orthogonal concepts.</p><p>What matters is what’s stored and how it’s protected (HttpOnly, Secure, SameSite flags if you’re using cookies), not which container it travels in.</p><h3>Middleware-</h3><p>Middleware sits between the routing layer and your controllers. It receives the same req and res objects as a route handler, plus one additional argument: next.</p><p>Calling next() hands control to the next middleware in the chain (or the final route handler). Not calling it — or calling res.send() instead — short-circuits the chain. That short-circuit behavior is exactly what makes middleware useful for auth: if the token is invalid, return a 401 right there. Never reach the controller.</p><pre>Request → [Middleware 1] → [Middleware 2] → [Controller] → Response<br>               ↓ (can return early)</pre><p>The order matters. A lot. If your auth middleware runs after your logging middleware, the logger has already captured a request that might not be authorized. Think through the sequence deliberately.</p><p><strong>Common middleware responsibilities:</strong></p><ul><li><strong>CORS</strong> — the server checks the request origin, decides whether it’s in the allowed list, and sets the appropriate headers. v1/v2 versioning affects which origins and paths are allowed.</li><li><strong>Rate limiting</strong> — prevents abuse by capping requests per IP or per token over a time window</li><li><strong>Authentication</strong> — validates tokens, sessions, or API keys before the request proceeds</li><li><strong>Compression</strong> — gzip/brotli before sending responses</li><li><strong>Data parsing</strong> — turning raw request bodies into usable objects (JSON, form data, etc.)</li><li><strong>Logging and monitoring</strong> — capture timing, status codes, errors</li><li><strong>Global error handling</strong> — catch uncaught exceptions in a single place rather than every controller</li></ul><p><strong>Request context</strong> is the underrated concept here. Once your auth middleware extracts the user ID from a token, how does the controller downstream know who the user is? Not by re-reading the token — by reading from a shared request context. It’s a key-value store scoped to the lifetime of one request, modifiable by all layers. Each middleware can write to it; each subsequent handler can read from it. It’s loosely coupled — the controller doesn’t know or care <em>how</em> the user ID got there, just that it’s available.</p><h3>Putting It Together: What This Looks Like in a Real Architecture</h3><p>A production request lifecycle looks roughly like this:</p><ol><li>Request hits your load balancer</li><li>Goes through a CDN layer (caching, DDoS protection)</li><li>Reaches your API server</li><li>Logging middleware captures the incoming request</li><li>CORS middleware validates the origin</li><li>Rate limiting middleware checks the quota</li><li>Auth middleware validates the JWT (and maybe checks a blacklist)</li><li>Auth middleware writes userId to request context</li><li>Request context flows through to the service layer</li><li>Controller calls service, service calls repository, data comes back</li><li>Response goes out, logging middleware captures status and timing</li></ol><p>Each layer has a single job. None of them need to know what the others are doing internally.</p><h3>The Mental Model Worth Keeping</h3><p>Auth is fundamentally a spectrum between <strong>convenience</strong> and <strong>control</strong>:</p><ul><li>Sessions give you maximum control (instant revocation) at the cost of state management overhead</li><li>JWT gives you maximum scalability at the cost of revocation ability</li><li>Hybrid gives you a workable middle ground at the cost of some complexity</li><li>OAuth delegates the problem to someone better equipped to handle it</li></ul><p>There’s no universally correct answer. The right one depends on what you’re building, who’s using it, and what your threat model looks like.</p><p>Middleware is just functions in a pipeline — but the order you put them in, and what you let them share via request context, determines how decoupled and maintainable your codebase stays.</p><p>REST isn’t a set of rules. It’s a set of constraints that push your API design toward something predictable and scalable. Violating them isn’t always wrong — but you should know you’re doing it and why.</p><blockquote><em>If any of this clicked differently than it did the first time you learned it — that’s the point. The concepts don’t change, but understanding them deeply enough to explain the tradeoffs is a different skill than knowing which library to import.</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*bUPmkTSuQHX9AOew.png" /></figure><p><em>LinkedIn Profile: </em><a href="https://www.linkedin.com/in/kavisha-mathur/"><em>https://www.linkedin.com/in/kavisha-mathur/</em></a><em><br>Github: </em><a href="https://github.com/Kavisha4"><em>https://github.com/Kavisha4</em></a><em><br>Portfolio: </em><a href="https://animated-gumption-c26500.netlify.app/"><em>https://animated-gumption-c26500.netlify.app/</em></a><em><br>Medium: </em><a href="https://medium.com/@KavishaMathur"><em>https://medium.com/@KavishaMathur</em></a><em><br>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=399b40c8a243" width="1" height="1" alt=""><hr><p><a href="https://medium.com/javarevisited/the-backend-concepts-every-engineer-revisits-and-should-actually-understand-399b40c8a243">The Backend Concepts Every Engineer Revisits (And Should Actually Understand)</a> was originally published in <a href="https://medium.com/javarevisited">Javarevisited</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Inside Claude Architect Certification: A Practical Guide to Claude Projects, Skills, and AI…]]></title>
            <link>https://medium.com/@KavishaMathur/inside-claude-architect-certification-a-practical-guide-to-claude-projects-skills-and-ai-188e1bad27ac?source=rss-6b02ab98ac00------2</link>
            <guid isPermaLink="false">https://medium.com/p/188e1bad27ac</guid>
            <category><![CDATA[claude]]></category>
            <category><![CDATA[claude-architect]]></category>
            <category><![CDATA[anthropic-claude]]></category>
            <dc:creator><![CDATA[Kavisha Mathur]]></dc:creator>
            <pubDate>Sun, 17 May 2026 08:07:35 GMT</pubDate>
            <atom:updated>2026-05-17T08:07:35.400Z</atom:updated>
            <content:encoded><![CDATA[<h3>Inside Claude Architect Certification: A Practical Guide to Claude Projects, Skills, and AI Workflows</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/704/1*nVEjqdkRWtCRMnid5LsNHg.png" /></figure><h3>Introduction</h3><p>Artificial Intelligence is rapidly transforming the way we work, build, and collaborate. Among the most powerful AI systems available today, Anthropic’s Claude ecosystem introduces a new approach to productivity through intelligent collaboration, automation, coding assistance, and context-aware workflows.</p><p>The Claude Architect Certification explores how humans and AI can work together effectively through concepts such as delegation, prompt design, discernment, and responsible AI usage. It also introduces the broader Claude ecosystem — including Chat, CoWork, Claude Code, Projects, Skills, Subagents, Hooks, MCP servers, and Retrieval Augmented Generation (RAG).</p><p>In this article, we’ll break down the core concepts covered in the certification, understand when to use different Claude environments, explore how Projects and Skills improve workflows, and learn how developers can build scalable AI-assisted systems using Claude APIs and integrations.</p><p>Whether you’re a developer, AI enthusiast, technical writer, product manager, or someone exploring AI-powered productivity, this guide will help you understand how to work smarter with Claude and build more efficient human-AI collaboration systems.</p><h3>What Claude helps in and how you can refine your prompt?</h3><ul><li><strong>Delegation</strong>: Deciding on what work should be done by humans, what work should be done by AI, and how to distribute tasks between them. Includes understanding your goals, AI capabilities, and making strategic choices about collaboration.</li><li><strong>Description</strong>: Effectively communicating with AI systems. Includes clearly defining outputs, guiding AI processes, and specifying desired AI behaviors and interactions.</li><li><strong>Discernment</strong>: Thoughtfully and critically evaluating AI outputs, processes, behaviors and interactions. Includes assessing quality, accuracy, appropriateness, and determining areas for improvement.</li><li><strong>Diligence</strong>: Using AI responsibly and ethically. Includes making thoughtful choices about AI systems and interactions, maintaining transparency, and taking accountability for AI-assisted work.</li></ul><h3>Chat vs CoWork vs Code</h3><p>Chat excels when you need to ask questions, brainstorm, draft, or work through problems back and forth.</p><p>Its for quick entry, screenshots, window sharing, desktop connectors.</p><p>Claude Cowork is built for work that takes real effort: pulling information from many sources, making sense of it, and producing something finished.<br>Its used with folder access, subagents, scheduled tasks, plugins</p><p>The Code tab gives you access to the power of Claude Code, running directly inside the desktop app. This gives you a full development environment for building software.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mfZFfg7hnWlQbL9VocdOIA.png" /></figure><h3>Projects</h3><p>Projects are ideal for storing knowledge Claude should reference, organizing related chats around a specific topic or work area, and collaborating with team members who need access to the same shared context.<br>Reference materials are needed continuously, within teams, consistent requirements.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ex3UjNJ4zyVbSWy151CjwA.png" /></figure><p>Projects automatically scale to handle large amounts through a process called Retrieval Augmented Generation (RAG). At a high level, this means that Claude can automatically find and use the most relevant parts of your uploaded documents when answering, without you needing to tell it which file to look at.</p><p>When your project knowledge approaches the context window limit, Claude seamlessly enables RAG mode. Instead of loading all project content into memory at once, Claude intelligently searches and retrieves only the most relevant information needed to answer your questions. This expands your project’s capacity by up to 10x while maintaining response quality.</p><ul><li><strong>Q4 product launch</strong></li><li><strong>Research support</strong></li><li><strong>Client account hub</strong></li><li><strong>Event planning workspace</strong></li><li><strong>Job description generator</strong></li></ul><p>Claude also has</p><ul><li><strong>Connectors</strong></li><li><strong>Enterprise Search</strong></li><li><strong>Research Mode</strong></li></ul><h3>Claude Partner Network Learning Path</h3><p>We will be covering the below topics further as part of this article</p><ol><li>Introduction to Agent Skills</li><li>Building with Claude API</li><li>Introduction to MCP</li><li>Claude Code in Action</li></ol><h3>Introduction to Agent Skills</h3><ul><li>Skills are folders of instructions that Claude Code can discover and use to handle tasks more accurately. Each skill lives in a SKILL.md file with a name and description in its frontmatter</li><li>Claude uses the description to match skills to requests. When you ask Claude to do something, it compares your request against available skill descriptions and activates the ones that match</li><li>Personal skills go in ~/.claude/skills and follow you across all projects. Project skills go in .claude/skills inside a repository and are shared with anyone who clones it</li><li>Skills load on demand — unlike CLAUDE.md (which loads into every conversation) or slash commands (which require explicit invocation), skills activate automatically when Claude recognizes the situation</li><li>If you find yourself explaining the same thing to Claude repeatedly, that’s a skill waiting to be written</li></ul><h4><strong>Personal vs Project skills</strong></h4><ul><li>Personal skills go in ~/.claude/skills (your home directory). These follow you across all your projects — your commit message style, your documentation format, how you like code explained.</li><li>Project skills go in .claude/skills inside the root directory of your repository. Anyone who clones the repo gets these skills automatically. This is where team standards live, like your company&#39;s brand guidelines, preferred fonts, and colors for web design.</li></ul><p>First, create a directory for your skill inside the skills folder. The directory name should match your skill name:</p><pre>mkdir -p ~/.claude/skills/pr-description</pre><p>Then create a SKILL.md file inside that directory. The file has two parts separated by frontmatter dashes:</p><pre>---<br>name: pr-description<br>description: Writes pull request descriptions. Use when creating a PR, writing a PR, or when the user asks to summarize changes for a pull request.<br>---</pre><pre>When writing a PR description:</pre><pre>1. Run `git diff main...HEAD` to see all changes on this branch<br>2. Write a description following this format:</pre><pre>## What<br>One sentence explaining what this PR does.</pre><pre>## Why<br>Brief context on why this change is needed</pre><pre>## Changes<br>- Bullet points of specific changes made<br>- Group related changes together<br>- Mention any files deleted or renamed</pre><p>The name identifies your skill. The description tells Claude when to use it — this is the matching criteria. Everything after the second set of dashes is the instructions Claude follows when the skill is activated.</p><h4><strong>CLAUDE.md vs Skills</strong></h4><p>CLAUDE.md loads into every conversation, always. If you want Claude to use TypeScript strict mode in your project, put it in your CLAUDE.md file.</p><p>Skills load on demand.</p><p>Use CLAUDE.md for:</p><ul><li>Project-wide standards that always apply</li><li>Constraints like “never modify the database schema”</li><li>Framework preferences and coding style</li></ul><p>Use Skills for:</p><ul><li>Task-specific expertise</li><li>Knowledge that’s only relevant sometimes</li><li>Detailed procedures that would clutter every conversation</li></ul><h4><strong>Subagents vs Skills</strong></h4><p>Use Subagents when:</p><ul><li>You want to delegate a task to a separate execution context</li><li>You need different tool access than the main conversation</li><li>You want isolation between delegated work and your main context</li></ul><p>Use Skills when:</p><ul><li>You want to enhance Claude’s knowledge for the current task</li><li>The expertise applies throughout a conversation</li></ul><h4><strong>Hooks vs Skills</strong></h4><p>Use Hooks for:</p><ul><li>Operations that should run on every file save</li><li>Validation before specific tool calls</li><li>Automated side effects of Claude’s actions</li></ul><p>Use Skills for:</p><ul><li>Knowledge that informs how Claude handles requests</li><li>Guidelines that affect Claude’s reasoning</li></ul><h4><strong>Summary</strong></h4><p>A typical setup might include:</p><ul><li>CLAUDE.md — always-on project standards</li><li>Skills — task-specific expertise that loads on demand</li><li>Hooks — automated operations triggered by events</li><li>Subagents — isolated execution contexts for delegated work</li><li>MCP servers — external tools and integrations</li></ul><h4>Troubleshooting skills</h4><ul><li>Use the skills validator to catch structural issues before debugging</li><li>Diagnose and fix common skill triggering and loading problems</li></ul><blockquote><strong>Quick Troubleshooting Checklist</strong></blockquote><ul><li><strong>Not triggering?</strong> Improve your description and add trigger phrases.</li><li><strong>Not loading?</strong> Check your path, file name, and YAML syntax.</li><li><strong>Wrong skill used?</strong> Make descriptions more distinct from each other.</li><li><strong>Being shadowed?</strong> Check the priority hierarchy and rename if needed.</li><li><strong>Plugin skills missing? </strong>Clear cache and reinstall.</li><li><strong>Runtime failure?</strong> Check dependencies, permissions, and paths.</li></ul><h4>In the next article we will be</h4><ol><li>Building with Claude API</li><li>Introduction to MCP</li><li>Claude Code in Action</li></ol><p>As AI tools continue to evolve, the ability to effectively collaborate with systems like Claude will become an increasingly valuable skill across industries. Learning how to organize context, automate expertise, and guide AI behavior thoughtfully is no longer optional — it’s becoming a core part of modern digital work.</p><p>In the upcoming sections and future articles, we’ll continue exploring advanced topics such as building with the Claude API, understanding MCP architecture, and using Claude Code in real-world development environments.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ddDoAdbN5TgXHrFnaMpEQg.png" /></figure><p><em>LinkedIn Profile: </em><a href="https://www.linkedin.com/in/kavisha-mathur/"><em>https://www.linkedin.com/in/kavisha-mathur/</em></a><em><br>Github: </em><a href="https://github.com/Kavisha4"><em>https://github.com/Kavisha4</em></a><em><br>Portfolio: </em><a href="https://animated-gumption-c26500.netlify.app/"><em>https://animated-gumption-c26500.netlify.app/</em></a><em><br>Medium: </em><a href="https://medium.com/@KavishaMathur"><em>https://medium.com/@KavishaMathur</em></a><em><br>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=188e1bad27ac" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[I Hit 150,000 Impressions on One More LinkedIn Post. Here’s the Exact System I Used!]]></title>
            <link>https://medium.com/@KavishaMathur/i-hit-150-000-impressions-on-one-more-linkedin-post-heres-the-exact-system-i-used-7cb17164d8c8?source=rss-6b02ab98ac00------2</link>
            <guid isPermaLink="false">https://medium.com/p/7cb17164d8c8</guid>
            <category><![CDATA[strategy]]></category>
            <category><![CDATA[digital-content-strategy]]></category>
            <category><![CDATA[linkedin]]></category>
            <category><![CDATA[content-strategy]]></category>
            <dc:creator><![CDATA[Kavisha Mathur]]></dc:creator>
            <pubDate>Sat, 25 Apr 2026 16:17:22 GMT</pubDate>
            <atom:updated>2026-04-28T03:28:52.948Z</atom:updated>
            <content:encoded><![CDATA[<h3>I Hit 150,000 Impressions on One More LinkedIn Post. Here’s the Exact System I Used — and How You Can Replicate It.</h3><p><em>No hacks. No paid promotions. Just a repeatable framework that actually works.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/864/1*izR_vn8Ah7Vv6DZdSytmrA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*drFEKoKaxFQMqO4J9nk4dA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fF-V8Cw7TAZHPm30NbEYrA.png" /></figure><p>Here is my LinkedIn as your POC to better understand this breakdown: <a href="https://www.linkedin.com/in/kavisha-mathur/">https://www.linkedin.com/in/kavisha-mathur/</a></p><p>Its important we get the right inbounds, one of the most lucrative inbounds I have gotten were recruiters from Google, which resulted in me giving all the rounds (more on that later). But I want YOU to be BOMBARDED with recruiters, the right people and opportunities on your LINKEDIN!</p><p>LinkedIn is no longer a digital resume. It’s a publishing platform, a personal brand engine, and the most underrated place on the internet to attract career-defining opportunities — if you know how to use it.</p><p>I recently had a post cross <strong>150,000 impressions</strong>. Not from a massive following. Not from going viral by accident. From a system — one I’ve refined over months of testing, failing, and doubling down on what works.</p><p>This article breaks down everything: the psychology behind what makes a LinkedIn post explode, how to stay consistent without burning out, and the full funnel that turns impressions into inbound opportunities from recruiters, collaborators, and people inside your niche.</p><h3>Part 1: Why Most LinkedIn Posts Die in the First Hour</h3><p>Before we talk about going viral, you need to understand how LinkedIn’s algorithm actually decides what to amplify.</p><p>LinkedIn doesn’t show your post to all your followers at once. It starts small — showing your content to a <strong>seed audience</strong> of roughly 10–15% of your network. It then watches for one thing above everything else:</p><p><strong>Dwell time + early engagement.</strong></p><p>If people stop scrolling to read your post, and then comment within the first 30–60 minutes, LinkedIn interprets that as a signal of quality and pushes the post further. If people scroll past it, the post dies. It’s that ruthless.</p><p>This means every decision — your opening line, your format, your posting time — is in service of earning those first few engagements fast.</p><h3>Part 2: The Anatomy of a Viral LinkedIn Post</h3><p>Every post that breaks through shares the same structural DNA. Here it is, dissected.</p><h3>The Hook (Lines 1–2): Your Entire Job Is to Stop the Scroll</h3><p>LinkedIn shows only the first two lines of your post before the “see more” button. Those two lines are the only thing standing between you and irrelevance.</p><p>Great hooks do one of three things:</p><p><strong>1. Make a bold, counterintuitive claim</strong></p><blockquote>“Most people optimize for getting hired. The smartest people I know optimize for being found.”</blockquote><p><strong>2. Open with a number and a specific result</strong></p><blockquote>“I sent 0 cold applications this year. Here’s how 3 inbound offers came to me instead.”</blockquote><p><strong>3. Start mid-story, in the tension</strong></p><blockquote>“My manager told me I wasn’t ready for a promotion. Six months later, I was leading his team.”</blockquote><p>The worst hooks start with “I’m excited to share…” or “Thrilled to announce…” — these are signals to the reader that what follows is self-promotional content and they should move on. Avoid them entirely.</p><h3>The Body: Format for F-Pattern Readers</h3><p>People on LinkedIn do not read. They scan. Write accordingly.</p><ul><li><strong>One idea per line.</strong> White space is your friend.</li><li><strong>Short sentences.</strong> Under 15 words where possible.</li><li><strong>No walls of text.</strong> Break every 3–4 lines with a gap.</li><li><strong>Use tension and release.</strong> Build toward a payoff the reader wants.</li></ul><p>The best-performing post formats on LinkedIn right now are:</p><p><strong>The Story Arc</strong> — Personal experience → the lesson → the broader truth. This is the format most likely to generate emotional resonance and shares.</p><p><strong>The Listicle with a Twist</strong> — “5 things I wish I knew before joining a startup” works not because of the format, but because of the specificity and the implied promise of insider knowledge.</p><p><strong>The Counterintuitive Take</strong> — Challenging a commonly held belief in your niche positions you as a thinker, not just a professional. It generates debate, which generates comments, which feeds the algorithm.</p><p><strong>The Vulnerable Confession</strong> — Posts that share failure, rejection, or self-doubt consistently outperform polish. LinkedIn users are exhausted by performative success. Authenticity cuts through.</p><h3>The Ending: Always Plant a Seed for Comments</h3><p>The algorithm rewards comments above almost everything else. Engineer for them.</p><p>End your post with one of these:</p><ul><li>A direct question: <em>“Have you ever had a manager who changed how you think? Drop their name below.”</em></li><li>A challenge to disagree: <em>“Controversial opinion — tell me why I’m wrong.”</em></li><li>A call to relate: <em>“If this resonates, I’d love to know what your experience has been.”</em></li></ul><p>Never end on a passive full stop. End with an open door.</p><h3>Part 3: The Consistency System That Doesn’t Burn You Out</h3><p>Going viral once is luck. Going viral repeatedly is a system.</p><p>Most people fail at LinkedIn consistency for one reason: they treat content creation as a creative act that requires inspiration. The fix is to treat it like a <strong>production pipeline</strong>.</p><h3>Step 1: Build Your Content Bank</h3><p>Every week, set a 20-minute timer and do a brain dump into a running doc. Pull from:</p><ul><li>Things that frustrated you this week at work</li><li>Advice you gave someone in a DM or meeting</li><li>Something you read that you agreed or disagreed with strongly</li><li>A milestone — even a small one — you hit or missed</li><li>An observation about your industry that others might not have noticed</li></ul><p>You’re not writing posts. You’re collecting raw material. You should have 15–20 entries per month. That’s your content bank.</p><h3>Step 2: The 3-Post-a-Week Rule</h3><p>Consistency on LinkedIn doesn’t mean daily posting. The research consistently shows that <strong>3–4 posts per week</strong> is the sweet spot for audience growth without algorithmic penalty for low-quality output.</p><p>Here’s a simple weekly cadence that works:</p><p>Day Post Type Purpose <strong>Monday</strong> Personal story or lesson Emotional connection, shares <strong>Wednesday</strong> Niche insight or take Authority building, niche reach <strong>Friday</strong> Engagement bait (question, list, poll) Comment volume, algorithmic boost</p><p>This gives you reach, depth, and engagement — all three things the algorithm rewards.</p><h3>Step 3: Batch Write, Schedule, and Forget</h3><p>Set aside <strong>90 minutes on Sunday</strong>. Write all three posts for the week. Schedule them using LinkedIn’s native scheduler (or a tool like Buffer). Then don’t think about LinkedIn content again until the following Sunday.</p><p>This is how you post consistently for months without it feeling like a second job.</p><h3>Part 4: The Niche Positioning Framework</h3><p>Here’s what separates people with 500 followers who get 0 opportunities from people with 5,000 followers who get interviewed by top companies every quarter:</p><p><strong>Positioning.</strong></p><p>LinkedIn is not the place to be a generalist. It rewards people who are known for <em>one specific thing</em> in <em>one specific context.</em></p><p>Complete these sentences to find your niche position:</p><blockquote>“I help [specific type of person] achieve [specific outcome] through [specific method or lens].”</blockquote><p>Examples:</p><ul><li>“I help early-career engineers navigate their first promotion using systems thinking.”</li><li>“I write about the intersection of product design and behavioral psychology.”</li><li>“I document what it’s actually like to build a startup in Southeast Asia.”</li></ul><p>Every post you write should connect back to this positioning. If a post has nothing to do with what you’re known for, don’t post it — or reframe it until it does.</p><p>This is how you build a <strong>content moat</strong>: over time, LinkedIn and its search algorithm associate your name with specific keywords, and people inside your niche start finding you organically.</p><h3>Part 5: The Full Funnel — From Impressions to Opportunities</h3><p>Going viral is the top of the funnel. Here’s the complete system for converting attention into career momentum.</p><pre>IMPRESSIONS (Reach)<br>       ↓<br>PROFILE VISITS (Interest)<br>       ↓<br>FOLLOWERS / CONNECTION REQUESTS (Trust)<br>       ↓<br>DMs / COMMENTS (Engagement)<br>       ↓<br>OPPORTUNITIES (Conversion)</pre><h3>Layer 1: Impressions → Profile Visits</h3><p>When your post performs, people will click on your name. Your profile needs to do three things in 5 seconds:</p><ol><li><strong>Your headline</strong> should say what you do and for whom — not just your job title. “Product Manager @ XYZ” is invisible. “Product Manager | Building AI tools for healthcare | Writing about PM craft for 40K readers” is magnetic.</li><li><strong>Your banner image</strong> should reinforce your niche with a visual or a tagline.</li><li><strong>Your featured section</strong> should show your best post, a newsletter, or a portfolio piece — not a job announcement from 3 years ago.</li></ol><h3>Layer 2: Profile Visits → Followers</h3><p>If your profile passes the 5-second test, people follow you. This is where a <strong>pinned post</strong> becomes crucial. Your pinned post should:</p><ul><li>Introduce who you are</li><li>State clearly what you write about</li><li>Tell people exactly what they’ll get from following you</li><li>Have a call to action (follow, connect, or subscribe)</li></ul><p>Think of it as your LinkedIn landing page.</p><h3>Layer 3: Followers → DMs</h3><p>This is where most people stall. They get followers but never convert them into real conversations.</p><p>The fix: <strong>reply to every comment on every post, especially in the first hour.</strong> Not with a thumbs up. With a genuine response that extends the conversation. This does two things — it feeds the algorithm more comment signals, and it builds micro-relationships with the people who will eventually DM you.</p><p>Additionally, send a <strong>welcome message</strong> to every new connection that mentions a specific post or topic. Not a sales pitch. Just a human acknowledgment.</p><h3>Layer 4: DMs → Opportunities</h3><p>When recruiters, founders, or collaborators reach out, they’re already warm. They’ve seen your content, they know your perspective, they have a reason to trust you.</p><p>To accelerate this layer:</p><ul><li>Make your email or booking link visible on your profile.</li><li>Post explicitly about what you’re open to — whether that’s consulting, speaking, collaborating, or a new role. LinkedIn allows this. Most people are too shy to do it.</li><li>When you hit a content milestone (like 150K impressions on a post), <strong>post about it</strong> — it signals social proof and invites curiosity from people who want to understand how you did it.</li></ul><h3>Part 6: What Makes Recruiters Notice You Specifically</h3><p>Recruiters on LinkedIn are not passively scrolling. They are <strong>actively searching</strong> for keywords. Here’s how to show up in those searches:</p><p><strong>1. Keyword-load your headline and About section</strong> — Use the exact titles and skills that job descriptions in your target role use. If you want to be found for “machine learning engineer” roles, that phrase needs to appear in your headline, About section, and experience descriptions.</p><p><strong>2. Post content that demonstrates skills, not just opinions</strong> — A post that walks through how you solved a technical problem or led a project is worth ten times more to a recruiter than a motivational quote. Show don’t tell.</p><p><strong>3. Engage in niche communities before you need them</strong> — Comment thoughtfully on posts from leaders in your target industry for 30 days. When you eventually put out a post about your job search or expertise, you’ll have built up enough ambient recognition that it lands differently.</p><p><strong>4. Use the “Open to Work” feature strategically</strong> — The green banner is visible but often stigmatized. Instead, use the private “Open to Work” signal that only recruiters can see, while publicly posting content that positions you as someone worth recruiting regardless.</p><h3>The 30-Day LinkedIn Sprint</h3><p>If you’re starting from zero or want to reset your presence, here’s a 30-day sprint:</p><p><strong>Week 1 — Foundation</strong></p><ul><li>Rewrite your headline, About section, and banner</li><li>Set your pinned post</li><li>Write your first 3 posts from your content bank</li><li>Comment 10× per day on posts in your niche</li></ul><p><strong>Week 2 — Volume</strong></p><ul><li>Post 3× this week. Experiment with a story, a list, and a question</li><li>Track which format gets the most comments</li><li>Identify 5–10 accounts in your niche to engage with consistently</li></ul><p><strong>Week 3 — Double Down</strong></p><ul><li>Repost your best-performing post from Week 2 with a new hook</li><li>Write one long-form newsletter article or document post</li><li>Reach out to 3 people who engaged with your content and start a real conversation</li></ul><p><strong>Week 4 — Amplify</strong></p><ul><li>Write a post about what you learned in 30 days</li><li>Ask your most engaged follower or connection to collaborate on a post or share something</li><li>Review your analytics: what format, topic, and posting time drove the most reach?</li></ul><p>By Day 30, you’ll have a content rhythm, a clearer niche, and a profile that converts visitors into followers and followers into opportunities.</p><h3>Final Thought</h3><p>The biggest misconception about LinkedIn is that it’s about followers. It’s not. It’s about <strong>positioning</strong> — making sure that the right 500 people know exactly who you are and what you stand for.</p><p>My 150K impression post didn’t happen because I got lucky. It happened because I posted consistently for long enough that my audience knew what to expect from me, trusted my perspective, and hit share when something resonated.</p><p>The algorithm is just math. Build the habits, and the math starts working for you.</p><p><em>Connect with me on:</em></p><p><em>LinkedIn Profile: </em><a href="https://www.linkedin.com/in/kavisha-mathur/"><em>https://www.linkedin.com/in/kavisha-mathur/</em></a><em><br>Github: </em><a href="https://github.com/Kavisha4"><em>https://github.com/Kavisha4</em></a><em><br>Portfolio: </em><a href="https://animated-gumption-c26500.netlify.app/"><em>https://animated-gumption-c26500.netlify.app/</em></a><em><br>Medium: </em><a href="https://medium.com/@KavishaMathur"><em>https://medium.com/@KavishaMathur</em></a><em><br>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7cb17164d8c8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Backend from First End Principles: Deepdive into HTTP]]></title>
            <link>https://medium.com/@KavishaMathur/backend-from-first-end-principles-deepdive-into-http-2d90b487f200?source=rss-6b02ab98ac00------2</link>
            <guid isPermaLink="false">https://medium.com/p/2d90b487f200</guid>
            <category><![CDATA[https]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[backend]]></category>
            <dc:creator><![CDATA[Kavisha Mathur]]></dc:creator>
            <pubDate>Tue, 14 Apr 2026 18:51:38 GMT</pubDate>
            <atom:updated>2026-04-14T18:51:38.092Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ygyLc33fdwJgRt9S40Esmg.png" /><figcaption>backend</figcaption></figure><p>Backend engineering is deceptively broad. Ask ten developers what it means and you’ll get ten different answers — usually shaped by whichever framework they learned first. Express, Spring Boot, Ruby on Rails. The lens changes, but the underlying system stays the same.</p><p>That’s the problem this guide is trying to solve.</p><p>Most developers start with a limited scope — a bootcamp, a university course, a single language — and then spend years filling in the gaps through trial and error, reading other people’s code, and asking seniors questions they probably should have been taught upfront. The goal here is to compress that journey. Not to replace the years of practice, but to give you the map before you start walking.</p><p>This is a first-principles walkthrough of backend engineering — the concepts that matter in 90% of codebases, regardless of the stack.</p><h3>1. How a Request Actually Works</h3><p>Before writing a single line of backend code, you should be able to close your eyes and visualise what happens when a user types a URL and hits Enter.</p><p>The request leaves the browser, travels through the user’s local network, crosses the internet via routers and DNS, passes through firewalls and load balancers, and eventually lands on a server sitting in an AWS data centre somewhere. That server processes it and sends a response back through the same chain. The round trip often takes under 100 milliseconds.</p><p>Understanding this flow — at least at a conceptual level — anchors everything else. It tells you <em>where</em> your code lives in the broader system, and <em>why</em> decisions like connection pooling, caching, or graceful shutdown actually matter.</p><h3>2. HTTP: The Language of the Web</h3><p>HTTP is the protocol through which browsers talk to servers. Two ideas sit at its core.</p><p>The first is <strong>statelessness</strong>. Each HTTP request carries all the information the server needs to process it — headers, URL, method, body. After responding, the server forgets. There’s no memory of the previous request. This simplifies server architecture dramatically and makes it easy to scale horizontally: any server can handle any request because no single server needs to track session state. When you need continuity — for logins, shopping carts — developers layer state management on top using cookies, sessions, or tokens.</p><p>The second is the <strong>client-server model</strong>. Communication is always initiated by the client. The server waits, receives, processes, responds. That’s the fundamental contract.</p><h3>HTTP Messages</h3><p>A raw HTTP request looks something like this:</p><pre>GET /users/123 HTTP/1.1<br>Host: api.example.com<br>Authorization: Bearer eyJhbGci...<br>Accept: application/json</pre><p>And a response:</p><pre>HTTP/1.1 200 OK<br>Content-Type: application/json<br>Cache-Control: max-age=10</pre><pre>{ &quot;id&quot;: 123, &quot;name&quot;: &quot;Priya&quot; }</pre><p>Every part of this — method, URL, version, headers, status code, body — is intentional. Understanding why each piece exists is more valuable than memorising the syntax.</p><h3>HTTP Headers</h3><p>Think of headers like the label on a parcel. The courier doesn’t need to open the box to know where it’s going, who sent it, or how fragile it is. That metadata lives on the outside. HTTP headers serve the same purpose — they carry metadata about the request or response so that servers, proxies, and browsers can make decisions without reading the full body.</p><p>Headers fall into a few categories:</p><p><strong>Request headers</strong> tell the server about the client — the user agent, what content formats it accepts, and authentication credentials.</p><p><strong>General headers</strong> apply to both requests and responses — cache control directives, connection settings, the date of the message.</p><p><strong>Representation headers</strong> describe the body — content type (JSON, HTML, XML), content length, content encoding.</p><p><strong>Security headers</strong> instruct the browser on how to behave — Content-Security-Policy prevents XSS by restricting which scripts can run, HSTS forces HTTPS connections, X-Frame-Options prevents clickjacking.</p><p>Headers also make HTTP <strong>extensible</strong>. Adding a new header changes behaviour without touching the underlying protocol. This is why HTTP has survived for decades and adapted to new use cases.</p><h3>HTTP Methods and Idempotency</h3><p>Methods define the <em>intent</em> of a request:</p><ul><li>GET — retrieve data, never modify it</li><li>POST — create a new resource</li><li>PUT — completely replace a resource</li><li>PATCH — partially update a resource</li><li>DELETE — remove a resource</li></ul><p>A concept that trips many developers up is <strong>idempotency</strong>. An idempotent operation produces the same result no matter how many times you repeat it. GET, PUT, and DELETE are idempotent — fetching the same resource twice gives you the same result, deleting something twice still leaves it deleted. POST is not — submitting a form twice creates two records.</p><p>This matters in practice when handling network failures and retries.</p><h3>CORS: Why Your Browser Blocks Cross-Origin Requests</h3><p>Browsers enforce the <strong>Same-Origin Policy</strong>: a page on example.com cannot by default make requests to api.another.com. CORS (Cross-Origin Resource Sharing) is the mechanism that allows servers to explicitly permit cross-origin requests.</p><p>When a browser detects a cross-origin request, it behaves differently depending on complexity. For simple requests (GET/POST with basic content types), the browser sends the request and checks the response for an Access-Control-Allow-Origin header. If the header is absent or doesn&#39;t match the origin, the browser blocks the response.</p><p>For more complex requests — anything with PUT, DELETE, a JSON body, or an Authorization header — the browser first sends a <strong>preflight request</strong> using the OPTIONS method. This is the browser asking: <em>&quot;Hey server, do you support this method, these headers, from this origin?&quot;</em> Only if the server responds affirmatively does the browser send the actual request.</p><p>Understanding preflight requests saves hours of debugging network tabs.</p><h3>HTTP Status Codes</h3><p>Status codes are the server’s standardised way of communicating outcome. They fall into five families:</p><p><strong>2xx — Success</strong>: 200 OK, 201 Created, 204 No Content</p><p><strong>3xx — Redirection</strong>: 301 Moved Permanently, 302 Temporary Redirect, 304 Not Modified (the resource hasn&#39;t changed, use your cached version)</p><p><strong>4xx — Client errors</strong>: 400 Bad Request, 401 Unauthorized (not authenticated), 403 Forbidden (authenticated but not permitted), 404 Not Found, 409 Conflict, 429 Too Many Requests</p><p><strong>5xx — Server errors</strong>: 500 Internal Server Error, 503 Service Unavailable, 504 Gateway Timeout</p><p>The distinction between 401 and 403 trips up many developers. 401 means the server doesn’t know who you are. 403 means it knows exactly who you are — you just don’t have permission.</p><h3>HTTP Caching</h3><p>Caching reduces server load and improves response times by reusing previously fetched resources. The key headers are:</p><ul><li>Cache-Control: max-age=10 — cache this resource for 10 seconds</li><li>ETag — a hash of the resource (often a short string like &quot;abc123&quot;)</li><li>Last-Modified — the timestamp of the last change</li></ul><p>On subsequent requests, the client sends If-None-Match with the ETag it has cached. If the resource hasn&#39;t changed, the server responds with 304 Not Modified and no body — saving bandwidth. If the resource has changed, it sends a fresh 200 with the new content and a new ETag.</p><h3>3. Routing</h3><p>Routing maps incoming URLs to the code that handles them. It sounds simple but involves more design decisions than most developers realise:</p><ul><li><strong>Path parameters</strong> (/users/:id) vs <strong>query parameters</strong> (/users?role=admin)</li><li><strong>Static routes</strong> vs <strong>dynamic routes</strong> vs <strong>wildcard routes</strong></li><li><strong>Route grouping</strong> for shared middleware (all /admin/* routes require admin auth)</li><li><strong>API versioning</strong> — URI-based (/v1/users), header-based, or query-string-based</li><li><strong>Deprecation strategy</strong> — you need a plan for retiring old versions without breaking existing clients</li></ul><p>Route ordering matters. More specific routes should be matched before wildcards. Getting this wrong produces silent bugs that only surface in edge cases.</p><h3>4. Serialisation and Deserialisation</h3><p>Before data travels over the network, it needs to be encoded into a transmittable format. That’s serialisation. Decoding it on the other end is deserialisation.</p><p>The two dominant formats are:</p><p><strong>Text-based (JSON, XML)</strong> — human-readable, easy to inspect in a network tab, universally supported. The trade-off is size and parsing speed.</p><p><strong>Binary (Protocol Buffers)</strong> — compact, fast, typed. The trade-off is that you can’t read the payload without a schema definition. Used heavily in internal microservices where performance matters more than debuggability.</p><p>JSON is the lingua franca of web APIs. Key things to handle carefully: null values, date serialisation (timezones are a common source of bugs), missing vs extra fields, and nested objects. Always validate JSON schemas before processing — never trust the client.</p><h3>5. Authentication and Authorisation</h3><p><strong>Authentication</strong> answers: <em>who are you?</em> <strong>Authorisation</strong> answers: <em>what are you allowed to do?</em></p><p>They’re distinct problems that get conflated constantly.</p><h3>Authentication approaches</h3><p><strong>Session-based (stateful)</strong>: The server stores session data. The client carries a session ID in a cookie. Easy to implement, but doesn’t scale well horizontally without a shared session store.</p><p><strong>Token-based (stateless)</strong>: The server issues a JWT (JSON Web Token) signed with a secret. The client sends it with every request. The server verifies the signature — no lookup required. Scales cleanly across multiple servers.</p><p><strong>API keys</strong>: Long-lived credentials for server-to-server communication.</p><p><strong>OAuth 2.0 / OpenID Connect</strong>: Delegated authorisation — allowing a third party to act on a user’s behalf without exposing their credentials. Used by every “Login with Google” button.</p><h3>Authorisation models</h3><ul><li><strong>RBAC (Role-Based Access Control)</strong>: Access determined by role (admin, editor, viewer)</li><li><strong>ABAC (Attribute-Based Access Control)</strong>: Access determined by attributes of the user, resource, and environment</li></ul><h3>Security practices that matter</h3><ul><li>Hash passwords with bcrypt or Argon2 — never store plaintext, never use MD5 or SHA1 alone</li><li>Use HTTPS-only, HttpOnly, SameSite cookies</li><li>Rate limit login attempts — lock accounts after repeated failures</li><li>Make error messages consistent — “invalid credentials” rather than “user not found” or “wrong password” (the latter leaks information attackers can exploit)</li><li>Protect against timing attacks: operations that take different amounts of time based on input can leak information about valid usernames</li></ul><h3>6. Validation and Transformation</h3><p>Every piece of data entering your system from the outside world is untrusted. Validation is the gate.</p><p><strong>Types of validation:</strong></p><ul><li><strong>Syntactic</strong>: Is this string a valid email format? Is this a valid date?</li><li><strong>Semantic</strong>: Is this birth date in the past? Is the age between 0 and 120?</li><li><strong>Type</strong>: Is this field actually a number, not a string?</li><li><strong>Relational</strong>: Does the confirmPassword field match password?</li><li><strong>Conditional</strong>: Is partnerName only required when married is true?</li></ul><p>Client-side validation improves UX by giving users instant feedback. Server-side validation is the actual security layer — it must always exist, regardless of what the client does. A malicious actor can bypass client-side validation in seconds.</p><p><strong>Transformation</strong> happens alongside validation: converting query string parameters from strings to numbers, normalising emails to lowercase, trimming whitespace, adding country codes to phone numbers.</p><p><strong>Sanitisation</strong> strips or escapes dangerous content — preventing SQL injection and XSS attacks.</p><p>Fail fast: return all validation errors in a single response so the user can fix everything at once.</p><h3>7. Middleware</h3><p>Middleware is code that runs between receiving a request and returning a response. The best way to think about it: middleware is reusable logic that applies across multiple routes.</p><p>Common middleware in any production backend:</p><ul><li><strong>Authentication middleware</strong> — validates tokens, populates request context with user info</li><li><strong>Logging middleware</strong> — structured request/response logging for observability</li><li><strong>Rate limiting middleware</strong> — throttles requests per client</li><li><strong>CORS middleware</strong> — adds the appropriate access-control headers</li><li><strong>Compression middleware</strong> — gzip/br compresses responses before sending</li><li><strong>Error handling middleware</strong> — catches unhandled errors and returns consistent error shapes</li><li><strong>Body parsing middleware</strong> — deserialises JSON, form data, file uploads</li></ul><p>Middleware order matters. You can’t check authentication before parsing the body if the token is in the body. You can’t log the response before generating it. Think of middleware as a pipeline — request flows through each layer in sequence.</p><h3>8. Request Context</h3><p>When a request arrives, it’s not just the data in the URL and body that matters — there’s metadata that needs to travel through the entire lifecycle: the authenticated user, a unique trace ID, request timestamps, permission sets.</p><p>Request context is the mechanism for carrying this data without passing it explicitly to every function. In most frameworks, it’s attached to the request object and lives only for the duration of that request.</p><p>Key components of request context:</p><ul><li>HTTP method, URL, headers, query parameters, body</li><li>Authenticated user information (populated by auth middleware)</li><li>Unique request ID / trace ID (for distributed tracing)</li><li>Request-scoped cache data</li></ul><p>Best practice: keep context lightweight. Don’t overload it with data. Clean it up after the request completes to prevent memory leaks.</p><h3>9. The Three Layers: Presentation, Business Logic, Data Access</h3><p>A well-structured backend separates concerns into three layers:</p><p><strong>Presentation layer</strong> — routes, middleware, handlers, controllers. This layer speaks HTTP. It accepts data from clients, calls the business logic, and returns responses. It doesn’t make business decisions.</p><p><strong>Business logic layer (BLL)</strong> — services, domain models, business rules. This is the heart of your application. It doesn’t know about HTTP. It knows about your domain: users, orders, payments. It calls the data access layer to read and write data.</p><p><strong>Data access layer (DAL)</strong> — database queries, ORM models. This layer speaks SQL (or your database’s query language). It doesn’t make business decisions. It executes queries and returns results.</p><p>This separation makes code easier to test, easier to reason about, and easier to modify. You can swap your database without touching business logic. You can add a new API endpoint without duplicating database code.</p><h3>10. Databases</h3><p>Databases are where most backend performance problems live.</p><p><strong>Relational (PostgreSQL, MySQL)</strong> — structured data with relationships, ACID guarantees, strong consistency. Use when data integrity and complex queries matter.</p><p><strong>Non-relational (MongoDB, Redis, DynamoDB)</strong> — flexible schemas, horizontal scaling, eventual consistency. Use when you need speed, scale, or document-oriented data.</p><p>Key theoretical concepts:</p><ul><li><strong>ACID</strong> (Atomicity, Consistency, Isolation, Durability) — the properties that make relational database transactions reliable</li><li><strong>CAP theorem</strong> — in a distributed system, you can only guarantee two of: Consistency, Availability, Partition Tolerance</li></ul><p>Practical concepts that affect performance daily:</p><ul><li><strong>Indexing</strong> — the single most impactful optimisation for read-heavy workloads. Index foreign keys and frequently queried fields.</li><li><strong>N+1 query problem</strong> — fetching a list of records and then making a separate query for each one. Use joins or eager loading.</li><li><strong>Connection pooling</strong> — don’t open a new database connection for every request. Pool and reuse connections.</li><li><strong>Transactions</strong> — wrap multi-step operations in transactions to maintain consistency on failure.</li></ul><h3>11. Caching</h3><p>Caching is the art of trading memory for speed.</p><p><strong>Cache-aside (lazy loading)</strong>: Check the cache first. If the data isn’t there (cache miss), fetch from the database, store in cache, return to client. Simple and effective for most use cases.</p><p><strong>Write-through</strong>: On every write, update both the database and the cache simultaneously. Higher write latency, but cache is always fresh.</p><p><strong>Write-behind (write-back)</strong>: Write to cache immediately, persist to database asynchronously. High performance, higher risk of data loss.</p><p><strong>Eviction strategies</strong>: LRU (Least Recently Used), LFU (Least Frequently Used), TTL (Time To Live). Choose based on your access patterns.</p><p><strong>Levels of caching</strong>:</p><ul><li>L1 — in-memory within the application process (fastest, smallest)</li><li>L2 — distributed cache like Redis (fast, shared across servers)</li><li>L3 — CDN for static assets</li></ul><p>Cache invalidation is notoriously hard. The two main strategies: TTL-based (the cache expires after N seconds) and event-based (explicitly invalidate the cache when the underlying data changes).</p><h3>12. Task Queuing and Background Jobs</h3><p>Some operations are too slow or too unreliable to run synchronously in a request. Sending emails, processing images, making third-party API calls, batch operations — these belong in background jobs.</p><p>The pattern: the request handler pushes a job onto a queue (like Redis or RabbitMQ) and returns immediately. A separate worker process picks up the job and executes it asynchronously. The user gets an instant response, and the work happens in the background.</p><p>A task queue has four components:</p><ul><li><strong>Producer</strong> — the code that creates and enqueues tasks</li><li><strong>Queue</strong> — the data structure (and backing system) that holds tasks</li><li><strong>Consumer/Worker</strong> — the code that picks up and executes tasks</li><li><strong>Broker</strong> — the message broker that manages delivery (Redis, RabbitMQ, SQS)</li></ul><p>Design for failure: tasks should be idempotent (safe to retry), have retry logic with exponential backoff, and have dead-letter queues for tasks that repeatedly fail. Prioritise critical tasks (payments) over non-critical ones (notifications).</p><h3>13. Error Handling</h3><p>Errors fall into three categories:</p><ul><li><strong>Syntax errors</strong> — caught at compile time or startup</li><li><strong>Runtime errors</strong> — unexpected failures during execution (null pointer, network timeout)</li><li><strong>Logic errors</strong> — the code runs but produces wrong results</li></ul><p>Good error handling strategy:</p><ul><li>Fail fast: don’t swallow errors silently. Let them bubble up to a handler.</li><li>Use structured error types with codes, messages, and context.</li><li>Have a global error handler that catches unhandled exceptions and returns a consistent error shape.</li><li>Log errors with stack traces, request context, and user information.</li><li>Return appropriate HTTP status codes — don’t return 200 with an error body.</li><li>Never expose internal error details to clients — log them server-side, return a generic message.</li></ul><p>Use tools like Sentry for error tracking in production. Set up alerts for error rate spikes.</p><h3>14. Logging, Monitoring, and Observability</h3><p>These three are related but distinct:</p><p><strong>Logging</strong> is recording discrete events. Use structured logging (JSON format) rather than plain text — it’s parseable by machines. Log levels matter: DEBUG for development verbosity, INFO for normal operations, WARN for unexpected but handled situations, ERROR for failures, FATAL for application-ending events. Never log passwords, tokens, or PII.</p><p><strong>Monitoring</strong> tracks system health over time — CPU, memory, request rates, error rates, response times. Tools: Prometheus for metrics collection, Grafana for dashboards. Set alert thresholds on what matters, not everything — alert fatigue is real.</p><p><strong>Observability</strong> is the ability to understand what’s happening inside your system from the outside. The three pillars are logs, metrics, and traces. Distributed tracing (using trace IDs that follow a request across services) is essential in microservices architectures.</p><h3>15. Security</h3><p>A backend engineer is responsible for security at the application layer. Common vulnerabilities to understand:</p><ul><li><strong>SQL injection</strong>: User input is interpolated into SQL queries. Use parameterised queries always.</li><li><strong>XSS (Cross-Site Scripting)</strong>: User-supplied content is rendered as HTML. Sanitise and escape output.</li><li><strong>CSRF (Cross-Site Request Forgery)</strong>: Malicious sites trick browsers into making authenticated requests. Use CSRF tokens or SameSite cookies.</li><li><strong>Broken authentication</strong>: Weak session management, missing token expiry, no rate limiting on login.</li></ul><p>Security principles to live by:</p><ul><li><strong>Least privilege</strong>: services and users should have the minimum permissions needed.</li><li><strong>Defence in depth</strong>: multiple layers of security — don’t rely on any single control.</li><li><strong>Fail secure</strong>: when something goes wrong, default to denying access, not granting it.</li><li><strong>Security by design</strong>: consider security at architecture time, not as an afterthought.</li></ul><h3>16. Scaling and Performance</h3><p>Performance work follows a clear sequence: measure, identify the bottleneck, fix, measure again.</p><p>Key metrics: response time (p50, p95, p99), throughput (requests per second), error rate, CPU and memory utilisation.</p><p>Common optimisations:</p><ul><li><strong>Database indexes</strong> on frequently queried fields</li><li><strong>Caching</strong> at appropriate layers</li><li><strong>Connection pooling</strong> for databases and HTTP clients</li><li><strong>Pagination</strong> on large result sets — never return unbounded lists</li><li><strong>Batch processing</strong> for bulk operations</li><li><strong>Compression</strong> on large responses</li><li><strong>Async processing</strong> for non-critical work</li></ul><p><strong>Horizontal scaling</strong> (more servers) is generally preferable to <strong>vertical scaling</strong> (bigger servers) for resilience. Design for it from the start: stateless services, externalised session storage, shared caches.</p><p><strong>Concurrency vs Parallelism</strong>: Concurrency handles multiple tasks by interleaving them (good for I/O-bound work). Parallelism runs tasks simultaneously on multiple CPU cores (good for CPU-bound work). Most web backends are I/O-bound — async/await and event loops excel here.</p><h3>17. Testing</h3><p>Testing isn’t optional. It’s the only way to make changes without fear.</p><p><strong>Unit tests</strong> test individual functions in isolation. Fast to run, easy to debug.</p><p><strong>Integration tests</strong> test how multiple components work together — your service layer hitting a real database, your API handler going through middleware.</p><p><strong>End-to-end tests</strong> simulate real user behaviour through the full stack. Slow, brittle, but essential for critical paths.</p><p><strong>Load and stress tests</strong> verify your system holds up under traffic. Run before every major release.</p><p>Test-driven development (TDD) — writing tests before code — is worth learning. It forces you to design APIs before implementing them.</p><p>Automate everything in CI/CD. Tests that don’t run automatically get skipped.</p><h3>18. DevOps Concepts Every Backend Engineer Needs</h3><p>You don’t need to be a DevOps engineer, but you need to understand:</p><ul><li><strong>CI/CD pipelines</strong>: Automated testing and deployment on every code change</li><li><strong>Docker</strong>: Containerising your application for consistent, reproducible environments</li><li><strong>Kubernetes</strong>: Orchestrating containers at scale</li><li><strong>Infrastructure as Code</strong>: Defining infrastructure in version-controlled config files (Terraform, Pulumi)</li><li><strong>Blue-green deployment</strong>: Running two identical environments, switching traffic to the new one with no downtime</li><li><strong>Rolling deployment</strong>: Gradually replacing old instances with new ones</li><li><strong>Graceful shutdown</strong>: When a server is shutting down, stop accepting new requests, finish in-flight requests, close database connections, then terminate. Not doing this drops requests and corrupts data.</li></ul><h3>The Big Picture</h3><p>Backend engineering is not about knowing every API and framework. It’s about understanding systems — how data moves, how failures propagate, how to build something that holds up under real conditions.</p><p>The concepts in this guide don’t expire. HTTP, caching, databases, authentication, queuing — these are the foundations. Frameworks come and go. If you switch from Django to Go or from Express to Rust, the code looks different. The problems don’t.</p><p>That’s what first-principles thinking buys you: the ability to reason about any system, in any language, at any scale.</p><p>Thanks to <a href="https://www.linkedin.com/in/k-srinivas53168/">https://www.linkedin.com/in/k-srinivas53168/</a><br>And his playlist<br><a href="https://www.youtube.com/watch?v=a3C1DMswClQ&amp;list=PLui3EUkuMTPgZcV0QhQrOcwMPcBCcd_Q1&amp;index=5">https://www.youtube.com/watch?v=a3C1DMswClQ&amp;list=PLui3EUkuMTPgZcV0QhQrOcwMPcBCcd_Q1&amp;index=5</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ddDoAdbN5TgXHrFnaMpEQg.png" /></figure><p><em>Connect with me on:</em></p><p><em>LinkedIn Profile: </em><a href="https://www.linkedin.com/in/kavisha-mathur/"><em>https://www.linkedin.com/in/kavisha-mathur/</em></a><em><br>Github: </em><a href="https://github.com/Kavisha4"><em>https://github.com/Kavisha4</em></a><em><br>Portfolio: </em><a href="https://animated-gumption-c26500.netlify.app/"><em>https://animated-gumption-c26500.netlify.app/</em></a><em><br>Medium: </em><a href="https://medium.com/@KavishaMathur"><em>https://medium.com/@KavishaMathur</em></a><em><br>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2d90b487f200" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Backend Concepts Nobody Teaches You But Everyone Expects You to Know]]></title>
            <link>https://medium.com/codetodeploy/the-backend-concepts-nobody-teaches-you-but-everyone-expects-you-to-know-218d514d6f28?source=rss-6b02ab98ac00------2</link>
            <guid isPermaLink="false">https://medium.com/p/218d514d6f28</guid>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[backend]]></category>
            <category><![CDATA[api]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Kavisha Mathur]]></dc:creator>
            <pubDate>Sun, 15 Mar 2026 10:05:25 GMT</pubDate>
            <atom:updated>2026-03-15T17:45:38.596Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/818/1*3n5ZhbJgo3IL6wYnwaDvnw.png" /></figure><p>If you are aiming for senior engineering positions, technical interviews will probe you on system-level thinking — not just whether you can write code, but whether you understand what happens at scale. This article covers the five backend domains that come up most in design rounds, code reviews, and on-calls. Read it, internalise it, and use it as a reference when you build.</p><blockquote>🔥 <strong>Top Tech Jobs Are Hiring NOW — Don’t Miss Out.</strong></blockquote><blockquote>🚀 <strong>Multiple Roles Available<br> </strong><a href="https://app.usebraintrust.com/r/codeto1/"><strong>👉 Apply &amp; Secure Your Job</strong></a></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pkQFf0NUnzoFbVEVQCF5WQ.png" /></figure><h3>1. Caching Strategies</h3><p>Caching is one of the highest-leverage tools in a backend engineer’s kit. Done well, it cuts latency by orders of magnitude and takes pressure off your database. Done poorly, it serves stale data and hides bugs. At SDE 2, you are expected to know not just how to add a cache, but which strategy fits the situation.</p><h4>Cache-aside (Lazy Loading)</h4><p>The most common pattern. The application is responsible for all cache interaction.</p><p>– On read: check cache first. On miss, fetch from DB, write to cache, return data.</p><p>– On write: update the DB, then invalidate or update the cache entry.</p><p>– <strong>Pros:</strong> only caches what is actually requested; cache failures are survivable.</p><p>– <strong>Cons:</strong> first request always misses; risk of stale data if invalidation is missed.</p><p><em>Use cache-aside as your default pattern for read-heavy workloads. It is predictable and debuggable.</em></p><h4>Write-through</h4><p>The application writes to cache and DB simultaneously on every write.</p><p>– Cache is always in sync with the DB.</p><p>– <strong>Cons:</strong> slower writes; cache fills with data that may never be read again.</p><p>– Best suited for systems where read consistency is critical, such as financial dashboards.</p><h4>Write-behind (Write-back)</h4><p>Write to cache immediately; persist to DB asynchronously in the background.</p><p>– <strong>Pros:</strong> extremely fast writes; great for high-throughput ingestion pipelines.</p><p>– <strong>Cons:</strong> risk of data loss if the cache node dies before the async write completes.</p><p>– Only use this when you can tolerate some data loss, or you have durable queues in front of the DB write.</p><h4>Eviction Policies</h4><p>– <strong>LRU (Least Recently Used):</strong> evicts the entry that has not been accessed for the longest time. Default in Redis. Correct for most use cases.</p><p>– <strong>LFU (Least Frequently Used):</strong> evicts entries with the lowest access count. Better for workloads with stable hot keys.</p><p>– <strong>TTL (Time to Live):</strong> entries expire after a set duration regardless of access. Essential for data with known staleness windows, such as session tokens or rate limit counters.</p><h4>Where to Cache</h4><p>– <strong>Client-side:</strong> browser cache, HTTP cache headers (Cache-Control, ETag). Free latency savings for public assets.</p><p>– <strong>CDN layer:</strong> Cloudflare, CloudFront. Ideal for static files, images, and read-heavy API responses.</p><p>– <strong>Reverse proxy:</strong> Nginx or Varnish can cache responses before they hit your app server.</p><p>– <strong>Application layer:</strong> in-process (local HashMap) for tiny, ultra-hot data; distributed (Redis, Memcached) for shared state across instances.</p><p>– <strong>DB query cache:</strong> most databases have one. Do not rely on it; use Redis explicitly.</p><p><em>The classic mistake: caching at the wrong layer. A CDN cache on user-specific data leaks data across users. Always think about who shares the cache.</em></p><h3>2. API Design &amp; Rate Limiting</h3><p>APIs are contracts. As an SDE 2, you own the API surface for at least one service. You need to design APIs that are intuitive for consumers, stable over time, and resilient to abuse.</p><h4>REST vs GraphQL vs gRPC</h4><p>– <strong>REST:</strong> resource-oriented, uses HTTP verbs and status codes. Simple, widely understood, cacheable. The right default for most external APIs.</p><p>– <strong>GraphQL:</strong> clients request exactly the fields they need. Eliminates over-fetching and under-fetching. Adds complexity on the server (resolvers, N+1 query problems, no HTTP-level caching). Use for frontend-driven products with many consumer types.</p><p>– <strong>gRPC:</strong> uses Protocol Buffers over HTTP/2. Strongly typed, fast, great for streaming. Ideal for internal service-to-service communication. Poor browser support without a proxy layer.</p><h4>Versioning</h4><p>Never ship a public API without a version. Changing an unversioned API breaks consumers silently.</p><p>– URL versioning: /v1/users — explicit, easy to route, industry standard.</p><p>– Header versioning: Accept: application/vnd.api+json;version=2 — clean URLs but harder to test.</p><p>– Always maintain at least one previous major version while clients migrate. Deprecation windows should be communicated via response headers (Sunset: Sat, 31 Dec 2025 00:00:00 GMT).</p><h4>Pagination</h4><p>– <strong>Offset pagination:</strong> ?page=2&amp;limit=20. Simple. Breaks when items are inserted or deleted during pagination — the same record appears twice or is skipped.</p><p>– <strong>Cursor-based pagination:</strong> ?cursor=eyJpZCI6MTAwfQ==. Stable on live data. Use a cursor that encodes a stable sort key (e.g., id or created_at). This is the correct default for any paginated list.</p><p>– Always cap limit server-side. Never allow unlimited fetches.</p><p><em>Cursor-based pagination is required knowledge for any SDE 2 interview. Know how to generate and decode the cursor, and why offset breaks on live data.</em></p><h4>Rate Limiting Strategies</h4><p>– <strong>Fixed window:</strong> count requests per minute in a fixed time bucket. Simple but allows a burst at the window boundary (100 requests at 00:59 + 100 at 01:00 = 200 in 2 seconds).</p><p>– <strong>Sliding window:</strong> count requests in a rolling window. Smooth distribution. More expensive to implement with Redis (use a sorted set with timestamps as scores).</p><p>– <strong>Token bucket:</strong> a bucket fills at a constant rate; each request consumes a token. Allows short bursts up to bucket size. Most commonly used in practice.</p><p>– <strong>Leaky bucket:</strong> requests enter a queue and are processed at a fixed rate. Zero burstiness. Good for protecting downstream services from spikes.</p><p>– Rate limit by user ID, API key, and IP simultaneously. Return 429 Too Many Requests with Retry-After header.</p><h4>Response Design &amp; Idempotency</h4><p>– Use HTTP status codes correctly: 200 success, 201 created, 400 bad client input, 401 unauthenticated, 403 unauthorised, 404 not found, 409 conflict, 422 unprocessable entity, 429 rate limited, 500 server error.</p><p>– Consistent error envelope: { error: { code: ‘VALIDATION_FAILED’, message: ‘…’, details: […] } }. Never return different error shapes from different endpoints.</p><p>– <strong>Idempotency keys:</strong> for non-idempotent operations (payments, order creation), clients should send a unique Idempotency-Key header. Server stores the result; duplicate requests return the cached result instead of executing again. This is critical for safe retries.</p><h4>3. Load Balancing &amp; Horizontal Scaling</h4><p>You are expected to reason about how your service handles 10x or 100x traffic growth. Horizontal scaling is the standard answer — but it only works if your application is designed to support it.</p><h4>Load Balancing Algorithms</h4><p>– <strong>Round robin:</strong> requests go to each server in rotation. Works when all servers are equivalent.</p><p>– <strong>Least connections:</strong> routes to the server with the fewest active connections. Better when request processing time varies significantly.</p><p>– <strong>IP hash / sticky routing:</strong> same client IP always routes to the same server. Used when you have server-side session state that cannot be externalised. Breaks true statelessness.</p><p>– <strong>Weighted round robin:</strong> assign weights to servers based on capacity. Useful during rolling deploys or when mixing instance types.</p><h4>Horizontal vs Vertical Scaling</h4><p>– <strong>Vertical scaling (scale up):</strong> bigger CPU, more RAM. Fast to implement, no code changes. Hard ceiling, single point of failure, expensive at the top end.</p><p>– <strong>Horizontal scaling (scale out):</strong> more instances behind a load balancer. No ceiling, fault tolerant, cost-efficient with auto-scaling. Requires stateless services.</p><p><em>The reason scaling is hard is not the load balancer — it is state. Any in-memory state (sessions, caches, counters) must move to a shared store before you can scale out.</em></p><h4>Stateless Services</h4><p>A stateless service stores no user-specific state in memory between requests. Any instance can serve any request.</p><p>– Sessions go in Redis or a DB, not in-process memory.</p><p>– Uploaded files go in object storage (S3), not the local filesystem.</p><p>– Distributed caches, not local hashmaps, for shared counters or flags.</p><p>– Stateless services can be killed and replaced without affecting users.</p><h4>Health Checks &amp; Auto-scaling</h4><p>– <strong>Health checks:</strong> load balancers poll /health or /ping. Unhealthy instances are removed from rotation automatically. Your health endpoint must check real dependencies — DB connection, Redis connectivity — not just return 200 OK unconditionally.</p><p>– <strong>Liveness vs readiness:</strong> Kubernetes distinguishes these. Liveness = is the process alive? Readiness = is the service ready to accept traffic? Fail readiness during startup and graceful shutdown.</p><p>– <strong>Auto-scaling:</strong> scale out when CPU &gt; 70% for 3 minutes; scale in when CPU &lt; 30%. Always set a minimum of 2 instances for redundancy. Use target tracking policies over step scaling.</p><h3>4. Environment &amp; Secret Management</h3><p>Leaked credentials are the cause of a significant proportion of production security incidents. Secret management is not optional — it is table stakes for any production system. SDE 2 engineers are expected to implement it correctly without being asked.</p><h4>Never Hardcode Secrets</h4><p>This is not a guideline. It is a rule with no exceptions.</p><p>– No API keys, DB passwords, JWT secrets, or private keys in source code.</p><p>– No secrets in .env files committed to version control. .env goes in .gitignore.</p><p>– No secrets in Docker images, build logs, or CI/CD output.</p><p>– If a secret is ever committed to git, rotate it immediately — even if the repo is private. Git history is permanent and git repos get leaked.</p><h4>Environment Variables</h4><p>– Use .env files locally (via dotenv). Never commit them.</p><p>– In production, inject environment variables through your platform: ECS task definitions, Kubernetes secrets (base64-encoded, mounted as env vars), Heroku config vars.</p><p>– Separate config (non-sensitive: PORT, LOG_LEVEL, FEATURE_FLAG_X) from secrets (sensitive: DB_PASSWORD, JWT_SECRET). Config can go in version control. Secrets cannot.</p><h4>Secret Managers</h4><p>– <strong>AWS Secrets Manager:</strong> store, rotate, and access secrets via SDK or IAM role. Automatic rotation for RDS credentials. The right choice if you are on AWS.</p><p>– <strong>HashiCorp Vault:</strong> open-source, cloud-agnostic, powerful. Dynamic secrets (generates a new DB credential per request, revokes on expiry). Higher operational overhead.</p><p>– <strong>GCP Secret Manager / Azure Key Vault:</strong> first-party equivalents for those clouds.</p><p>– Application retrieves secrets at runtime via SDK, not at build time. This means secrets are never baked into artefacts.</p><p><em>The gold standard: your application has an IAM role that allows it to read specific secrets from Secrets Manager. No secret is ever stored in an environment variable in production.</em></p><h4>Secret Rotation</h4><p>– Secrets should expire and rotate. Systems must handle rotation without downtime.</p><p>– Pattern: support two versions of a secret simultaneously (old and new). Rotate the secret, wait for all instances to pick up the new version, then invalidate the old one.</p><p>– Automate rotation. Manual rotation is always delayed and often forgotten.</p><h3>5. Authentication &amp; Authorisation</h3><p>Auth is the most consequential part of a backend system to get wrong. Vulnerabilities here are high-severity by default. SDE 2 engineers are expected to own this end-to-end, including the subtle parts.</p><h4>Login Methods</h4><p>– <strong>Password + hash:</strong> never store passwords in plaintext or with MD5/SHA1. Use bcrypt or argon2. Both are deliberately slow to resist brute-force. Set work factor to make hashing take ~100–300ms on your hardware.</p><p>– <strong>Magic links / OTP:</strong> generate a short-lived signed token, email it to the user, they click it to authenticate. Passwordless and phishing-resistant. Use for low-friction consumer apps.</p><p>– <strong>OAuth / Social login:</strong> delegate authentication to Google, GitHub, Apple etc. You never see the user’s password. Use PKCE flow for web and native apps. Handle email collision (user signs in with two providers that share an email) explicitly.</p><p>– <strong>Passkeys (WebAuthn):</strong> the modern standard. Public-key cryptography; the private key never leaves the device. Phishing-resistant by design. Increasingly expected in new systems.</p><h4>Sessions vs JWTs</h4><p>– <strong>Sessions:</strong> server stores session state in Redis or DB. Session ID in an httpOnly cookie. Easy to revoke (delete from store). Requires a session store; adds a lookup per request.</p><p>– <strong>JWT (JSON Web Token):</strong> self-contained signed token. Server is stateless — no DB lookup per request. Signed with a secret (HMAC) or key pair (RS256). The fundamental problem: JWTs cannot be revoked before expiry without a denylist, which reintroduces state.</p><p>– <strong>Best practice:</strong> short-lived access tokens (15 minutes) + long-lived refresh tokens (7–30 days) stored in httpOnly cookies. On expiry, use the refresh token to issue a new access token silently. Rotate refresh tokens on each use.</p><p>– Never store JWTs in localStorage — they are accessible to XSS. Use httpOnly; Secure; SameSite=Strict cookies.</p><h4>OAuth 2.0 vs OpenID Connect</h4><p>– <strong>OAuth 2.0</strong> is an authorisation framework. It grants an application access to resources on behalf of a user (via scopes). It does not tell you who the user is.</p><p>– <strong>OpenID Connect (OIDC)</strong> is an identity layer on top of OAuth 2.0. It adds an ID token (a JWT) that contains claims about the user (sub, email, name). When you implement “Login with Google”, you are using OIDC.</p><p>– Know the OAuth flows: <strong>Authorization Code + PKCE</strong> for user-facing apps (the secure default); <strong>Client Credentials</strong> for machine-to-machine; <strong>Device Code</strong> for CLIs and TVs. The Implicit flow is deprecated.</p><h4>Roles &amp; Permissions (RBAC, ABAC, PBAC)</h4><p>– <strong>RBAC (Role-Based Access Control):</strong> assign roles to users (admin, editor, viewer). Each role has a set of permitted actions. Simple to implement and reason about. Correct for most applications.</p><p>– <strong>ABAC (Attribute-Based Access Control):</strong> access decisions based on attributes of the user, the resource, and the environment (e.g., user.department == resource.owner_department AND time.hour &lt; 18). Flexible but complex.</p><p>– <strong>PBAC (Policy-Based Access Control):</strong> centralised policy engine (e.g., Open Policy Agent). Policies are code, version-controlled, testable. Ideal for microservices where authorisation logic must be consistent across many services.</p><p><em>Start with RBAC. Add ABAC only when RBAC produces an explosion of roles. Add a policy engine only when you need consistent authorisation across many services.</em></p><h4>MFA &amp; Hardening</h4><p>– <strong>Enforce MFA</strong> on admin panels, billing operations, data export, and any action with irreversible consequences. Do not make it opt-in; make it the default.</p><p>– <strong>TOTP</strong> (Google Authenticator, Authy) is the minimum acceptable MFA. <strong>Hardware keys</strong> (YubiKey, WebAuthn) for privileged accounts.</p><p>– Hardening checklist: HTTPS only with HSTS. httpOnly; Secure; SameSite cookies. CSRF tokens on state-changing requests. Rate limiting on all auth endpoints. Account lockout after N failed attempts. Audit log every authentication event. Rotate secrets and revoke sessions on password change.</p><h4>Common Mistakes That Reach Production</h4><p>– <strong>Broken Object Level Authorisation (BOLA/IDOR):</strong> user A fetches /api/orders/9999 and gets user B’s order because the backend only checks authentication, not authorisation. This is OWASP API Security #1. Always verify ownership at the row level.</p><p>– <strong>No rate limiting on /login</strong>: allows unlimited brute-force attempts.</p><p>– <strong>Long-lived, non-rotating tokens:</strong> a leaked token means permanent access.</p><p>– <strong>Auth logic scattered across handlers:</strong> one handler forgets the check. Centralise authorisation in middleware.</p><p>– <strong>Returning 403 vs 404</strong>: when a resource exists but the user cannot access it, return 404 rather than 403 to avoid leaking information about resource existence.</p><p>You should not need a senior engineer to tell you to version your API, use cursor pagination, or store secrets in a vault. These should be defaults you bring to every project.</p><p>The concepts in this article are not advanced — they are standard. If any section felt unfamiliar, build something with it. Read the documentation for Redis, the OAuth 2.0 RFC, the OWASP API Security Top 10. The engineers who are genuinely strong at SDE 2 have not just read about these things — they have felt the pain of getting them wrong.</p><p><strong><em>Build deliberately.</em></strong></p><p>Happy Building! :)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yP3kFj0nSbSqV8BFZ6XkAg.png" /></figure><p><em>Connect with me on:</em></p><p><em>LinkedIn Profile: </em><a href="https://www.linkedin.com/in/kavisha-mathur/"><em>https://www.linkedin.com/in/kavisha-mathur/</em></a><em><br>Github: </em><a href="https://github.com/Kavisha4"><em>https://github.com/Kavisha4</em></a><em><br>Portfolio: </em><a href="https://animated-gumption-c26500.netlify.app/"><em>https://animated-gumption-c26500.netlify.app/</em></a><em><br>Medium: </em><a href="https://medium.com/@KavishaMathur"><em>https://medium.com/@KavishaMathur</em></a><em><br>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=218d514d6f28" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codetodeploy/the-backend-concepts-nobody-teaches-you-but-everyone-expects-you-to-know-218d514d6f28">The Backend Concepts Nobody Teaches You But Everyone Expects You to Know</a> was originally published in <a href="https://medium.com/codetodeploy">CodeToDeploy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Write a CFP That Gets You on Stage at Major Tech Conferences + Template that works]]></title>
            <link>https://medium.com/@KavishaMathur/how-to-write-a-cfp-that-gets-you-on-stage-at-major-tech-conferences-template-that-works-9563c5e780a6?source=rss-6b02ab98ac00------2</link>
            <guid isPermaLink="false">https://medium.com/p/9563c5e780a6</guid>
            <category><![CDATA[women-in-tech]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[tech-conference]]></category>
            <category><![CDATA[public-speaking]]></category>
            <dc:creator><![CDATA[Kavisha Mathur]]></dc:creator>
            <pubDate>Sat, 14 Mar 2026 14:08:20 GMT</pubDate>
            <atom:updated>2026-03-14T14:08:20.576Z</atom:updated>
            <content:encoded><![CDATA[<h3>How to Write a CFP That Gets You on Stage at Major Tech Conferences (With a Template That Actually Works)</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1phvnZxihhjuzByU0NpyeA.png" /></figure><p><em>Most proposals get rejected in the first 30 seconds. Here’s how to make sure yours doesn’t.</em></p><p>Every year, thousands of brilliant engineers, designers, and technologists submit proposals to speak at conferences like Google I/O, Grace Hopper, KubeCon, and Atlassian Summit. Most of them get rejected — not because the ideas are bad, but because the proposals are written wrong.</p><p>I know because I was one of them.</p><p>My first three CFPs were polished, detailed, and completely focused on the wrong thing: me. My experience. My background. My credentials. I thought I was making a case for why I deserved to be on stage. What I didn’t understand is that conference committees aren’t looking for deserving speakers. They’re looking for the right talk for their audience.</p><p>The moment I understood that distinction, everything changed.</p><p>This is everything I’ve learned about writing proposals that get accepted — distilled into a framework you can use starting today.</p><h3>First, Understand What a CFP Committee Actually Wants</h3><p>Before you write a single word, you need to get inside the head of the person reviewing your proposal.</p><p>They are not your hiring manager. They are not evaluating your résumé. They are a volunteer (usually) who has read sixty proposals today and has a headache. They’re asking one question, over and over, for every submission they read:</p><p><strong>“Will this talk make our attendees’ experience better?”</strong></p><p>That’s it. Everything else — your title, your bio, your abstract — is only valuable insofar as it answers that question convincingly and quickly.</p><p>Most proposals fail because they answer a different question: <em>“Why is this speaker credible?”</em> Credibility matters, but it’s secondary. Value to the audience comes first, always.</p><h3>The Anatomy of a Winning CFP</h3><p>A strong proposal has five components. Miss any one of them and you’re leaving the decision to chance.</p><h3>1. The Title — Your First (and Sometimes Only) Impression</h3><p>Conference committees often sort proposals by title before reading the abstract. Your title needs to do two things simultaneously: promise a clear outcome and create just enough curiosity to make them want to read further.</p><p><strong>Weak titles</strong> describe what you’ll cover:</p><ul><li><em>“Introduction to Kubernetes”</em></li><li><em>“My Journey with GraphQL”</em></li><li><em>“Lessons from Building at Scale”</em></li></ul><p><strong>Strong titles</strong> make a specific promise or create a tension:</p><ul><li><em>“Why Your Kubernetes Setup Will Fail at 10x Traffic (And How to Fix It Before It Does)”</em></li><li><em>“GraphQL Broke Our API — Here’s What We Built Instead”</em></li><li><em>“We Scaled to 10 Million Users Without a Dedicated Platform Team. Here’s the Playbook.”</em></li></ul><p>Notice the pattern. Strong titles are specific, they imply stakes, and they suggest the audience will gain something concrete. A/B test your title with colleagues before submitting. If they say “oh that’s interesting, what do you mean by that?” — you have a winner.</p><h3>2. The Abstract — Sell the Outcome, Not the Journey</h3><p>Your abstract is where most proposals die. The average abstract reads like this:</p><p><em>“In this talk, I will share my experience with distributed systems. We will explore various approaches to handling failures and discuss the lessons our team learned over three years of building our infrastructure.”</em></p><p>This abstract says almost nothing. It’s vague. It’s passive. And it gives the reviewer no reason to choose it over the forty other distributed systems talks they’re reading.</p><p>A strong abstract follows this structure:</p><p><strong>Open with the problem the audience has</strong> (not the problem you solved) <strong>Establish the stakes</strong> (what happens if they don’t solve it) <strong>Preview your solution</strong> (not the full answer — just enough) <strong>State the takeaway explicitly</strong> (what they will leave knowing or able to do)</p><p>Here’s the same talk, rewritten:</p><p><em>“Distributed systems fail in predictable ways — but most engineering teams only discover those patterns after something breaks in production at 2am. In this talk, I’ll share the five failure modes we hit while scaling our platform to 50 million requests per day, and the specific architectural decisions that would have prevented each one. You’ll leave with a failure-mode checklist you can run against your own system this week.”</em></p><p>Same speaker. Same experience. Completely different result.</p><h3>3. The Takeaways — Make the Value Scannable</h3><p>Most CFP forms ask for three to five key takeaways. Treat these seriously — reviewers often skip to this section first.</p><p>Bad takeaways are vague:</p><ul><li><em>“A better understanding of distributed systems”</em></li><li><em>“Inspiration to improve their codebase”</em></li></ul><p>Good takeaways are specific and actionable:</p><ul><li><em>“How to identify the three most common distributed system failure modes before they hit production”</em></li><li><em>“A framework for deciding between synchronous and asynchronous communication at the service boundary”</em></li><li><em>“A concrete checklist to run a failure-mode audit on any existing architecture”</em></li></ul><p>The test: could your attendee tell a colleague exactly what they learned from your talk? If your takeaway is specific enough to pass that test, it’s strong enough to include.</p><h3>4. The Bio — Brief, Relevant, and Third-Person</h3><p>Your bio should be three to four sentences. No more. It needs to establish exactly one thing: that you are credible to speak on <em>this specific topic</em>. Not your entire career. Not every technology you’ve ever touched.</p><p>If your talk is about scaling infrastructure, your bio should mention scaling infrastructure. If your talk is about accessibility in design systems, your bio should mention accessibility or design systems. The relevance signal matters more than the prestige signal.</p><p>Also: write in third person. It feels unnatural but it reads better in the conference program.</p><p><strong>Example:</strong> <em>“Priya has spent six years building developer tooling at companies ranging from early-stage startups to large-scale platforms. She’s a Google Developer Expert in Web Technologies and has spoken at Google DevFest, Atlassian Summit, and Grace Hopper. She writes about engineering culture and developer experience on her blog.”</em></p><p>Clean. Relevant. Done.</p><h3>5. The Supporting Evidence — Proof You Can Deliver</h3><p>Many conferences ask for a link to a previous talk, a blog post, or any public-facing content. If you have it, include it. If you don’t, create it before you submit.</p><p>A five-minute lightning talk recording from a local meetup is worth more than ten years of experience with no evidence. It tells the committee: this person can communicate, they’re comfortable in front of an audience, and they won’t freeze on our stage.</p><p>If you have nothing yet: record yourself giving a ten-minute version of your talk on your phone, upload it to YouTube as unlisted, and link it. That is enough to clear the credibility bar for most mid-tier conferences.</p><h3>The CFP Template (Copy and Adapt)</h3><p>Here is the exact structure I use. Fill in the brackets for your own talk.</p><p><strong>Title:</strong> [Specific outcome or tension] — [The Stakes or the Surprise]</p><p><em>Example: “Why Most API Rate Limiters Break Under Load — And a Pattern That Doesn’t”</em></p><p><strong>Abstract:</strong></p><p>[One sentence that names the exact problem your audience is dealing with.]</p><p>[One to two sentences on why this problem is harder than it looks, or why conventional wisdom gets it wrong.]</p><p>[One to two sentences previewing your approach — not the full answer, just enough to create curiosity.]</p><p>[One clear sentence stating what the audience will walk away with.]</p><p><em>Example:</em></p><p>Rate limiting sounds simple until you’re doing it at scale. Most teams reach for a token bucket or a sliding window algorithm, deploy it, and discover three months later that it works beautifully in testing and catastrophically in production under distributed load. In this talk, I’ll walk through the specific failure scenarios we hit at 100K requests per second and the cell-based architecture we built to solve them — without adding a dedicated infrastructure layer. You’ll leave with a decision framework for choosing the right rate-limiting pattern for your scale, and a set of load-testing benchmarks to validate it before you ship.</p><p><strong>Key Takeaways:</strong></p><ol><li>[Specific thing they will know]</li><li>[Specific thing they will be able to do]</li><li>[Specific thing they will be able to avoid or decide differently]</li></ol><p><strong>Speaker Bio:</strong></p><p>[Name] is a [role] with [X years] of experience in [specific domain relevant to the talk]. [One sentence about a specific relevant achievement or project.] [One sentence about past speaking or writing, if applicable.]</p><p><strong>Session Format:</strong> [Talk / Workshop / Lightning Talk / Panel] <strong>Duration:</strong> [20 / 30 / 45 / 60 minutes] <strong>Audience Level:</strong> [Beginner / Intermediate / Advanced] <strong>Supporting Material:</strong> [Link to previous talk, article, or unlisted YouTube recording]</p><h3>The Submission Strategy Nobody Talks About</h3><p>Writing a great CFP is only half the equation. Here’s how to maximize your chances across the board.</p><p><strong>Submit to more conferences than feels comfortable.</strong> A 20% acceptance rate is considered good in tech speaking. If you’ve submitted to three conferences and gotten rejected, you haven’t been rejected — you’ve taken three shots. Submit to fifteen.</p><p><strong>Tailor, don’t copy-paste.</strong> Read each conference’s theme and past talks. Use their language in your abstract. If they care about sustainability, frame your talk through that lens. If they care about emerging markets, find the angle. One talk can be submitted in many forms.</p><p><strong>Follow up after rejection.</strong> Some conferences share reviewer feedback. Ask for it. The ones who provide it are giving you a free coaching session. Use it.</p><p><strong>Build your speaking history deliberately.</strong> GDG meetups, internal company talks, online webinars, podcast appearances — all of it counts as evidence that you can deliver. The conference circuit rewards momentum. Once you have two or three credits, the next door opens faster.</p><p><strong>Start before you’re ready.</strong> The speakers who get on the biggest stages are almost never the ones who waited until they felt qualified. They’re the ones who showed up early, gave the imperfect talk, learned from it, and did it again.</p><h3>One Last Thing</h3><p>The talk you want to give — the one that’s been sitting in your head as “maybe someday” — someone in your audience needs to hear it. Not a version of it from a more senior person, not a polished TED-style production. Your version. With your specific context and your specific hard-won lessons.</p><p>The CFP is just the door. Write something honest, specific, and audience-first.</p><p>Then knock.</p><p>Happy Building! :)</p><p><em>If you found this useful, I share practical advice on tech speaking, developer community, and engineering career growth. Follow along, and feel free to share this with someone who’s been thinking about submitting their first CFP.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SUcwEVpSBMxnaUozmmz8yA.png" /></figure><p><em>Connect with me on:</em></p><p><em>LinkedIn Profile: </em><a href="https://www.linkedin.com/in/kavisha-mathur/"><em>https://www.linkedin.com/in/kavisha-mathur/</em></a><em><br>Github: </em><a href="https://github.com/Kavisha4"><em>https://github.com/Kavisha4</em></a><em><br>Portfolio: </em><a href="https://animated-gumption-c26500.netlify.app/"><em>https://animated-gumption-c26500.netlify.app/</em></a><em><br>Medium: </em><a href="https://medium.com/@KavishaMathur"><em>https://medium.com/@KavishaMathur</em></a><em><br>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9563c5e780a6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Ultimate Hackathon Resource Vault: Everything You Need to Win Consistently]]></title>
            <link>https://medium.com/@KavishaMathur/the-ultimate-hackathon-resource-vault-everything-you-need-to-win-consistently-8ad844088cd1?source=rss-6b02ab98ac00------2</link>
            <guid isPermaLink="false">https://medium.com/p/8ad844088cd1</guid>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[hackathons]]></category>
            <category><![CDATA[resources]]></category>
            <dc:creator><![CDATA[Kavisha Mathur]]></dc:creator>
            <pubDate>Sat, 28 Feb 2026 10:57:03 GMT</pubDate>
            <atom:updated>2026-02-28T10:57:03.086Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4Hal1KhF70p62MB5BqIkog.png" /></figure><p>If you haven’t read these yet, start here:</p><p>Finding the right events:<br><a href="https://medium.com/@KavishaMathur/the-ultimate-guide-to-finding-tech-events-that-actually-matter-5c501503567c">https://medium.com/@KavishaMathur/the-ultimate-guide-to-finding-tech-events-that-actually-matter-5c501503567c</a></p><p>Winning execution strategy:<br><a href="https://medium.com/codetodeploy/the-hackathon-insider-playbook-from-a-8x-winner-de83d138bab5">https://medium.com/codetodeploy/the-hackathon-insider-playbook-from-a-8x-winner-de83d138bab5</a></p><p>This article is different.</p><p>This is your curated <strong>resource vault</strong> — everything you need to master hackathons.</p><h3>Where to Find Hackathons</h3><h4>Global Platforms</h4><p>Devfolio — <a href="https://devfolio.co/">https://devfolio.co</a><br>Devpost — <a href="https://devpost.com/">https://devpost.com</a><br>MLH (Major League Hacking) — <a href="https://mlh.io/">https://mlh.io</a><br>Unstop — <a href="https://unstop.com/">https://unstop.com</a><br>HackerEarth — <a href="https://hackerearth.com/">https://hackerearth.com</a><br>Hack2Skill — <a href="https://hack2skill.com/">https://hack2skill.com</a><br>Hackathon.com — <a href="https://hackathon.com/">https://hackathon.com</a></p><h4>Community &amp; Ecosystem Events</h4><p>Google Developer Groups — <a href="https://gdg.community.dev/">https://gdg.community.dev</a><br>Microsoft Reactor — <a href="https://developer.microsoft.com/reactor">https://developer.microsoft.com/reactor</a><br>AWS Events — <a href="https://aws.amazon.com/events">https://aws.amazon.com/events</a><br>GitHub Events — <a href="https://github.com/events">https://github.com/events</a><br>T-Hub — <a href="https://t-hub.co/">https://t-hub.co</a><br>NASSCOM — <a href="https://nasscom.in/">https://nasscom.in</a></p><h3>Elevator Pitch &amp; Presentation Resources</h3><h4>Study Real Pitch Decks</h4><p>Y Combinator Library — <a href="https://www.ycombinator.com/library">https://www.ycombinator.com/library</a><br>Sequoia Pitch Guide — <a href="https://www.sequoiacap.com/article/writing-a-business-plan/">https://www.sequoiacap.com/article/writing-a-business-plan/</a><br>Airbnb Pitch Deck — <a href="https://www.slideshare.net/PitchDeckCoach/airbnb-first-pitch-deck-editable">https://www.slideshare.net/PitchDeckCoach/airbnb-first-pitch-deck-editable</a></p><h4>Practice &amp; Delivery</h4><p>Loom (record yourself) — <a href="https://www.loom.com/">https://www.loom.com</a><br>TED Talks (delivery style) — <a href="https://www.ted.com/talks">https://www.ted.com/talks</a><br>Slidebean Tutorials — <a href="https://slidebean.com/blog">https://slidebean.com/blog</a><br>Toastmasters — <a href="https://www.toastmasters.org/">https://www.toastmasters.org</a></p><h4>Free Slide Templates</h4><p>Canva Pitch Decks — <a href="https://www.canva.com/templates/startup-pitch-deck/">https://www.canva.com/templates/startup-pitch-deck/</a><br>Slidesgo — <a href="https://slidesgo.com/">https://slidesgo.com</a><br>Google Slides — <a href="https://docs.google.com/presentation">https://docs.google.com/presentation</a></p><h4>Team Building &amp; Collaboration Tools</h4><p>Notion — <a href="https://notion.so/">https://notion.so</a><br>Trello — <a href="https://trello.com/">https://trello.com</a><br>Miro — <a href="https://miro.com/">https://miro.com</a><br>FigJam — <a href="https://figma.com/figjam">https://figma.com/figjam</a><br>Slack — <a href="https://slack.com/">https://slack.com</a><br>Discord — <a href="https://discord.com/">https://discord.com</a><br>GitHub — <a href="https://github.com/">https://github.com</a></p><h3>MVP Building Stack</h3><h4>Frontend &amp; UI</h4><p>Figma Community — <a href="https://figma.com/community">https://figma.com/community</a><br>Tailwind UI — <a href="https://tailwindui.com/">https://tailwindui.com</a><br>shadcn/ui — <a href="https://ui.shadcn.com/">https://ui.shadcn.com</a><br>Material UI — <a href="https://mui.com/">https://mui.com</a></p><h4>Backend &amp; Deployment</h4><p>Firebase — <a href="https://firebase.google.com/">https://firebase.google.com</a><br>Supabase — <a href="https://supabase.com/">https://supabase.com</a><br>Render — <a href="https://render.com/">https://render.com</a><br>Railway — <a href="https://railway.app/">https://railway.app</a></p><h4>AI &amp; ML</h4><p>OpenAI — <a href="https://platform.openai.com/">https://platform.openai.com</a><br>Google AI Studio — <a href="https://aistudio.google.com/">https://aistudio.google.com</a><br>Hugging Face — <a href="https://huggingface.co/">https://huggingface.co</a><br>LangChain — <a href="https://www.langchain.com/">https://www.langchain.com</a></p><h3>Skill Upgrade Platforms</h3><p>FreeCodeCamp — <a href="https://freecodecamp.org/">https://freecodecamp.org</a><br>The Odin Project — <a href="https://theodinproject.com/">https://theodinproject.com</a><br>System Design Primer — <a href="https://github.com/donnemartin/system-design-primer">https://github.com/donnemartin/system-design-primer</a><br>Google Cloud Skills Boost — <a href="https://cloudskillsboost.google/">https://cloudskillsboost.google</a><br>AWS Skill Builder — <a href="https://explore.skillbuilder.aws/">https://explore.skillbuilder.aws</a><br>Microsoft Learn — <a href="https://learn.microsoft.com/">https://learn.microsoft.com</a><br>Fast.ai — <a href="https://fast.ai/">https://fast.ai</a><br>Google ML Crash Course — <a href="https://developers.google.com/machine-learning/crash-course">https://developers.google.com/machine-learning/crash-course</a></p><p>You don’t need more motivation.</p><p>You need:<br> • A resource stack<br> • A reusable system<br> • A pre-built template ecosystem</p><p>Most teams Google randomly during a hackathon.</p><p>Winners already have these bookmarked.</p><p>Build your stack once.<br> Reuse forever.<br> Refine after every event.</p><p>That’s how hackathons compound into career leverage.</p><p>Happy Building! :)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yx9Y_83-UvnmhkBq3O3i3A.png" /></figure><p><em>Connect with me on:</em></p><p><em>LinkedIn Profile: </em><a href="https://www.linkedin.com/in/kavisha-mathur/"><em>https://www.linkedin.com/in/kavisha-mathur/</em></a><em><br>Github: </em><a href="https://github.com/Kavisha4"><em>https://github.com/Kavisha4</em></a><em><br>Portfolio: </em><a href="https://animated-gumption-c26500.netlify.app/"><em>https://animated-gumption-c26500.netlify.app/</em></a><em><br>Medium: </em><a href="https://medium.com/@KavishaMathur"><em>https://medium.com/@KavishaMathur</em></a><em><br>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8ad844088cd1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Ultimate Guide to Finding Tech Events That Actually Matter]]></title>
            <link>https://medium.com/@KavishaMathur/the-ultimate-guide-to-finding-tech-events-that-actually-matter-5c501503567c?source=rss-6b02ab98ac00------2</link>
            <guid isPermaLink="false">https://medium.com/p/5c501503567c</guid>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[women-in-tech-events]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[hackathons]]></category>
            <dc:creator><![CDATA[Kavisha Mathur]]></dc:creator>
            <pubDate>Wed, 25 Feb 2026 17:33:14 GMT</pubDate>
            <atom:updated>2026-02-25T17:44:05.134Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gidZNpmSLYEZDx_09aJ8iw.png" /></figure><p><a href="https://www.instagram.com/p/DVME5aNj8MV/?igsh=MTFjdzg2M29qdHI1MA==">https://www.instagram.com/p/DVME5aNj8MV/?igsh=MTFjdzg2M29qdHI1MA==</a></p><p>First — What Do You Actually Get From Tech Events?</p><p>Before we talk about how to find them, let me show you what “showing up” has quietly given me.</p><h3>Everyday Swag (That Adds Up Fast)</h3><p>From multiple tech events and programs, I’ve received:</p><ul><li>Notebooks</li><li>Signed books from authors</li><li>Stickers, pens, pop sockets</li><li>Multiple coffee flasks and bottles (including one from Amazon ML Summer School)</li></ul><p>If you attend enough events, you genuinely stop buying stationery.</p><p>Estimated value: ~₹6,000+</p><h3>Lifestyle Upgrades (The Unexpected Part)</h3><p>This is where it gets interesting.</p><ul><li>Wells Fargo fanny bag</li><li>A leather travel bag</li><li>Bliss Club vouchers + cap</li><li>Two full-sized perfumes</li><li>Lip gloss</li><li>Concealer</li><li>Sunscreens</li><li>Sirona products</li></ul><p>Tech events are often backed by lifestyle sponsors.</p><p>You don’t realize it at first, but your wardrobe and travel gear quietly upgrade.</p><p>Estimated value: ₹20,000+</p><h3>Productivity &amp; Tech Accessories</h3><p>These are things I would have otherwise bought myself:</p><ul><li>HP wireless mouse</li><li>Multi-port hub</li><li>Modular cable kit (USB-C, Apple, B-type connectors in one compact case)</li><li>Magnetic wallet card holder</li><li>Humidifier</li></ul><p>I haven’t purchased basic tech accessories in years.</p><p>Estimated value: ₹10,000–₹12,000</p><h3>Comfort &amp; Work Setup</h3><p>If you code long hours, these are elite:</p><ul><li>Frido neck pillow</li><li>Frido seat cushion</li></ul><p>Estimated value: ~₹5,000</p><h3>Smart Tech &amp; Premium Devices</h3><p>Then came the serious upgrades:</p><ul><li>Google Home / Assistant</li><li>UltraHuman Ring (₹30,000)</li></ul><p>The UltraHuman ring tracks sleep, stress, activity, recovery, and menstrual cycle insights.</p><p>I didn’t buy it.</p><p>I earned it by participating.</p><h3>Total Estimated Value?</h3><p>Conservatively: ₹80,000+</p><p>And that’s just tangible items.</p><p>Now let’s talk about the real value.</p><p>When I was in college, I thought opportunities were “luck.”</p><p>There’s a system to finding them — and once you understand it, opportunities stop feeling rare.</p><p>This is the exact framework I use to discover high-quality tech events consistently.</p><h3>Step 1: Stop Searching “Hackathons Near Me”</h3><p>Most people do this:</p><p>Google → “Hackathons 2026 India”</p><p>That’s noise.</p><p>Instead, search by <strong>organizer</strong>, not event.</p><p>Big tech companies and ecosystems run recurring programs. If you follow them once, you never miss future editions.</p><p>For example:</p><ul><li>Google (Build programs, Cloud events, DevFests, Agentic AI challenges)</li><li>Microsoft (Student cohorts, Chhalaang-style hackathons, Reactor sessions)</li><li>Amazon (ML Summer School, AWS community days)</li><li>Major League Hacking (Global hackathons &amp; fellowships)</li><li>Linux Foundation (Scholarships, LFX mentorships)</li></ul><p>Follow their:</p><ul><li>LinkedIn pages</li><li>Twitter/X accounts</li><li>Developer newsletters</li><li>Community chapters</li></ul><p>Events repeat. Ecosystems compound.</p><h3>Step 2: Track Developer Communities (Not Just Companies)</h3><p>The highest ROI events often come from communities, not corporations.</p><p>Look for:</p><ul><li>Google Developer Groups (GDG)</li><li>AWS User Groups</li><li>Kubernetes / Cloud Native communities</li><li>Women in Tech collectives</li><li>University tech clubs (even after you graduate)</li></ul><p>Communities give you:</p><ul><li>Early access</li><li>Insider recommendations</li><li>Smaller, high-quality events</li><li>Speaking opportunities</li></ul><p>Most people only discover these after 2–3 years in industry.</p><p>You don’t have to.</p><h3>Step 3: Use Platforms That Aggregate Events</h3><p>Here are reliable discovery platforms:</p><h3>Dev &amp; Hackathon Platforms</h3><ul><li>Devpost</li><li>Unstop</li><li>Major League Hacking</li><li>HackerEarth</li></ul><p>These host:</p><ul><li>Online hackathons</li><li>Corporate challenges</li><li>Startup competitions</li><li>Fellowship applications</li></ul><h3>Newsletters Worth Subscribing To</h3><ul><li>Company-specific developer newsletters (Google Cloud, AWS, Microsoft)</li><li>Product Hunt newsletters</li><li>Indie Hackers</li><li>Tech Twitter curated lists</li></ul><p>Your inbox should bring you opportunities.</p><p>Not distractions.</p><h3>Step 4: Build a Personal Opportunity System</h3><p>This changed everything for me.</p><p>Instead of reacting to events, I built a tracker.</p><p>Simple Notion sheet:</p><p>Columns:</p><ul><li>Event Name</li><li>Organizer</li><li>Type (Hackathon / Scholarship / Speaker / Fellowship)</li><li>Deadline</li><li>Eligibility</li><li>Prize / Perks</li><li>Link</li><li>Status</li></ul><p>I check it weekly.</p><p>Opportunities feel abundant when they’re visible.</p><h3>Step 5: Don’t Ignore Offline Events</h3><p>Some of my best upgrades came from offline conferences:</p><ul><li>Swag</li><li>Gadgets</li><li>Smart devices</li></ul><p>But more importantly:</p><ul><li>Conversations</li><li>Mentors</li><li>Future referrals</li></ul><p>Search on:</p><ul><li>Meetup</li><li>Eventbrite</li><li>LinkedIn Events</li><li>Google “City + Developer Meetup”</li></ul><p>If you’re in a metro city, there’s something happening almost every month.</p><h3>Step 6: Understand Which Events Are Worth It</h3><p>Not all events are equal.</p><p>Here’s my filter:</p><h3>High ROI Events:</h3><ul><li>Backed by major tech companies</li><li>Provide mentorship</li><li>Offer structured learning</li><li>Have clear deliverables</li><li>Offer networking access</li><li>Recognized brand value</li></ul><h3>Low ROI Events:</h3><ul><li>Vague themes</li><li>No clarity on judging</li><li>No known organizers</li><li>Overpromise, underdeliver</li></ul><p>Time is currency.</p><p>Choose wisely.</p><h3>Step 7: Turn Events Into Compounding Assets</h3><p>Attending is step one.</p><p>The real leverage comes from:</p><ul><li>Writing about your experience</li><li>Posting insights on LinkedIn</li><li>Sharing frameworks on Instagram</li><li>Publishing long-form on Medium</li><li>Staying connected with organizers</li></ul><p>One event should give you:</p><ul><li>A project</li><li>A story</li><li>A network</li><li>A content piece</li><li>A future opportunity</li></ul><p>That’s how it compounds.</p><h3>Final Thought</h3><p>When I started, I thought opportunities were rare.</p><p>They’re not.</p><p>They’re just unevenly distributed among people who look for them strategically.</p><p>You don’t need to attend everything.</p><p>You need to:</p><ul><li>Follow the right ecosystems</li><li>Track deadlines</li><li>Show up consistently</li><li>And extract value beyond the event itself</li></ul><p>That’s how:</p><ul><li>Skills improve</li><li>Network expands</li><li>And yes — sometimes your lifestyle upgrades too</li></ul><p>But more than the goodies?</p><p>You upgrade yourself.</p><p>Happy Building! :)</p><p><em>Connect with me on:</em></p><p><em>LinkedIn Profile: </em><a href="https://www.linkedin.com/in/kavisha-mathur/"><em>https://www.linkedin.com/in/kavisha-mathur/</em></a><em><br>Github: </em><a href="https://github.com/Kavisha4"><em>https://github.com/Kavisha4</em></a><em><br>Portfolio: </em><a href="https://animated-gumption-c26500.netlify.app/"><em>https://animated-gumption-c26500.netlify.app/</em></a><em><br>Medium: </em><a href="https://medium.com/@KavishaMathur"><em>https://medium.com/@KavishaMathur</em></a><em><br>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QD0Ovh72Qp7t7VEbMN5sOQ.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5c501503567c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[From 100 Views to 500K: How I Engineered a Viral Trial Reel (Without “Viral” Editing)]]></title>
            <link>https://medium.com/@KavishaMathur/from-100-views-to-500k-how-i-engineered-a-viral-trial-reel-without-viral-editing-74facf3dd854?source=rss-6b02ab98ac00------2</link>
            <guid isPermaLink="false">https://medium.com/p/74facf3dd854</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[instagram]]></category>
            <category><![CDATA[women-in-tech]]></category>
            <category><![CDATA[content-creation]]></category>
            <dc:creator><![CDATA[Kavisha Mathur]]></dc:creator>
            <pubDate>Sat, 14 Feb 2026 17:09:57 GMT</pubDate>
            <atom:updated>2026-02-14T17:09:57.296Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PjJETUd3wyHPp0Ke0xTfYA.png" /></figure><p>I run a instagram page ChaoTech ( spin off on the word Chaotic- <em>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a><em>) </em>where I cover tech content, like going to hackathons, tech events, networking events and recently I posted 4 trial reels, where 2 reels cross 100k views, and the others cross 75k views ( and its still growing)</p><p>I love editing. Clean transitions. Tight cuts. Aesthetic frames.<br>So when my most viral reel was literally two basic pictures and text… it hurt a little.</p><p>But it worked.</p><p>In one week:</p><ul><li>My professional dashboard crossed half a million views</li><li>My Instagram followers 4x’d</li><li>I redirected traffic to Medium and boosted distribution there</li></ul><p>This wasn’t luck. It was understanding how trial reels are evaluated and distributed.</p><p>Here’s the real breakdown.</p><h4>1. First Principle: Trial Reels Are Not About Your Followers</h4><p>Trial reels are shown primarily to <strong>non-followers</strong>.</p><p>That changes everything.</p><p>The algorithm doesn’t care about:</p><ul><li>Your brand aesthetic</li><li>Your editing complexity</li><li>Your attachment to your content style</li></ul><p>It cares about:</p><ul><li>Initial engagement velocity</li><li>Watch time</li><li>Saves</li><li>Shares</li><li>Comments</li></ul><p>Especially from users who share similar interest clusters.</p><p>If people who engage with hackathon, tech, Google, Microsoft, startup, or AI content engage with your reel — the system pushes it into those interest buckets.</p><p>That’s the lever.</p><h4>2. The Content Structure That Worked</h4><p>Instead of focusing on visuals, I focused on value density.</p><p>My positioning:<br>“I’ve won 8 hackathons — including Google Agentic AI, Google Build &amp; Blog, and Microsoft Chhalaang.”</p><p>I didn’t flex.<br>I translated credibility into actionable insight.</p><p>The reel format:</p><ul><li>2 simple images</li><li>Bold hook text</li><li>Direct value</li><li>Strong CTA</li></ul><p>No cinematic edit.<br>No overproduction.</p><p>Just clarity.</p><h4>3. The CTA That Made the Difference</h4><p>This was the real multiplier.</p><p>Instead of:<br>“Follow for more”</p><p>I used:</p><ul><li>“Save this before your next hackathon.”</li><li>“Comment HACK and I’ll DM you my structure.”</li><li>“If you’re building for Google or Microsoft — read this.”</li></ul><p>Why this works:</p><p>Saves signal long-term value.<br>Comments signal conversation.<br>Shares signal relevance.</p><p>Engagement depth &gt; surface-level likes.</p><p>When people saved it, the reel kept resurfacing.</p><h4>4. The Description Was Not an Afterthought</h4><p>Most creators treat captions like filler.</p><p>I used mine as a secondary content channel.</p><p>My description:</p><ul><li>Expanded the reel</li><li>Added structured bullet points</li><li>Included keywords like hackathon strategy, Google AI, Microsoft competition, agentic systems</li><li>Redirected to Medium with contextual framing</li></ul><p>Not “link in bio.”</p><p>But:<br>“If you want the full framework, I’ve broken it down step-by-step on Medium.”</p><p>That made the transition natural.</p><h4>5. The Algorithm Insight Most People Miss</h4><p>The reel doesn’t go viral because your followers love it.</p><p>It goes viral because:<br>People who don’t follow you interact with it.</p><p>And when similar-interest clusters engage early, the system identifies a pattern:</p><p>“Users who engage with hackathon content also engage with this reel.”</p><p>So it keeps testing.</p><p>Your job is to:<br>Make it easy for the right audience to self-identify.</p><p>That’s why specificity beats aesthetics.</p><h4>6. Imposter Syndrome vs. Market Feedback</h4><p>I’ll be honest.</p><p>It didn’t feel like “me.”</p><p>I’m big on editing.<br>I like high-quality transitions.<br>Structured storytelling.</p><p>This reel felt low-effort.</p><p>But here’s the uncomfortable truth:</p><p>You are not making content for yourself.</p><p>You’re making it for:</p><ul><li>The 3rd-year BTech student</li><li>The builder preparing for Google</li><li>The developer entering their first hackathon</li></ul><p>Customer is king.</p><p>Once you build audience gravity, you can layer your style back in.</p><p>But first, you earn distribution.</p><h4>7. The Growth Flywheel I Built</h4><p>Here’s how everything connected:</p><p>Reel → Saves &amp; Shares → Non-follower Reach<br>Non-follower Reach → Follower Growth (4x in a week)<br>Follower Growth → Higher baseline engagement<br>Caption → Medium redirection<br>Medium reads → Authority positioning<br>Authority positioning → Stronger future reels</p><p>Distribution compounds.</p><p>Most people stop at views.</p><p>Views are vanity.<br>Redirection is strategy.</p><h3>8. Tactical Playbook You Can Use</h3><p>If you want to replicate this, here’s the structure:</p><ol><li>Lead with authority proof (specific, not vague).</li><li>Deliver 3–5 actionable points.</li><li>Use a save-driven CTA.</li><li>Make the caption richer than the reel.</li><li>Target a narrow interest cluster.</li><li>Don’t over-edit trial reels.</li><li>Redirect intentionally (not aggressively).</li></ol><p>And most importantly:</p><p>Make content that solves a real micro-problem.</p><h4>9. Why This Worked for My Niche</h4><p>I wasn’t selling motivation.</p><p>I was giving:<br>“How to win hackathons.”</p><p>Concrete.<br>Specific.<br>Repeatable.</p><p>And I backed it with:</p><ul><li>Google Agentic AI participation</li><li>Google Build &amp; Blog</li><li>Microsoft Chhalaang etc</li></ul><p>When credibility meets clarity, distribution follows.</p><h4>10. Final Takeaway</h4><p>Virality is not aesthetic.</p><p>It is engineered alignment between:<br>Value × Audience Cluster × Engagement Signals × Retention</p><p>The reel that felt “too simple” outperformed my most edited ones.</p><p>Sometimes growth requires you to detach from your ego and listen to the data.</p><p>And once you understand the system, you don’t chase virality.</p><p>You design for it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LyFWfA8wAtJ_GqZmRkeIpQ.png" /></figure><p>Happy Building! :)</p><p><em>Connect with me on:</em></p><p><em>LinkedIn Profile: </em><a href="https://www.linkedin.com/in/kavisha-mathur/"><em>https://www.linkedin.com/in/kavisha-mathur/</em></a><em><br>Github: </em><a href="https://github.com/Kavisha4"><em>https://github.com/Kavisha4</em></a><em><br>Portfolio: </em><a href="https://animated-gumption-c26500.netlify.app/"><em>https://animated-gumption-c26500.netlify.app/</em></a><em><br>Medium: </em><a href="https://medium.com/@KavishaMathur"><em>https://medium.com/@KavishaMathur</em></a><em><br>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=74facf3dd854" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The hackathon insider playbook — from a 8x winner]]></title>
            <link>https://medium.com/codetodeploy/the-hackathon-insider-playbook-from-a-8x-winner-de83d138bab5?source=rss-6b02ab98ac00------2</link>
            <guid isPermaLink="false">https://medium.com/p/de83d138bab5</guid>
            <category><![CDATA[careers]]></category>
            <category><![CDATA[hackathons]]></category>
            <category><![CDATA[guides-and-tutorials]]></category>
            <category><![CDATA[ansible-playbook]]></category>
            <dc:creator><![CDATA[Kavisha Mathur]]></dc:creator>
            <pubDate>Wed, 11 Feb 2026 18:25:30 GMT</pubDate>
            <atom:updated>2026-05-11T04:39:06.998Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qqH6tepVQaCsgRIfDP-vOA.png" /></figure><h3>How to Win Hackathons Consistently — The Insider Playbook</h3><p>Most people attend hackathons to participate.<br> A few attend to win.</p><p>After multiple hackathons, wins, losses, late-night debugging sessions, and pitch-stage realizations, I understood something:</p><p>Hackathons are not about coding the most.<br> They’re about thinking the clearest.</p><p>This is the <strong>Hackathon Mastery Blueprint</strong> — the exact framework that separates finalists from the rest.</p><p>If you’re tired of “almost winning,” read this carefully.</p><h3>1. How to Make a Strong Elevator Pitch (30–45 seconds)</h3><p>A winning pitch answers four things quickly and clearly:</p><h4>Problem</h4><p>State the real pain point in one crisp line.<br><strong> Example:</strong><br> “Student teams struggle with Git, and most projects fail because they can’t collaborate properly.”</p><h4>Solution</h4><p>What exactly are you building?<br> <strong>Example</strong>:<br> “We built an AI-guided Git workspace that helps beginners learn version control while actually collaborating.”</p><h4>Why You</h4><p>What is unique about your approach?<br> Example:<br> “We added conflict-resolution assistance and a visual branching map — something no beginner tool offers.”</p><h4>Impact</h4><p>Quantifiable outcomes matter more than adjectives.<br> Example:<br> “In two hours, 40 students completed their first pull request with zero merge conflicts.”</p><p><strong>Judge insight:<br></strong> If you don’t capture interest in the first 15 seconds, you blend in. Start with a hook, statistic, or surprising line.</p><h4>The Four-Part Pitch Formula That Actually Works:</h4><p><strong>Problem (10 seconds):</strong> State the pain so specifically that people feel it.</p><p><em>NO -“Students struggle with collaboration tools.”</em><br> YES- <em>“Three students just spent four hours on a group project. At midnight, one person force-pushed to main and deleted everyone’s work. This happens at every hackathon.”</em></p><p>See the difference? The second one makes you <em>feel</em> the problem.</p><p><strong>Solution (15 seconds):</strong> What are you building? Make it visceral, not vague.</p><p>NO- <em>“We built a Git learning platform.”</em><br> YES -<em>“We built an AI workspace that guides beginners through Git like a patient mentor sitting next to them, catching mistakes before they happen.”</em></p><p><strong>Why You (10 seconds):</strong> What’s your unfair advantage? What do you have that no one else thought of?</p><p>Real example from my Smart Campus Automation win: <em>“Every ‘smart campus’ solution needs new hardware. We’re the only team that works with the motion sensors already installed in every building — hardware that’s currently doing nothing but turning lights on.”</em></p><p>That line got us into the finals.</p><p><strong>Impact (10 seconds):</strong> Numbers. Always numbers.</p><p>NO — <em>“Our solution will help many students.”</em><br> YES — <em>“In our two-hour pilot, 40 students who’d never used Git successfully completed their first pull request with zero merge conflicts.”</em></p><p>Judges live for quantifiable impact.</p><p><strong>The Hook Strategy:</strong></p><p>Start with one of these, always:</p><ol><li><strong>A shocking statistic:</strong> <em>“Eighty percent of hackathon projects fail because of something that has nothing to do with code.”</em></li><li><strong>A relatable disaster:</strong> <em>“Raise your hand if you’ve ever had a team member say ‘just push to main’ at 2 AM.”</em> (Hands go up, you’ve got them)</li><li><strong>A provocative question:</strong> <em>“What if I told you the best hackathon projects aren’t the most technically complex?”</em></li></ol><h3>2. How to Build a Good Team</h3><p>Winning teams almost always have three types of people:</p><h4>The Thinker</h4><p>Understands product flows, problem statements, user research.</p><h4>The Builder</h4><p>Backend, frontend, or ML: someone who can ship quickly.</p><h4>The Storyteller</h4><p>Handles pitch deck, demo flow, and final presentation.</p><p>You need all three functions. A team with only coders and no presenter often loses to a simpler project that’s explained better.</p><h4>Finding teammates even if you don’t know anyone:</h4><ul><li>Hackathon WhatsApp groups</li><li>Devfolio Discord</li><li>LinkedIn posts</li><li>Event ice-breakers</li><li>MLH servers</li></ul><h4>Good teammate indicators:</h4><ul><li>People who say “Let’s scope this down”</li><li>People who push code early</li><li>People who communicate clearly</li><li>People who don’t fight for tech-stack ego</li></ul><h4>Red flags:</h4><ul><li>“We will build a full app in three hours”</li><li>“I will learn React right now and build later”</li><li>“Just trust me” with no deliverables</li></ul><h4>The Team Agreement I Make Every Time Now:</h4><p>Hour 1, after idea selection, we have this conversation:</p><ol><li><strong>Communication check-ins:</strong> Every 3 hours, quick sync. Not optional.</li><li><strong>Merge strategy:</strong> Main branch is locked. Everyone works on feature branches. No exceptions.</li><li><strong>The “cut scope” signal:</strong> Anyone can say “this is too much” and we listen. No ego.</li><li><strong>Sleep strategy</strong> (for 48hr hacks): Rotate. Two people sleep while two build. Never let everyone crash at once.</li></ol><p>This 10-minute conversation has saved me from so many late-night disasters.</p><h3><strong>3. How to Build an MVP in 24 Hours</strong></h3><p>This is the exact approach used in most winning teams:</p><h4>First 2 Hours</h4><ul><li>Finalize the idea</li><li>Freeze scope</li><li>Select tech stack</li><li>Write user flow</li><li>Decide on ONE core feature only</li></ul><h4>Next 6 Hours</h4><p>Build only what is essential:</p><ul><li>Core functionality</li><li>Basic UI</li><li>Minimal backend</li></ul><p>Avoid login pages, animations, and unnecessary screens.</p><h4>Next 4 Hours</h4><p>Add one “wow factor”:</p><ul><li>AI-driven component</li><li>Smart automation</li><li>Visual dashboard</li><li>Recommender system</li><li>Interesting visualization</li></ul><p>The “wow factor” often decides top 3 placements.</p><h4>Next 4 Hours</h4><p>Integration, testing, bug fixing.</p><h4>Final 3–4 Hours</h4><p>Prepare:</p><ul><li>Demo script</li><li>Slide deck</li><li>Pitch</li><li>Video (if required)</li></ul><p>More hackathons are won at the pitch stage than during coding.</p><h3>4. How to Ask Mentors and Judges for Help Strategically</h3><p>Avoid vague questions. Judges appreciate clarity.</p><h4>Do not ask:</h4><ul><li>“Is our idea good?”</li><li>“What should we build?”</li><li>“We are stuck; can you help?”</li></ul><h4>Ask instead:</h4><ul><li>“We shortlisted two ideas; which one aligns best with the problem statement?”</li><li>“We built X and are stuck at Y. Here are two approaches. Which one seems more practical?”</li><li>“What do judges typically expect in the implementation section?”</li><li>“Is our scope realistic for the remaining time?”</li></ul><p>This shows that you have thought through the problem, which earns more respect and more detailed guidance.</p><h3>5. How to Network with Judges and Mentors</h3><p>Judges remember teams that demonstrate clarity, improvement, and humility.</p><p>After the hackathon, message them concisely:</p><p>“Thank you for your feedback today. We implemented your suggestions on ___ and it improved the project significantly. Would love to stay connected.”</p><p>This professional follow-up opens doors to:</p><ul><li>Internships</li><li>Mentorship</li><li>Future hackathon invitations</li><li>Community leadership roles</li><li>Startup opportunities</li></ul><p>Networking is one of the most undervalued outcomes of hackathons.<br>The Best Question I Ever Asked a Judge:</p><p>At hour 18 of a 48-hour hack, I was exhausted. Our project was working but felt… meh. A judge was walking by.</p><p>Our team: <em>“Can I get your honest feedback? We have 30 hours left. Here’s what we’ve built [quick 30-second demo]. What would make this go from ‘interesting’ to ‘oh, that’s actually clever?’”</em></p><p>Judge: <em>“You’re solving the problem, but you’re not showing me WHY it matters. Who is this helping? Show me a real person benefiting.”</em></p><p>That one piece of feedback changed everything. We spent the next 6 hours adding a “success stories” dashboard showing real testimonials from our user testing. We placed second.</p><p><strong>The lesson:</strong> Judges remember teams that take feedback and act on it.</p><h4>Questions That Get You 20 Minutes of Mentorship:</h4><ol><li><em>“We’re deciding between two approaches: [A] and [B]. Here’s what we’ve considered for each. Which would you pick given our timeline?”</em></li><li><em>“We built X but we’re stuck at Y. We’ve tried [approach 1] and [approach 2]. Here’s the error we’re getting. Any ideas?”</em></li><li><em>“We’re about to make a technical decision between these two database options. Given that we have [constraint], which would you recommend?”</em></li><li><em>“Does our project scope seem realistic for the next 12 hours? Here’s what we have left.”</em></li></ol><p><strong>The pattern:</strong> Show your work. Ask specific questions. Respect their time.</p><h3>6. Demo &amp; Pitch Prep</h3><p><strong>This is where hackathons are won.</strong></p><p>More teams lose because of bad presentations than bad code.</p><blockquote>“Hi, I’m [Name]. Meet Sarah — she’s a college student trying to collaborate on a group project.</blockquote><blockquote>[DEMO: Show Sarah opening the app]</blockquote><blockquote>Right now, Sarah’s team uses Git. But look what happens when she tries to merge her code.</blockquote><blockquote>[DEMO: Show the typical merge conflict error]</blockquote><blockquote>Forty-seven conflicts. Her teammates’ code. Four hours of work gone.</blockquote><blockquote>[DEMO: Show your solution]</blockquote><blockquote>With our tool, Sarah gets AI-guided help. It shows her exactly what conflicted, why it happened, and how to fix it.</blockquote><blockquote>[DEMO: Show the resolution]</blockquote><blockquote>One click. Conflict resolved. Code merged.</blockquote><blockquote>[DEMO: Show the result]</blockquote><blockquote>Sarah’s team just saved four hours and a lot of frustration.”</blockquote><h4><strong>Record your demo video</strong></h4><ul><li>2 minutes max</li><li>Show, don’t tell</li><li>No code on screen unless it’s impressively visual</li><li>Use screen recording with your voice + basic text overlays</li></ul><h3>7. How to Find Hackathons</h3><h4>Platforms</h4><ul><li>Devfolio</li><li>Unstop</li><li>MLH</li><li>HackerEarth</li><li>Hack2Skill</li><li>Hackathon.com</li></ul><h4>Developer Communities</h4><ul><li>GDG</li><li>Microsoft Reactor</li><li>AWS Community Day</li><li>GitHub Community Events</li></ul><h4>Startup Ecosystem</h4><ul><li>T-Hub</li><li>Nasscom</li><li>Accelerators and incubators</li></ul><h4>Social Media</h4><p>Follow keywords on LinkedIn: “hackathon”, “innovation challenge”, “tech competition”, “Devfest”, “Build for Bharat”.</p><p>You will get constant opportunities.</p><h3>8. How Judges Actually Score Projects</h3><p>Scoring generally follows these categories:</p><h4>Problem Understanding — 20%</h4><p>Did you pick a real, high-quality problem?</p><h4>Solution Fit — 20%</h4><p>Does your solution address the pain point logically?</p><h4>Implementation — 20%</h4><p>Quality over quantity.</p><h4>Innovation / Wow Factor — 20%</h4><p>One standout element often decides the top three.</p><h4>Presentation — 20%</h4><p>A clear, confident narrative wins even if the product is slightly simpler.</p><h3>9. Slide Deck Structure for Winning Presentations</h3><ul><li>Hook (one shocking stat or story)</li><li>Problem (make them feel it)</li><li>Current solutions (and why they fail)</li><li>Your solution (high-level)</li><li>Demo (this can be video or “let me show you live”)</li><li>How it works (architecture, but make it visual)</li><li>Impact (numbers, testimonials, potential)</li><li>Technical highlights (the wow factor explained)</li><li>What’s next (roadmap)</li><li>Team</li></ul><p>Clean slides with fewer words perform better.</p><h4>Slide 1: The Hook</h4><p><strong>Bad:</strong></p><ul><li><em>“Welcome to our presentation”</em></li><li>Team names and photos</li><li>Hackathon logo</li></ul><p><strong>Good:</strong></p><ul><li>A provocative stat: <em>“67% of first-year CS students have failed a group project because of Git”</em></li><li>A relatable scenario: <em>“It’s 2 AM. You just pushed your code. You broke the entire codebase. Your teammates are asleep. What do you do?”</em></li><li>A single powerful image that makes people curious</li></ul><p><strong>My go-to structure:</strong> One sentence. One statistic. One visual. That’s it.</p><h4>Slides 2–3: Problem</h4><p><strong>Bad:</strong></p><ul><li>Wall of text explaining everything wrong with the world</li><li>Generic problems everyone knows</li><li>No evidence the problem exists</li></ul><p><strong>Good:</strong></p><ul><li>One slide showing WHO has the problem</li><li>One slide showing WHAT the problem costs them</li><li>Specificity is everything</li></ul><p>Example from one of winning decks: <strong>Slide 2:</strong><br> Visual: Photo of frustrated student at 3 AM<br> Text: <em>“Meet Sarah. She’s been working on her group project for 6 hours.”</em></p><p><strong>Slide 3:</strong><br> Visual: Git merge conflict screenshot<br> Text: <em>“One git push. 43 conflicts. 6 hours of work potentially lost.”</em></p><h4>Slides 4–5: Solution</h4><p><strong>Bad:</strong></p><ul><li>Architecture diagram with too many boxes</li><li>List of every feature you built</li><li>Technical jargon judges don’t understand</li></ul><p><strong>Good:</strong></p><ul><li>ONE slide showing what you built (high level)</li><li>ONE slide showing how it works (visually)</li></ul><p><strong>The rule:</strong> If you can’t explain your solution to your non-technical friend, your slide is too complex.</p><h4>Slide 6: Demo</h4><p><strong>Option 1:</strong> Embedded video (safer)<br> <strong>Option 2:</strong> Live demo (riskier but more impressive)<br> <strong>Option 3:</strong> GIF showing key interaction</p><p><strong>Never:</strong> Just screenshots. They’re boring.</p><h4>Slide 7: Impact</h4><p>This is where you win or lose.</p><p><strong>Bad:</strong></p><ul><li><em>“This will help many students”</em></li><li><em>“This could revolutionize education”</em></li><li>Hypothetical future impact</li></ul><p><strong>Good:</strong></p><ul><li><em>“40 students tested our tool. 38 completed their first merge with zero errors.”</em></li><li><em>“Reduced collaboration setup time from 2 hours to 5 minutes.”</em></li><li><em>“Already implemented in 3 classes at our university.”</em></li></ul><p>Numbers. Testimonials. Real results.</p><h4>Slide 8: Technical Highlights</h4><p>This is your “wow factor” slide.</p><p><strong>Show, don’t tell:</strong></p><ul><li><em>NO — “We used machine learning”</em></li><li>Yes — Visual showing how your ML model makes predictions with 94% accuracy</li></ul><p><strong>Make it visual:</strong></p><ul><li>System architecture that actually looks good</li><li>Data flow diagram with color coding</li><li>Before/after comparison</li></ul><h4>Slide 9: What’s Next</h4><p><strong>Bad:</strong></p><ul><li>Vague roadmap with no dates</li><li><em>“We plan to add many features”</em></li></ul><p><strong>Good:</strong></p><ul><li>Clear next steps: <em>“Pilot with 3 university CS departments (Fall 2026)”</em></li><li>Specific asks: <em>“Looking for beta testers from [specific group]”</em></li><li>Realistic timeline</li></ul><h4>Slide 10: Team</h4><p><strong>Bad:</strong></p><ul><li>Just names and photos</li><li>Generic roles</li></ul><p><strong>Good:</strong></p><ul><li>Name + ONE impressive credential each</li><li>Relevant experience: <em>“Kavisha — Won 8 hackathons, SDE at Tesco”</em></li></ul><p>Keep it brief. This slide gets 5 seconds of attention max.</p><h4>Design Rules I Never Break:</h4><ol><li><strong>One idea per slide</strong> — If you need to explain two things, use two slides</li><li><strong>Big text</strong> — If you can’t read it from 10 feet away, it’s too small</li><li><strong>High contrast</strong> — Dark background + light text, or vice versa</li><li><strong>Maximum 20 words per slide</strong> — Ideally closer to 10</li><li><strong>No bullet points</strong> — Images, numbers, and short sentences only</li></ol><p><strong>Font:</strong> Something clean. I use Inter, Poppins, or Montserrat. Never Comic Sans. Please.</p><p><strong>Colors:</strong> Your brand palette. Stick to 3 colors max, brownie point if it aligns with the brand colours</p><h3>10. 24-Hour Hackathon Checklist</h3><ul><li>Idea locked</li><li>Problem validated</li><li>MVP defined</li><li>Wow factor added</li><li>Demo flow practiced</li><li>Slides ready</li><li>Video recorded (if needed)</li><li>Submission uploaded early</li></ul><p>This puts you ahead of at least 70 percent of teams.</p><p>At the end of the day, hackathons are compressed simulations of the real tech world.</p><p>You are evaluated on:</p><ul><li>How clearly you think</li><li>How quickly you execute</li><li>How well you communicate</li></ul><p>Not just how much you code.</p><p>Master these three — and you won’t just win hackathons.<br> You’ll build like a real engineer.</p><p>And that compounds far beyond a trophy.</p><p>Happy Building! :)</p><p><em>Connect with me on:</em></p><p><em>LinkedIn Profile: </em><a href="https://www.linkedin.com/in/kavisha-mathur/"><em>https://www.linkedin.com/in/kavisha-mathur/</em></a><em><br>Github: </em><a href="https://github.com/Kavisha4"><em>https://github.com/Kavisha4</em></a><em><br>Portfolio: </em><a href="https://animated-gumption-c26500.netlify.app/"><em>https://animated-gumption-c26500.netlify.app/</em></a><em><br>Medium: </em><a href="https://medium.com/@KavishaMathur"><em>https://medium.com/@KavishaMathur</em></a><em><br>Instagram: </em><a href="https://www.instagram.com/chao.tech_/"><em>https://www.instagram.com/chao.tech_/</em></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dY-akbK5yAbGGt_NiPXtUA.png" /></figure><h3>Thank you for being a part of the community</h3><p><em>Before you go:</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*d9QTaaaxboQP_gKSLedW_w.png" /></figure><p>👉 Be sure to <strong>clap</strong> and <strong>follow</strong> the writer ️👏<strong>️️</strong></p><p>👉 Follow us: <a href="https://www.linkedin.com/in/code-to-deploy-3784391b9/"><strong>Linkedin</strong></a>| <a href="https://medium.com/codetodeploy"><strong>Medium</strong></a></p><p>👉 CodeToDeploy Tech Community is live on Discord — <a href="https://discord.gg/ZpwhHq6D"><strong>Join now!</strong></a></p><p><strong>Note:</strong> This Post may contain affiliate links.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=de83d138bab5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codetodeploy/the-hackathon-insider-playbook-from-a-8x-winner-de83d138bab5">The hackathon insider playbook — from a 8x winner</a> was originally published in <a href="https://medium.com/codetodeploy">CodeToDeploy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>