<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Tech]]></title><description><![CDATA[Tech]]></description><link>https://nirxnjxn-tech.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>Tech</title><link>https://nirxnjxn-tech.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Fri, 16 Oct 2026 13:32:38 GMT</lastBuildDate><atom:link href="https://nirxnjxn-tech.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[I Watched a Senior Engineer Break Down 8 Years at Atlassian After Getting Laid Off. Here's What Hit Me.]]></title><description><![CDATA[A developer's reaction to one of the most honest career retrospectives I've seen in a while.

I wasn't looking for a career crisis when I opened YouTube last week.
I found one anyway.
A video by Vasil]]></description><link>https://nirxnjxn-tech.hashnode.dev/i-watched-a-senior-engineer-break-down-8-years-at-atlassian-after-getting-laid-off-here-s-what-hit-me</link><guid isPermaLink="true">https://nirxnjxn-tech.hashnode.dev/i-watched-a-senior-engineer-break-down-8-years-at-atlassian-after-getting-laid-off-here-s-what-hit-me</guid><dc:creator><![CDATA[N I R A N J A N]]></dc:creator><pubDate>Tue, 19 May 2026 19:36:33 GMT</pubDate><content:encoded><![CDATA[<blockquote>
<p>A developer's reaction to one of the most honest career retrospectives I've seen in a while.</p>
</blockquote>
<p>I wasn't looking for a career crisis when I opened YouTube last week.</p>
<p>I found one anyway.</p>
<p>A video by Vasilios Syrakis — a senior engineer who spent eight years at Atlassian before being caught in their recent layoffs — showed up in my feed. I clicked expecting a rant. Maybe some bitterness. The usual post-layoff LinkedIn energy dressed up as a video.</p>
<p>What I got instead was one of the most technically honest and quietly reflective career retrospectives I've seen from any engineer on the internet.</p>
<p>I'm early in my career. I work in Web3 and AI. I'm doing a postgraduate degree on the side. I have exactly zero years of experience being laid off after a decade at a company.</p>
<p>But I couldn't stop thinking about it after.</p>
<p>Here's what hit me.</p>
<hr />
<h2>He Didn't Complain. That Was The First Thing.</h2>
<p>Eight years. Laid off. And the first thing he does is open a whiteboard tool and start drawing system diagrams.</p>
<p>No bitterness. No company-bashing. Just: <em>here's what I built, here's how it worked, here's what I learned.</em></p>
<p>That level of professionalism is rarer than it should be. And it set the tone for everything that followed — which is that this wasn't a grievance video. It was a genuine attempt to document something valuable before it faded.</p>
<p>That alone made me pay attention differently.</p>
<hr />
<h2>The Technical Arc Was Actually Fascinating</h2>
<p>What he built over eight years wasn't one big thing. It was a series of things that each created the <em>foundation</em> for the next thing — and that compounding architecture pattern is something I've been thinking about ever since.</p>
<p>It started simple: build a self-service load balancer provisioning system so developers didn't have to raise tickets to get infrastructure. A FastAPI app, an SQS queue for async tasks, a DynamoDB backend. Clean, standard, nothing revolutionary.</p>
<p>But then something interesting happened. Once that foundation existed — once there was a programmable system for managing traffic at the edge — it became a platform. And platforms attract requirements.</p>
<p>He built an Envoy control plane on top of it. Then a custom AMI provisioning pipeline with HashiCorp Packer and SaltStack. Then authentication sidecars. Then rate limiting. Then DDoS protection via CloudFront integration. Then centralized access logging.</p>
<p>What started as "build a load balancer broker" became the edge infrastructure layer for Jira, Confluence, Bitbucket, and most of Atlassian's cloud products.</p>
<p>That's not one project. That's a compounding system where each piece made the next piece possible.</p>
<pre><code class="language-plaintext">Year 1-2:   Service broker + Envoy management server
Year 2-4:   Migrate all Atlassian microservices onto this platform
Year 4-6:   Add authentication, rate limiting, DDoS protection as sidecars
Year 6-8:   Compliance, observability, scale
</code></pre>
<p>The thing that struck me: he didn't set out to build a platform. He set out to solve a specific problem. The platform emerged from solving that problem well and then being trusted with the next one.</p>
<hr />
<h2>The Sidecar Pattern — A Technical Aside</h2>
<p>One architectural decision he mentioned that I found genuinely clever: instead of baking authentication, rate limiting, and authorization logic directly into the proxy configuration, they used a <strong>sidecar model</strong>.</p>
<p>Each concern — auth, rate limiting, DDoS, access logging — runs as a separate container alongside the proxy. The proxy talks out the side to these services via Envoy's external processing and external authorization extensions.</p>
<p>Why does this matter?</p>
<p>Because it means different teams can own different sidecars independently. The auth team owns the auth sidecar. The rate limiting team owns theirs. Nobody has to coordinate a monolithic deployment to add a feature. Each sidecar can be versioned, updated, and rolled back independently.</p>
<p>He mentioned the auth sidecar was written in Rust. Which, as someone who has worked with Rust, makes complete sense for something that sits in the hot path of every single request.</p>
<p>This is a real architectural pattern for anyone building platform infrastructure. Separation of concerns at the infrastructure level, not just the application level.</p>
<hr />
<h2>"Building Is Easy. Maintaining Is Hard."</h2>
<p>This line hit harder than anything technical he said.</p>
<p>He talked about how the maintenance burden of software doesn't appear at the beginning. It appears slowly — through staff turnover, through new opinions entering an existing codebase, through the natural "churn" that accumulates in areas of frequent change.</p>
<p>His observation: once you notice where the churn is, it becomes a smell. It's a signal that something in that area needs to be rethought before it becomes a tangle that slows everything down.</p>
<p>I think about this a lot as someone building things now. It's easy to ship. The GitHub green squares look great. The demo works. Everyone's happy.</p>
<p>What's harder is thinking: <em>what happens to this in two years when I'm not the one maintaining it? When someone who didn't write it has to debug it at 2am during an incident?</em></p>
<p>He spent eight years finding out the answer to that question, over and over. The documentation, the runbooks, the on-call guides, the metrics dashboards — all of it exists because at some point, someone got paged and had no idea where to look.</p>
<p>That's not glamorous. It doesn't make a good blog post. But it might be the most valuable thing a senior engineer actually does.</p>
<hr />
<h2>The Non-Technical Part Nobody Talks About</h2>
<p>He spent time on something most technical retrospectives skip entirely: the human side.</p>
<p>Diplomacy. Conflict resolution. Persuasion. Mentoring. The ability to take a complex system and explain it to someone who's never seen it before without making them feel stupid.</p>
<p>He said feedback he consistently got from colleagues was that he was always available to help and could boil down hard topics into something understandable.</p>
<p>I've been thinking about that framing — <em>boil down hard topics</em> — because that's also what good technical writing is. That's what a good blog post is. That's what a good PR review comment is.</p>
<p>The ability to translate complexity into clarity is a skill. It doesn't come from knowing things. It comes from having explained the same thing badly enough times that you finally figure out the right mental model.</p>
<p>Eight years of doing that across a whole platform — that's a lot of iterations.</p>
<hr />
<h2>What Actually Gets Lost In A Layoff</h2>
<p>Here's the part nobody in the business press thinks about when a company announces headcount reductions:</p>
<p>Eight years of <strong>context</strong> walked out the door with him.</p>
<p>Not just the code. Anyone can read the code. The context — why certain decisions were made, what was tried and failed before this approach, which parts of the system are fragile and why, what the original requirements were before three rounds of scope changes — that lives in someone's head.</p>
<p>That knowledge doesn't live in documentation, because no documentation is ever complete enough. It lives in the engineer who built it, maintained it, defended it in architecture reviews, debugged it at 2am, and watched it evolve across multiple teams and leadership changes.</p>
<p>When that person gets laid off, the codebase stays. The context leaves.</p>
<p>Every company doing mass layoffs right now is making this trade — short-term cost reduction for long-term institutional knowledge erosion. Sometimes that's the right call. Often it comes with costs that don't show up on a spreadsheet for another two years.</p>
<hr />
<h2>What I Actually Took Away</h2>
<p>I'm not going to pretend this video gave me some crisis of confidence. It didn't.</p>
<p>But it did make me think more carefully about a few things I hadn't been thinking about enough:</p>
<p><strong>Build platforms, not just features.</strong> The most impactful work he did wasn't any single thing — it was building infrastructure that made a hundred other things possible. That compounding effect is worth aiming for.</p>
<p><strong>Maintenance is a first-class concern.</strong> Shipping is the beginning, not the end. Design for the person who has to debug this at 2am six months from now. Write the runbook. Add the metrics. Leave the trail.</p>
<p><strong>The soft skills compound too.</strong> Diplomacy, mentoring, explaining complex things simply — these aren't soft. They're load-bearing. They're what determine whether good technical work actually gets adopted, trusted, and maintained by others.</p>
<p><strong>Context is irreplaceable.</strong> Document more than you think you need to. Not because you're going to leave, but because you might.</p>
<hr />
<p>The video is worth watching in full if you're a developer at any stage of your career. Not because the tech stack is cutting-edge — some of it is a few years old. But because the arc of how someone grows from "I can build this" to "I understand why systems fail and how to prevent it" is genuinely instructive.</p>
<p>And there's something quietly admirable about a person who, after eight years and a layoff, opens a whiteboard and starts drawing.</p>
<hr />
<p><em>I'm Niranjan — Full Stack &amp; Web3 Developer at Alkimi Exchange, M.Sc. student in Data Science &amp; Generative AI. I write about what I'm actually learning and thinking about.</em></p>
<p><em>Find me on</em> <a href="https://x.com/nirxnjxn7"><em>X / Twitter</em></a> <em>|</em> <a href="https://mcp-basics.hashnode.dev"><em>Hashnode</em></a></p>
]]></content:encoded></item><item><title><![CDATA[Your Computer Has a Secret Phone Number. It's 127.0.0.1.]]></title><description><![CDATA[I used to just... type localhost:3000 and move on. Didn't think twice. Server runs, browser opens, life is good. Classic developer moment of "it works, don't ask why."
Then one day someone asked me: "]]></description><link>https://nirxnjxn-tech.hashnode.dev/your-computer-has-a-secret-phone-number-it-s-127-0-0-1</link><guid isPermaLink="true">https://nirxnjxn-tech.hashnode.dev/your-computer-has-a-secret-phone-number-it-s-127-0-0-1</guid><dc:creator><![CDATA[N I R A N J A N]]></dc:creator><pubDate>Tue, 28 Apr 2026 08:01:12 GMT</pubDate><content:encoded><![CDATA[<p>I used to just... type <code>localhost:3000</code> and move on. Didn't think twice. Server runs, browser opens, life is good. Classic developer moment of "it works, don't ask why."</p>
<p>Then one day someone asked me: <em>"Wait, but what actually IS localhost?"</em></p>
<p>I opened my mouth. Nothing came out.</p>
<p>So I went and figured it out. This is me documenting that rabbit hole — and trust me, it's more interesting than it sounds.</p>
<hr />
<h2>First: What Even Is Localhost?</h2>
<p>Okay so here's the thing. <code>localhost</code> isn't magic. It's just a <strong>reserved hostname</strong> — like a nickname your computer has given itself.</p>
<p>When you type <code>localhost</code> in your browser, your OS goes: <em>"Oh I know that one, that's me"</em> — and routes the request right back to your own machine. No internet. No DNS server. No router involved. Just your computer talking to itself.</p>
<p>The actual IP address behind this whole thing? <strong>127.0.0.1</strong></p>
<p>And this is where it gets interesting.</p>
<hr />
<h2>127.0.0.1 — The Loopback Address</h2>
<p>Your computer has a virtual network interface called the <strong>loopback interface</strong>. It has zero physical hardware. It doesn't connect to your WiFi card. It doesn't go anywhere near your router.</p>
<p>It just... loops back.</p>
<p>When you send a request to <code>127.0.0.1</code>, here's what happens under the hood:</p>
<ol>
<li><p>Your app sends data destined for <code>127.0.0.1</code></p>
</li>
<li><p>The TCP/IP stack catches it at the network layer</p>
</li>
<li><p>Recognizes it as a loopback address</p>
</li>
<li><p>Immediately bounces it back up the stack</p>
</li>
<li><p>Delivered to the destination app — on the <strong>same machine</strong></p>
</li>
</ol>
<p>The whole journey? Never left your laptop. Not one packet touched a physical cable or a WiFi antenna.</p>
<p>That's the loopback interface. Your machine whispering to itself.</p>
<hr />
<h2>The Hosts File — Where the Magic Actually Lives</h2>
<p>Here's the part most people don't know about.</p>
<p>When you type <code>localhost</code>, your OS doesn't even bother asking a DNS server. It checks a local file first — the <strong>hosts file</strong> — and finds the mapping already there:</p>
<pre><code class="language-plaintext">127.0.0.1   localhost
::1         localhost
</code></pre>
<ul>
<li><p><strong>Linux / macOS:</strong> <code>/etc/hosts</code></p>
</li>
<li><p><strong>Windows:</strong> <code>C:\Windows\System32\drivers\etc\hosts</code></p>
</li>
</ul>
<p>This file is older than most of the internet we know today. And it still runs before DNS on every request. You can even add your own entries here — map <code>myapp.local</code> to <code>127.0.0.1</code> and boom, you've got your own fake domain running locally.</p>
<hr />
<h2>Wait, 127.0.0.1 vs localhost — Are They the Same?</h2>
<p>Close, but not exactly.</p>
<table>
<thead>
<tr>
<th></th>
<th><code>127.0.0.1</code></th>
<th><code>localhost</code></th>
</tr>
</thead>
<tbody><tr>
<td>What it is</td>
<td>An IP address</td>
<td>A hostname</td>
</tr>
<tr>
<td>DNS lookup needed?</td>
<td>No</td>
<td>Technically yes (via hosts file)</td>
</tr>
<tr>
<td>Speed</td>
<td>Slightly faster</td>
<td>Marginally slower (name resolution)</td>
</tr>
<tr>
<td>IPv6 equivalent</td>
<td><code>::1</code></td>
<td>Can resolve to either</td>
</tr>
</tbody></table>
<p>For 99% of dev work, they're interchangeable. But here's a wild one: <strong>MySQL actually treats them differently.</strong> Connect via <code>localhost</code> and it uses a Unix socket. Connect via <code>127.0.0.1</code> and it goes through TCP/IP. Same destination, totally different path.</p>
<hr />
<h2>And Then There's 0.0.0.0 — The Wildcard</h2>
<p>You've probably seen this in deployment configs and thought <em>"close enough to localhost, right?"</em></p>
<p>Nope. Completely different.</p>
<ul>
<li><p><code>127.0.0.1</code> → Only your machine can reach this</p>
</li>
<li><p><code>0.0.0.0</code> → <strong>Everyone</strong> on the network can reach this</p>
</li>
</ul>
<p>When you run <code>python -m http.server --bind 0.0.0.0 8000</code>, you're saying: "Accept connections from any interface, any IP." That's how you expose a local server to other devices on your network.</p>
<p>Use <code>127.0.0.1</code> when you want it local-only. Use <code>0.0.0.0</code> when you want external access. Don't mix them up, especially in production.</p>
<hr />
<h2>IPv4 vs IPv6 — Because It Wouldn't Be Networking Without This</h2>
<p>IPv4 (<code>127.0.0.1</code>) has been the standard loopback for decades. But IPv6 has its own: <code>::1</code></p>
<p>And here's where it gets annoying in practice: newer macOS versions sometimes prefer IPv6 by default. So when you <code>ping localhost</code>, you might see <code>::1</code> instead of <code>127.0.0.1</code>.</p>
<p>This causes real bugs. Some apps break because they expect one and get the other. The fix is usually to force IPv4 explicitly:</p>
<pre><code class="language-bash">ping -4 localhost   # Force IPv4
ping -6 localhost   # Force IPv6
</code></pre>
<p>Worth knowing if you've ever had a local server that mysteriously refuses to connect.</p>
<hr />
<h2>Why Does This Matter for Developers?</h2>
<p>Because localhost is your <strong>entire local dev environment</strong>. Think about what runs on it:</p>
<ul>
<li><p>Your frontend at <code>:3000</code></p>
</li>
<li><p>Your backend API at <code>:8000</code></p>
</li>
<li><p>Your database at <code>:5432</code> (Postgres) or <code>:3306</code> (MySQL)</p>
</li>
<li><p>Your Redis at <code>:6379</code></p>
</li>
<li><p>Your local blockchain node at <code>:8545</code></p>
</li>
</ul>
<p>All of these are services talking to each other through the loopback interface. Understanding that it's a virtual, internal-only path explains why:</p>
<ul>
<li><p>Localhost is fast (no physical hardware overhead)</p>
</li>
<li><p>It's safe (nothing escapes your machine)</p>
</li>
<li><p>It works completely offline</p>
</li>
<li><p>And why some services refuse to bind to it without explicit configuration</p>
</li>
</ul>
<hr />
<h2>The IP Address Types — Quick Map</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Example</th>
<th>Who Can Reach It</th>
</tr>
</thead>
<tbody><tr>
<td>Public IP</td>
<td><code>8.8.8.8</code></td>
<td>Anyone on the internet</td>
</tr>
<tr>
<td>Private IP</td>
<td><code>192.168.1.x</code></td>
<td>Your local network only</td>
</tr>
<tr>
<td>Loopback IP</td>
<td><code>127.0.0.1</code></td>
<td>Just your machine</td>
</tr>
</tbody></table>
<p>Localhost sits in its own category — not public, not private. Just <strong>you, talking to you</strong>.</p>
<hr />
<h2>The Takeaway</h2>
<p>Every time you spin up a dev server and hit <code>localhost:3000</code>, your machine is doing something genuinely elegant:</p>
<ul>
<li><p>Skipping DNS entirely</p>
</li>
<li><p>Routing through a virtual interface that doesn't physically exist</p>
</li>
<li><p>Processing the request in your OS's network stack</p>
</li>
<li><p>Handing it back to your browser — without a single bit leaving your machine</p>
</li>
</ul>
<p>It's one of those things you use every single day and never really think about. Now you do.</p>
<p>And the next time someone asks you "what's localhost?" — you'll actually have an answer.</p>
<hr />
<p><em>Follow me on X</em> <a href="https://x.com/nirxnjxn7"><em>@nirxnjxn7</em></a> <em>where I build stuff, break stuff, and write about both.</em></p>
<p><em>More posts like this at</em> <a href="https://nirxnjxn-tech.hashnode.dev/"><em>nirxnjxn-tech.hashnode.dev</em></a></p>
]]></content:encoded></item></channel></rss>