<?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[Adyasha's Blog]]></title><description><![CDATA[Product Engineer @hackerrank | a 💚 full of passion]]></description><link>https://blog.adyasha.in</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Apr 2026 01:42:33 GMT</lastBuildDate><atom:link href="https://blog.adyasha.in/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[I Didn’t Fix My Body, I Fixed My Lifestyle]]></title><description><![CDATA[When I think about the time I joined the gym in 2024, I almost laugh at how convinced I was that I was “fine.” Just somewhere in the middle, where you tell yourself you are doing okay because it’s more comfortable than admitting you are slipping. I d...]]></description><link>https://blog.adyasha.in/i-didnt-fix-my-body-i-fixed-my-lifestyle</link><guid isPermaLink="true">https://blog.adyasha.in/i-didnt-fix-my-body-i-fixed-my-lifestyle</guid><category><![CDATA[gym]]></category><category><![CDATA[Life lessons]]></category><category><![CDATA[lifestyle]]></category><category><![CDATA[Diet]]></category><category><![CDATA[personal development]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Wed, 10 Dec 2025 06:49:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1765350618853/503d540a-63a4-4d3a-8193-92184935065d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I think about the time I joined the gym in 2024, I almost laugh at how convinced I was that I was “fine.” Just somewhere in the middle, where you tell yourself you are doing okay because it’s more comfortable than admitting you are slipping. I didn’t call myself fat back then. I genuinely didn’t think I was. It’s only now, after months of showing up consistently and being a little more honest with myself, that I look back and realise I was actually carrying more weight, more tiredness, more heaviness than I allowed myself to see. And that realisation didn’t come after a dramatic transformation; it came quietly, almost by accident, when I finally built routines that made me feel healthier, lighter, and more aware of myself.</p>
<p>The funny part is that, in 2024, I believed going to the gym was enough. I wasn’t regular, I wasn’t intentional, and I definitely wasn’t paying attention to what I was eating. I had this delusional logic that if I ran on the treadmill for 30 minutes, then I had earned the right to eat whatever I wanted. I would literally walk out of the gym and reward myself with food, as if the workout existed purely to cancel out my cravings. And I didn’t think this was a problem; it felt normal to me. But in hindsight, I can see how I was basically fighting myself: one step forward in the gym, five steps back in the kitchen :)</p>
<p>And then came 2025, the year I assumed would be different just because the calendar changed, but of course, nothing did. I repeated the same patterns. Same inconsistency. Same food. Same excuses. I kept telling myself I had a “slow metabolism” or “I’ll fix it when life becomes less hectic,” as if there is ever a phase of life where everything magically aligns for you. It was such a copy-paste year that I can barely separate it from 2024; everything blended into this long stretch of wanting results without wanting the responsibility that comes with them.</p>
<p>The turning point, if I can even call it that, wasn’t inspiring at all. It wasn’t a movie moment. No sunrise jog. No emotional breakdown in the mirror. It was much more boring, just a normal day where I suddenly felt tired of listening to my own excuses.</p>
<p>So I started going to the gym more regularly. Not perfectly. Not with a transformation plan. Just… regularly. And for the first time, I didn’t treat it like something separate from my life. I didn’t aim for muscle-building or aesthetics or any big milestone. My only intention was to be more active than I had been before. That was it.</p>
<p>Then slowly, and I mean slowly, I started paying attention to what I ate. I didn’t follow a hardcore diet. I didn’t become a nutrition expert. I simply looked at my portions, asked myself whether I was eating because I was hungry or because I was bored, and cut down on eating outside. I still eat out sometimes, especially because there are days I’m negotiating with him but even on those days, I choose better options. And these tiny decisions started compounding.</p>
<p>What surprised me the most is that I never noticed the progress myself. I’d look in the mirror and see the same person. But people around me started saying, “You look a bit different,” and it’s strange how a casual comment from someone else can suddenly make you realise your habits have actually been working. It made me understand something I had never understood before: <strong>your body is changing long before your brain accepts that it is.</strong></p>
<p>But here’s where the real lesson comes in losing fat was not the difficult part. The difficult part was accepting that I needed to live differently if I wanted to maintain anything I gained. That this wasn’t going to be a one-month effort or a “2025 goal.” It had to become a normal part of my life, something I didn’t negotiate with, something that didn’t feel like punishment.</p>
<p>People think fat loss is about motivation or diet charts, but I realised it’s much more about your relationship with life: how you respond to boredom, stress, cravings, comfort, laziness, routine, and all the subtle habits that quietly shape your days.</p>
<p>Today, I’m not in a “fitness era” or a “transformation phase.” I’m simply in a place where my habits are lighter, my choices are intentional, and my body doesn’t feel like it’s fighting me. I’m also more aware, aware of what I eat, aware of when I’m overeating, aware of how much movement I get, and aware of how much control I actually have when I stop overcomplicating things.</p>
<p>I wish someone had told me earlier that you won’t see progress immediately and the real result isn’t the weight you lose, it’s the person you become when you show up for yourself quietly and consistently.</p>
]]></content:encoded></item><item><title><![CDATA[Repeating the Same Mistake (Again)]]></title><description><![CDATA[You know that tiny voice in your head that says, “I’ve learned my lesson” right after something goes wrong? yeah. That voice is a liar :)
It happens to me more often than I would like to admit. I’ve built product features, debugged issues, and made s...]]></description><link>https://blog.adyasha.in/repeating-the-same-mistake-again</link><guid isPermaLink="true">https://blog.adyasha.in/repeating-the-same-mistake-again</guid><category><![CDATA[Life lessons]]></category><category><![CDATA[mistakes]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 02 Nov 2025 13:39:34 GMT</pubDate><content:encoded><![CDATA[<p>You know that tiny voice in your head that says, <em>“I’ve learned my lesson”</em> right after something goes wrong? yeah. That voice is a liar :)</p>
<p>It happens to me more often than I would like to admit. I’ve built product features, debugged issues, and made shortcuts to know how this story goes. Every time, I tell myself <em>next time will be different,</em> and somehow the same pattern repeats itself.</p>
<h2 id="heading-its-not-about-being-careless"><strong>It’s not about being careless</strong></h2>
<p>Most people think repeating mistakes comes from carelessness. But I don’t think that’s true.</p>
<p>It’s usually because <strong>the next situation looks slightly different</strong>, so your brain doesn’t recognise it as the same trap.</p>
<p>It’s not that we didn’t care, it’s that the brain thought, <em>“This is new, not that old problem.”</em></p>
<h2 id="heading-patterns-hide-in-disguise"><strong>Patterns hide in disguise</strong></h2>
<p>In real life, too, it’s the same.</p>
<p>I’ll overcommit my week, knowing full well I’ll burn out by Friday.</p>
<p>I’ll skip a proper break, thinking “this week is exceptional.” and then every week becomes exceptional.</p>
<p>What’s tricky about repeated mistakes is that they don’t look identical. They just evolve.<br />It’s the same core issue: lack of pause, lack of systems, lack of boundaries just with different clothes.</p>
<p>We think we’re being adaptive, but most times, we’re just being forgetful in a new way.</p>
<h2 id="heading-systems-gt-memory"><strong>Systems &gt; Memory</strong></h2>
<p><em>The real fix isn’t to “remember not to do it again,” because memory fades, but habits don’t.</em></p>
<p>What helps is creating <strong>small systems</strong> that make the right thing easier to do and the wrong thing harder to repeat.</p>
<p>For example:</p>
<ul>
<li><p>Adding a “post-launch checklist” in the release template so analytics is never skipped.</p>
</li>
<li><p>Writing down things that went wrong and revisiting them before starting a new project.</p>
</li>
<li><p>Setting up recurring reminders for things you <em>always</em> forget, like retrospective notes, breaks, or feedback sessions.</p>
</li>
</ul>
<p>Basically, assume you’ll forget everything and make forgetting harmless.</p>
<h2 id="heading-when-repetition-becomes-growth"><strong>When repetition becomes growth</strong></h2>
<p>Not every repeated mistake is bad, though. Sometimes you’re just hitting the same wall from a different angle, which means you’re exploring it deeper.</p>
<p>You might be learning how to design a better feature, manage your time better, or even handle people better.</p>
<p>Repeating a mistake consciously, with reflection, is just called <strong>practice</strong>.</p>
<p>It only becomes a mistake when we repeat it <strong>unconsciously</strong>.</p>
<h2 id="heading-the-real-lesson"><strong>The real lesson</strong></h2>
<p>If you find yourself looping through the same issue again, don’t overjudge it. It probably means you’re working on something complex enough to require more than one lesson.</p>
<p>Progress isn’t always about avoiding repetition. Sometimes it’s about repeating, but with awareness. The second time hurts less, you recover faster, and maybe this time, you build a small system around it.</p>
<p>And that’s how you quietly level up, not by never making the same mistake again but by making it better.</p>
]]></content:encoded></item><item><title><![CDATA[Psychology Beyond the Chips]]></title><description><![CDATA[As someone who spends most of the time with code, walking into a casino in Goa felt like entering a very different kind of system, one that runs not on logic but on human emotions and luck. The flashing lights, the sound of coins dropping, the consta...]]></description><link>https://blog.adyasha.in/psychology-beyond-the-chips</link><guid isPermaLink="true">https://blog.adyasha.in/psychology-beyond-the-chips</guid><category><![CDATA[casino]]></category><category><![CDATA[psychology]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 07 Sep 2025 18:20:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759673767668/e03188e9-fd51-4e39-9ace-0d4d2ddf07a2.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As someone who spends most of the time with code, walking into a casino in Goa felt like entering a very different kind of system, one that runs not on logic but on human emotions and luck. The flashing lights, the sound of coins dropping, the constant movement of people, it was like watching a live simulation of human psychology.</p>
<p>I didn’t play much, only for an hour, but that was enough to see patterns. I had set a clear threshold for myself. Don’t be greedy; stop when the limit is hit. Still, the moment I started winning, I could feel that inner voice whispering, “Just one more chip, maybe this round will change everything.” It was fascinating to notice the temptation in myself and fight it.</p>
<p>But the real insights came from watching others. There was a father-son duo at one table who were not only playing but actively persuading others to join in and bid more. It wasn’t random, as there is a logic behind it. The more players they attracted, the more chances they had to tilt the odds in their favour. It was persuasion, ego and strategy mixed together.</p>
<p>Then there was a couple, very sharp in how they played. The wife was the one placing the bets, and her luck was in full swing that night. The husband barely intervened, just sat back with quiet confidence as if he knew she was in rhythm. It was less about luck and more about how calm and collected she stayed, even under pressure.</p>
<p>On the other end of the spectrum, I saw a silent man who didn’t talk at all. He kept his chips hidden and played each move with laser focus. No emotions on his face, no reactions to winning or losing. It almost felt like watching a machine in human form.</p>
<p>And then, there was my friend. He started light-hearted, laughing, keeping it fun. But the moment he lost a couple of rounds, I could see his ego step in. Instead of slowing down, he began putting in more and more money, determined to recover what he lost. For him, it wasn’t about the cards anymore; it became about proving he could win. Ironically, he did end the night in net positive, but watching him made me realise how dangerous that spiral can be. The win wasn’t the point; it was the way the game had pulled him into a psychological tug of war.</p>
<p>What struck me is how casinos bring out raw psychology in real time:</p>
<ul>
<li><p><strong>Ego</strong> pushes people to recover losses at any cost.</p>
</li>
<li><p><strong>Greed</strong> convinces them that one more round might change everything.</p>
</li>
<li><p><strong>Patience</strong> and <strong>discipline</strong> let a rare few quietly walk away as winners.</p>
</li>
<li><p><strong>Luck</strong> always plays a role, but it’s amplified or wasted depending on the mindset.</p>
</li>
</ul>
<p>I realised it’s not very different from what I see in tech or startups. People chase goals, sometimes logically, sometimes emotionally. Some play for the long term, some for short term highs. Some collapse under pressure, while others treat it as a game of strategy.</p>
<p>I walked out with a small win that night, and the money wasn’t the real win. What stayed with me was how a casino shows human behaviour in its rawest form. In tech, we deal with systems and algorithms breaking under edge cases. In a casino, it’s people who are the systems, and you watch how they react when pressure builds.</p>
<p>For me, the real victory was not giving in to that voice saying, “Just one more chip.” That’s when it hit me, the actual game isn’t with the cards or the dealer. The actual game is always with your own mind.</p>
]]></content:encoded></item><item><title><![CDATA[How I Ended Up Running?]]></title><description><![CDATA[I’ve always been a pretty active person. Since childhood. Dance classes, playing outside, and doing random performances in front of relatives (even when no one asked). But running? That was never it for me.
I legit used to wonder, why do people run? ...]]></description><link>https://blog.adyasha.in/how-i-ended-up-running</link><guid isPermaLink="true">https://blog.adyasha.in/how-i-ended-up-running</guid><category><![CDATA[running]]></category><category><![CDATA[Marathon]]></category><category><![CDATA[strava]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 03 Aug 2025 17:49:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759674020279/3577282a-83c5-425f-b618-51477f672d53.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I’ve always been a pretty active person. Since childhood. Dance classes, playing outside, and doing random performances in front of relatives (even when no one asked). But <em>running</em>? That was never it for me.</p>
<p>I legit used to wonder, <em>why do people run?</em> Why are they willingly spending all their energy like that? Bro, you could’ve built a rocket with that much effort. Running made zero sense to me.</p>
<p>Then life changed.</p>
<p>Cut to 1.6 years back, I had just moved to <em>Bangalore</em>. Suddenly, I wasn’t moving at all. Just sitting. Long calls. Back pain. Feeling like I’m 60 at 23. That’s when I forced myself to join a <em>gym</em>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754243347037/8b112a4c-c3dc-4cb5-86ce-0cc6680f8d5c.png" alt class="image--center mx-auto" /></p>
<p>But sticking to it? That was a whole circus. One week I’m going regularly, next week something happens, some stupid cold, long work hours, mood off, whatever and boom. 3 weeks gone. I had phases where I’d show up 5 days a week and then ghost the gym.</p>
<p>Also, I wasn’t ready to give up my food. <em>Dude, I want to eat ice cream and biryani and all the good stuff without doing math in my head.</em> Why should fitness mean punishment? That was always non-negotiable for me.</p>
<p>So yeah, obviously no results. I was stuck.</p>
<p>Now, back to the running bit.</p>
<p>It wasn’t some inspiring story. My friend used to run, and I was like, “What’s this guy doing so seriously for some marathons?” And then Insta started throwing me reels about runs, medals, and finish lines. And I won’t lie, the medals looked kinda cool. So I thought, okay fine, maybe I’ll try it once.</p>
<p>Did my first <em>5K</em> last year.</p>
<p>It was exhausting. My legs screamed, my lungs gave up halfway, and by the end, I felt... nothing. No magical transformation. Just wanted to crash on the nearest patch of grass. I thought, “Okay, cool. Done. Never again.”</p>
<p>But somewhere around April-May this year, something in me shifted. I don’t know what exactly, maybe it was a need to feel stable, maybe I was just tired of feeling off-track in life, but I told myself I need something that keeps me moving and grounded at the same time. I didn’t even plan it, it just happened.</p>
<p>Started going to the gym again, this time with a bit more focus. Started fixing my food, not dieting, just being mindful. Trying to make it part of life instead of this “thing I have to do.”</p>
<p>And somehow, I started making it work. I got weirdly into micro-planning. Like, I book my auto at 6:15, leave office at 6:45 (or at least try to), reach home by 7:30, change, and hit the gym by 8. If that fails, I go to the 9 PM class. Sounds chaotic, but it works 80% of the time. And if not, I guilt-trip myself into making it work the next day.</p>
<p>Okay, okay, now finally getting to the part I wanted to talk about from the beginning…</p>
<p>Last month, I randomly signed up for a 5K again (with some colleagues) after doing a few practice runs.</p>
<p>AND BRO IT WAS SO GOOD.</p>
<p>The run, the energy, the crowd, the finish line moment, this time it hit. I was like, okay, maybe this is why people are addicted to it. After that, I did another 5K, alone this time. Put on my shoes, started my playlist, and ran. Felt that same rush again. <em>This time with better timing and pace. Progress!</em></p>
<p>And today? I did my <strong>first 10K.</strong><br />Let that sink in. TEN. KILOMETRES.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754242831184/2dbd7c15-b785-47f0-96bc-d9e209cbdcdb.jpeg" alt class="image--center mx-auto" /></p>
<p>I still can’t believe I did it. Already signed up for another one next week. I’m not even in it for anything other than <em>that feeling</em> of being in flow. Of zoning out completely. Somewhere in the middle of that run, I realised my playlist had switched from “<a target="_blank" href="https://www.youtube.com/watch?v=dx4Teh-nv3A&amp;pp=ygUGI23Ds2h1">Namo Namo</a>” to “<a target="_blank" href="https://www.youtube.com/watch?v=3u6lLWGjFLY">Naina</a>”, and I was literally smiling like an idiot.</p>
<p>It’s weird how running turns into a mini therapy session. You start with tired legs, and by the time you hit 3K, you’re solving life problems. By 5K, you’re rethinking your career goals. And by the time you hit 10K, you’re just vibing, high on <a target="_blank" href="https://en.wikipedia.org/wiki/Endorphins">endorphins</a> and planning your 5-year roadmap.</p>
<p>That’s been the best part for me: <em>the clarity</em>.</p>
<p>Running hasn’t just made me fit, it’s made me <em>feel more like myself</em>.</p>
<p>So yeah, if you’re someone who thinks running is boring or hard or pointless, I get it. I was there. Still feel that some days. But if you ever feel even <em>slightly</em> curious, just try it. And then try again.</p>
<p>The first run might suck. Second one too. But that third or fourth one? Might just change something.</p>
<p>And even if it doesn’t, you’ll get a sick playlist and maybe some random life clarity out of it.</p>
]]></content:encoded></item><item><title><![CDATA[Three Days, One Mic - My MC Experience]]></title><description><![CDATA[I never planned to be an MC.It kind of just happened, and somehow, I ended up doing it for three days straight at React Nexus.
Now that it’s all over, I’m still thinking about how much fun I had doing something I never thought I’d enjoy this much.
So...]]></description><link>https://blog.adyasha.in/three-days-one-mic-my-mc-experience</link><guid isPermaLink="true">https://blog.adyasha.in/three-days-one-mic-my-mc-experience</guid><category><![CDATA[react nexus]]></category><category><![CDATA[React]]></category><category><![CDATA[stage]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Fri, 11 Jul 2025 18:30:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1752934083751/938278fe-a429-421a-b0c2-1cb4b2a1e3f8.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I never planned to be an MC.<br />It kind of just happened, and somehow, I ended up doing it for three days straight at React Nexus.</p>
<p>Now that it’s all over, I’m still thinking about how much fun I had doing something I never thought I’d enjoy this much.</p>
<p>So here’s how those three days went, what I figured out along the way, and a few little things I’d tell anyone grabbing the mic for the first time.</p>
<h2 id="heading-day-1-nervous-but-figuring-it-out">Day 1: Nervous but figuring it out</h2>
<p>This day was all about not messing up. I was mostly inside my head, holding the mic right, checking the schedule a hundred times, and trying to remember my first line.</p>
<p>But once I got a laugh or a smile from the audience, something shifted.<br />That’s when I realised… It’s not about putting on a show. It’s just about being there, with people</p>
<blockquote>
<p>✨ Tip 1: Don’t perform, talk. Treat the audience like real people. No one’s expecting perfection, they just want to feel like they’re part of something fun.</p>
</blockquote>
<h2 id="heading-day-2-wait-this-is-fun">Day 2: Wait… this is fun?</h2>
<p>By now, I’d settled in. I stopped overthinking, started slipping in jokes, chatting between sessions, and going a little off script. And surprisingly, those bits? They worked.</p>
<p>We played a quiz game. People were engaged. There was energy. It didn’t feel like I was “hosting, it felt like I was part of the fun.</p>
<blockquote>
<p>✨ Tip 2: Don’t be scared to go with the moment. Things won’t go exactly as planned and that’s okay. Sometimes, the unscripted parts are the best ones.</p>
</blockquote>
<h2 id="heading-day-3-in-the-zone-and-loving-it">Day 3: In the zone (and loving it)</h2>
<p>Everything just flowed.<br />The team backstage was in sync, the transitions were smooth, and I wasn’t thinking too hard anymore, I was just doing it.</p>
<p>What surprised me the most was how much the “quiet” moments mattered.<br />Those little pauses between things, the short resets, the way you carry yourself when nothing is happening, that’s where a lot of the magic is.</p>
<blockquote>
<p>✨ Tip 3: Hold the room, even when you’re not speaking. You don’t always need the perfect line. Sometimes, a pause or a smile does the job.</p>
</blockquote>
<hr />
<p>Looking back, I’m still surprised by how much I enjoyed it.</p>
<p>Being an MC taught me a lot about presence, people, and just trusting myself a little more.<br />It wasn’t just about speaking on stage. It was about holding space, reading the room, and having fun in between.</p>
<p>I don’t say this often, but I’m <em>really</em> proud of myself for doing it.<br />I ended up talking on stage for almost an hour across those three days and loved every bit of it. 💛</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752932986286/1046d5a3-11c3-4c5c-b7a1-16294ea82fd3.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Waiting one more week to ship is nearly always a bad idea]]></title><description><![CDATA[We’ve all said it. We’ve all heard it.

Let’s just wait one more week.

It sounds responsible. Thoughtful, even. Like you care about quality. Like you're doing the right thing by holding the line a little longer.
But that one week wait? It almost alw...]]></description><link>https://blog.adyasha.in/waiting-one-more-week-to-ship-is-nearly-always-a-bad-idea</link><guid isPermaLink="true">https://blog.adyasha.in/waiting-one-more-week-to-ship-is-nearly-always-a-bad-idea</guid><category><![CDATA[Product Management]]></category><category><![CDATA[engineering-management]]></category><category><![CDATA[engineering]]></category><category><![CDATA[learning]]></category><category><![CDATA[development]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 08 Jun 2025 13:50:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1749390491708/29f445e0-fb77-430a-9616-204049d602cd.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We’ve all said it. We’ve all heard it.</p>
<blockquote>
<p>Let’s just wait one more week.</p>
</blockquote>
<p>It sounds responsible. Thoughtful, even. Like you care about quality. Like you're doing the right thing by holding the line a little longer.</p>
<p>But that one week wait? It almost always does more harm than good.</p>
<p>This isn’t about being reckless. It’s about recognising that speed, momentum and real world feedback matter more than polish or internal opinions.</p>
<p>Here’s why:</p>
<h2 id="heading-you-delay-the-only-feedback-that-matters">You Delay the Only Feedback That Matters</h2>
<p>When you delay shipping, you’re not just pausing delivery, you’re pausing learning.</p>
<p>Every week that you don’t ship, you’re not getting real feedback. You’re not hearing from users. You’re not validating assumptions. You’re not observing any behaviour.</p>
<p>You’re in a bubble. And the longer you stay there, the worse your instincts get.</p>
<p>Let me tell you about a feature I worked on a while ago. It was basically done, but I thought it needed some UI tweaks. Nothing major, just “a little more polish.” So we waited a few days.</p>
<p>Then design wanted to weigh in. Then someone noticed edge cases in the logic. Then found some edge cases. All valid points but each added a few more days.</p>
<p>When we finally shipped, users weren’t using the feature the way we thought they would. Our assumptions were off. We ended up reworking the entire thing.</p>
<p>Had we just shipped it sooner and behind a flag and to a small cohort, we’d have learned that immediately. We could’ve avoided weeks of overthinking and iterations built on the wrong premise :)</p>
<h2 id="heading-momentum-is-a-force-just-use-it-or-lose-it">Momentum is a Force. Just Use It or Lose It</h2>
<p>Tbh momentum is invisible but it drives everything.</p>
<p>Teams that ship regularly feel alive. There's a rhythm. Energy builds. People are excited. You feel progress. <em>You just see it.</em></p>
<p>I’ve worked on teams where a feature sits “basically done” for days because someone is waiting for the perfect time to launch. After a while, no one is excited about it anymore. By the time it goes live, it feels like old news.</p>
<h2 id="heading-perfect-doesnt-matter-if-no-ones-using-it">Perfect doesn’t matter if no one’s using it</h2>
<p>This one is simple: users don’t care about how “perfect” something is. They care whether it solves their problem.</p>
<p>You can polish a feature forever, but if no one wants it or if you built the wrong thing, it doesn’t matter. You won’t know until you ship.</p>
<p>Shipping early lets you see what’s working and what’s not. You can always fix rough edges later. You can’t fix a feature that no one’s using because it never shipped.</p>
<h2 id="heading-internal-feedback-cant-replace-real-usage">Internal Feedback Can’t Replace Real Usage</h2>
<p>Internal feedback is valuable until it becomes a loop.</p>
<p>Too often, teams confuse alignment with validation. You end up with endless Figma comments, “one more” content suggestion, or a last-minute re-review of UX copy. I once spent two full days navigating a debate about empty state wording.</p>
<p>Internal alignment helps smooth out obvious friction but it can’t tell you what users will actually do.</p>
<blockquote>
<p>This doesn't mean you shouldn't focus on delighting users.</p>
</blockquote>
<h2 id="heading-how-to-ship-fast-without-breaking-prod">How to Ship Fast Without Breaking Prod</h2>
<p>“Move fast” doesn’t mean “move carelessly.”</p>
<p>It means being deliberate, focused and outcome-driven. Here's how to ship fast and smart:</p>
<ul>
<li><p><strong>Use feature flags:</strong> Ship behind toggles. Release to internal users or beta cohorts. You don’t have to go full 100% right away.</p>
</li>
<li><p><strong>Break things down:</strong> Don’t wait for a feature to be “complete.” Ship pieces that deliver value even if small. Stack wins :)</p>
</li>
<li><p><strong>Track usage:</strong> Ship with analytics. Know what’s being used and how.</p>
</li>
<li><p><strong>Document the gaps:</strong> If something is missing, call it out. Tell users what’s coming if required.</p>
</li>
<li><p><strong>Build for today:</strong> Don't wait for what might be needed in the future. You can always make changes later. But you can't improve something that hasn't been released.</p>
</li>
</ul>
<h2 id="heading-so-why-are-you-really-waiting">So… <strong>Why Are You Really Waiting?</strong></h2>
<p>The next time someone suggests holding off another week, ask:</p>
<blockquote>
<p>“What exactly are we waiting for?”</p>
</blockquote>
<p>If the answer isn’t a critical bug, a user impacting flaw or a real blocker then it’s probably not worth the delay.</p>
<p>You’re not waiting for “the perfect moment.” You’re just… waiting.</p>
<p>So stop and</p>
<p><strong>Ship it.</strong><br />Then learn. Then improve. Then ship again.</p>
<p>That’s how great products are built not by chasing polish endlessly but by solving real problems in the hands of real people.</p>
<h2 id="heading-but-wait-does-that-mean-quality-doesnt-matter"><strong>But Wait, Does That Mean Quality Doesn’t Matter?</strong></h2>
<p>Not at all.</p>
<p><strong>Code quality absolutely matters.</strong> It’s the foundation that allows you to move fast safely. Well written, modular, well tested code makes it easier to iterate quickly, fix issues and extend functionality without fear.</p>
<p>But here's the thing: spending too much time perfecting code on its own rarely makes the product better. Trying to make everything perfect too soon can be as harmful as rushing to <strong>ship without care.</strong></p>
<p>Instead of aiming for perfect code out of the gate, aim for:</p>
<ul>
<li><p><strong>Clean, readable, testable code</strong> that’s good enough to ship.</p>
</li>
<li><p><strong>Well scoped PRs</strong> that are easy to review and also reason about.</p>
</li>
<li><p><strong>Fast feedback loops</strong> that catch real issues very early.</p>
</li>
<li><p><strong>Monitoring and metrics</strong> just to know when something breaks.</p>
</li>
</ul>
<p>Good engineering is about balance.</p>
<blockquote>
<p><strong>It’s not speed or quality, it’s speed with quality.</strong></p>
</blockquote>
<p>So yes write good code. But don’t let “perfect” code hold you back from delivering value</p>
]]></content:encoded></item><item><title><![CDATA[Your AI Assistant Is Only as Useful as Your Last Sentence]]></title><description><![CDATA[Introduction
When I first started using tools like Cursor, Claude or ChatGPT for frontend development, I expected magic. I thought I could just highlight a buggy snippet, slap on a comment like:

Fix this

…and the AI would instantly understand every...]]></description><link>https://blog.adyasha.in/your-ai-assistant-is-only-as-useful-as-your-last-sentence</link><guid isPermaLink="true">https://blog.adyasha.in/your-ai-assistant-is-only-as-useful-as-your-last-sentence</guid><category><![CDATA[AI]]></category><category><![CDATA[Frontend Development]]></category><category><![CDATA[Prompt Engineering]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Fri, 30 May 2025 07:42:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1748591083280/7fc23adc-b8e4-4c75-b9df-a7891b337551.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>When I first started using tools like Cursor, Claude or ChatGPT for frontend development, I expected magic. I thought I could just highlight a buggy snippet, slap on a comment like:</p>
<blockquote>
<p><em>Fix this</em></p>
</blockquote>
<p>…and the AI would instantly understand everything: my tech stack, styling conventions, component logic, even the bugs I hadn’t diagnosed yet.</p>
<p>What I got instead? Half working suggestions. Sometimes vaguely helpful, other times flat out broken. It was like working with someone who knew how to type but not how to think.</p>
<p>Then it clicked.</p>
<p>These tools aren’t your senior engineer, they’re your fastest junior hire. They work fast, but you need to be precise.</p>
<p>Everything changed when I started applying <strong>prompt engineering principles</strong> to frontend work. Here’s exactly how I did it and how you can too.</p>
<hr />
<h2 id="heading-1-set-the-stage-provide-context-like-you-are-pairing">1. Set the Stage: Provide Context Like You are Pairing</h2>
<p>Context is your most powerful tool. Even though Cursor can see your file, it can’t read your mind.</p>
<p>Imagine asking a junior dev to help with a bug and only saying:</p>
<blockquote>
<p><em>"Can you fix this?"</em></p>
</blockquote>
<p>They would stare back at you: <em>What is “this”? What is broken? What’s the expected result?</em></p>
<p>AI works the same way. It doesn't know your framework, your styling system or whether you’re in a client or server component unless you tell it.</p>
<h3 id="heading-bad-prompt">🚫 Bad Prompt:</h3>
<pre><code class="lang-plaintext">Fix this useEffect
</code></pre>
<h3 id="heading-good-prompt">✅ Good Prompt:</h3>
<pre><code class="lang-plaintext">This is a React client component using useState and useEffect.
It fetches user data by ID, but runs twice in development due to React 18 Strict Mode.
Prevent double-fetching. Use a flag or AbortController. No external state management libs.
</code></pre>
<h3 id="heading-why-this-works">Why This Works:</h3>
<ul>
<li><p>Specifies the environment: React 18 + dev mode quirks</p>
</li>
<li><p>Defines the goal: fetch only once</p>
</li>
<li><p>Lists constraints: no state libraries</p>
</li>
<li><p>Mentions framework and component type</p>
</li>
</ul>
<p>With this, the AI suggested a clean fix: a <code>useRef</code> flag, proper cleanup, and fetch control. It worked first try.</p>
<h3 id="heading-another-example">Another Example:</h3>
<h3 id="heading-prompt">Prompt:</h3>
<pre><code class="lang-plaintext">I’m using Next.js 14 App Router with Server Components.
Convert this client component to use a server action to handle form submission.
The form sends name + email and shows a success toast.
</code></pre>
<h3 id="heading-result">Result:</h3>
<p>Cursor created a server action, updated the form to <code>useFormState</code>, passed it correctly into the client component and added toast logic using <code>useEffect</code>.</p>
<h2 id="heading-2-define-the-goal-tell-the-ai-what-better-means">2. Define the Goal: Tell the AI What "Better" Means</h2>
<p>“Improve this component” is not a prompt. It’s a hope :). Your idea of “better” might mean:</p>
<ul>
<li><p>More readable</p>
</li>
<li><p>More performant</p>
</li>
<li><p>Smaller bundle</p>
</li>
<li><p>Idiomatic to your stack</p>
</li>
</ul>
<p>Unless you <strong>define the success criteria</strong>, the AI will make assumptions. And you might not like them.</p>
<blockquote>
<p>Vague adjectives = vague output.</p>
</blockquote>
<p>Let’s say you have a clunky card component:</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">{{</span> <span class="hljs-attr">padding:</span> <span class="hljs-attr">10</span>, <span class="hljs-attr">border:</span> "<span class="hljs-attr">1px</span> <span class="hljs-attr">solid</span> #<span class="hljs-attr">ccc</span>" }}&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>{title}<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>{description}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<h3 id="heading-bad-prompt-1">🚫 Bad Prompt:</h3>
<pre><code class="lang-plaintext">Optimize this component
</code></pre>
<h3 id="heading-result-1">Result:</h3>
<p>AI might add unnecessary flex layout or wrap everything in a grid for no reason and inline more styles.</p>
<h3 id="heading-good-prompts-with-clear-goals">✅ Good Prompts (with clear goals):</h3>
<pre><code class="lang-plaintext">Improve readability and styling. Use Tailwind.
Add padding, shadow, rounded corners, and hover transition.
Make it responsive and mobile-friendly.
</code></pre>
<h3 id="heading-result-2">Result:</h3>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">className</span>=<span class="hljs-string">"max-w-sm p-4 rounded-lg shadow-md bg-white hover:scale-105 transition-transform"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">h2</span> <span class="hljs-attr">className</span>=<span class="hljs-string">"text-lg font-bold"</span>&gt;</span>{title}<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">className</span>=<span class="hljs-string">"text-gray-600"</span>&gt;</span>{description}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>Each of these tells the AI:
</code></pre>
<h3 id="heading-why-this-works-1">Why this works:</h3>
<ul>
<li><p>Mention multiple axes:</p>
<ul>
<li><p><strong>"Use Tailwind"</strong> - you tell it how to style</p>
</li>
<li><p><strong>"Improve readability"</strong> - guides semantic naming</p>
</li>
<li><p><strong>"Add hover transition"</strong> - you define UX behavior</p>
</li>
<li><p><strong>"Responsive"</strong> - it might add <code>max-w</code>, <code>sm:</code>, <code>md:</code> classes</p>
</li>
</ul>
</li>
</ul>
<p>    In short: you removed ambiguity.</p>
<h2 id="heading-3-split-complex-tasks-into-promptable-steps">3. Split Complex Tasks Into Promptable Steps</h2>
<p>Don’t ask the AI to build Rome in one prompt. Think like a developer: break features into components.</p>
<blockquote>
<p>Prompt like you write code: <strong>component-first, feature-later</strong>.</p>
</blockquote>
<h3 id="heading-bad-prompt-2">🚫 Bad Prompt:</h3>
<pre><code class="lang-plaintext">Build a responsive product list with filters, search, sorting and pagination
</code></pre>
<p>The AI would:</p>
<ul>
<li><p>Add everything into one massive component</p>
</li>
<li><p>Mix up loading and UI logic</p>
</li>
<li><p>Miss the styling system I used (Tailwind)</p>
</li>
</ul>
<h3 id="heading-good-prompts-step-by-step">✅ Good Prompts (step by step)</h3>
<h4 id="heading-step-1-basic-fetch">Step 1: Basic fetch</h4>
<pre><code class="lang-plaintext">Create a component that fetches products from /api/products and displays them
</code></pre>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> [products, setProducts] = useState([]);
<span class="hljs-keyword">const</span> [loading, setLoading] = useState(<span class="hljs-literal">true</span>);

useEffect(<span class="hljs-function">() =&gt;</span> {
  fetch(<span class="hljs-string">'/api/products'</span>)
    .then(<span class="hljs-function"><span class="hljs-params">res</span> =&gt;</span> res.json())
    .then(setProducts)
    .finally(<span class="hljs-function">() =&gt;</span> setLoading(<span class="hljs-literal">false</span>));
}, []);
</code></pre>
<h4 id="heading-step-2-search">Step 2: Search</h4>
<pre><code class="lang-plaintext">// Add a search input that filters products by name (case-insensitive)
</code></pre>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> [query, setQuery] = useState(<span class="hljs-string">""</span>);

<span class="hljs-keyword">const</span> filtered = products.filter(<span class="hljs-function"><span class="hljs-params">p</span> =&gt;</span>
  p.name.toLowerCase().includes(query.toLowerCase())
);
</code></pre>
<h4 id="heading-step-3-sort">Step 3: Sort</h4>
<pre><code class="lang-plaintext">// Add dropdown to sort filtered products by name (A-Z, Z-A)
</code></pre>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> [sortOrder, setSortOrder] = useState(<span class="hljs-string">"asc"</span>);

<span class="hljs-keyword">const</span> sorted = [...filtered].sort(<span class="hljs-function">(<span class="hljs-params">a, b</span>) =&gt;</span> {
  <span class="hljs-keyword">return</span> sortOrder === <span class="hljs-string">"asc"</span>
    ? a.name.localeCompare(b.name)
    : b.name.localeCompare(a.name);
});
</code></pre>
<h4 id="heading-step-4-pagination">Step 4: Pagination</h4>
<pre><code class="lang-plaintext">// Add pagination: 10 items per page, with next/prev buttons
</code></pre>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> [page, setPage] = useState(<span class="hljs-number">1</span>);
<span class="hljs-keyword">const</span> itemsPerPage = <span class="hljs-number">10</span>;
<span class="hljs-keyword">const</span> paginated = sorted.slice((page - <span class="hljs-number">1</span>) * itemsPerPage, page * itemsPerPage);
</code></pre>
<h3 id="heading-why-this-works-2">Why this works:</h3>
<ul>
<li><p>Smaller prompts are easier for the model to handle</p>
</li>
<li><p>Easier for me to review and test each change</p>
</li>
<li><p>Reduces the chance of logic errors or inconsistent code</p>
</li>
</ul>
<p>This is how you would break it into Jira tickets. Prompting works the same way.</p>
<h2 id="heading-4-use-behavioral-examples-and-edge-cases">4. Use Behavioral Examples and Edge Cases</h2>
<p>One of the most underrated prompt patterns is giving examples. Adding example inputs and outputs turns your prompt into a contract.</p>
<h3 id="heading-bad-prompt-3">❌ Bad Prompt</h3>
<pre><code class="lang-plaintext">Format this number into currency
</code></pre>
<h3 id="heading-prompt-use-tdd-like-prompts">✅ Prompt (Use TDD-Like Prompts)</h3>
<pre><code class="lang-plaintext">Create a formatPrice(amount) function:
Input: 12.5 -&gt; Output: "$12.50"
Input: 5 -&gt; Output: "$5.00"
</code></pre>
<h3 id="heading-bad-prompt-4">❌ Bad Prompt</h3>
<pre><code class="lang-plaintext">Add a search bar
</code></pre>
<h3 id="heading-with-edge-case">✅ With Edge Case:</h3>
<pre><code class="lang-plaintext">Add a search input that filters products by name.
Case-insensitive. If query is "mob", it should match "Mobile", "MobX", etc.
If no matches, show "No results found".
</code></pre>
<p>Now the AI:</p>
<ul>
<li><p>Uses <code>toLowerCase()</code> for comparison</p>
</li>
<li><p>Adds empty-state UI</p>
</li>
<li><p>Handles common edge cases automatically</p>
</li>
</ul>
<h3 id="heading-why-this-works-3"><strong>Why This Works:</strong></h3>
<p>AI tools tend to <em>overlook</em> edge behavior unless explicitly prompted. Guardrails matter.</p>
<h2 id="heading-5-use-roles-to-shift-quality">5. Use Roles to Shift Quality</h2>
<p>Prompt the AI to take on a role. You will often get a <strong>shift in tone, architecture, and quality</strong>.</p>
<pre><code class="lang-plaintext">Act like a senior React developer. Review this component for potential bugs or anti-patterns.
</code></pre>
<p>Or</p>
<pre><code class="lang-plaintext">You're a mentor explaining this useEffect logic to a junior dev. Add comments line-by-line.
</code></pre>
<p>This usually makes the AI:</p>
<ul>
<li><p>Explain itself better</p>
</li>
<li><p>Write clearer code</p>
</li>
<li><p>Catch things it otherwise skips</p>
</li>
</ul>
<h3 id="heading-another-favourite">Another Favourite:</h3>
<pre><code class="lang-plaintext">You are a Tailwind expert. Rewrite this JSX with clean, utility-first styling and responsive behavior.
</code></pre>
<p>It uses <code>flex</code>, <code>gap</code>, <code>max-w</code>, <code>hover:</code> and other best practices not inline styles or CSS classes.</p>
<h2 id="heading-takeaway-prompting-product-thinking">Takeaway: Prompting = Product Thinking</h2>
<p><a target="_blank" href="https://x.com/gregisenberg/status/1928230473228058860"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748633407722/fc133b8d-7c36-4042-9075-cd27246a6dd3.png" alt class="image--center mx-auto" /></a></p>
<p>At its core, writing great prompts is no different from writing great specs or tickets:</p>
<ul>
<li><p>Be clear</p>
</li>
<li><p>Define success</p>
</li>
<li><p>Think in steps</p>
</li>
<li><p>Handle edge cases</p>
</li>
<li><p>Communicate like a teammate</p>
</li>
</ul>
<p>AI isn’t here to replace good engineers, it amplifies great ones. Treat your AI assistant like a sharp new hire: fast, eager but needing direction.</p>
<p>The clearer you are, the better the code gets.</p>
]]></content:encoded></item><item><title><![CDATA[Start With the Customer. Always.]]></title><description><![CDATA[I recently picked up the book Working Backwards and honestly I loved it. It gives a peek inside how Amazon works, not in a dramatic or flashy way, but in a very practical, real sense. The book talks about the systems, the thinking, the decision makin...]]></description><link>https://blog.adyasha.in/start-with-the-customer-always</link><guid isPermaLink="true">https://blog.adyasha.in/start-with-the-customer-always</guid><category><![CDATA[Amazon]]></category><category><![CDATA[customer]]></category><category><![CDATA[book review]]></category><category><![CDATA[working-backwards]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Mon, 12 May 2025 06:27:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747031160127/fa791836-f00c-44bd-82f5-8175752728cf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently picked up the book <em>Working Backwards</em> and honestly I loved it. It gives a peek inside how Amazon works, not in a dramatic or flashy way, but in a very practical, real sense. The book talks about the systems, the thinking, the decision making. A lot of it made me think about how we build products and run teams.</p>
<p>So I wrote down some notes and thoughts that stayed with me. Sharing them here in case someone else finds them useful.</p>
<h2 id="heading-1-start-with-the-customer-and-work-backwards">1. Start with the Customer and Work Backwards</h2>
<p>This is a big one. It’s actually where the book and the blog gets its name. The idea is that you don’t start with a business idea or a technical solution, you start by deeply understanding the customer’s problem.</p>
<p><em>What do they need? What’s frustrating them? What would make their life easier?</em></p>
<p>Then, once you have figured that out, you work backwards to build a solution. You think about what kind of product would solve that, how to make it happen within your own limitations (team, time, money, tech) and then go from there.</p>
<p>It’s a simple concept but very easy to forget. A lot of teams (and I have done this too) just build things because they can, not because someone asked for it or needed it.</p>
<h2 id="heading-2-obsess-over-the-customer">2. Obsess Over the Customer</h2>
<p>At Amazon, they are not just “customer-focused”, they are obsessed. It’s a mindset where every decision is rooted in how it will affect the customer.</p>
<p>And it’s not always about asking customers what they want. Sometimes customers don’t even know. It’s about digging deeper.</p>
<p><em>What are their pain points? What do they complain about quietly? What slows them down?</em></p>
<p>For example: if you are building an online form and 20% of people drop off halfway, you don’t just say “that’s normal”, you ask <em>why</em>. Is it too long? Confusing? Annoying? That’s where customer obsession kicks in. You fix the little things that people didn’t even know could be better.</p>
<h2 id="heading-3-the-bar-raiser-thing">3. The bar raiser thing</h2>
<p>One hiring practice they talk about is this idea of “raising the bar.” Basically, every person you hire should be better than the average current team member in at least one meaningful way.</p>
<p>Not better at everything. Not perfect. But they should bring something new, something they are great at. Maybe it’s design, maybe it’s speed, maybe it’s empathy. It keeps the team growing and evolving.</p>
<p>I really liked this. Not because it’s about hiring “only the best” (whatever that means) but because it’s about thinking hard about <em>why</em> someone should join your team and how they make it better.</p>
<h2 id="heading-4-single-threaded-ownership">4. Single-threaded ownership</h2>
<p>This one made a lot of sense to me. The idea is simple: if something’s important, give it a single owner. One person whose full time job is to make sure it succeeds.</p>
<p>Too often, we spread things across 3 different teams, or assign it to someone already juggling 5 other things. Then we wonder why it moves slowly or gets stuck.</p>
<p>Giving one person full ownership and the freedom to focus, just works. It brings clarity and accountability. If something matters, it should have a name next to it.</p>
<h2 id="heading-5-prfaq-method">5. PR/FAQ method</h2>
<p>One of their most famous practices is writing a fake press release and FAQ before building a product.</p>
<p>The press release explains what the product does, why it matters, and how it helps the customer as if it’s already launched. The FAQ then answers common questions and challenges, like how it works, what might go wrong, or what edge cases need to be handled.</p>
<p>This is such a smart exercise. It forces you to think from the customer’s point of view and make sure the product is even worth building before you get too deep.</p>
<p>It’s also a great way to align the team. Everyone reads the same doc and understands the vision upfront.</p>
<h2 id="heading-6-input-vs-output-metrics">6. Input vs output metrics</h2>
<p>This part hit home. Most of us track output metrics things like revenue, user growth, engagement. But Amazon puts a lot more focus on input metrics, the things you can control that lead to those outcomes.</p>
<p>For example: if your goal is more signups, don’t just look at the signup number. Look at things like page load time, how clear your CTA is, whether people drop off at step 2. These are inputs you can act on.</p>
<p>Fixing those leads to better outputs naturally. It’s more actionable and more motivating.</p>
<h2 id="heading-7-the-flywheel-idea">7. The flywheel idea</h2>
<p>There is this flywheel diagram Jeff Bezos drew back in the day. It shows how improving one part of the business feeds into others.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746976485000/fd0f620e-9bf1-4a60-abfc-d229c089574c.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>A better customer experience brings more traffic</p>
</li>
<li><p>More traffic attracts more sellers</p>
</li>
<li><p>More sellers means better selection</p>
</li>
<li><p>Better selection improves experience</p>
</li>
<li><p>And around it goes</p>
</li>
</ul>
<p>It’s this loop that feeds itself. The key is identifying what your version of that flywheel is and figuring out which part you can push to make the whole thing spin faster.</p>
<hr />
<p>The book ends on a very real note. You don’t need to do everything Amazon does. In fact, you shouldn’t.</p>
<p>But you can take the ideas that make sense for you. Try them out. Adapt them to your team, your culture, your goals. Whether that’s writing PR/FAQs, focusing more on input metrics or just asking better questions.</p>
<p>If you have read Working Backwards too, would love to hear what you took away from it. And if you haven’t read it yet, it’s definitely worth picking up.</p>
]]></content:encoded></item><item><title><![CDATA[How React Really Works (And What Next.js Adds on Top)]]></title><description><![CDATA[Intro ✨
Okay, full disclosure: I had no plans to write this. I was supposed to be working on a blog about my solo trip (which is still just a folder of photos, honestly) but instead, I ended up explaining React and Next.js to my cousin over the weeke...]]></description><link>https://blog.adyasha.in/how-react-really-works-and-what-nextjs-adds-on-top</link><guid isPermaLink="true">https://blog.adyasha.in/how-react-really-works-and-what-nextjs-adds-on-top</guid><category><![CDATA[React]]></category><category><![CDATA[Next.js]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Frontend Development]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 06 Apr 2025 19:27:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1743967467191/f87d1045-c3e8-47e7-853d-45ef34a9cb9d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-intro">Intro ✨</h2>
<p>Okay, full disclosure: I had no plans to write this. I was <em>supposed</em> to be working on a blog about my solo trip (which is still just a folder of photos, honestly) but instead, I ended up explaining React and Next.js to my cousin over the weekend. He was super curious about how stuff like <code>useState</code> and server-side rendering actually works. I grabbed a pen, sketched things out and it clicked for him. That moment that “aha!” made me think, hey, maybe this could help others <em>too.</em></p>
<p>So this blog is more of a brain dump. If you’re someone who knows React but wants to understand <em>why</em> things work the way they do, this is for you.</p>
<hr />
<h2 id="heading-what-happens-when-you-write-react-code">What Happens When You Write React Code?</h2>
<p>Let’s start with what you actually write:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Hello, World!<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span></span>;
}
</code></pre>
<p>It might feel like HTML inside JavaScript but this is actually JSX. And JSX isn’t something the browser understands directly, it gets converted by a compiler (like Babel) to a function call:</p>
<pre><code class="lang-javascript">React.createElement(<span class="hljs-string">'h1'</span>, <span class="hljs-literal">null</span>, <span class="hljs-string">'Hello, World!'</span>);
</code></pre>
<p>That call creates a <strong>React element</strong>, not an actual DOM node basically just a plain JavaScript object that describes what you want on screen:</p>
<pre><code class="lang-javascript">{
  <span class="hljs-attr">type</span>: <span class="hljs-string">'h1'</span>,
  <span class="hljs-attr">props</span>: {
    <span class="hljs-attr">children</span>: <span class="hljs-string">'Hello, World!'</span>
  },
  <span class="hljs-attr">key</span>: <span class="hljs-literal">null</span>,
  <span class="hljs-attr">ref</span>: <span class="hljs-literal">null</span>
}
</code></pre>
<p>This is React's <strong>Virtual DOM</strong>, a lightweight, in memory representation of your UI. React holds onto this to later figure out what needs to be updated in the actual DOM.</p>
<hr />
<h2 id="heading-what-actually-happens-when-a-component-renders">What Actually Happens When a Component Renders?</h2>
<p>Consider:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Counter</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> [count, setCount] = useState(<span class="hljs-number">0</span>);
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> setCount(count + 1)}&gt;{count}<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></span>;
}
</code></pre>
<p>Here's what happens:</p>
<ol>
<li><p>React renders the component, calling it like a function.</p>
</li>
<li><p>It sets up internal tracking via <strong>hooks</strong> by an internal "dispatcher".</p>
</li>
<li><p>When <code>useState</code> runs, it checks if it's the first render or a re-render and either initializes state or returns the latest.</p>
</li>
<li><p>When you click the button, <code>setCount</code> triggers a re-render.</p>
</li>
<li><p>React compares the new return value with the previous one and applies only the changed parts (we will talk about that in reconciliation).</p>
</li>
</ol>
<h3 id="heading-class-components">Class Components:</h3>
<pre><code class="lang-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Counter</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">React</span>.<span class="hljs-title">Component</span> </span>{
  state = { <span class="hljs-attr">count</span>: <span class="hljs-number">0</span> };

  increment = <span class="hljs-function">() =&gt;</span> {
    <span class="hljs-built_in">this</span>.setState({ <span class="hljs-attr">count</span>: <span class="hljs-built_in">this</span>.state.count + <span class="hljs-number">1</span> });
  };

  render() {
    <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{this.increment}</span>&gt;</span>{this.state.count}<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></span>;
  }
}
</code></pre>
<p>Same idea, more boilerplate. Internally, React assigns an <strong>updater</strong> to manage <code>setState</code>, which schedules a re-render.</p>
<blockquote>
<p>Class components give you lifecycle methods but they have largely been replaced by <code>useEffect</code>, <code>useLayoutEffect</code> etc in modern apps.</p>
</blockquote>
<hr />
<h2 id="heading-reconciliation-the-diff-that-keeps-things-fast">Reconciliation: The Diff That Keeps Things Fast</h2>
<p>This is where things get fun. Reconciliation is React’s algorithm for updating the UI efficiently.</p>
<h3 id="heading-why-does-this-matter">Why does this matter?</h3>
<p>DOM operations are expensive. So rather than refreshing the whole page (like jQuery used to do), React compares what’s changed and only touches those parts.</p>
<h3 id="heading-how-it-works">How it works:</h3>
<ol>
<li><p>A component’s state changes.</p>
</li>
<li><p>React re-renders that component and builds a new tree of React elements.</p>
</li>
<li><p>It compares this new tree with the old one.</p>
</li>
<li><p>React calculates the <strong>minimum number of operations</strong> to apply to the DOM.</p>
</li>
<li><p>Only the changed nodes are updated.</p>
</li>
</ol>
<p>This process is called <strong>diffing</strong> and it’s fast O(n) because React uses some smart assumptions:</p>
<ul>
<li><p>Elements with the same type get updated.</p>
</li>
<li><p>Keys help identify elements in a list.</p>
</li>
<li><p>If keys or types change, React assumes it’s a new element.</p>
</li>
</ul>
<h3 id="heading-real-example">Real example:</h3>
<pre><code class="lang-javascript">&lt;ul&gt;
  {items.map(<span class="hljs-function"><span class="hljs-params">item</span> =&gt;</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">li</span> <span class="hljs-attr">key</span>=<span class="hljs-string">{item.id}</span>&gt;</span>{item.name}<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span></span>)}
&lt;/ul&gt;
</code></pre>
<p>With stable keys, React knows which list items were removed, moved or added.</p>
<p>This optimization is why React apps feel snappy.</p>
<hr />
<h2 id="heading-the-rendering-pipeline-in-react">The Rendering Pipeline in React</h2>
<p>Here’s how rendering flows:</p>
<ol>
<li><p>JSX turns into React elements</p>
</li>
<li><p>React creates or updates the Fiber tree</p>
</li>
<li><p>Fiber nodes map to real DOM nodes via <code>react-dom</code></p>
</li>
<li><p>DOM updates are batched and applied</p>
</li>
</ol>
<p>React renders in two phases:</p>
<ul>
<li><p><strong>Render phase:</strong> pure, no DOM mutations</p>
</li>
<li><p><strong>Commit phase:</strong> applies DOM changes, runs effects</p>
</li>
</ul>
<p>The Fiber architecture enables React to pause and resume rendering, key to features like Suspense and Concurrent Mode.</p>
<hr />
<h2 id="heading-where-nextjs-comes-in">Where Next.js Comes In</h2>
<p>React doesn’t care where it renders. Browser, native, terminal? It just gives you the virtual DOM.</p>
<p>But when you want:</p>
<ul>
<li><p>SEO</p>
</li>
<li><p>Server rendered pages</p>
</li>
<li><p>Static pages with dynamic data</p>
</li>
</ul>
<p>...you need more. That’s where <strong>Next.js</strong> shines.</p>
<h3 id="heading-what-nextjs-adds">What Next.js Adds</h3>
<ul>
<li><p>Server-side rendering (SSR)</p>
</li>
<li><p>Static site generation (SSG)</p>
</li>
<li><p>File-based routing</p>
</li>
<li><p>Built-in API routes</p>
</li>
<li><p>Image optimization</p>
</li>
</ul>
<p>It’s not just a framework — it’s an opinionated toolkit that works <em>with</em> React to make your life easier.</p>
<h3 id="heading-traditional-spa-react-only">Traditional SPA (React only)</h3>
<ol>
<li><p>Server returns a mostly empty HTML shell</p>
</li>
<li><p>JS bundle loads</p>
</li>
<li><p>React mounts and fetches data</p>
</li>
<li><p>UI finally appears</p>
</li>
</ol>
<h3 id="heading-with-nextjs-ssr">With Next.js (SSR)</h3>
<ol>
<li><p>Server renders full HTML page with data</p>
</li>
<li><p>User sees meaningful content immediately</p>
</li>
<li><p>React hydrates it in the browser</p>
</li>
</ol>
<hr />
<h2 id="heading-whats-hydration">What’s Hydration?</h2>
<p>Let’s say you server render a page. The user gets full HTML: content, structure, everything.</p>
<p>But it’s not interactive yet.</p>
<p><strong>Hydration</strong> is the process of attaching React’s logic i.e event listeners, hooks, state to that HTML. It turns your static HTML into a live React app in the browser without re-rendering the DOM.</p>
<p>This is possible because Next.js sends a JSON blob:</p>
<pre><code class="lang-javascript">&lt;script id=<span class="hljs-string">"__NEXT_DATA__"</span>&gt;{ props, paths, page info }&lt;/script&gt;
</code></pre>
<p>This contains the props returned by <code>getServerSideProps</code> or <code>getStaticProps</code>, letting React "catch up" with what’s already on screen.</p>
<blockquote>
<p>⚠️ If hydration fails (due to mismatch), React logs warnings and may re-render.</p>
</blockquote>
<hr />
<h2 id="heading-things-you-cant-do-on-the-server">Things You Can't Do on the Server</h2>
<p>Server rendering has limits. You are in a Node.js environment, not a browser. So:</p>
<ul>
<li><p>No <code>window</code>, <code>document</code>, <code>localStorage</code></p>
</li>
<li><p>No user event handlers</p>
</li>
<li><p>No CSS media query logic</p>
</li>
<li><p>No DOM measurements (like <code>getBoundingClientRect()</code>)</p>
</li>
</ul>
<blockquote>
<p>If you need those, defer them to <code>useEffect()</code> which only runs on the client.</p>
</blockquote>
<hr />
<h2 id="heading-nextjs-rendering-modes">Next.js Rendering Modes</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Mode</td><td>API Function</td><td>Runs On</td><td>Use Case</td></tr>
</thead>
<tbody>
<tr>
<td>SSR</td><td><code>getServerSideProps</code></td><td>Every request</td><td>Personalised content</td></tr>
<tr>
<td>SSG</td><td><code>getStaticProps</code></td><td>At build time</td><td>Blogs, marketing pages</td></tr>
<tr>
<td>ISR</td><td><code>revalidate</code> key in <code>getStaticProps</code></td><td>On demand</td><td>News feeds, product updates</td></tr>
</tbody>
</table>
</div><p>This flexibility lets you choose performance or freshness depending on your page needs.</p>
<hr />
<h2 id="heading-final-thoughts">Final Thoughts</h2>
<p>React gives you the tools to build UIs efficiently with declarative, component-driven code. It abstracts the pain of DOM manipulation and makes state management predictable.</p>
<p>But when you need a full-fledged web app with performance, SEO and server integration, you’ll want a framework like Next.js.</p>
<p>Next.js doesn’t replace React. It completes it.</p>
<hr />
<p>Want to turn this into a series or go even deeper into Suspense, useTransition or how the React scheduler works? Let me know.</p>
<p>Also yes, that solo trip blog is still coming. Probably. Eventually :)</p>
]]></content:encoded></item><item><title><![CDATA[A Few Lines of Ruby on Rails...]]></title><description><![CDATA[Frontend development has always been my comfort zone. JavaScript, CSS, React — I knew how to bring designs to life and make things interactive.
Backend? That was someone else’s job. But then, I had to make a backend change.
At first, my instinct was ...]]></description><link>https://blog.adyasha.in/a-few-lines-of-ruby-on-rails</link><guid isPermaLink="true">https://blog.adyasha.in/a-few-lines-of-ruby-on-rails</guid><category><![CDATA[Ruby on Rails]]></category><category><![CDATA[Ruby]]></category><category><![CDATA[Rails]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 02 Mar 2025 17:47:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740937448861/3b62e3f9-0fb7-4a0c-ae27-5b13c3d1a8c0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Frontend development has always been my comfort zone. JavaScript, CSS, React — I knew how to bring designs to life and make things interactive.</p>
<p>Backend? That was someone else’s job. But then, I had to make a backend change.</p>
<p>At first, my instinct was to ask a backend developer for help. But then, I thought—how hard could it be? After all, we have AI now, right?</p>
<p>I was working on the onboarding flow for job seekers, ensuring we fetched relevant data from their preferences and resumes. We already had a service extracting skills from resumes, so all I had to do was send one more extra field. It sounds simple enough.</p>
<p>I wrote the code, pushed the changes, and tested it locally. It worked! But something about it fascinated me. Instead of just moving on, I wanted to <strong>really</strong> understand what was happening under the hood. That curiosity pushed me deeper into Rails.</p>
<h2 id="heading-the-mistakes-i-made-and-what-they-taught-me">The Mistakes I Made (And What They Taught Me)</h2>
<p>I opened the codebase, trying to approach it from a JavaScript developer’s mindset. I looked for familiar patterns, if-else statements, function calls and data manipulations.</p>
<p>My first instinct was: "Let me write this from scratch."</p>
<h3 id="heading-1-wheres-my-object"><strong>1. Where’s My Object?</strong></h3>
<p>I initially wrote something like this:</p>
<pre><code class="lang-javascript">resume = HackerResume.where(hacker_id: current_hacker.id, <span class="hljs-attr">active</span>: <span class="hljs-literal">true</span>)
</code></pre>
<p>I assumed <code>where</code> would return a single object, just like <code>find</code> in JavaScript. But nope! <code>where</code> returns an <strong>ActiveRecord relation</strong> (basically, an array). What I actually needed was:</p>
<pre><code class="lang-javascript">resume = HackerResume.find_by(hacker_id: current_hacker.id, <span class="hljs-attr">active</span>: <span class="hljs-literal">true</span>)
</code></pre>
<p>Always check whether a method returns an array or a single object. <code>where</code> is great when expecting multiple results, but for a single record, <code>find_by</code> is the way to go.</p>
<h3 id="heading-2-i-forgot-to-import-the-model"><strong>2. I Forgot to Import the Model</strong></h3>
<p>Everything seemed fine, but then I hit a <code>NoMethodError</code>. Rails was telling me that <code>HackerResume</code> was undefined. I was confused because I saw it being used elsewhere in the code.</p>
<p>After some digging, I realized I had forgotten to <strong>import the model</strong> in the file where I was using it. I had to manually require it in my case.</p>
<pre><code class="lang-javascript">include Community::Apply::ResumeHelper
</code></pre>
<h3 id="heading-3-jobskills-didnt-work"><strong>3.</strong> <code>job.skills</code> <strong>Didn’t Work</strong></h3>
<p>I expected <code>job.skills</code> to return the skills associated with a job. But instead, it threw an error. Why? Because <code>job</code> was a <strong>hash</strong>, not an Active Record object!</p>
<p>Instead of this:</p>
<pre><code class="lang-javascript">job_skills = job.skills
</code></pre>
<p>I had to do:</p>
<pre><code class="lang-javascript">job_skills = job[<span class="hljs-string">'skills'</span>] || []
</code></pre>
<p>In Rails, hashes and ActiveRecord objects behave differently. Always check whether you're working with a model instance or raw data.</p>
<h3 id="heading-4-loop-didnt-update-the-array"><strong>4. Loop Didn’t Update the Array</strong></h3>
<p>I tried using a loop similar to JavaScript’s <code>forEach</code>, assuming it would update my array:</p>
<pre><code class="lang-javascript">active_jobs.each <span class="hljs-keyword">do</span> |job|
  job_skills = job[<span class="hljs-string">'skills'</span>] || []
  missing_skills, _, matched_score, matching_skills = matcher(job_skills, current_hacker.id, job[<span class="hljs-string">'job_url'</span>])
  job[<span class="hljs-string">'matched_score'</span>] = matched_score
  job[<span class="hljs-string">'matching_skills'</span>] = matching_skills
  job[<span class="hljs-string">'missing_skills'</span>] = missing_skills
end
</code></pre>
<p>But it didn’t update <code>active_jobs</code>. I learned that, unlike JavaScript modifying elements inside <code>.each</code> in Ruby doesn’t update the original array.<br />Instead, I had to use <code>.each_with_index</code> and update the array manually:</p>
<pre><code class="lang-javascript">active_jobs.each_with_index <span class="hljs-keyword">do</span> |job, index|
  job_skills = job[<span class="hljs-string">'skills'</span>] || []
  missing_skills, _, matched_score, matching_skills = matcher(job_skills, current_hacker.id, job[<span class="hljs-string">'job_url'</span>])

  active_jobs[index] = job.merge({
    <span class="hljs-string">'matched_score'</span> =&gt; matched_score,
    <span class="hljs-string">'matching_skills'</span> =&gt; matching_skills,
    <span class="hljs-string">'missing_skills'</span> =&gt; missing_skills
  })
end
</code></pre>
<h2 id="heading-what-i-learned-about-rails-and-ruby">What I Learned About Rails and Ruby</h2>
<p>At first, I thought of Rails as just another framework with its syntax. But the more I worked with it, the more I realized that Rails is built on Ruby’s unique strengths. To get better at Rails, I needed to understand Ruby first.</p>
<p>Rails follows a philosophy called <strong>Convention over Configuration</strong>, which means developers follow a set of predefined rules instead of writing repetitive configurations. This makes development faster but can be confusing if you don’t know the conventions. <a target="_blank" href="https://guides.rubyonrails.org/getting_started.html#convention-over-configuration">More on Convention over Configuration</a>.</p>
<p>Some key things I learned:</p>
<ul>
<li><p><strong>Ruby Methods Are Flexible</strong> – Unlike JavaScript, Ruby allows default values, named arguments, and dynamically defined methods.</p>
</li>
<li><p><strong>Blocks, Procs, and Lambdas</strong> – These allow Ruby to handle functions in different ways, often used in Active Record scopes and callbacks. <a target="_blank" href="https://www.rubyguides.com/2016/02/ruby-procs-and-lambdas/">Guide on Procs &amp; Lambdas</a>.</p>
</li>
<li><p><strong>Rails Uses Metaprogramming</strong> – This allows Rails to dynamically define methods, reducing repetitive code. <a target="_blank" href="https://rubylearning.com/satishtalim/metaprogramming_in_ruby.html">Understanding Metaprogramming</a>.</p>
</li>
<li><p><strong>Symbols Are More Efficient</strong> – <code>:symbol</code> is more memory-efficient than <code>"string"</code>, which is why it’s commonly used in Rails.</p>
</li>
<li><p><strong>Enumerable Methods Make Things Easier</strong> – Built-in methods like <code>map</code>, <code>select</code> and <code>reduce</code> made handling collections much simpler. <a target="_blank" href="https://ruby-doc.org/core-2.7.0/Enumerable.html">Enumerable Methods in Ruby</a>.</p>
</li>
<li><p>………………This all happened just last week, so I haven't had much time to read more but I would love to explore more of its magic!</p>
</li>
</ul>
<h2 id="heading-my-takeaway">My Takeaway</h2>
<p>What started as a simple task of adding some fields turned into a deep dive into debugging, reading documentation and learning the internals of Rails. Tbh, I just wanted to get the job done. But the more I explored, the more I appreciated the elegance of Ruby and Rails.</p>
<p>Looking back, my mistakes were lessons. They forced me to read source code, experiment, and understand concepts rather than just making things work.</p>
<p>Now, I feel a little confident diving into the backend world. And the next time I need to write Rails code, I won’t just be copying and pasting, I will actually know what I’m doing :)</p>
]]></content:encoded></item><item><title><![CDATA[What I Actually Learned from "The Hard Thing About Hard Things"]]></title><description><![CDATA[Look, I have been in tech for a while now and let me tell you – this book hit differently. Not because it's some mind-blowing revelation but because it finally puts into words all that messy stuff we deal with daily. Let me break it down for you :)
N...]]></description><link>https://blog.adyasha.in/what-i-actually-learned-from-the-hard-thing-about-hard-things</link><guid isPermaLink="true">https://blog.adyasha.in/what-i-actually-learned-from-the-hard-thing-about-hard-things</guid><category><![CDATA[books]]></category><category><![CDATA[leadership]]></category><category><![CDATA[book review]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 02 Feb 2025 14:49:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1738507474466/0812b302-807a-409a-97dc-75ecd6603519.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Look, I have been in tech for a while now and let me tell you – this book hit differently. Not because it's some mind-blowing revelation but because it finally puts into words all that messy stuff we deal with daily. Let me break it down for you :)</p>
<h2 id="heading-nobody-tells-you-how-to-handle-the-shit-storm">Nobody Tells You How to Handle the Shit Storm</h2>
<p>You know that feeling when everything's on fire, and you're like "I have no idea what I'm doing"? Yeah, that's actually normal. Here's the deal:</p>
<ul>
<li><p>That time when your star developer storms in saying they're quitting? No playbook.</p>
</li>
<li><p>You have to choose between fixing technical debt and shipping that feature your biggest customer needs.</p>
</li>
<li><p>When your team is burning out but the company needs that critical release.</p>
</li>
</ul>
<p>Nobody has it all figured out. We're all just trying our best not to mess up too badly.</p>
<p>Just like how he had to figure out how to save Loudcloud during the dot-com crash, you'll have to make tough calls with incomplete information.</p>
<h2 id="heading-the-truth-about-technical-decisions">The Truth About Technical Decisions</h2>
<p>Here's something nobody tells you: Sometimes all your options are bad and you still have to pick one. Like when:</p>
<ul>
<li><p>You have to choose between fixing that scary bug or shipping the feature that keeps the lights on</p>
</li>
<li><p>Your best engineer wants to rewrite everything (but you really can't afford that right now)</p>
</li>
<li><p>Your team needs a break but the deadline isn't moving :)</p>
</li>
</ul>
<p>Just make the call, own it and move on. Sitting on decisions usually makes things worse.</p>
<p>And when you are in the trenches, remember: There is no silver bullet — only lead bullets. Meaning? There is rarely a magical fix. Most of the time, you have to grind through the hard stuff, make incremental improvements and keep pushing forward. No shortcuts, just doing the work.</p>
<h2 id="heading-the-peacetime-ceo-vs-wartime-ceo">The "Peacetime CEO vs Wartime CEO"</h2>
<p>This was eye-opening. You've got to be a different kind of leader depending on what's happening:</p>
<p>Peacetime Engineering Leader:</p>
<ul>
<li><p>Sure, let's try that new framework everyone's excited about</p>
</li>
<li><p>Take time to make things pretty and clean</p>
</li>
<li><p>Let people experiment and learn</p>
</li>
</ul>
<p>Wartime Engineering Leader:</p>
<ul>
<li><p>Ships code that works, even if it's not pretty</p>
</li>
<li><p>Focus on keeping the business alive</p>
</li>
<li><p>Sometimes you gotta do the ugly thing to survive</p>
</li>
</ul>
<p>I have lived this transition and both modes required different mindsets and different types of courage.</p>
<h2 id="heading-people-gt-process">People &gt; Process</h2>
<p>As engineers, we love our processes – our pipelines, our code review process, our architecture decision. But people matter more than processes.</p>
<p>Real example: I once saw a team stick rigidly to their "no deployments on Friday" rule, even when a simple one line fix could have prevented weekend customer issues. The process became more important than the people so smart teams know when to bend the rules.</p>
<h2 id="heading-new-stuff-i-learned-the-hard-way">New Stuff I Learned the Hard Way</h2>
<p>These weren't in the book but man, I wish someone had told me:</p>
<ul>
<li><p>Trust your gut when someone's not working out - you probably noticed the signs months ago</p>
</li>
<li><p>Document the weird stuff - you'll thank yourself later</p>
</li>
<li><p>Sometimes saying <strong>"I don't know, let me figure it out"</strong> is the best answer :)</p>
</li>
<li><p>Your mental health actually matters - you can't help anyone if you're burned out</p>
</li>
<li><p>Building trust with your team is like putting money in the bank - you'll need it someday</p>
</li>
</ul>
<h2 id="heading-practical-stuff-that-helps">Practical Stuff That Helps</h2>
<p>Some real, practical things that make life easier:</p>
<ul>
<li><p>Keep a "<strong>wins</strong>" folder for tough days</p>
</li>
<li><p>Write down the hard decisions you make and why - helps when you doubt yourself later</p>
</li>
<li><p>Find other leaders to talk to - seriously, this helps so much</p>
</li>
<li><p>Learn to spot the difference between <strong>"uncomfortable" and "wrong"</strong></p>
</li>
<li><p><strong>Take walks when things get intense</strong> - helps more than you'd think</p>
</li>
</ul>
<p>Look, I feel leadership is messy. It's personal. It's hard. And that's actually okay. The goal isn't to be perfect – it's to be a little better at handling the chaos each time.</p>
<blockquote>
<p>Remember this: Everyone you look up to was once where you are, figuring stuff out, making mistakes, and wondering if they're cut out for this. They made it through. You will too.</p>
</blockquote>
<p>P.S. When all else fails, remember: This too shall pass. Usually. Probably. Eventually.</p>
]]></content:encoded></item><item><title><![CDATA[Build Features That Users Love]]></title><description><![CDATA[If you have ever worked on a product roadmap, you know the struggle.  
Will users care about this feature? 😬
As an engineer, I can tell you that building features people love isn’t about throwing in fancy tech or quirky ideas and hoping for the best...]]></description><link>https://blog.adyasha.in/build-features-that-users-love</link><guid isPermaLink="true">https://blog.adyasha.in/build-features-that-users-love</guid><category><![CDATA[features]]></category><category><![CDATA[learning]]></category><category><![CDATA[building]]></category><category><![CDATA[customers]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 05 Jan 2025 16:26:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1736092443194/ed478062-8eea-4b24-90d6-a41840056307.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you have ever worked on a product roadmap, you know the struggle.  </p>
<p><em>Will users care about this feature?</em> 😬</p>
<p>As an engineer, I can tell you that building features people love isn’t about throwing in fancy tech or quirky ideas and hoping for the best. It’s about understanding what users really need and then delivering it in a way that makes them say:</p>
<p><em>This is exactly what I wanted!</em> 😍</p>
<p>Think of it like making chai (or coffee, if that’s your thing). You have got to balance the ingredients just right. Too much sugar → it’s undrinkable; too little → it’s bland.</p>
<p>The same goes for features: they need the functionality, usability and a little spark of joy (not you vaasavi 😜). Oh and don’t forget, there’s no magical chai recipe that works for everyone. You have to experiment, taste and adjust.</p>
<p>In the world of product development, the recipe looks like this: decide, build, test, launch and repeat...</p>
<h2 id="heading-decide">Decide 🧐</h2>
<p>Every successful feature starts with understanding your users.<br />What bugs them?<br />What tiny, everyday annoyances are they begging you to solve?<br />Surveys, interviews, analytics — use all the tools you can to dig deep into their world. And when you’ve got a million ideas, don’t get distracted. Prioritize the ones that will make the biggest difference.</p>
<p>Your mantra here? <em>Impact over fluff :)</em></p>
<h2 id="heading-build"><strong>Build</strong> 🛠️</h2>
<p>Here’s where the engineering fun begins. Start with an <strong>MVP</strong>.<br />Yes, because even the first version should feel like something worth showing off.</p>
<p>Don’t aim for a shiny, all-singing, all-dancing feature right out of the gate.<br />Solve the core problem first, then leave room to grow.</p>
<h2 id="heading-test">Test 🧪</h2>
<p>Think your feature is done?<br />Haha! Testing is where the real learning happens.</p>
<p>Roll it out to a small group, get their feedback and watch how they actually use it. Just letting you know, they won’t use it exactly how you imagined. That’s okay. Tweak it. Iterate. Rinse and repeat.</p>
<h2 id="heading-launch"><strong>Launch</strong> 🚀</h2>
<p>Time to shine! But don’t just quietly release it — celebrate it! Use emails, in-app banners, or even a cheeky social media post to let users know why this feature is awesome.<br />Make them feel like this was built just for them (because well it was).</p>
<h2 id="heading-repeat"><strong>Repeat</strong> 🔄</h2>
<p>Here’s the catch: you are never <em>really</em> done. After launch, track how people are using the feature. Look at the data. Read their feedback. Figure out what’s working and what’s not and then improve it.<br />Think of it as a never-ending cycle of awesomeness.</p>
<hr />
<p>Okay, now enough theory.</p>
<p>Let’s look at some real-world examples of companies that nailed it. These are stories of features that started as ideas, went through the messy process of creation and came out the other side as user favourites 🌟.</p>
<h2 id="heading-1-duolingos-streak-feature"><strong>1. Duolingo’s Streak Feature</strong> 🦉</h2>
<p><strong>The Problem:</strong> Learning a new language is hard, and people often lose motivation after just a few days.</p>
<p><strong>The Solution:</strong> Duolingo introduced streaks: a gamified way to reward daily practice. Each day you learn, your streak grows. Miss a day? It’s gone. <em>(unless you use a streak freeze)</em></p>
<p><strong>How They Built It:</strong> The team realized users needed something to keep them coming back. Streaks tapped into a simple principle: people love consistency and hate breaking a winning streak. Early testing showed users were devastated when they lost their streaks, so Duolingo added streak freezes. The result? Users stayed motivated without feeling punished.</p>
<p><strong>Impact:</strong> Streaks turned Duolingo into a daily habit for millions. It’s so popular that users brag about their streaks on social media. Free marketing, anyone?</p>
<h2 id="heading-2-slacks-do-not-disturb-mode">2. <strong>Slack’s “Do Not Disturb” Mode</strong> 😴</h2>
<p><strong>The Problem:</strong> Notifications were driving users crazy, interrupting their focus and causing stress.</p>
<p><strong>The Solution:</strong> Slack added a Do Not Disturb mode, letting users pause notifications when they needed quiet time.</p>
<p><strong>How They Built It:</strong> Slack started by talking to users who were overwhelmed by constant pings. They built a simple, intuitive way to snooze notifications, with options for recurring schedules. Early testers loved it, and Slack fine-tuned it based on their feedback.</p>
<p><strong>Impact:</strong> Do Not Disturb became a lifesaver for users juggling collaboration and deep work. It’s now one of Slack’s most-loved features, proving that sometimes, less noise is more.</p>
<h2 id="heading-3-airbnbs-experiences"><strong>3. Airbnb’s Experiences</strong> 🏡</h2>
<p><strong>The Problem:</strong> Travelers didn’t just want a place to stay, they wanted authentic, local experiences.</p>
<p><strong>The Solution:</strong> Airbnb launched Experiences, a platform for booking unique activities hosted by locals. Think pasta-making in Italy or surfing lessons in California.</p>
<p><strong>How They Built It:</strong> Airbnb started by asking travelers what they wanted most. They piloted the feature in a few cities, collected feedback and refined it. They focused on making it easy for hosts to sign up and for users to book activities seamlessly.</p>
<p><strong>Impact:</strong> Experiences turned Airbnb into more than a lodging app. It became a go-to travel platform, attracting a new audience and creating memorable trips for millions.</p>
<h2 id="heading-4-spotifys-discover-weekly"><strong>4. Spotify’s Discover Weekly</strong> 🎶</h2>
<p><strong>The Problem:</strong> Finding new music is overwhelming. Users wanted personalized recommendations without the hassle.</p>
<p><strong>The Solution:</strong> Spotify created Discover Weekly, a playlist updated every Monday with tracks tailored just for you.</p>
<p><strong>How They Built It:</strong> Using ML, Spotify analyzed your listening habits and matched them with others who share similar tastes. They tested the feature with small groups, refining the balance between familiar favorites and surprising discoveries. And to keep users hooked, they made the playlist refresh every week.</p>
<p><strong>Impact:</strong> Discover Weekly became an instant hit. Users loved waking up on Mondays to a fresh batch of songs. It drove engagement, made Spotify feel esstential and turned Mondays into something to look forward to :)</p>
<h2 id="heading-conclusion">Conclusion 💭</h2>
<p>Building features users love is a mix of understanding their needs, experimenting, and improving constantly. The above success stories show what’s possible when you combine empathy with innovation.</p>
<p>So what’s your next big idea? The world’s waiting for it.</p>
]]></content:encoded></item><item><title><![CDATA[Why Your Mom Thinks Your Idea Is the Best?]]></title><description><![CDATA[If you are an engineer, you have probably had that idea — you know, the one you daydream about turning into a billion-dollar product someday. You get excited, maybe even pitch it to a few friends and ask questions like:

“Do you think it’s a good ide...]]></description><link>https://blog.adyasha.in/why-your-mom-thinks-your-idea-is-the-best</link><guid isPermaLink="true">https://blog.adyasha.in/why-your-mom-thinks-your-idea-is-the-best</guid><category><![CDATA[lessons learned]]></category><category><![CDATA[mom test]]></category><category><![CDATA[book review]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 08 Dec 2024 18:58:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1733684279986/6ea631e1-5a1f-4509-a0b2-8688f5cd8d29.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you are an engineer, you have probably had <em>that idea</em> — you know, the one you daydream about turning into a billion-dollar product someday. You get excited, maybe even pitch it to a few friends and ask questions like:</p>
<ul>
<li><p><em>“Do you think it’s a good idea?”</em></p>
</li>
<li><p><em>“Would you use something like this?”</em></p>
</li>
<li><p><em>“How much would you pay for X?”</em></p>
</li>
</ul>
<p>But here is the thing — people <em>want</em> to be nice. Even if your idea isn’t great, they will try to be encouraging. I have been there and it’s super easy to confuse polite nods with genuine market validation.</p>
<h3 id="heading-the-time-i-messed-this-up">The Time I Messed This Up</h3>
<p>Once, my team and I were working on what we thought was a game changing feature. To kind of validate our idea, we reached out to an influencer for feedback. But instead of letting them share their thoughts, I blurted out:<br /><em>“Do you think this idea fits the market?”</em></p>
<p>Their response?<br /><em>"Yeah, I think there’s scope to it.”</em></p>
<p>I was thrilled! But looking back, they were probably just being polite (or worse, saying what I wanted to hear). That’s when I stumbled upon the book <strong>The Mom Test</strong> by <strong>Rob Fitzpatrick.</strong></p>
<p>This book was a game-changer for me. It taught me how to approach conversations in a way that uncovers <em>truth</em>, not <em>compliments</em>. And yes, I realised how much I’d been doing it wrong.</p>
<h3 id="heading-what-is-the-mom-test">What is The Mom Test?</h3>
<p>Imagine asking your mom if your business idea is good. What’s she going to say?<br /><em>“Of course, sweetie! You’re a genius!”</em></p>
<p>She loves you, so she’ll lie. The same goes for friends, colleagues and anyone who doesn’t want to hurt your feelings. The Mom Test teaches us to ask questions that make it impossible for someone to lie.</p>
<h3 id="heading-what-i-learned-from-the-mom-test">What I Learned from The Mom Test</h3>
<p>Here’s what I learned (and wish I knew earlier):</p>
<p><strong>1. Avoid Asking Leading Questions</strong><br />Bad question:</p>
<blockquote>
<p>“Do you think this idea will sell?”<br />People will nod just to be nice.</p>
</blockquote>
<p>Good question:</p>
<blockquote>
<p>“How do you currently solve this problem?”<br />This digs into their existing behavior, not their imagination.</p>
</blockquote>
<p><strong>2. Focus on Actions, Not Opinions</strong><br />Bad question:</p>
<blockquote>
<p>“Would you pay for this feature?”<br />They might say yes to avoid awkwardness.</p>
</blockquote>
<p>Good question:</p>
<blockquote>
<p>“When was the last time you paid for a similar product? What made you pay for it?”<br />Now you’re uncovering behavior.</p>
</blockquote>
<p><strong>3. Ask About Specific Experiences</strong><br />Bad question:</p>
<blockquote>
<p>“Do you think this app idea is cool?”<br />Coolness doesn’t guarantee adoption.</p>
</blockquote>
<p>Good question:</p>
<blockquote>
<p>“Can you walk me through the last time you tried solving X?”<br />This gives you insight into real challenges and workarounds.</p>
</blockquote>
<p>In short:</p>
<blockquote>
<p>👉 Don’t ask for opinions. Instead, ask about experiences and actions.</p>
</blockquote>
<h3 id="heading-how-to-ask-the-right-questions">How to Ask the Right Questions</h3>
<p>Here’s a cheat sheet for productive conversations:</p>
<ul>
<li><p><strong>To understand a feature request:</strong></p>
<ul>
<li><p>Why do you want that?</p>
</li>
<li><p>How are you coping without it?</p>
</li>
<li><p>What would it let you do that you can’t do now?</p>
</li>
</ul>
</li>
<li><p><strong>To explore emotional pain points:</strong></p>
<ul>
<li><p>Why haven’t you fixed this yet?</p>
</li>
<li><p>What’s the most frustrating part of your current solution?</p>
</li>
</ul>
</li>
<li><p><strong>To validate a solution idea:</strong></p>
<ul>
<li>When was the last time you tried solving this X?</li>
</ul>
</li>
</ul>
<h3 id="heading-how-to-have-better-conversations">How to Have Better Conversations</h3>
<ol>
<li><p><strong>Start Broad, Then Zoom In</strong><br /> Begin with open ended questions to get the full context.<br /> ex:<em>“Can you walk me through your day-to-day process for X?”</em></p>
</li>
<li><p><strong>Focus on Past Actions, Not Hypotheticals</strong><br /> Instead of asking what they <em>would do</em>, ask what they <em>have done</em>.</p>
</li>
<li><p><strong>Pay Attention to Emotions</strong><br /> Ask how they felt about specific experiences. Frustrations often highlight opportunities.</p>
</li>
<li><p><strong>Ask for a Commitment</strong><br /> If someone truly believes in your idea, they will show it — by introducing you to someone, signing up for a trial or pre-paying.</p>
</li>
</ol>
<h3 id="heading-what-not-to-do">What Not to Do</h3>
<ul>
<li><p><strong>Don’t Pitch</strong>: When you pitch, you’re looking for approval, not insights.</p>
</li>
<li><p><strong>Don’t Chase Compliments</strong>: A <em>“this sounds cool”</em> won’t help you build a product.</p>
</li>
<li><p><strong>Don’t Convince</strong>: If your idea is good, it’ll stand on its own.</p>
</li>
</ul>
<h3 id="heading-wrapping-up">Wrapping Up</h3>
<p>Building something meaningful starts with understanding real problems — not chasing compliments. The Mom Test taught me to approach validation like debugging code: ask the right questions, look for patterns and test assumptions.</p>
<p>Validation isn’t about hearing <em>“yes”</em>. It’s about uncovering the truth — even if it’s not what you hoped for.</p>
<p>Your ideas deserve it. 🙌</p>
]]></content:encoded></item><item><title><![CDATA[The Role of Analytics in Engineering]]></title><description><![CDATA[As engineers, we often focus on building and optimizing features, but what about understanding how users interact with our work after launch? Analytics provides us with crucial insights that can transform our approach. By leveraging data, we can answ...]]></description><link>https://blog.adyasha.in/the-role-of-analytics-in-engineering</link><guid isPermaLink="true">https://blog.adyasha.in/the-role-of-analytics-in-engineering</guid><category><![CDATA[analytics]]></category><category><![CDATA[data analytics]]></category><category><![CDATA[engineering]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 03 Nov 2024 13:18:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1730639411601/7a937555-502f-4bd8-a86c-cb280da6a939.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As engineers, we often focus on building and optimizing features, but what about understanding how users interact with our work after launch? <strong><em>Analytics</em></strong> provides us with crucial insights that can transform our approach. By leveraging data, we can answer key questions like:</p>
<ul>
<li><p><em>Are users engaging with our features? 🤔</em></p>
</li>
<li><p><em>Where are they encountering difficulties? ⚠️</em></p>
</li>
<li><p><em>How can we enhance their experience? ✨</em></p>
</li>
</ul>
<p>Here’s a guide on making analytics work for you as an engineer.</p>
<h3 id="heading-skipping-analytics"><strong>Skipping Analytics</strong> ❌</h3>
<p>One of the biggest missteps is deciding <em>not</em> to add analytics to certain features. This can happen when we feel the data is unnecessary or just eager to ship a new feature. But skipping analytics is like launching a rocket without tracking — it leaves us in the dark about user behaviour.</p>
<p>Adding analytics, even if it seems small, is like putting markers along a path. It gives you data to look back on, helping you see what's working and what isn't.</p>
<h3 id="heading-using-multiple-analytics-tools"><strong>Using Multiple Analytics Tools</strong> 🛠️</h3>
<p>With growth, it’s tempting to introduce new tools for each product segment. In my experience, however, this can create more problems than it solves. Initially, we used <a target="_blank" href="https://plausible.io/">Plausible</a> and <a target="_blank" href="https://umami.is/">Umami</a> for different small products and <a target="_blank" href="https://redash.io/">Redash</a> for community insights. Each tool had its way of storing data, making it challenging to gather a unified view.</p>
<p><strong>Challenges with Multiple Tools</strong>:</p>
<ul>
<li><p><strong>Inconsistent Data</strong> 📊: When using multiple analytics tools, each one tends to track and store data in its unique way. This inconsistency can lead to difficulties in obtaining a cohesive and aligned understanding of the insights.<br />  For example, one tool might track user engagement one way, while another does it differently, leading to reports that don't match up and are tough to piece together.</p>
</li>
<li><p><strong>Higher Maintenance</strong> ⚙️: Managing multiple tools takes more effort and resources. Each tool might need regular updates, configuration changes, and troubleshooting, which can make your workflow feel scattered.</p>
<p>  This approach can slow down how quickly you analyze data and apply insights because you spend time jumping between different platforms and making sure each one is working properly.</p>
</li>
<li><p><strong>Confusion</strong> 🤷‍♂️: When data is spread across different tools, it can confuse team members. This makes it hard for teams to trust the data because differences between tools can cause doubts about accuracy.</p>
<p>  This makes decision-making harder, as teams might be unsure about using insights that don't come from a single, reliable data source.</p>
</li>
</ul>
<blockquote>
<p><strong>Tip</strong>: Stick to just one or two trusty tools for collecting data across your products. It'll save you loads of time and make it way easier to use your insights.</p>
</blockquote>
<h3 id="heading-the-learning-curve">The Learning Curve 📈</h3>
<p>The first time I wrote a query, it felt overwhelming, especially since I am primarily a front-end developer. I remember starting with something simple like:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> h_hackers h <span class="hljs-keyword">WHERE</span> h.email = <span class="hljs-string">"notgoingtosharepublicly@gmail.com"</span>
</code></pre>
<p>That query took forever to run because I had no clue which fields mattered. At first, every query felt like a struggle — lots of trial and error with table names, fields and joins. But once I got the hang of SQL, I could explore data on my own, spot patterns, and get answers way quicker.</p>
<p><strong>Why Learning Queries Matters</strong>:</p>
<ul>
<li><p>Saves time waiting on the analytics team (if present).</p>
</li>
<li><p>Gives direct access to insights that may be buried in dashboards.</p>
</li>
<li><p>Lets you troubleshoot product issues independently.</p>
</li>
</ul>
<h3 id="heading-understanding-user-perspectives">Understanding User Perspectives 👥</h3>
<p>Engineers are often evaluated on what we ship, so focusing on analytics doesn’t always feel like a priority.</p>
<p>However, analytics gives us valuable insights into how users navigate our product, where they get stuck and what features they use most. Reviewing session data, user paths, and patterns in real-time allows us to make data-driven adjustments.</p>
<p><strong>Ways to Use Analytics for User Insights</strong>:</p>
<ul>
<li><p><strong>Track Common User Paths</strong>: Understand typical workflows and catch any issues users might face along the way.</p>
</li>
<li><p><strong>Identify Drop-off Points</strong>: See where users abandon tasks, which can signal usability issues or confusing flows.</p>
</li>
<li><p><strong>Spot Usage Patterns</strong>: Notice trends around feature usage, which helps in prioritizing improvements.</p>
</li>
</ul>
<blockquote>
<p>A small UI tweak can improve your completion rate by X% without a full redesign.</p>
</blockquote>
<h3 id="heading-session-replays">Session Replays 🔄</h3>
<p><a target="_blank" href="https://openreplay.com/">Session replays</a> are powerful for spotting problems hidden behind the numbers. This tool isn’t just for diagnosing bugs but it’s also essential for <em>finding UX issues that users might not report</em>.</p>
<p>When data looks “off” replays allow you to see user interactions and identify potential pain points.</p>
<ul>
<li><p><strong>Spot UX Issues</strong>: Understand how users navigate and see where they get stuck.</p>
</li>
<li><p><strong>Identify Product Flow Problems</strong>: Find parts of the feature that are confusing or unnecessary.</p>
</li>
<li><p><strong>Validate Hypotheses</strong>: Test if your assumptions about user behaviour match reality.</p>
</li>
</ul>
<h3 id="heading-dli-data-that-lasts-insights">DLI (Data that Lasts Insights) 📅</h3>
<p>Engineers typically focus on quantitative metrics like load times and query speeds, but these alone don’t give a complete picture. DLI is about long-term impact—observing how feature changes affect user engagement over time rather than in the first days post-launch.</p>
<p><strong>Tips for Tracking DLI</strong>:</p>
<ul>
<li><p>Avoid overreacting to early data fluctuations.</p>
</li>
<li><p>Look for sustained changes in user behaviour over weeks or months.</p>
</li>
<li><p><mark>Evaluate if new changes increase engagement or retention in the long term</mark> (very important).</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730639177941/40446657-87f7-4df8-8c96-c04f76e22753.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-sending-clean-data">Sending Clean Data</h3>
<p>As companies grow, data can get pretty messy if it's not organized well, making it tough to get reliable insights. Setting up standards early on for consistent, usable data is super important. Here are some tips from a developer's point of view to keep your data clean:</p>
<ul>
<li><p><strong>Consistent Naming Conventions</strong>: Use lowercase, present-tense, and camelCase (e.g., <code>ClickSignupButton</code>) for event names and property keys. This consistency makes it easier to read, maintain, and query your analytics data.</p>
</li>
<li><p><strong>Versioning Events</strong>: As your application evolves, implement versioning for events (e.g., <code>signupV2</code>). This allows you to compare old and new event data without losing historical context, aiding in debugging and data analysis.</p>
</li>
<li><p><strong>Type Safety</strong>: Use TypeScript or similar tools to define data types for your analytics events. This ensures that the properties sent to your analytics platform match expected formats, reducing errors during data collection.</p>
</li>
<li><p><strong>Utilize Feature Flags</strong>: When launching new features with associated analytics, use feature flags to control the rollout. This lets you test the impact on user behaviour without affecting all users, and you can adjust your analytics tracking as needed.</p>
</li>
</ul>
<hr />
<p>Adding analytics to your engineering workflow might feel like it's not as important as building and shipping features, but the perks are totally worth it. Getting comfy with data means you're not just making features — you're crafting products that really connect with users and offer lasting value. 🌟</p>
<p>Digging into data, whether it's writing queries or checking out session replays, gives you a wider view that helps you become a better, more user-focused engineer.</p>
]]></content:encoded></item><item><title><![CDATA[Why Every Engineer Should Spend Time in Support?]]></title><description><![CDATA[When you think of support, the first things that probably come to your mind are long hours, endless tickets and a whole lot of "Why doesn't this work?" complaints from users 🤯. Support isn’t usually at the top of an engineer’s to-do list. So I am he...]]></description><link>https://blog.adyasha.in/why-every-engineer-should-spend-time-in-support</link><guid isPermaLink="true">https://blog.adyasha.in/why-every-engineer-should-spend-time-in-support</guid><category><![CDATA[support]]></category><category><![CDATA[engineering]]></category><category><![CDATA[engineering-management]]></category><category><![CDATA[support engineer]]></category><category><![CDATA[Life lessons]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 08 Sep 2024 17:36:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1725816820269/10f27115-1517-438a-80dd-ff7eaf4273db.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you think of support, the first things that probably come to your mind are long hours, endless tickets and a whole lot of <em>"Why doesn't this work?"</em> complaints from users 🤯. Support isn’t usually at the top of an engineer’s to-do list. So I am here to argue that spending time in support might just be one of the best things you can do as an engineer 🚀.</p>
<h3 id="heading-the-reality-check">The Reality Check 💡</h3>
<p>I ran a quick survey among friends about engineers taking on support and their responses were pretty much what I expected:</p>
<ol>
<li><p><em>"It's annoying, especially when users ask irrelevant questions."</em></p>
</li>
<li><p><em>"It breaks my flow. I’m in the middle of coding!"</em></p>
</li>
<li><p><em>"Isn't that why we have support engineers?"</em></p>
</li>
<li><p><em>"It takes too long to dig through legacy code and figure out the issue."</em></p>
</li>
<li><p><em>"That’s not my JOB!"</em></p>
</li>
</ol>
<p>No doubt, these are valid points. While these concerns may vary by team and company, I believe support is an underrated goldmine of insights, ideas, and opportunities to make your product shine 🌟.</p>
<p>The product I'm currently working on requires <strong>more support from users than they need from us</strong> to build the next successful feature.</p>
<p>So there are significant benefits when engineers get involved directly:</p>
<h2 id="heading-the-fast-lane-to-solutions">The Fast Lane to Solutions 🚗💨</h2>
<p>The common support process goes like this: tickets first go to support engineers, who either resolve the issue or guide users to the documentation. If they can’t solve it, a JIRA ticket is raised and passed to an on-call engineer. Only then does the engineer begin working on it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725818314278/790d5713-19ed-4e4d-863d-7b007ce6397a.png" alt class="image--center mx-auto" /></p>
<p>Phew!!!! It's such a long process.</p>
<p>That’s a long journey to get one issue fixed. But imagine if you, the engineer who built that feature, handled it directly. You have the context, the code and the knowledge. What might take a support engineer hours or even days to escalate, you could fix it in a fraction of the day ⚡.</p>
<h2 id="heading-real-user-impact-on-code">Real User Impact on Code 💻</h2>
<p>In support, you don’t just see how the code should work; you see how it <em>actually</em> works 👀. You get a front-row seat to what works, what doesn’t, and what frustrates people 😩.</p>
<p>For example, we once had a flood of tickets from users anxious about receiving their certification results. Turns out, they had completed the test but were stuck seeing the same flow without any status. We didn’t realize this issue until it surfaced in support.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725818022183/a9745be1-9565-4e5e-a33f-53b6612276f0.jpeg" alt class="image--center mx-auto" /></p>
<p>Being close to the users makes it easier to spot and fix these kinds of issues, especially those tricky edge cases 🎯.</p>
<h2 id="heading-holistic-perspective-on-the-product">Holistic Perspective on the Product 🌍</h2>
<p>As engineers, we get to see the entire product lifecycle, from coding it up to watching how users interact with it in the wild. We might think users will follow a certain path (because hey, that’s <em>how we designed it, right?</em>), but the truth is, they can go in the most unexpected ways.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725815733379/a98fc4e2-7f1a-4d5c-8c17-1405767ff93e.png" alt class="image--center mx-auto" /></p>
<p>Without the right guidance, things can go into a poor user experience. Spending time in support helps us spot these moments in real time, giving us that crucial insight to prioritize what truly matters.</p>
<blockquote>
<p>"Our users teach us more than what we can learn about our product." - Hari</p>
</blockquote>
<p>For example, we recently launched a feature behind a flag, accessible only to select users. Those who encountered it were informed that it was a beta release and could opt in if interested. To our surprise, we received a lot of support tickets from users eager to try it out, validating that we were on the right path. This kind of insight is invaluable when deciding what to build next and ensuring you are creating products <strong>users love</strong> and want 💖.</p>
<blockquote>
<p>It’s not just about building what you think is cool, it’s about understanding what users love and leaning into that.</p>
</blockquote>
<h2 id="heading-product-ownership-and-accountability">Product Ownership and Accountability 🏗️</h2>
<p>Support pushes you to build reliable, maintainable software. When you’ve spent a few hours untangling a mess of bugs, trust me, you start thinking about:</p>
<p><em>“How can I prevent this from happening in the future?”</em>.</p>
<p>You become more conscious of tech debt, documentation and building with long-term sustainability in mind.</p>
<p>And guess what? That’s how you become a better engineer. Accountability doesn’t just build products, <strong><em>it builds you</em></strong> 💪.</p>
<h2 id="heading-sharpening-problem-solving-skills">Sharpening Problem-Solving Skills 🛠️</h2>
<p>Let’s be real: support issues often involve the weirdest edge cases. You know, the kind that never shows up in development but somehow always pops up in the wild.</p>
<p>Spending time in support forces you to diagnose these issues and strengthen your <strong>debugging</strong> skills. Over time, you’ll get quicker at identifying patterns and predicting what could go wrong in future builds. (It’s like becoming a <strong>product detective</strong>! 🕵️‍♂️)</p>
<h2 id="heading-empathy-for-end-users">Empathy for End Users 💖</h2>
<p>Nothing teaches empathy like hearing a frustrated customer explain why something isn’t working for them. Spending time in support helps you understand those frustrations and drives you to build products that aren’t just functional but also <strong><em>delightful</em></strong> ✨.</p>
<blockquote>
<p>It’s one thing to build a feature that works on paper, but it’s another to ensure users have an enjoyable experience using it.</p>
</blockquote>
<p>Suddenly, your focus shifts from <em>“Does this feature work?”</em> to <em>“Is this feature providing any value?”</em>. You’ll find yourself asking, <em>“Is this user-friendly?”</em> or <em>“Can we add a little delight here?”</em>. That’s when real, impactful changes happen.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725813329165/9a236bd1-12a4-40c2-8dd9-2d9495abe9df.gif" alt class="image--center mx-auto" /></p>
<p><em>Just look at the raindrops bouncing on the search bar. It’s those little touches that users remember!</em></p>
<h2 id="heading-documentation-makes-life-easier">Documentation Makes Life Easier 📝</h2>
<p>One of the biggest benefits of spending time in support is that it forces you to document your solutions. When you solve an issue, writing it down in a common place means that the next person who encounters the same problem can fix it even faster 🏃‍♂️.</p>
<p>Plus, <strong>good documentation</strong> doesn’t just make your life easier, it helps both support and engineering teams solve issues faster. In the long run, it saves time for <em>everyone</em> ⏳.</p>
<h2 id="heading-power-of-feedback">Power of Feedback 😎</h2>
<p>You know what’s incredibly satisfying? Getting a small “Thank you!” from a user whose problem you just solved. That little burst of dopamine makes all the hard work worth it. Positive feedback isn’t just a pat on the back — it’s the fuel that <strong><em>keeps us going</em></strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725703570485/186bd4c4-6124-424f-a9dc-f280ca5073b0.png" alt class="image--center mx-auto" /></p>
<p>Knowing you made someone’s day? That’s priceless 💫.</p>
<h2 id="heading-teamwork-makes-the-dream-work">Teamwork Makes the Dream Work 🤜🤛</h2>
<p>Building a good rapport with your support engineers is crucial. They’re on the front lines, dealing with users day in and day out. By working closely with them, you can share knowledge, streamline processes and ultimately make your product better for everyone.</p>
<h2 id="heading-its-not-always-about-coding">It’s Not Always About Coding</h2>
<p><em>(as i said in my previous blog also.)</em></p>
<p>To build that kind of seamless experience, engineers need to understand the user journey. It’s not just about coding — it’s about building something that makes users lives easier.</p>
<blockquote>
<p><em>"The best customer service is if the customer doesn’t need to call you, doesn’t need to talk to you. It just works.” -</em> Jeff Bezos</p>
</blockquote>
<h2 id="heading-wrapping-it-up">Wrapping it Up</h2>
<p>I think I’ve made enough points to convince you. Who knows? You might even find yourself enjoying support. Crazy, right? 😄</p>
<hr />
<p>BTS: I spent nearly a month brainstorming what to write for this blog. It wasn’t until the last minute that the idea finally came to me. The right inspiration hit during a <strong>classic last-minute panic</strong>! And of course, a big thanks to the amazing people who helped me with some valuable points to include &lt;3</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725817435761/8c0c140b-76ba-4d60-ae57-e5c277943eae.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[The Girl and Her New Fictional Friends]]></title><description><![CDATA[Hey everyone, I'm back with a new blog post! This time, I'm kind of prepared because I've been thinking about writing this for a while. I want to share with you the incredible experience I had with two books I discovered last month. These books left ...]]></description><link>https://blog.adyasha.in/the-girl-and-her-new-fictional-friends</link><guid isPermaLink="true">https://blog.adyasha.in/the-girl-and-her-new-fictional-friends</guid><category><![CDATA[books]]></category><category><![CDATA[life]]></category><category><![CDATA[#BookReview]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 04 Aug 2024 09:24:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1722763371583/3fc90233-db4e-4792-8706-9603bbc381f3.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey everyone, I'm back with a new blog post! This time, I'm kind of prepared because I've been thinking about writing this for a while. I want to share with you the incredible experience I had with two books I discovered last month. These books left such an impression on me that I can't wait to tell you all about them.</p>
<h3 id="heading-a-little-backstory-how-i-found-the-first-book"><strong>A Little Backstory: How I Found the First Book</strong>🕵️‍♀️</h3>
<p>During my company holidays, I decided to visit an amazing book cafe called Champaca in Bangalore. If you ever find yourself in Bangalore, you must visit this beautiful place. It's a haven for book lovers. I initially went there to wrap up some work, but soon found out that using a laptop on weekdays requires a purchase from the shop. So, I thought, "Why not read some books instead?"</p>
<p>Every book in the cafe was displayed with its title visible. After some exploration, I stumbled upon a book lying on a shelf. Suddenly, a lady appeared and whispered, <em>"This is an amazing book, you should read it."</em> That was the first triggering point for me.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722762291506/c7554d05-8488-4e62-91de-a971c0288b10.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-introducing-the-boy-the-mole-the-fox-and-the-horse"><strong>Introducing: "The Boy, the Mole, the Fox and the Horse"</strong> 👦🦫🦊🐴</h3>
<p>The first book I discovered is called "<strong>The Boy, the Mole, the Fox and the Horse</strong>" by <em>Charlie Mackesy</em>. Tbh, I couldn't remember the title at first. Whenever I share about this book, I only remember the amazing four characters. It's a series of illustrations and moments shared by a boy, a mole, a fox, and a horse. There isn't a traditional storyline, but there's something about this book that hooks you on <em>every page</em>, making you think about the deep truths of human nature.</p>
<p>These four characters become unlikely friends, united by their sorrows, hurts, and musings about life. Their sorrow unites them, their hurt and their musings about life – all of which contribute to the growing love they acquire for each other. The book beautifully shows that we can be united in our suffering and love others and ourselves better because of it. As the book says, “<em>Asking for help isn’t giving up, it’s refusing to give up.</em>” 🤝</p>
<p>Many lines resonated with me deeply, but a couple that stood out are:</p>
<p><strong>“The bravest thing we can do is ask for help”</strong></p>
<p><strong>“The greatest thing we can do is love.”</strong></p>
<p>This book has become my go-to, and I highly recommend everyone read it at least once.</p>
<h3 id="heading-the-second-book-big-panda-and-tiny-dragon"><strong>The Second Book: "Big Panda and Tiny Dragon"</strong> 🐼🐉</h3>
<p>After raving about the first book to everyone, my mentor introduced me to another fantastic book: "<strong>Big Panda and Tiny Dragon</strong>" by <em>James Norbury</em>. This book features two characters, Big Panda and Tiny Dragon, who embark on a journey through the seasons (🍂❄️🌸☀️) of the year. They get lost but discover beautiful sights they'd never have found otherwise.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722761794532/25649391-08a8-460d-9054-bdfee9f952b7.png" alt class="image--center mx-auto" /></p>
<p>The Panda, the calm voice of reason often reassures the Dragon to look for positives rather than negatives and embrace adventure. The artistic expression in the book brings the narrative to life, allowing you to connect with the characters on a deeper level.</p>
<p>Some lines that struck me are:</p>
<p><strong>“Mistakes mean you are trying, so don’t give up.”</strong></p>
<p><strong>“If you don’t try, you never know you can fly.”</strong></p>
<p>The whole book is filled with such gems.</p>
<h3 id="heading-why-you-should-read-these-books">Why You Should Read These Books 📚</h3>
<p>Both books offer more than just stories, they provide reflections and inspirations that can enrich your life. Here’s why you should dive into these reads:</p>
<ol>
<li><p><strong>Heartfelt Wisdom</strong>: <em>The Boy, the Mole, the Fox and the Horse</em> is a gentle reminder of the importance of love and cherishing the little moments in life. If you’re looking for a book that offers comfort and clarity, this is it.</p>
</li>
<li><p><strong>Charming Adventures</strong>: <em>Big Panda and Tiny Dragon</em> encourages you to embrace life’s ups and downs with positivity and curiosity. It’s perfect for when you need a bit of inspiration and joy.</p>
</li>
</ol>
<h3 id="heading-conclusion"><strong>Conclusion</strong></h3>
<p>I hope you understand this blog's title: I am the girl and these amazing characters are my new friends who teach me something about life. If you know of any similar books, please let me know, I’d love to add them to my list. I highly recommend everyone read these two books at least once. I bet you'll love every piece of them.</p>
<p><em>Happy reading!</em> ✨</p>
]]></content:encoded></item><item><title><![CDATA[My Experience as a Software Engineer So Far]]></title><description><![CDATA[Hey everyone, I'm back! 🎉 It's been a while since my last blog post, but this time I'm here to stay. Life threw me a challenge to write a blog before the weekend and I'm all in to win 💪.
Alright, let's jump right in! 🌊
As the title suggests, this ...]]></description><link>https://blog.adyasha.in/my-experience-as-a-software-engineer-so-far</link><guid isPermaLink="true">https://blog.adyasha.in/my-experience-as-a-software-engineer-so-far</guid><category><![CDATA[Experience ]]></category><category><![CDATA[Software Engineering]]></category><category><![CDATA[journey]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sat, 06 Jul 2024 18:30:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1720381156038/d0d7b0bc-04da-48f4-aa00-fbf85d4bd2c1.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey everyone, I'm back! 🎉 It's been a while since my last blog post, but this time I'm here to stay. Life threw me a challenge to write a blog before the weekend and I'm all in to win 💪.</p>
<p>Alright, let's jump right in! 🌊</p>
<p>As the title suggests, this blog is about my three-year journey in engineering. Yes, it's been three years — well, technically 1.6 of those were as an intern, but who's counting? 🤷‍♂️ These years have been nothing short of crazy, filled with immense learning, company experiences and some seriously intense coding marathons.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720421018579/3b50f604-6379-47e3-9465-090ec965fca5.gif" alt class="image--center mx-auto" /></p>
<p>It's tough to sum up all the lessons I've learned, but I'll do my best to capture the gist of it.</p>
<h3 id="heading-its-not-always-about-coding">💻 It's Not Always About Coding</h3>
<p>Understanding the importance of <strong>product thinking</strong>, participating in <strong>design decisions</strong>, and <strong>providing feedback</strong> is crucial. It's not just about writing code, it's about understanding the bigger picture and how your work fits into it.</p>
<p>When you engage in product thinking, you start to see the product from the user's perspective. <strong>This means considering how features will be used, what problems they solve, and how they can be improved.</strong></p>
<p>Participating in design decisions allows you to contribute to the overall user experience. It's about collaborating with designers to ensure that the product is not only functional but also intuitive and enjoyable to use. Your technical insights can help shape the design in ways that make it more feasible and efficient to implement.</p>
<p>Providing feedback is equally important. Whether it's during code reviews, design discussions or product planning meetings, <em>your input can significantly impact the outcome.</em></p>
<h3 id="heading-every-pixel-matters">🔍 Every Pixel Matters</h3>
<p>UX is crucial. Even the smallest detail, like a single pixel, can significantly influence how users perceive and interact with your application.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720377031189/a0e136b8-8045-487a-a1d6-85b37b96b0ff.gif" alt="Truly, deeply, madly care about your users ❤️" class="image--center mx-auto" /></p>
<blockquote>
<p>T<em>ruly, deeply, madly care about your users ❤️</em></p>
</blockquote>
<p>I clearly remember this one time I spent hours tweaking a small transition in an animation. At first, it felt like a tiny, insignificant task that wouldn't matter. But the boost in user satisfaction was huge. That experience showed me how important it is to focus on even the smallest details.</p>
<h3 id="heading-mistakes-happen-learn-from-them">💡 Mistakes Happen, Learn from Them</h3>
<p>Mistakes are inevitable, but the key is to learn from them and grow. Every mistake you make provides an opportunity to improve and refine your processes, ultimately making you a better developer and strengthening your team's workflow.</p>
<p>For instance, there was a time when we accidentally broke the prod because of a small oversight during the testing phase.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720377395050/33248db3-88eb-40e7-8809-3a982a9693a9.webp" alt class="image--center mx-auto" /></p>
<p>This incident could have led to finger-pointing but instead, we took it as a learning experience. We decided to implement a "<strong>testing plan</strong>" that required thorough verification by all team members involved in the project. This plan included detailed checklists, peer reviews and multiple rounds of testing to catch potential issues before they reached prod.<br />This experience underscored the importance of learning from our errors and using them as stepping stones toward better practices and more robust solutions.</p>
<h3 id="heading-review-your-own-code">🔄 Review Your Own Code</h3>
<p>Reviewing your code before asking others to review it can significantly streamline the entire review process, making it both easier and faster.</p>
<p>By taking the time to go through your code meticulously, you can identify and correct mistakes, optimize performance and ensure that your logic is sound. This approach not only enhances the quality of your code but also makes the reviewer's job much simpler.</p>
<p>When you review your own code, you can catch <strong>syntax errors, logical flaws, and potential performance bottlenecks</strong> that might have been overlooked during the initial dev phase.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720377517363/c1d88c63-526b-4cfa-8d05-84963e93bcd3.png" alt class="image--center mx-auto" /></p>
<p>Moreover, self-reviewing your code allows you to think critically about your implementation choices and consider alternative solutions that might be more efficient or elegant.</p>
<p>Ultimately, this habit of <strong>self-reviewing</strong> not only improves the quality of your code but also contributes to your growth as a developer.</p>
<h3 id="heading-setting-priorities-oncall">📞 Setting Priorities - OnCall</h3>
<p>Developers might not like interruptions but when you're on call, <em>customer needs come first.</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720377700649/bde20f15-87be-4508-9d1c-d96aca192f03.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>This responsibility requires you to be available and responsive, often outside of regular working hours, to address urgent issues that could impact the user experience or system performance.</p>
</blockquote>
<p>Being on call taught me to prioritize effectively and handle emergencies calmly. It was stressful but incredibly rewarding to resolve critical issues promptly. I learned to quickly assess the situation, determine the root cause of the problem and implement a solution under pressure. This experience not only improved my technical skills but also enhanced my ability to stay composed and focused during high-stress situations.</p>
<h3 id="heading-go-deeper-into-issues">🔍 Go Deeper into Issues</h3>
<p>Even if you don't know everything at first, diving deep into issues is super helpful. By really looking into problems, you learn a lot and get better at what you do. It's totally fine to ask for help when you need it, but trying to figure out the root cause on your own can be a great learning experience.</p>
<p>This way, you can spot patterns, understand how things work, and get a better handle on the subject. Over time, this habit not only makes you more skilled but also boosts your confidence in handling tough problems by yourself.</p>
<h3 id="heading-ask-for-help">🙋 Ask for Help</h3>
<p>Don't hesitate to ask for help when you need it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720377892400/25cf8f88-7f8f-4a51-b3b9-cdcf9204f0a7.jpeg" alt class="image--center mx-auto" /></p>
<p>I'm currently reading a book called <em>Thinking in Bets</em>, which emphasizes the importance of being comfortable with uncertainty and admitting when you don't know something.</p>
<p>The book suggests that saying, "I'm not sure," is not a sign of weakness but rather a step towards finding the right answers. By acknowledging your limitations, you open the door to learning and collaboration.</p>
<p>I once faced a particular problem that was beyond my expertise. Initially, I hesitated to ask for help, fearing it would make me appear less competent. However, when I finally reached out to a colleague, their advice was invaluable. They provided insights and solutions that I hadn't considered, which not only resolved the issue but also expanded my understanding of the subject.</p>
<h3 id="heading-take-ownership">🏆 Take Ownership</h3>
<p>Take ownership of your code and the product you work on. This means taking full responsibility for the quality and functionality of your contributions.</p>
<p>When you take ownership, you are more likely to feel a sense of pride in your work, which can lead to greater job satisfaction and motivation.</p>
<h3 id="heading-improve-old-code">🛠️ Improve Old Code</h3>
<p>When working on old code, it's important not to blame the previous developers. Instead, focus on improving the code.</p>
<blockquote>
<p>Aim to leave the codebase in a better condition than you found it.</p>
</blockquote>
<p>Refactoring an old codebase can be tough, but it's super rewarding. By cleaning up and optimizing the existing code, you can really boost the app's performance. This usually means spotting and fixing inefficiencies, getting rid of redundant code, and updating old practices to match current standards.</p>
<p>One big perk of refactoring is that it makes <strong>future maintenance a breeze.</strong> Cleaner, well-organized code is easier to understand and tweak, which means fewer new bugs when changes are made. Plus, better code readability helps new team members get up to speed faster, making the whole team more productive.</p>
<p>From my experience, tackling an old codebase not only improved the app's performance but also gave me a huge sense of accomplishment. It let me use best practices and modern techniques, leading to a stronger and easier-to-maintain codebase</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720379267528/82dc9d0a-ed5c-4e26-b8ad-4ae64ed8622d.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-document-your-work">📄 Document Your Work</h3>
<p>Writing down what you do is super important for a bunch of reasons. Over time, it's easy to forget the details of what you've done, especially after a few years. By keeping good records, you can track your progress and achievements easily.</p>
<p>Plus, documentation is a great reference for you and your team. It helps everyone understand <strong>why certain decisions were made, how features were implemented and what solutions were used to tackle problems</strong>. This is handy when you go back to old projects or when new team members join and need to catch up quickly.</p>
<h3 id="heading-collaboration-is-key">🤝 Collaboration is Key</h3>
<p>Working effectively with your team is vital for the success of any project. It's important to share knowledge openly, ensuring that everyone is on the same page and has access to the information they need. Clear communication is essential, it helps to avoid misunderstandings and ensures that everyone knows their responsibilities and deadlines.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720378577263/9adc1c75-b145-43b4-882a-59f593d99eae.webp" alt class="image--center mx-auto" /></p>
<p><strong>Supporting each other is equally crucial.</strong> This means being available to help your teammates when they encounter challenges, offering constructive feedback and celebrating each other's successes.</p>
<h3 id="heading-embrace-challenges">🚀 Embrace Challenges</h3>
<p>Challenges are just opportunities in disguise. Embrace them, and you'll grow both personally and professionally. When you face a challenge, it pushes you out of your comfort zone and makes you think creatively to find solutions. This not only improves your problem-solving skills but also builds resilience and adaptability.</p>
<blockquote>
<p>Every obstacle you overcome adds to your knowledge and expertise, making you better at what you do.</p>
</blockquote>
<p>So, the next time you face a challenge, don't shy away from it. See it as a chance to learn, grow, and make meaningful contributions to your work and your team.</p>
<h3 id="heading-balance-work-and-life">⚖️ Balance Work and Life</h3>
<p>Maintain a <strong>healthy work-life balance</strong>. Burnout is a real problem that can mess with your productivity and happiness. It's super important to take care of yourself just as much as you focus on your work.</p>
<p>Set some boundaries between your work and personal life. This could mean stopping work at a certain time each day, taking regular breaks and making sure you have time to chill and unwind. Do things you enjoy and that help you recharge like hanging out with family and friends, pursuing hobbies or just taking a walk outside.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720378863934/359e31b2-1237-480e-b549-2829627c2890.jpeg" alt class="image--center mx-auto" /></p>
<p>Remember, taking care of your mental and physical health will not only make you feel better but also boost your work performance. When you're well-rested and happy, you're more creative, focused, and productive.</p>
<h3 id="heading-celebrate-achievements">🎉 Celebrate Achievements</h3>
<p>Celebrate your milestones, no matter how small they seem. Recognizing your accomplishments is super important because it boosts your morale and keeps you motivated.</p>
<p>Whether it's finishing a tough project, learning a new skill, or just meeting a deadline, take a moment to acknowledge your hard work and dedication. This could be as simple as treating yourself to something you enjoy, sharing your success with your team or just taking a moment to reflect on what you've achieved.</p>
<p>Celebrating these moments not only makes you feel good but also encourages you to aim for even greater achievements in the future.</p>
<h3 id="heading-effective-communication">🗣️ Effective Communication</h3>
<p>Communication is crucial, especially when you're working with a team. Sharing your ideas clearly and making sure you understand others can save you from a lot of mix-ups and mistakes.</p>
<p>I remember once I misunderstood a requirement because it wasn't explained well. That mistake cost me a whole week of work. Now I always double-check and confirm everything before diving into a task.</p>
<h3 id="heading-time-management"><strong>⏰ Time Management</strong></h3>
<p>There was a time when I had to juggle multiple high-priority tasks simultaneously. Each task demanded my full attention and had strict deadlines. To handle this, I started by listing all my tasks and identifying which ones were most urgent and important. I then broke down each task into smaller, manageable steps and allocated specific time slots for each step. By doing this, I could focus on one task at a time without feeling overwhelmed.<br />This approach allowed me to meet all the deadlines without compromising the quality of my work.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720379762832/ba4dbe2c-1d77-42b9-9d5d-ffdb7634e7e7.webp" alt class="image--center mx-auto" /></p>
<h3 id="heading-enjoy-the-journey">🌈 Enjoy the Journey</h3>
<p>Lastly, enjoy the journey. The ups and downs, the late nights, the breakthroughs - they're all part of the engineering adventure. Embrace every moment, whether it's a tricky bug that keeps you up at night or the joy of finally solving a complex problem. These experiences make you a better engineer and a stronger person.</p>
<p>Take time to <strong>appreciate the small wins</strong>, like successfully deploying a new feature or getting positive feedback from users. These moments make all the hard work worth it.</p>
<p>Remember, the <strong>learning never stops</strong>. Each project, each line of code, and each collaboration with your team is a chance to grow. Stay curious, ask questions, and don't be afraid to try new things.</p>
<p>The <strong>journey is just as important as the destination</strong> and by enjoying it, you'll find more satisfaction in your work and stay motivated to keep going.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720380142591/9db2d6d7-2ca4-4486-bcac-57ede5c24b03.jpeg" alt class="image--center mx-auto" /></p>
<hr />
<p>To wrap things up, my engineering journey has been quite the rollercoaster, packed with valuable lessons and experiences. From tackling tough projects to working with awesome teammates, every step has helped me grow as an engineer.<br />There's always more to learn, and sharing what we know is the best way to grow together. By swapping ideas and insights, we can all get better at what we do.</p>
<p>I encourage you to stay curious and keep exploring new tech and methods. Engineering is always changing and there's always something new to check out. Whether it's a new programming language, a cool tool or a fresh way to solve problems, jumping on these opportunities will keep you ahead in the game.</p>
<p>Stay tuned for more insights and stories from my ongoing adventure in the world of engineering! I can't wait to share more of my experiences, challenges and wins with you 🚀.</p>
]]></content:encoded></item><item><title><![CDATA[New Year Resolutions: The myth?]]></title><description><![CDATA[A few months ago, I found myself caught in a big trap. Upon relocating to Bangalore, one of my goals was to stay fit and healthy, and I convinced myself that joining a gym was the key. However, a series of excuses quickly became roadblocks in my path...]]></description><link>https://blog.adyasha.in/new-year-resolutions-the-myth</link><guid isPermaLink="true">https://blog.adyasha.in/new-year-resolutions-the-myth</guid><category><![CDATA[New Years Resolutions]]></category><category><![CDATA[gym]]></category><category><![CDATA[motivation]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 07 Jan 2024 20:15:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1704658432115/cecbb91b-aea8-4afc-8b62-233b0cea1fb9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few months ago, I found myself caught in a big trap. Upon relocating to Bangalore, one of my goals was to stay fit and healthy, and I convinced myself that joining a gym was the key. However, a series of excuses quickly became roadblocks in my path.  </p>
<p>The primary excuse? I didn't have a vehicle to get to the gym.</p>
<p>"It's impossible without a vehicle," I would tell myself.  </p>
<p>The logical next step, in my mind, was to acquire a means of transportation. The prospect of owning a vehicle seemed like a worthy investment for my fitness journey. But, my mom, always the voice of reason, promptly refused the idea of a two-wheeler in a new city. </p>
<p>"Who will take care of you if something happens?" she wisely pointed out.</p>
<p>Little did I know, I was falling into the trap of what some call <strong>Yak shaving</strong> – getting caught up in unnecessary tasks that distract from the original goal.</p>
<p><a target="_blank" href="https://xkcd.com/1739/"><img src="https://lh7-us.googleusercontent.com/1m3moRMcjEGpmqFOY7MGMQtmU8ob3sTXrdDu36DcZ2hc5tFbgb4eKNNmcz_pCHNd8TamttUInsgH7yIPdaZGeeOyCZ_jQjgElQHACghVpkFe8D7gHKlzwhf9HeDa_z9oMo1s3_rHHiLc_u0_C6HeGU0" alt="xkcd: yak shaving" class="image--center mx-auto" /></a></p>
<p>Instead of focusing on my fitness, I was entangled in the web of excuses and unrelated tasks. It wasn't until I had a moment of clarity that I realized the absurdity of my excuses. <em>I didn't need a vehicle to reach the gym,</em> <strong><em>I needed determination and a change in perspective*</em></strong>.*  </p>
<p>The turning point came when, on the very first day of the new year, I decided to take matters into my own hands and began walking to the gym. No more excuses, just a commitment to myself. </p>
<p>To make the journey more exciting, I set a challenge – if I could complete a month with at least four gym sessions per week, I would reward myself with a gift.</p>
<p>The catch? It could be anything, even something delightfully unhealthy.</p>
<p>As I entered the second week, I found myself settling into a routine. The initial enthusiasm was still there, but the real challenge was keeping it alive. I realized that the key to staying on track was to add variety to my workouts. So, I decided to mix things up – from cardio to strength training, each day brought a new challenge.  </p>
<p>Sure, there were moments when my alarm's snooze button seemed like a tempting escape, but the promise and visions of my end goals (and the hefty gym fee I paid 🙂) kept me on track.</p>
<p>So, here's to ditching the excuses, finding fitness and proving that resolutions are more than just a myth. Let's see where this journey takes me!</p>
]]></content:encoded></item><item><title><![CDATA[Formik Magic 🚀]]></title><description><![CDATA[Hey there, fellow coders! 👋 If you've ever dived into the world of React forms, chances are you've encountered the powerhouse known as Formik. I've had my fair share of experiences with it, and let me tell you, it's a fantastic library for managing ...]]></description><link>https://blog.adyasha.in/formik-magic</link><guid isPermaLink="true">https://blog.adyasha.in/formik-magic</guid><category><![CDATA[forms]]></category><category><![CDATA[formik]]></category><category><![CDATA[React]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Sun, 03 Dec 2023 12:39:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1701607043899/a299514d-0aa8-413e-9d62-5ee855094022.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there, fellow coders! 👋 If you've ever dived into the world of React forms, chances are you've encountered the powerhouse known as <a target="_blank" href="https://formik.org/docs/overview"><em>Formik</em></a>. I've had my fair share of experiences with it, and let me tell you, it's a fantastic library for managing forms effortlessly. However, like many, I never really took the time to explore its depths—until recently I decided to sit down and get to know it. Here's what I found out!</p>
<h3 id="heading-understanding-the-formik-landscape"><strong>Understanding the Formik Landscape:</strong></h3>
<p>For those not in the know, Formik is like that buddy who makes dealing with forms a breeze in React. No fuss, no drama, just simple and effective. It acts as a guardian, simplifying the often complex and tedious process of handling form state, validation, and submission. To get started, toss it into your project like this:</p>
<pre><code class="lang-plaintext">npm install formik
# or
yarn add formik
</code></pre>
<p>Once installed, you can import Formik into your React components and start building forms with ease.</p>
<p>Now, let's talk about the discoveries that sparked my excitement during this recent exploration.</p>
<h3 id="heading-1-fieldarray-taming-the-array-beast"><strong>1. FieldArray: Taming the Array Beast 🦁</strong></h3>
<p>Ever found yourself needing users to input not one, not two, but a bunch of things in a form? That's where the magical <code>FieldArray</code> comes into play.</p>
<p><strong>Why:</strong> Handling arrays of form fields can be like juggling invisible balls. <code>FieldArray</code> says, "Chill, I got this!" It helps you manage lists, multiples, and even complex data structures effortlessly.</p>
<p><strong>How:</strong></p>
<pre><code class="lang-javascript">&lt;FieldArray name=<span class="hljs-string">"emails"</span>&gt;
  {<span class="hljs-function">(<span class="hljs-params">{ push, remove }</span>) =&gt;</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      {values.emails.map((email, index) =&gt; (
        <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">key</span>=<span class="hljs-string">{index}</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">Field</span> <span class="hljs-attr">name</span>=<span class="hljs-string">{</span>`<span class="hljs-attr">emails</span>[${<span class="hljs-attr">index</span>}]`} /&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> remove(index)}&gt;
            Remove
          <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
      ))}
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">onClick</span>=<span class="hljs-string">{()</span> =&gt;</span> push('')}&gt;
        Add Email
      <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  )}
&lt;/FieldArray&gt;
</code></pre>
<h3 id="heading-2-custom-form-fields-formiks-vip-treatment"><strong>2. Custom Form Fields: Formik's VIP Treatment 🎩</strong></h3>
<p>Tired of the same old input fields? Formik's got your back with the VIP treatment for custom components! 🕶️</p>
<p><strong>Why:</strong> Sometimes, you want your form to wear a fancy hat. The render prop lets you create custom form fields without sacrificing Formik's superpowers.</p>
<p><strong>How:</strong></p>
<pre><code class="lang-javascript">&lt;Formik
  initialValues={{ <span class="hljs-attr">customField</span>: <span class="hljs-string">''</span> }}
  onSubmit={<span class="hljs-comment">/* Your submission logic */</span>}
&gt;
  {<span class="hljs-function">(<span class="hljs-params">{ values, handleChange }</span>) =&gt;</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">form</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">htmlFor</span>=<span class="hljs-string">"customField"</span>&gt;</span>Custom Field:<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">input</span>
        <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span>
        <span class="hljs-attr">id</span>=<span class="hljs-string">"customField"</span>
        <span class="hljs-attr">name</span>=<span class="hljs-string">"customField"</span>
        <span class="hljs-attr">onChange</span>=<span class="hljs-string">{handleChange}</span>
        <span class="hljs-attr">value</span>=<span class="hljs-string">{values.customField}</span>
      /&gt;</span>

      {/* Your custom rendering logic */}
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>{/* ... */}<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"submit"</span>&gt;</span>Submit<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">form</span>&gt;</span></span>
  )}
&lt;/Formik&gt;
</code></pre>
<h3 id="heading-3-optimizing-re-renders-reactmemo-to-the-rescue"><strong>3. Optimizing Re-renders: React.memo to the Rescue! 🚑</strong></h3>
<p>Ever feel like your form re-renders every time you blink? 😳 Not cool, right? Enter <code>React.memo</code> to save the day!</p>
<p><strong>Why:</strong> Memoization is like telling your form, "Chill, you only need to change when things actually change." It's like giving your form a cup of ginger tea to relax.</p>
<p><strong>How:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> MemoizedForm = memo(<span class="hljs-function">(<span class="hljs-params">{ values, handleChange }</span>) =&gt;</span> (
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Form</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">Field</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"field1"</span> /&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">Field</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"field2"</span> /&gt;</span>

    {/* ...other form components */}
  <span class="hljs-tag">&lt;/<span class="hljs-name">Form</span>&gt;</span></span>
));

<span class="hljs-keyword">const</span> OptimizedForm = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Formik</span>
      <span class="hljs-attr">initialValues</span>=<span class="hljs-string">{{</span> <span class="hljs-attr">field1:</span> '', <span class="hljs-attr">field2:</span> '' }}
      <span class="hljs-attr">onSubmit</span>=<span class="hljs-string">{/*</span> <span class="hljs-attr">Your</span> <span class="hljs-attr">submission</span> <span class="hljs-attr">logic</span> */}
    &gt;</span>
      {({ values, handleChange }) =&gt; (
        <span class="hljs-tag">&lt;<span class="hljs-name">MemoizedForm</span> <span class="hljs-attr">values</span>=<span class="hljs-string">{values}</span> <span class="hljs-attr">handleChange</span>=<span class="hljs-string">{handleChange}</span> /&gt;</span>
      )}
    <span class="hljs-tag">&lt;/<span class="hljs-name">Formik</span>&gt;</span></span>
  );
}
</code></pre>
<h3 id="heading-4-formik-context-where-forms-share-secrets"><strong>4. Formik Context: Where Forms Share Secrets 🤝</strong></h3>
<p>Formik has a secret club, and it's called Formik Context! 🤫</p>
<p><strong>Why:</strong> Imagine your form elements having a chat across the component tree. That's Formik Context! It lets you access form state and actions wherever you want.</p>
<p><strong>How:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { Formik, Form, Field, useFormikContext } <span class="hljs-keyword">from</span> <span class="hljs-string">'formik'</span>;

<span class="hljs-keyword">const</span> CustomInput = <span class="hljs-function">(<span class="hljs-params">{ label, ...props }</span>) =&gt;</span> {
  <span class="hljs-keyword">const</span> { values, handleChange } = useFormikContext();

  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">htmlFor</span>=<span class="hljs-string">{props.name}</span>&gt;</span>{label}:<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">input</span>
        {<span class="hljs-attr">...props</span>}
        <span class="hljs-attr">onChange</span>=<span class="hljs-string">{handleChange}</span>
        <span class="hljs-attr">value</span>=<span class="hljs-string">{values[props.name]}</span>
      /&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  );
};

<span class="hljs-keyword">const</span> AdvancedForm = <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> (
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Formik</span>
      <span class="hljs-attr">initialValues</span>=<span class="hljs-string">{{</span> /* <span class="hljs-attr">...</span> */ }}
      <span class="hljs-attr">onSubmit</span>=<span class="hljs-string">{(values,</span> <span class="hljs-attr">actions</span>) =&gt;</span> {
        // Handle form submission logic here
        console.log(values);
        actions.setSubmitting(false);
      }}
    &gt;
      <span class="hljs-tag">&lt;<span class="hljs-name">Form</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">CustomInput</span> <span class="hljs-attr">label</span>=<span class="hljs-string">"Username"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"username"</span> /&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">CustomInput</span> <span class="hljs-attr">label</span>=<span class="hljs-string">"Password"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"password"</span> /&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"submit"</span>&gt;</span>Submit<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">Form</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">Formik</span>&gt;</span></span>
  );
}
</code></pre>
<p>So there you have it! Formik is not just a form manager; it's a versatile tool that makes your form-building journey a breeze.<br />Explore these features, have fun with your forms, and may your code be forever bug-free! ✨</p>
]]></content:encoded></item><item><title><![CDATA[Embracing Personal Style ✨]]></title><description><![CDATA[A personal style is a powerful tool that goes beyond mere fashion choices. It allows us to express our unique identity, tell our stories, and shape the way we are perceived by the world.
Recently, I had the opportunity to delve into the world of pers...]]></description><link>https://blog.adyasha.in/embracing-personal-style</link><guid isPermaLink="true">https://blog.adyasha.in/embracing-personal-style</guid><category><![CDATA[personalbrand]]></category><category><![CDATA[style]]></category><category><![CDATA[masterclass]]></category><dc:creator><![CDATA[Adyasha Mohanty]]></dc:creator><pubDate>Mon, 10 Jul 2023 04:30:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1688923149543/5ebb8f28-5e27-4a02-be2f-9cb1f177434a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A personal style is a powerful tool that goes beyond mere fashion choices. It allows us to express our unique identity, tell our stories, and shape the way we are perceived by the world.</p>
<p>Recently, I had the opportunity to delve into the world of personal style through the course "<strong><mark>Building and Owning Your Personal Style</mark></strong>" by <em>Karla Welch.</em> In this blog, I want to share my insights from the course and discuss how I have embraced my own personal style. 😊</p>
<p><em>Note: You can find the course on</em> <a target="_blank" href="https://www.masterclass.com/"><em>MasterClass</em></a><em>, where you can access a wealth of knowledge and guidance from industry experts.</em></p>
<p>Now, let's dive into my personal style journey and the valuable lessons I've learned from this incredible course! 💃</p>
<h3 id="heading-the-stories-we-tell">The Stories We Tell 📚👗💖</h3>
<p>Let's start by looking at the influence of our childhood experiences on our style. 🌸 If you could choose just one dress from your childhood, I invite you to reflect on a special dress that holds value or memories.</p>
<p>I remember a special dress from my childhood. I had a little disagreement with my mom about buying both the shoes and the dress, but I ended up getting them. We then went for a small photoshoot, and I have a picture of me wearing that dress. 💕📸</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1688918412326/82b14f2a-fced-4bf1-b0f2-d0d26d107130.png" alt="Childhood pic" class="image--center mx-auto" /></p>
<h3 id="heading-the-power-of-presentation">The Power of Presentation 🌟👚</h3>
<p>In a world where first impressions matter, how we choose to present ourselves holds incredible power. Personal style is all about authentically expressing ourselves, rather than conforming to fashion trends.</p>
<p>For instance, I greatly admire my manager <a target="_blank" href="https://sp2hari.com/">Hari</a>, who confidently wears his HackerRank T-shirt, effectively communicating his passion for coding and the hard work he has invested in building a successful company. 💪💻</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1688918763747/53a60de4-d4bb-48d5-91c7-f122d3028e74.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-experience-a-stylists-secret-weapon">Experience - A Stylist's Secret Weapon 💁‍♀️🔑</h3>
<p>Karla Welch highlights the importance of experience in a stylist's ability to solve fashion problems efficiently. Similarly, our own life experiences shape our personal style choices. While getting dressed may only take a few minutes, it is our lifetime of experiences that enable us to curate a wardrobe that truly reflects our authentic selves. <em><mark>Our style becomes a beautiful reflection of our journey. 🌈</mark></em></p>
<h3 id="heading-building-a-purpose-driven-style">Building a Purpose-Driven Style 💼</h3>
<p>Creating a purpose-driven personal style is all about aligning our passions and values with our clothing choices. By infusing determination and hard work into our style journey, we can build a wardrobe that not only reflects our true selves but also empowers us with confidence and authenticity. It's a continuous process that may even lead us to create a purpose-driven business or career that aligns with our style and values. 💫💖</p>
<h2 id="heading-the-journey-of-finding-your-style">The Journey of Finding Your Style 🌟</h2>
<p>Discovering our personal style is an exciting adventure filled with self-expression and exploration. Here are some key steps that have helped me on my style journey:</p>
<ol>
<li><p><strong>Thriving in Flea Markets</strong> 🛍️<br /> For me, flea markets are like hidden treasure troves filled with one-of-a-kind pieces 💎. I absolutely love the excitement of discovering unique items with fascinating stories behind them. What makes it even better is that shopping at flea markets doesn't break the bank. It gives me the freedom to curate a wardrobe that truly represents my individuality and stands out from the crowd.</p>
</li>
<li><p><strong>The Art of DIY</strong> ✂️</p>
<p> Creating clothes from scratch has become an essential part of my style journey. I love doing DIY projects because they allow me to design and make garments that perfectly match my vision 🎀. It's a way for me to freely express my creativity and create unique pieces that are personalized just for me.<br /> In fact, I've been considering starting to learn sewing so I can make my own dresses. It's an exciting prospect that would give me even more control over my personal style and allow me to truly showcase my individuality.</p>
</li>
<li><p><strong>A Fusion of Inspiration</strong> 💡<br /> Pinterest is like my creative haven, where I find inspiration and discover new trends, colours, and outfit ideas. I create mood boards that capture the looks and vibes that truly speak to me, forming the basis of my personal style exploration. It's like building a visual diary that helps me define and refine my unique aesthetic.</p>
</li>
<li><p><strong>Sasta Sundar Mazboot</strong> 💸<br /> My style choices prioritize not only aesthetic appeal but also durability and quality. The phrase <em>"<mark>Sasta Sundar Mazboot</mark>"</em> captures my appreciation for value and longevity. I seek out pieces that not only look good but also withstand the test of time.<br /> <em>Note: "Sasta Sundar Mazboot" is a Hindi phrase that translates to "Affordable, Beautiful, and Durable" in English.</em></p>
</li>
<li><p><strong>Styling One Piece of Clothing in Multiple Ways</strong> 🔄<br /> When selecting clothes, I look for items that have the potential to be styled in different ways. This could be a classic white shirt, a little black dress, or a pair of well-fitted jeans. By choosing versatile pieces, I can easily mix and match them with other items in my wardrobe, creating numerous outfits without feeling the need to constantly buy new clothes.<br /> Let's get creative and explore the endless possibilities within our own closets, making fashion more sustainable and fun.</p>
</li>
<li><p><strong>Accessorizing to Add Flair</strong> 🧣<br /> Accessories play a crucial role in changing the vibe of an outfit. By using different accessories, such as scarves, belts, statement jewellery, and bags, I can completely transform the look and feel of a single piece of clothing.<br /> For instance, a plain white shirt can be styled with a colourful scarf and chunky earrings for a bohemian-inspired look, or paired with a sleek belt and heels for a sophisticated ensemble.</p>
</li>
</ol>
<h3 id="heading-the-courage-to-take-risks">The Courage to Take Risks 🎉</h3>
<p>Truly owning our personal style requires stepping out of our comfort zones and taking risks. It's about embracing the opportunity to express ourselves authentically and fearlessly.</p>
<p>When we wear something we love, we radiate energy and positivity, influencing not only ourselves but also the world around us. So let go of the fear of judgment, wear what makes you happy, and watch your confidence soar. 💃🌟</p>
<h3 id="heading-conclusion"><strong>Conclusion 🌈</strong></h3>
<p>Through the course "Building and Owning Your Personal Style" and my own fashion journey, I have come to realize that personal style is a powerful means of self-expression. It allows us to showcase our stories, passions, and values to the world. So, let's embrace the joy of exploring our unique tastes, experimenting with different looks, and expressing ourselves confidently.</p>
<p>Remember, your style is an extension of your beautiful and authentic self. Own it, celebrate it, and let your personal style radiate positivity and confidence in everything you do! 💖✨</p>
]]></content:encoded></item></channel></rss>