<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>FrontendJoy</title>
    <description>Learn how to become a Senior Frontend Engineer without a CS Degree or natural talent.</description>
    
    <link>https://www.frontendjoy.com/</link>
    <atom:link href="https://rss.beehiiv.com/feeds/kxSlFR4piO.xml" rel="self"/>
    
    <lastBuildDate>Wed, 9 Sep 2026 19:34:25 +0000</lastBuildDate>
    <pubDate>Tue, 28 Apr 2026 15:00:00 +0000</pubDate>
    <atom:published>2026-04-28T15:00:00Z</atom:published>
    <atom:updated>2026-09-09T19:34:25Z</atom:updated>
    
      <category>UX</category>
      <category>Programming</category>
      <category>Software Engineering</category>
    <copyright>Copyright 2026, FrontendJoy</copyright>
    
    <image>
      <url>https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/publication/logo/bfa5571b-1050-49e1-bab0-61337cfe7458/favicon.png</url>
      <title>FrontendJoy</title>
      <link>https://www.frontendjoy.com/</link>
    </image>
    
    <docs>https://www.rssboard.org/rss-specification</docs>
    <generator>beehiiv</generator>
    <language>en-us</language>
    <webMaster>support@beehiiv.com (Beehiiv Support)</webMaster>

      <item>
  <title>You&#39;ve already shipped a wrong-branch PR</title>
  <description>Why every dev running parallel AI sessions needs Git worktrees</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/26896efa-bf0c-4827-b906-e586fb52f959/slot_1_beehiiv.png" length="2219780" type="image/png"/>
  <link>https://www.frontendjoy.com/p/you-ve-already-shipped-a-wrong-branch-pr</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/you-ve-already-shipped-a-wrong-branch-pr</guid>
  <pubDate>Tue, 28 Apr 2026 15:00:00 +0000</pubDate>
  <atom:published>2026-04-28T15:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Ai Tooling]]></category>
    <category><![CDATA[Git]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">One year ago, I didn&#39;t know anything about Git worktrees except the name.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Today, they&#39;re my best friends.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What changed? AI tools.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here&#39;s my current setup:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A </span><code>cw</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> alias in my </span><code>zshrc</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>alias cw=&#39;claude --worktree&#39;</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, spins up Claude Code inside a fresh worktree</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I pass a branch name every time I remember: </span><code>cw nfdiop/feature-x</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. When I forget, I end up with folders called </span><code>lucky-bouncing-sedgewick</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, and hate myself</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Any time I&#39;m juggling more than one task in the same repo, I reach for </span><code>cw</code></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you&#39;ve ever opened a PR and found changes that didn&#39;t belong, worktrees are the fix.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="what-are-git-worktrees"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What are Git worktrees</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Imagine you&#39;re deep in a branch. Uncommitted changes on disk. A dev server running in one terminal. A test watcher in another.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Now a teammate pings you. </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>Can you pull down my PR and sanity-check it locally?</i></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You have three painful options:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Stash everything, kill the processes, then </span><code>git checkout</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> their branch</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Commit your half-done work, kill the processes, then </span><code>git checkout</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, except your changes aren&#39;t ready for any human to see</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Clone the whole repo into a different folder. Slow and cumbersome if the codebase is big</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Git worktrees give you a fourth option.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A worktree is a second working directory tied to the same repo. Same </span><code>.git</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> under the hood, different files on disk. You can have </span><code>main</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> checked out in one folder and a feature branch checked out in another. Both live, both editable, no stashing.</span></p><div class="codeblock"><pre><code>git worktree add ../review-pr their-feature-branch
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That&#39;s it.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="dissecting-the-command"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Dissecting the command</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Every worktree command reuses the same three parts:</span></p><div class="codeblock"><pre><code>git worktree add   ../review-pr        their-feature-branch
│                  │                   │
│                  │                   └── BRANCH: which branch to check out.
│                  │                        Must already exist. 
│                  │
│                  └── where the new folder lives on disk.
│
└── COMMAND: adds a new linked working tree.
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="git-worktree-operations"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Git worktree operations</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Four commands cover 95% of what you&#39;ll use.</span></p><div class="codeblock"><pre><code># Create a worktree on an existing branch
git worktree add &lt;worktree-path&gt; &lt;branch&gt;

# Create a worktree with a brand-new branch
git worktree add -b &lt;new-branch&gt; &lt;worktree-path&gt;

# List all worktrees
git worktree list

# Remove a worktree (deletes the folder, cleans up refs)
git worktree remove &lt;worktree-path&gt;

# Clean up stale references for worktrees you deleted manually
git worktree prune
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Memorize the first three. The rest you&#39;ll pick up as you go.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="why-git-worktrees-are-all-the-rage-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why Git worktrees are all the rage now</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">One year ago, I worked on one feature at a time. Switching branches was rare.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Now I run 3+ Claude Code sessions at once, bouncing between branches every day.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The bottleneck moved. </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>The question used to be how fast I could write code. Now it&#39;s how many branches my brain can track.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The first time it bit me, I opened a PR that was ready for review and saw changes that didn&#39;t belong to it. They were from a different feature I&#39;d been jumping to. I had to send Claude the PR link and say </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>this PR has unrelated changes. Clean it up.</i></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Then I noticed the other branch, the one that was </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>supposed</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to have those changes, didn&#39;t have them either. Two fixes, not one.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The worst part? Five minutes earlier I&#39;d been clicking through a UI thinking I was testing the new behavior. The branch I was on didn&#39;t have the new behavior. I was testing nothing. I figured it out by glancing at the branch name in my terminal </span>🙈<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/2466a8ec-7c80-4b57-a7f7-dfa119c78a46/slot_2_beehiiv.png?t=1777319053"/></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Worktrees fix this because each branch lives in its own physical folder. The folder name </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>is</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> the branch. You can&#39;t be on the wrong one.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Agents don&#39;t collide with each other. You collide with yourself. </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">They let you parallelize your attention beyond what your brain can hold.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you&#39;re running agents without worktrees, you&#39;ve probably already shipped a wrong-branch PR. You just haven&#39;t noticed yet.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="gotchas"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Gotchas</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A few things burned me early. They&#39;ll burn you too.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>1. Same branch, two worktrees → Git refuses.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>You can&#39;t check out the same branch in two places. </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Git blocks you. Makes sense once you think about it. The branch&#39;s HEAD can only point at one checkout. Fix: use a new branch per worktree.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This one happens to me often.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>2. Worktrees don&#39;t show up on GitHub.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A worktree is a local thing. It&#39;s not a remote branch. If you want collaborators to see the code, you still </span><code>git push</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> the branch like normal. The worktree itself is just a convenience on your laptop.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So get in the habit of committing code when you’re done with a feature so you don’t accidentally lose all your code by deleting the worktree. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>3. </b></span><code>npm run dev</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> may not work out of the box.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Each worktree has its own </span><code>node_modules</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, or needs one. Your dev server reads from the local install, so you&#39;ll run </span><code>npm install</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> inside the new worktree before anything boots. Annoying the first time. Worth it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>4. Sibling directory is the convention.</b></span></p><p class="paragraph" style="text-align:left;"><code>../review-pr</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> next to the main repo is what most people do. </span><code>git status</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> stays clean, and your editor doesn&#39;t index the same files twice in search.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you use </span><code>claude --worktree</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, the default lives inside the repo and that&#39;s fine too. Just know your editor will see both copies.</span></p><h2 class="heading" style="text-align:left;" id="how-to-make-worktrees-actually-plea"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How to make worktrees actually pleasant</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A few tiny things made worktrees easier for me.</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Alias to delete all worktrees and start from a clean state:</b></span></p></li></ul><div class="codeblock"><pre><code>dw() &#123;
  git worktree list | tail -n +2 | awk &#39;&#123;print $1&#125;&#39; | xargs -I &#123;&#125; git worktree remove &#123;&#125; --force
  git worktree prune
&#125;
</code></pre></div><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Claude Code worktree alias:</b></span></p></li></ul><div class="codeblock"><pre><code>alias cw=&#39;claude --worktree&#39;
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Every Claude session starts in its own folder. No configuration, no thinking.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If you&#39;re on Codex:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> worktree support is still an open issue: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/openai/codex/issues/12862?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=you-ve-already-shipped-a-wrong-branch-pr" target="_blank" rel="noopener noreferrer nofollow">https://github.com/openai/codex/issues/12862</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. Subscribe to it.</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Scope editor search to one worktree.</b></span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When you open a parent folder containing multiple worktrees in VS Code, Cursor, Windsurf, etc., global search spans all of them. Confusing when the same file shows up six times.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Two fixes:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Specify </span><code>files to include</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> or </span><code>files to exclude</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> in the search panel</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Or open the single worktree folder as the workspace root. Simpler.</span></p></li></ul><hr class="content_break"><h2 class="heading" style="text-align:left;" id="try-this-today"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Try this today</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Worktrees aren&#39;t new. They&#39;ve been in Git for years.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>What&#39;s new is </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i><b>you</b></i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>. Running agents in parallel means juggling more branches than your brain was ever asked to track.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Go look at your last few PRs right now. Search for changes that don&#39;t belong. I bet you&#39;ll find one.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Then add the </span><code>cw</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> alias to your </span><code>zshrc</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> so it doesn&#39;t happen again:</span></p><div class="codeblock"><pre><code>alias cw=&#39;claude --worktree&#39;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Restart your shell. Spin up your next Claude session with </span><code>cw your-handle/feature-x</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=b4c0b86b-8b76-4b9b-b9d2-c1fd9f87b204&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Claude ate 1/4 of my job</title>
  <description>The 2018 dev playbook is dead. Here&#39;s what replaces it. </description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8eb064ad-d3c8-40f9-ac3b-128285392632/how_to_level_up_your_frontend_skills__36_.png" length="27871" type="image/png"/>
  <link>https://www.frontendjoy.com/p/claude-ate-1-4-of-my-job</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/claude-ate-1-4-of-my-job</guid>
  <pubDate>Tue, 21 Apr 2026 14:00:00 +0000</pubDate>
  <atom:published>2026-04-21T14:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Claude]]></category>
    <category><![CDATA[Job Search]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>December 15, 2017. 1:29 AM.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> I&#39;m doing a master&#39;s at Berkeley, about to send a cold LinkedIn message to an engineering leader at Pinterest.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The message is generic. I tell him I&#39;d like to work at Pinterest. I attach my resume and cover letter. I ask for a referral.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">He replies with nine words: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>&quot;Passed your resume to the right folks. Good luck!&quot;</i></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>I get the interview. I get the offer. I take Palantir instead.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I don&#39;t remember how many other cold messages I sent that month. But I sent a few. Being at Berkeley likely helped. The message itself wasn&#39;t clever. It still worked.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That was the 2018 playbook for landing your first dev job: master DSA, find a referral, apply, get hired.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>That playbook is dead.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I know this because I came back from maternity leave a few months ago and watched Claude Code eat 1/4 of my job in real time.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">First week back, I had to ship a change across the frontend and the backend. Previously that kind of cross-stack work would have cost me half a day just understanding the backend code I didn&#39;t write. With Claude I understood it in five minutes. Ready in a day instead of three.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I sat with that for a while.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If a senior dev at Palantir is having that experience, the junior market is something else. Not doomed. Just harder than it&#39;s been in years. The kind of work I would have handed a junior to ramp up on can now be done by an AI in under 10 minutes.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So if I was looking for a junior frontend role in 2026, here&#39;s what I&#39;d actually do.</span></p><h2 class="heading" style="text-align:left;" id="whats-in-this-issue"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What&#39;s in this issue</span></h2><ol start="1"><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Get serious about communication from day one</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use a coding agent until you can feel when it&#39;s lying</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Learn the things Claude gets subtly wrong</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Build real things and ship them to real people</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Get one foot in the door, anywhere</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Network the way I networked that Pinterest exec</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Pick up something beyond frontend</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Contribute to open source, slowly, with thought</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let people watch you figure things out</span></p></li></ol><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you can only do two this month, do the first two. The rest compound once those are in motion.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="1-get-serious-about-communication-o"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">1. Get serious about communication. On day one.</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This is item nine on every &quot;how to get a job as a junior dev&quot; list. I&#39;m putting it first because it&#39;s the part of the job Claude can&#39;t touch.</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Public speaking. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Influencing a decision in a meeting. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reading a room and noticing the manager is annoyed before anyone says it out loud. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Writing a doc that someone actually finishes. </span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">These are the things I now spend more of my time on, because the rest has shrunk.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I was a junior I assumed the best coder wins. The best coder no longer wins on code alone, because Claude writes a lot of the code. The dev who ships the code AND explains why AND gets the other humans to agree wins.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So I would invest in this from week one, not from year five.</span></p><h2 class="heading" style="text-align:left;" id="2-use-a-coding-agent-until-you-can-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">2. Use a coding agent until you can feel when it&#39;s lying</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Not optional anymore.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Pick a coding agent. Use it every day. Learn what it&#39;s good at and where it lies. Stay close to the news so you notice when something better drops.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you can&#39;t afford a paid plan: free models, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://opencode.ai/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=claude-ate-1-4-of-my-job" target="_blank" rel="noopener noreferrer nofollow">opencode</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://geminicli.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=claude-ate-1-4-of-my-job" target="_blank" rel="noopener noreferrer nofollow">Gemini CLI</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, student credits from </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://chatgpt.com/codex/students/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=claude-ate-1-4-of-my-job" target="_blank" rel="noopener noreferrer nofollow">OpenAI</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.anthropic.com/news/introducing-claude-for-education?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=claude-ate-1-4-of-my-job" target="_blank" rel="noopener noreferrer nofollow">Anthropic</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. If you can build well with cheap models, the better ones will feel like cheating.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>The advantage you have over me is that you don&#39;t have years of habits to unlearn. You can build the AI-native instincts from scratch.</b></span></p><h2 class="heading" style="text-align:left;" id="3-learn-the-things-claude-gets-subt"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">3. Learn the things Claude gets subtly wrong</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I keep telling people this. I&#39;ll keep telling people this.</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">HTML, CSS, JavaScript. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Data structures. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Browser dev tools. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Being able to build a small project without React or Tailwind.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why this still matters in 2026: Claude will write the code. Without strong fundamentals, you won&#39;t catch the subtle bugs in what it writes. You&#39;ll ship something that compiles, passes the tests, and is silently wrong, and you won&#39;t know why for two days.</span></p><h2 class="heading" style="text-align:left;" id="4-build-real-things-and-ship-them-t"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">4. Build real things and ship them to real people</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The basic portfolio is dead. Anyone with Claude can produce a basic portfolio in an afternoon, including the recruiter screening you.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>What works instead: </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">build something that solves a real problem you have. </span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Job hunting? Build a resume tool. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Studying? Build something for your study group. </span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Then use it. Get other people to use it. Now you have a story for the recruiter, and you&#39;ll have hit the actual hard part of being a dev, which is not writing the code. It&#39;s getting the code into someone&#39;s hands and dealing with what they say back.</span></p><h2 class="heading" style="text-align:left;" id="5-get-one-foot-in-the-door-anywhere"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">5. Get one foot in the door, anywhere</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A nonprofit with an ugly website. Your school&#39;s admin. A researcher whose data analysis lives in a 2009 spreadsheet. Anyone with a real problem who&#39;d let you solve it for free.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Experience is the unfair differentiator. The people doing the hiring know that what you learn at a job is different from what you learn in class. A semester of fixing a real organisation&#39;s broken signup flow beats six months of LeetCode.</span></p><h2 class="heading" style="text-align:left;" id="6-network-the-way-i-networked-that-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">6. Network the way I networked that Pinterest exec</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Most jobs are not won through the portal.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Engage with people from companies you want to work at. Regularly, not once. Do cold outreach. Join the dev communities where devs hang out.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Look back at the top of this post. The cold message was generic. The reply was nine words. The offer came anyway. The probability of any one message landing is low. The probability of zero messages landing if you send one hundred is also low.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Thanks to AI, you can now send more customised messages at scale. </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A spreadsheet of 100 people you want to work with, and a prompt that generates a unique message for each of them. You can do this in an afternoon. Do it.</span></p><h2 class="heading" style="text-align:left;" id="7-pick-up-something-beyond-frontend"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">7. Pick up something beyond frontend</span></h2><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Design taste. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A bit of backend. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Product sense. </span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Something that makes you a person who can think about a whole feature, not just the part with the buttons. The &quot;just a frontend dev&quot; job is the most exposed one in this market.</span></p><h2 class="heading" style="text-align:left;" id="8-contribute-to-open-source-slowly-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">8. Contribute to open source. Slowly. With actual thought.</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Find a project you already use. Pick a beginner-friendly issue. Understand every line of what you&#39;re about to submit. Then open the PR.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Don&#39;t be the person flooding maintainers with agent-generated PRs. They&#39;re already drowning in those. The signal you want to send is the opposite: I&#39;m a person who took the time to understand this codebase.</span></p><h2 class="heading" style="text-align:left;" id="9-let-people-watch-you-figure-thing"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">9. Let people watch you figure things out</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Devs have gotten jobs from this. When people watch you learn, two things happen. They see you actually doing the work. And they get a real sense of what you&#39;re capable of, which is more than your resume can ever tell them.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It also makes friends, which loops back to the networking point.</span></p><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;m writing this from inside a job AI is reshaping under my feet. I have not figured out the new rules. I&#39;m partly writing this to figure them out.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But here&#39;s what I keep coming back to. I can write two or three lines of code now and watch them get shipped to people using the software in a hospital, or a factory, somewhere I&#39;ll never visit. Their day gets a little easier because of those two or three lines.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If that&#39;s still what you want, here&#39;s where I&#39;d start this week: open a doc, write down one real problem a real person around you has, and see if you can build the first ugly version of a fix by Sunday. That&#39;s the whole job. Everything else in this post is in service of that.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=e70ba181-1adf-458b-8c3e-0ea2ce338102&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>29 React Codebase Red Flags from a Senior Frontend Developer</title>
  <description>Spot them early. Fix them before they compound</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/34a1f7bf-9636-4e91-bc9b-cbc896aef86e/how_to_level_up_your_frontend_skills__35_.png" length="46661" type="image/png"/>
  <link>https://www.frontendjoy.com/p/29-react-codebase-red-flags-from-a-senior-frontend-developer</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/29-react-codebase-red-flags-from-a-senior-frontend-developer</guid>
  <pubDate>Tue, 14 Apr 2026 14:00:00 +0000</pubDate>
  <atom:published>2026-04-14T14:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[React]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;ve been writing React code as an engineer at Palantir for the past 6+ years.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">These are the 29 red flags that tell me a React codebase is going to be painful to work with.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Ready? Let&#39;s dive in! </span>💪</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="1-using-libraries-for-what-vanilla-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">1. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Using libraries for what vanilla JS can do</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">We&#39;ve all done it:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Importing </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://lodash.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">lodash</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> just to use </span><code>isNil</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> instead of </span><code>== null</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Using </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://day.js.org/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">dayjs</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> rather than </span><code>Intl.DateTimeFormat</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> for future use cases (spoiler alert: they end up never coming).</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Etc.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But this is wrong because every dependency:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">adds maintenance overhead:</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You have to update it when bugs are fixed, vulnerabilities disclosed, new versions come out.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">adds to your bundle size.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">can break when you upgrade React or TypeScript.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Before you add a dependency, ask yourself: can I do this with vanilla JS?</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If the answer is yes, do that instead. It keeps your codebase lean.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="2-reaching-for-heavy-dependencies-w"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">2. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Reaching for heavy dependencies when lighter alternatives exist</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://momentjs.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">moment.js</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> is 75KB minified. </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://day.js.org/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">day.js</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> is 3KB with the same API.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.axios.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">axios</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> is 14KB. The native </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">fetch</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> API is free.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;ve reviewed PRs where someone added a 70KB library to do something a 3KB alternative handled just as well.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Nobody checked the size, because nobody had the habit. It adds up fast and your users on a 3G connection in Lagos or São Paulo are the ones who pay for it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Before you install, check the bundle size on </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://bundlephobia.com?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">bundlephobia</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If a lighter alternative exists, use it.</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="3-no-linter-or-formatter-configured"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">3. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> No linter or formatter configured</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Non-negotiable.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I once sat through a meeting where engineers spent 30 minutes arguing about whether to use tabs or spaces.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What settled the debate? Configuring the formatter for the entire repo and moving on.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Without repo-level config, every review becomes a style debate instead of a real conversation about the code.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Set it up once and move on.</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="4-no-consistent-folder-structure"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">4. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> No consistent folder structure</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;ve wasted so many hours of my life trying to figure out where to put a new file </span>🥲<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">One developer organises by feature, another by file type, a third just dumps things wherever.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Pick a convention – feature-based, domain-based, whatever works for your team – document it, and enforce it in reviews.</b></span></p><div class="codeblock"><pre><code>// 🚩 Red flag: chaotic structure
src/
  components/Button.tsx
  pages/home/helpers.ts
  utils/userStuff.ts
  lib/api.ts
  shared/Button.tsx   // wait, there&#39;s already a Button?</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="5-junk-drawer-utils-files"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">5. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Junk drawer </span><code>utils</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> files</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Every codebase has one. A </span><code>utils.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> that starts with 3 helper functions and grows into 40 unrelated ones.</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Nobody owns this file.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Everyone adds to it.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Nobody cleans it.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A simple change to one function can cause merge conflicts with a change to a completely unrelated function.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A small change can cause bugs in an unrelated function because they share the same scope.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In the example below, </span><code>formatDate</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and </span><code>calculateTax</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> are neighbors for no reason.</span></p><div class="codeblock"><pre><code>// utils.ts — the junk drawer
export function formatDate(d: Date) &#123; /* ... */ &#125;
export function parseQueryString(s: string) &#123; /* ... */ &#125;
export function calculateTax(amount: number) &#123; /* ... */ &#125;
export function debounce(fn: Function, ms: number) &#123; /* ... */ &#125;
export function hexToRgb(hex: string) &#123; /* ... */ &#125;
// ...35 more
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead, related functions should be grouped together: </span><code>date-utils.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>string-utils.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>math-utils.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If your utils file needs a table of contents, it&#39;s time to break it up.</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="6-related-files-not-colocated"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">6. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Related files not colocated</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When a component lives in </span><code>/components</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, its styles in </span><code>/styles</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, its tests in </span><code>/__tests__</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, and its helpers in </span><code>/utils</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">... you&#39;re constantly jumping across the project to understand one feature.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Files that change together should live together.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I need to modify the </span><code>UserProfile</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> feature, I want to open one folder, not four. And when the feature gets killed, I want to delete one folder, not hunt through four directories for orphaned files.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>PS: I’m not jumping that much between files these days: Claude does </i></span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>. But still…</i></span></p><div class="codeblock"><pre><code>// 🚩 Red flag: scattered files
src/
  components/UserProfile.tsx
  styles/UserProfile.css
  __tests__/UserProfile.test.tsx
  utils/userProfileHelpers.ts

// ✅ Colocated
src/
  features/user-profile/
    UserProfile.tsx
    UserProfile.css
    UserProfile.test.tsx
    helpers.ts</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="7-barrel-files-that-reexport-everyt"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">7. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Barrel files that re-export everything</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;ve done that mistake too </span>🙈<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You want to simplify imports, so you create an </span><code>components.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> file that re-exports everything in the folder.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Little did you know that this creates a hidden coupling between all those files.</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In development, your bundler processes the entire barrel on every hot reload, even files you never touch.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You get weird compilation errors due to a file that you&#39;re not even using but is still being processed.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You have a hard time tracing where something is defined: you click through to the import and land in a wall of re-exports instead of the actual code.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If you must use barrel files, be explicit: name each export instead of using </b></span><code>export *</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>.</b></span></p><div class="codeblock"><pre><code>// 🚩 components.ts
export * from &#39;./Button&#39;
export * from &#39;./Modal&#39;
export * from &#39;./Table&#39;
// ...50 more
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="8-god-components"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">8. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> God components</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Data fetching, state management, form validation, error handling - all in one file, all in 500+ lines.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Signs you have a God component:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Scrolling 30 seconds to find the return statement</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Searching return gives you 20+ results</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;ve worked on components like this: you fix a bug in the form validation and accidentally break the data fetching because everything shares the same scope.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>So break it up. Each piece should have one job.</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="9-passing-entire-objects-when-only-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">9. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Passing entire objects when only one field is needed</span></h2><div class="codeblock"><pre><code>// 🚩 Red flag
&lt;UserAvatar user=&#123;user&#125; /&gt;

// ✅ Better
&lt;UserAvatar avatarUrl=&#123;user.avatarUrl&#125; name=&#123;user.name&#125; /&gt;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When you pass the whole object, the child component is coupled to the shape of </span><code>user</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and re-renders whenever </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>any</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> field on that object changes, not just the ones it uses.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You also make the component harder to reuse: what if another part of the app has avatar data but it doesn&#39;t live in a </span><code>user</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> object?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>So only pass components the data they need.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> It keeps them decoupled, reusable, more performant, and easier to test.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="10-storing-derived-values-in-state"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">10. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Storing derived values in state</span></h2><div class="codeblock"><pre><code>// 🚩 Red flag
const [firstName, setFirstName] = useState(&#39;&#39;)
const [lastName, setLastName] = useState(&#39;&#39;)
const [fullName, setFullName] = useState(&#39;&#39;)

useEffect(() =&gt; &#123;
  setFullName(`$&#123;firstName&#125; $&#123;lastName&#125;`)
&#125;, [firstName, lastName])

// ✅ Just compute it
const fullName = `$&#123;firstName&#125; $&#123;lastName&#125;`</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If a value can be calculated from other state or props, it&#39;s not state, it&#39;s a computation.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;ve seen this cause real bugs: there&#39;s always a render where </span><code>fullName</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> is stale because the effect hasn&#39;t run yet.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The fix is simple: just compute it inline.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If the computation is expensive, wrap it in </span><code>useMemo</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. But don&#39;t store it in state.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="11-using-state-when-it-should-be-a-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">11. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Using state when it should be a ref</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Timer IDs, previous values, flags that shouldn&#39;t trigger a re-render: these belong in a </span><code>useRef</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, not </span><code>useState</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If changing the value shouldn&#39;t update the screen, it&#39;s not state.</b></span></p><div class="codeblock"><pre><code>// 🚩 Red flag: triggers a re-render every time
const [timerId, setTimerId] = useState(null)

// ✅ No re-render needed
const timerIdRef = useRef(null)</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="12-putting-everything-in-a-global-s"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">12. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Putting everything in a global store</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Not everything needs to be in Redux or a global Context.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;ve worked on codebases where tooltip visibility was stored in Redux: an action to open it, a reducer to track it, a selector to read it, all for state that only one component ever needed.</span></p><div class="codeblock"><pre><code>// 🚩 Red flag: global state for local UI
dispatch(setTooltipVisible(true))

// ✅ Keep it where it lives
const [isVisible, setIsVisible] = useState(false)
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>The rule: if no other part of the app needs to know about it, keep it local.</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="13-a-single-massive-context-that-re"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">13. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> A single massive Context that re-renders half the app</span></h2><div class="codeblock"><pre><code>// 🚩 Red flag: one context for everything
const AppContext = createContext(&#123;
  user: null,
  theme: &#39;light&#39;,
  locale: &#39;en&#39;,
  sidebarOpen: false,
  notificationCount: 0,
&#125;)
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Every time any of these changes, every consumer re-renders.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The sidebar toggles? Your notification badge re-renders. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The locale changes? Your sidebar re-renders.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Split your contexts by concern: </b></span><code>UserContext</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>, </b></span><code>ThemeContext</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>, </b></span><code>etc.</code></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It&#39;s a small upfront cost that saves you from chasing phantom performance problems later.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">And if your contexts start becoming unmanageable, that&#39;s a sign you need a state management library with more granular updates.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>PS: If your app is simple enough, using a single context is fine </i></span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>.</i></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="14-poor-type-script-hygiene"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">14. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Poor TypeScript hygiene</span></h2><p class="paragraph" style="text-align:left;"><code>any</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> everywhere. You&#39;re using TypeScript but typing things as </span><code>any</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">?</span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You&#39;re getting all the overhead with none of the safety.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That&#39;s just the start. Poor TypeScript hygiene also looks like:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">No discriminated unions — you&#39;re allowing impossible states.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Switch statements without exhaustive checks — every new variant</span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">is a bug waiting to happen.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>TypeScript is only as good as the types you write.</b></span></p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you’re new to TypeScript, check my post: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.frontendjoy.com/p/typescript-to-know-for-react?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">TypeScript to know for React</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><div class="codeblock"><pre><code>// 🚩 Red flag: allows impossible states
type FormState = &#123;
  isSubmitting: boolean
  isSuccess: boolean
  errorMessage: string | null
&#125;
// &#123; isSubmitting: true, isSuccess: true &#125; — shouldn&#39;t be possible, but is

// ✅ Discriminated union
type FormState =
  | &#123; status: &#39;idle&#39; &#125;
  | &#123; status: &#39;submitting&#39; &#125;
  | &#123; status: &#39;success&#39; &#125;
  | &#123; status: &#39;error&#39;; message: string &#125;
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="15-eslintdisable-to-silence-the-exh"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">15. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><code>eslint-disable</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to silence the exhaustive-deps warning</span></h2><div class="codeblock"><pre><code>// 🚩 Red flag
useEffect(() =&gt; &#123;
fetchData(userId)
// eslint-disable-next-line react-hooks/exhaustive-deps
&#125;, [])
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This looks harmless. It&#39;s not.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The linter is telling you: your effect depends on </span><code>userId</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, but it won&#39;t re-run when </span><code>userId</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> changes. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Two things can go wrong:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Your users see stale data whenever </span><code>userId</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> changes.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Someone adds a dependency inside </span><code>fetchData</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> later, gets no warning, and the bug ships silently.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The fix isn&#39;t to silence the warning — it&#39;s to understand it:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Maybe </span><code>fetchData</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> should be wrapped in </span><code>useCallback</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Maybe the effect should list </span><code>userId</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> as a dependency.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Silencing the linter doesn&#39;t fix the underlying issue — it just hides it until a user reports stale data.</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="16-using-array-indices-as-keys"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">16. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Using array indices as keys</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">We&#39;ve all written this at some point:</span></p><div class="codeblock"><pre><code>// 🚩 Red flag
&#123;items.map((item, index) =&gt; (
  &lt;TodoItem key=&#123;index&#125; item=&#123;item&#125; /&gt;
))&#125;
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">React just needs </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>something</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> for </span><code>key</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, right?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here&#39;s what goes wrong. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You have a list of 3 items. The user deletes item 0. React sees </span><code>key=&#123;0&#125;</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> still exists so it reuses the first DOM node instead of removing it. </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>The component doesn&#39;t reset. The stale state from the old item bleeds into the new one.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You&#39;ll see this as: inputs that don&#39;t clear, animations that fire on the wrong item, form values that belong to a deleted row.</span></p><div class="codeblock"><pre><code>// ✅ Use a stable, unique id
&#123;items.map((item) =&gt; (
  &lt;TodoItem key=&#123;item.id&#125; item=&#123;item&#125; /&gt;
))&#125;
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If your data doesn&#39;t have an id, generate one when it enters your system, not at render time.</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="17-using-a-hook-when-a-plain-functi"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">17. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Using a hook when a plain function would do</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Just because you&#39;re building components doesn&#39;t mean everything has to be a hook.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If your function doesn&#39;t call React state, effects, or other hooks, it&#39;s just a function.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Making it a hook means it can only be called at the top level of a component or another hook, not inside event handlers, loops, or conditionals.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A plain function can be called anywhere. It&#39;s also easier to test </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="codeblock"><pre><code>// 🚩 Red flag: it&#39;s a hook for no reason
function useFormatCurrency(amount: number) &#123;
  return new Intl.NumberFormat(&#39;en-US&#39;, &#123;
    style: &#39;currency&#39;,
    currency: &#39;USD&#39;,
  &#125;).format(amount)
&#125;

// ✅ Just a function
function formatCurrency(amount: number) &#123;
  return new Intl.NumberFormat(&#39;en-US&#39;, &#123;
    style: &#39;currency&#39;,
    currency: &#39;USD&#39;,
  &#125;).format(amount)
&#125;</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="18-rolling-your-own-data-fetching-l"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">18. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Rolling your own data fetching layer</span></h2><div class="codeblock"><pre><code>// 🚩 Red flag
useEffect(() =&gt; &#123;
  setLoading(true)
  fetch(`/api/users/$&#123;id&#125;`)
    .then(res =&gt; res.json())
    .then(data =&gt; &#123;
      setData(data)
      setLoading(false)
    &#125;)
    .catch(err =&gt; &#123;
      setError(err)
      setLoading(false)
    &#125;)
&#125;, [id])</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This code works. For a simple one-off fetch, it&#39;s fine.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>The red flag is what comes next.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Your app needs a loading state. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You add one. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Then error handling.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Then retry on failure. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Then cache invalidation. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Then request deduplication so the same request doesn&#39;t fire twice.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">There&#39;s also a subtle bug already: if </span><code>id</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> changes quickly, the first response can overwrite the second, a race condition you&#39;ll need to handle with an AbortController.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You&#39;ve just started rebuilding React Query. Poorly.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Libraries like React Query and SWR already solved all of this.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You don&#39;t have to use them — but if you find yourself adding more and more logic around </span><code>useEffect</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> + </span><code>fetch</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, reach for a library instead of reinventing it.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="19-no-error-boundaries"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">19. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> No error boundaries</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;ve seen an app where </span><code>JSON.parse</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> on a value with an unexpected shape crashed the entire app: navigation, sidebar, everything. Gone. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">TypeScript couldn&#39;t catch it: </span><code>JSON.parse</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> returns </span><code>any</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, so the type system had no idea.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>A single unhandled error shouldn&#39;t take down the whole page.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Wrap critical sections so the rest of the app keeps working. The user loses one capability instead of everything.</span></p><div class="codeblock"><pre><code>// ✅ Wrap critical sections
&lt;ErrorBoundary fallback=&#123;&lt;p&gt;Something went wrong.&lt;/p&gt;&#125;&gt;
  &lt;UserDashboard /&gt;
&lt;/ErrorBoundary&gt;</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="20-empty-catch-blocks"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">20. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Empty catch blocks</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I can&#39;t tell you how many times I&#39;ve seen this:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">User complaints about an issue</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You check the logs and see... nothing. No errors, no warnings, no clues at all.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You have to ship new code just to add logging and figure out what went wrong 🤦‍♀️.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The culprit is always the same:</span></p><div class="codeblock"><pre><code>// 🚩 Red flag
try &#123;
  await saveData()
&#125; catch (e) &#123;&#125;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>At minimum, log the error. Better yet, tell the user something went wrong (+ how to fix it).</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="21-no-loading-or-error-states"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">21. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> No loading or error states</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">No loading spinner, no skeleton, no error message.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Just a blank screen when the API is slow and a crash when it fails.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Your users don&#39;t have localhost speeds and perfect networks. </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>You need three states: loading, error, success.</b></span></p><div class="codeblock"><pre><code>// 🚩 Red flag: only handles success
function UserList() &#123;
  const [users, setUsers] = useState([])

  useEffect(() =&gt; &#123;
    fetch(&#39;/api/users&#39;).then(r =&gt; r.json()).then(setUsers)
  &#125;, [])

  return &lt;ul&gt;&#123;users.map(u =&gt; &lt;li key=&#123;u.id&#125;&gt;&#123;u.name&#125;&lt;/li&gt;)&#125;&lt;/ul&gt;
&#125;
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="22-accidentally-breaking-memoizatio"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">22. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Accidentally breaking memoization with default values</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I once introduced a new component to my codebase.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">And for whatever reason, my app started crashing whenever I typed in an unrelated input.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The culprit? A </span><code>?? []</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> default value in the new component that was creating a new array on every render.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The fix:</span></p><div class="codeblock"><pre><code>// ✅ Define the default outside the component
const EMPTY_ITEMS = []
&lt;ItemsList items=&#123;items ?? EMPTY_ITEMS&#125; /&gt;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Same goes for </span><code>&#123;&#125;</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>() =&gt; &#123;&#125;</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, and any other inline default. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If it&#39;s passed as a prop and the child is memoized, define it outside the render.</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="23-unreadable-conditional-rendering"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">23. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Unreadable conditional rendering</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Nested ternaries and long </span><code>&amp;&amp;</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> chains both make JSX impossible to follow:</span></p><div class="codeblock"><pre><code>// 🚩 Nested ternaries
&#123;isLoading ? &lt;Spinner /&gt; : error ? &lt;Error /&gt; : data ? &lt;Content /&gt; : null&#125;

// 🚩 Long &amp;&amp; chains
&#123;isLoggedIn &amp;&amp; hasPermission &amp;&amp; !isExpired &amp;&amp; featureFlag &amp;&amp; &lt;SecretPanel /&gt;&#125;
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you have to mentally parse boolean logic to understand what renders, extract it into a variable or use early returns:</span></p><div class="codeblock"><pre><code>// ✅ Clear and readable
if (isLoading) return &lt;Spinner /&gt;
if (error) return &lt;Error /&gt;
if (!data) return null
return &lt;Content /&gt;</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="24-no-early-returns"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">24. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> No early returns</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If you&#39;re five levels of indentation deep, flip your conditions and return early.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This makes the code easier to read.</span></p><div class="codeblock"><pre><code>// 🚩 Red flag: deeply nested
function UserProfile(&#123; user &#125;) &#123;
  if (user) &#123;
    if (user.isActive) &#123;
      if (user.hasProfile) &#123;
        return &lt;Profile data=&#123;user.profile&#125; /&gt;
      &#125; else &#123;
        return &lt;CreateProfile /&gt;
      &#125;
    &#125; else &#123;
      return &lt;InactiveMessage /&gt;
    &#125;
  &#125; else &#123;
    return &lt;NotFound /&gt;
  &#125;
&#125;

// ✅ Early returns
function UserProfile(&#123; user &#125;) &#123;
  if (!user) return &lt;NotFound /&gt;
  if (!user.isActive) return &lt;InactiveMessage /&gt;
  if (!user.hasProfile) return &lt;CreateProfile /&gt;
  return &lt;Profile data=&#123;user.profile&#125; /&gt;
&#125;</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="25-magic-values-with-no-explanation"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">25. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Magic values with no explanation</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I can&#39;t tell you how many times I&#39;ve wanted to modify a value in the code but was too scared to change it because I had no idea why it was that value.</span></p><ul><li><p class="paragraph" style="text-align:left;"><code>setTimeout(retry, 3000)</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. Why 3 seconds?</span></p></li><li><p class="paragraph" style="text-align:left;"><code>pageSize: 37</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. Why 37?</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If a value isn&#39;t self-explanatory, give it a name and document it.</b></span></p><div class="codeblock"><pre><code>// 🚩 Red flag
setTimeout(retry, 3000)
const PAGE_SIZE = 36

// ✅ Named and documented
const RETRY_DELAY_MS = 3000 // Matches the p95 API response time
const PAGE_SIZE = 36 // 4 columns × 9 rows in the grid layout</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="26-the-same-conditional-logic-scatt"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">26. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> The same conditional logic scattered everywhere</span></h2><div class="codeblock"><pre><code>// 🚩 Red flag: scattered across the codebase
&#123;user.role === &#39;admin&#39; &amp;&amp; &lt;DeleteButton /&gt;&#125;
&#123;user.role === &#39;admin&#39; &amp;&amp; &lt;AdminPanel /&gt;&#125;
&#123;user.role === &#39;admin&#39; || user.role === &#39;moderator&#39; &amp;&amp; &lt;ModTools /&gt;&#125;

// ✅ Centralized
function canDelete(user: User) &#123; return user.role === &#39;admin&#39; &#125;
function canModerate(user: User) &#123; return [&#39;admin&#39;, &#39;moderator&#39;].includes(user.role) &#125;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When </span><code>if (user.role === &#39;admin&#39;)</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> appears in 10 different components, you&#39;ve built a maintenance trap.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The day someone adds a new role or changes what &quot;admin&quot; means, you don&#39;t want to hunt through 10 files.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Centralise it into permission helpers and import those everywhere.</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="27-no-abstraction-layer-over-thirdp"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">27. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> No abstraction layer over third-party libraries</span></h2><div class="codeblock"><pre><code>// 🚩 Red flag: tightly coupled to recharts
import &#123; LineChart, Line, XAxis, YAxis &#125; from &#39;recharts&#39;
// ...used directly in 20 components

// ✅ Wrapped behind your own interface
import &#123; Chart &#125; from &#39;@/components/Chart&#39;
&lt;Chart type=&quot;line&quot; data=&#123;data&#125; xKey=&quot;date&quot; yKey=&quot;revenue&quot; /&gt;
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If your charting library is imported directly in 20 components, you&#39;re one migration away from rewriting half the app.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A thin wrapper isn&#39;t always worth the effort for every dependency.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But for anything you use in more than a handful of places: charting, analytics, HTTP clients, etc. it pays for itself the first time you need to swap.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="28-massive-files-nobody-dares-refac"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">28. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Massive files nobody dares refactor</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Every codebase has one.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The 1,200-line component that everyone is afraid to touch because there are no tests and everything might break. So it keeps growing. New features get bolted on. The fear compounds. Nobody refactors it. It just gets worse.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The fix is never as hard as the team fears.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Start small: extract one pure function. Write one test. Then another.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> You don&#39;t need to rewrite the whole thing in a weekend. You need to stop feeding it.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="29-not-memoizing-context-values"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">29. </span>🚩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Not memoizing context values</span></h2><div class="codeblock"><pre><code>// 🚩 Red flag: new object on every render
&lt;AuthContext.Provider value=&#123;&#123; user, login, logout &#125;&#125;&gt;
  &#123;children&#125;
&lt;/AuthContext.Provider&gt;

// ✅ Memoize the value
const value = useMemo(() =&gt; (&#123; user, login, logout &#125;), [user, login, logout])
&lt;AuthContext.Provider value=&#123;value&#125;&gt;
  &#123;children&#125;
&lt;/AuthContext.Provider&gt;
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Every time the provider re-renders, it creates a new value object.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Every consumer re-renders, even if nothing changed. If your context is near the top of the tree, that&#39;s potentially your entire app re-rendering for nothing. </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>One line of </b></span><code>useMemo</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> prevents it.</b></span></p><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">None of these flags mean a codebase is doomed. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Every one of them is fixable. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;ve introduced some of them myself: the first time you see a pattern is rarely the first time you&#39;ve written it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But if you&#39;re counting more than a handful in the same project, that&#39;s worth paying attention to. Not as a judgment, but as a signal that the codebase needs some care.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Start with the ones that hurt the most. Fix those. The rest will get easier.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That&#39;s a wrap </span>🎉</p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Leave a comment </span>📩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to share the red flags you&#39;ve spotted in the wild.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">And don&#39;t forget to drop a &#39;</span>💖🦄🔥<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">&#39;.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you&#39;re learning React, download my </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.frontendjoy.com/free-react-book?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">101 React Tips & Tricks book for FREE</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you like articles like this, join my FREE newsletter, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.frontendjoy.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">FrontendJoy</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="food-for-thought">🤖<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> AI TIP</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/anthropics/skills/tree/main/skills/skill-creator?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=29-react-codebase-red-flags-from-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">skill-creator</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> skill to create new skills and improve existing ones.</span></p><hr class="content_break"><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=e6a6be4c-f101-4d2a-bb53-1c683c7100bd&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>A Day of Work Turned Into a Week</title>
  <description>Why you should always tackle the hard part of your project first</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3f1c629a-d7dd-4737-8142-b86168699f3d/how_to_level_up_your_frontend_skills__34_.png" length="44892" type="image/png"/>
  <link>https://www.frontendjoy.com/p/tackle-hard-part-first</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/tackle-hard-part-first</guid>
  <pubDate>Wed, 08 Apr 2026 14:00:00 +0000</pubDate>
  <atom:published>2026-04-08T14:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I once pushed the hardest part of a project to the end because I wasn&#39;t ready for it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The project required GraphQL. I wasn&#39;t familiar with it. So I kept building the parts I already knew: the components, the layout, the small PRs that felt productive.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I finally got to GraphQL, I discovered that schema changes took much longer to propagate than I expected.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>What I thought was a day of work turned into a week.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I missed my deadline.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Not because the work was impossible, but because I found out too late how long it would take.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The frustration wasn&#39;t about the difficulty. It was knowing I could have avoided the whole mess by starting there.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="the-monkey-and-the-pedestal"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The monkey and the pedestal</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.wsj.com/video/astro-teller-on-working-hardest-part-of-breakthroughs-first/2F41FB6C-D566-4911-AB91-F5533D779A82?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=a-day-of-work-turned-into-a-week" target="_blank" rel="noopener noreferrer nofollow">Astro Teller</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, Captain of Moonshots at X, Alphabet&#39;s Moonshot Factory, has a thought experiment: you&#39;re trying to teach a monkey to recite Shakespeare while standing on a pedestal. What do you work on first?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Start with the monkey. The pedestal is easy. You can build it anytime. But if the monkey can&#39;t learn Shakespeare, none of it matters.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="what-building-the-pedestal-looks-li"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What building the pedestal looks like</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Imagine you&#39;re building a real-time chat app in React. You need a message list, a text input, and real-time syncing via WebSockets.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You know how to build the message list and the input box. You&#39;ve done that a hundred times. But you have no clue how to handle WebSocket connections or reconnection logic when the network drops.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The temptation: focus on the styling, the emoji picker. Feel some progress. That&#39;s building the pedestal.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="why-the-hard-part-cant-wait"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why the hard part can&#39;t wait</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Putting the hard bit at the end means surprises at the worst possible time.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If I had started with GraphQL on day one, I would have hit that wall early, adjusted my estimate, and told the team. Instead, I delivered bad news when it was too late to adjust.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">On another project, I started with the most complex component — the one that would teach us how the infrastructure should work and how to talk to the backend. Once we built that, the patterns were set. The other components fell into place.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="three-ways-to-catch-yourself"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Three ways to catch yourself</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Even knowing all this, I still fall into the trap. These help me:</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Prototype first.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Before building anything, do a throwaway prototype that only tackles the risky part. For the chat app, spend a day wiring up a bare WebSocket connection in the console. No UI. No styling. Just: can I make this work? That prototype tells you whether your estimate is 2 days or 2 weeks.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Say it out loud.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Share the plan at standup: &quot;I&#39;m tackling the WebSocket logic first.&quot; Once you&#39;ve said it publicly, you feel committed. If you drift back to easy work, the team can flag it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Ship ugly.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Get the hard parts working with minimal UI. A working WebSocket connection with messages in real time, even if the message list is an unstyled </span><code>&lt;ul&gt;</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. Once the core works, the polish is easy.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="avoidance-vs-paralysis"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Avoidance vs. paralysis</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Last month, I spent 2 days building a nice-to-have feature instead of the core problem. I was shipping PRs, getting code reviews, checking things off. It felt like real progress.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Then I hit a wall. The approach had limitations I hadn&#39;t considered. It wasn&#39;t even recommended. Two days of work, and the hard problem was still exactly where I&#39;d left it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I had to close the laptop and regroup. The wasted work wasn&#39;t what bothered me. It was realizing I&#39;d chosen that work because it was comfortable, not because it mattered.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That&#39;s avoidance. And it&#39;s sneaky, because it looks and feels like productivity.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here&#39;s the distinction I wish I&#39;d learned earlier:</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Paralysis feels like nothing is happening.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> You&#39;re staring at the problem. You can&#39;t start. If this is you, knock out a quick easy win to break the freeze. Get your hands moving. Then pivot to the hard thing.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Avoidance feels productive.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> You&#39;re committing code, making PRs, crossing tasks off your list. But the hard problem isn&#39;t getting closer to solved. If you&#39;re getting things done and the scary part is still untouched, that&#39;s not momentum. That&#39;s the trap.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Be honest about which one you&#39;re in.</span></p><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Next time you begin a project, ask yourself: what&#39;s the part I&#39;m least sure about?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Start there.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=323d6254-38a2-46bc-91b2-4f4d014ca83e&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Your AI writes code 10x faster. It breaks it 10x faster too</title>
  <description> One practice stops the fix-break-revert loop — plus two skills to enforce it</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/4320bc3e-b3ac-4ae2-b3c2-feb352848163/how_to_level_up_your_frontend_skills__33_.png" length="38448" type="image/png"/>
  <link>https://www.frontendjoy.com/p/your-ai-writes-code-10x-faster-it-breaks-it-10x-faster-too</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/your-ai-writes-code-10x-faster-it-breaks-it-10x-faster-too</guid>
  <pubDate>Sat, 04 Apr 2026 20:38:36 +0000</pubDate>
  <atom:published>2026-04-04T20:38:36Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You ask Claude to refactor a component. The code looks clean. You run the app — something&#39;s broken.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You prompt it to fix it. Now something else breaks. Three rounds later, you give up and revert everything. (It gets worse when you forgot to commit first.)</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">TDD saved me from this loop. That&#39;s what this post is about.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="what-is-tdd"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What is TDD</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You write a test that defines the expected behavior </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>before</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> you write the code. Then you write just enough code to make the test pass.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The cycle:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Write a test → it fails (</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Red</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">)</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Write the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>minimum</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> code to make it pass (</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Green</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">)</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Clean up the code (</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Refactor</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">)</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Repeat</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Most of us do the opposite — write the code first, then test afterwards. Or never test at all.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="why-tdd-matters-more-now"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why TDD matters more now</span></h2><h3 class="heading" style="text-align:left;" id="1-it-protects-your-refactors"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">1. It protects your refactors</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;ve done this more than I&#39;d like to admit: write solid code, refactor it before committing, and introduce a bug I then spend 30 minutes chasing.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">With TDD, once the tests exist, you can rename things, restructure, go wild. As long as tests pass, you didn&#39;t break the behavior.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="2-its-your-only-reliable-safety-net"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">2. It&#39;s your only reliable safety net with AI</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This is the big one. This is why TDD matters </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>more</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> now than five years ago.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here&#39;s what keeps happening: Claude writes good code. I ask for a small refactor. It breaks the feature. I prompt it to fix. Now something else breaks. Three, four, five rounds — I revert everything.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Without TDD</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, you&#39;re stuck in a fix loop. Each prompt introduces new problems. You can&#39;t tell what&#39;s broken until you run the app and manually check. By round three, you&#39;ve lost track of what the code was supposed to do.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>With TDD</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, the moment the AI breaks something, the test goes red. You see it immediately. No guessing. No manual checking. No spiral.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I use a TDD skill that enforces this automatically — the AI writes tests first, runs them, then implements. When I ask for a refactor and something breaks, the tests catch it before I even look at the diff.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>We now have tools that write code 10x faster </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i><b>and</b></i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> break it 10x faster. TDD is the only thing that keeps up.</b></span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="3-and-yes-it-forces-you-to-actually"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">3. And yes — it forces you to actually write tests</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How many times have you said &quot;I&#39;ll add tests later&quot; and never did? TDD removes the excuse. Tests come first. You can&#39;t skip what you start with.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Because you verify they fail before writing the code, you know they actually test something real — not a green-by-default placeholder.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="how-to-start"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How to start</span></h2><h3 class="heading" style="text-align:left;" id="with-ai-tools"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">With AI tools</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Install a skill that enforces the Red-Green-Refactor cycle so your agent can&#39;t skip it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Two I&#39;ve used:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/mattpocock/skills/tree/main/tdd?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=your-ai-writes-code-10x-faster-it-breaks-it-10x-faster-too" target="_blank" rel="noopener noreferrer nofollow">tdd</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> — this is the one I run daily. It makes Claude write the test, verify it fails, then implement. If the test doesn&#39;t fail first, it loops back.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/obra/superpowers/tree/main/skills/test-driven-development?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=your-ai-writes-code-10x-faster-it-breaks-it-10x-faster-too" target="_blank" rel="noopener noreferrer nofollow">superpowers/test-driven-development</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> — similar behaviour.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Install one, configure your AI tool to use it by default, and forget about it. The skill handles the discipline.</span></p><h3 class="heading" style="text-align:left;" id="without-ai-tools"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Without AI tools</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Pick one function you&#39;re about to write. Before you write it:</span></p><ol start="1"><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Write a test: </span><code>it should calculate the total price with tax</code></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Run it — it fails. Good.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Write the function. Run it — it passes. Refactor if needed.</span></p></li></ol><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">One function. One test. That&#39;s your entry point.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="conclusion"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Conclusion</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">TDD felt wrong to me at first. Writing tests before the code goes against every instinct.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But last week I merged a refactor at work — nothing dramatic, but tests stayed green and I didn&#39;t think twice before hitting merge. That quiet confidence is what sold me.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Pick one feature you&#39;re working on this week. Write the test first. If you&#39;re using AI tools, install one of the skills above and let it enforce the cycle for you.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=2dc4a64c-75e9-4243-a711-ff72a4090e36&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>The Developer Everyone Wants on Their Team Isn&#39;t the Best Coder</title>
  <description>5 ways being nice compounds into opportunities, promotions, and trust</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/b3bc139a-c80c-4b10-a73e-97bc95a6f825/how_to_level_up_your_frontend_skills__32_.png" length="44709" type="image/png"/>
  <link>https://www.frontendjoy.com/p/the-developer-everyone-wants-on-their-team-isn-t-the-best-coder</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/the-developer-everyone-wants-on-their-team-isn-t-the-best-coder</guid>
  <pubDate>Fri, 03 Apr 2026 20:39:22 +0000</pubDate>
  <atom:published>2026-04-03T20:39:22Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I was mid-sentence, raving about a colleague to a new joiner, when I caught myself.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>always</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> talk about this person. To other teammates. To new hires. To anyone who asks.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Every interaction I&#39;ve had with them has been pleasant — even during disagreements, even under pressure.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If I&#39;m doing their marketing for free, how many others are too?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That question changed how I think about careers.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="1-people-want-to-work-with-you"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">1. People want to work with you</span></h3><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When a manager asks </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>&quot;who should we pull in?&quot;</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, the first names aren&#39;t always the most skilled. They&#39;re the ones people </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>enjoy</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> working with.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When deciding which team to join, people ask around. They want to know what it&#39;s like to work with you. If they hear good things, they&#39;re more likely to choose you.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Your skills get you in the room. How you treat people decides whether you get invited back.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="2-people-advocate-for-you-behind-yo"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">2. People advocate for you behind your back</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That&#39;s what happened with my colleague. I was doing free marketing for them — without them knowing.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When you&#39;re nice, people remember. When your name comes up in a room you&#39;re not in, they speak up. For promotions. For opportunities. For team changes.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can&#39;t control what people say about you. But you can make it easy for them to say good things.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="3-people-want-to-give-back"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">3. People want to give back</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Psychologists call this </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://en.wikipedia.org/wiki/Reciprocity_(social_psychology)?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=the-developer-everyone-wants-on-their-team-isn-t-the-best-coder" target="_blank" rel="noopener noreferrer nofollow">reciprocity</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: when someone helps us, we feel a pull to return the favour.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Help a colleague debug a tricky issue on a Friday afternoon? They&#39;ll remember when you need a last-minute code review. Be supportive when someone is struggling? They&#39;ll go to bat for you when it matters.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This isn&#39;t manipulation. It&#39;s human nature — and it stacks up over time.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="4-your-feedback-actually-lands"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">4. Your feedback actually lands</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Some colleagues can give me tough feedback and I take it well. I </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>know</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> it comes from a good place. I don&#39;t get defensive. I listen.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Other colleagues give mild feedback and I&#39;m already on guard. Not because the feedback is wrong — the relationship doesn&#39;t have that trust.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Be nice and constructive by default, and you earn the right to be direct when it matters.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="5-nice-pushover"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">5. Nice ≠ pushover</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Being nice doesn&#39;t mean saying yes to everything. It doesn&#39;t mean avoiding conflict. It doesn&#39;t mean letting people walk over you.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It means you can say no respectfully. Push back without making someone feel small. Hold strong opinions while respecting the person across from you.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The best leaders I&#39;ve worked with were both kind and firm. That combination is rare. And people follow it.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="what-this-actually-looks-like"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What this actually looks like</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">My colleague who does this well? When I ask for help, he shows up. No sighing. No making me feel like a burden.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I&#39;m wrong — and I&#39;ve been wrong plenty — he raises concerns so gently I </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>want</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to reconsider. He&#39;ll say </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>&quot;I see where you&#39;re coming from, but what about this edge case?&quot; </i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">and I think </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>&quot;oh, good point.&quot; </i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Compare that to </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>&quot;that won&#39;t work&quot;</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> with no context. Same message, completely different experience.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Even when he&#39;s right — </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>especially</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> when he&#39;s right — he never makes anyone feel stupid.</span></p><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Think about the colleague </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>you</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> rave about. What is it about them? I bet it&#39;s not their technical skills. It&#39;s how they make you feel.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If someone in your circle needs to hear this, send them this post ❤️</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That&#39;s a wrap.</span></p><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Thank you for reading </span>🙏</p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I share career tips like this every week in my free newsletter, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b><a class="link" href="https://frontendjoy.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=the-developer-everyone-wants-on-their-team-isn-t-the-best-coder" target="_blank" rel="noopener noreferrer nofollow">FrontendJoy</a></b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> — practical advice to go from junior to senior frontend developer. Join thousands of developers who already read it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">For daily tips, find me on </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://twitter.com/_ndeyefatoudiop?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=the-developer-everyone-wants-on-their-team-isn-t-the-best-coder" target="_blank" rel="noopener noreferrer nofollow">X/Twitter</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=9787e805-e878-41a5-a8d3-b433b01e6645&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>I&#39;ve Reviewed 3,000+ Pull Requests. Your Big PR Isn&#39;t Getting a Real Review.</title>
  <description>7 reasons to keep your PRs small as a junior dev — especially in the era of AI</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/71568703-2dd3-45cb-abe3-060eaeb0e95e/how_to_level_up_your_frontend_skills__31_.png" length="49213" type="image/png"/>
  <link>https://www.frontendjoy.com/p/keep-pull-requests-small-junior-dev</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/keep-pull-requests-small-junior-dev</guid>
  <pubDate>Thu, 02 Apr 2026 21:28:59 +0000</pubDate>
  <atom:published>2026-04-02T21:28:59Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">6 months after starting as a frontend dev, I was staring at a piece of code.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Dumbfounded.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The logic was tangled. I couldn&#39;t find my way through it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>&quot;Who wrote this?&quot;</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span>🤔</p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I checked git blame, ready to hunt down the culprit.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">There it was, in plain sight: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>Blame nfdiop</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I wrote that monstrosity. And now I had to deal with it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">&quot;Why did anyone let me merge this?&quot; I went back to the PRs and realized why.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">My PRs were </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>massive</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. No one could reasonably give me a thorough review. Those big PRs cost me valuable learning.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Since then, I&#39;ve reviewed over </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>3,000 PRs</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. The pattern is always the same: big PRs get shallow reviews.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here are 7 reasons to keep yours small.</span></p><hr class="content_break"><p class="paragraph" style="text-align:left;"><b>TLDR</b></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Small PRs get faster, more thorough reviews — you learn more</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reviewers procrastinate on big PRs; small ones ship sooner</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Big PRs force all-or-nothing reverts when things break</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">AI-generated code hides subtle bugs; smaller PRs make them easier to catch</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Splitting PRs builds your decomposition and architecture skills</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Parallel reviews from different reviewers unblock you faster</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Small PRs mean fewer merge conflicts</span></p></li></ul><hr class="content_break"><h2 class="heading" style="text-align:left;" id="1-you-get-reviews-that-actually-tea"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">1. You get reviews that actually teach you</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Imagine handing someone a 400-page novel and asking them to proofread it by tomorrow. Now imagine handing them a 10-page chapter. Which one gets real feedback?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Same with PRs. When a PR is big, reviewers focus on the big picture and miss the details. Those details, a cleaner pattern here, a better naming choice there, are what build your coding instincts as a junior dev.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">With big PRs, reviewers get tired or miss things. With small PRs, they have the bandwidth to teach you.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Don&#39;t be &quot;old&quot; me </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="2-small-p-rs-ship-faster"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">2. Small PRs ship faster</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Whenever I have a big PR to review, I keep putting it off. A small PR? I knock it out in minutes.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;m not the only one. Opening 3 small PRs gets you to production faster than 1 big one.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="3-reverts-dont-kill-all-your-progre"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">3. Reverts don&#39;t kill all your progress</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I once had a big PR with unrelated changes finally merged, only to revert the whole thing because of one broken piece.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Most of the code was fine. But everything lived in a single PR, so all progress was lost.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">With smaller PRs, the working features ship independently. Only the broken piece gets reverted.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Example:</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Say you build a new filter component, update the API call, and refactor a shared utility, all in one PR.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The utility refactor breaks something. Now the filter and API work are reverted too. Three small PRs? Only the utility gets rolled back.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="4-bugs-hide-better-in-big-p-rs"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">4. Bugs hide better in big PRs</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Big PRs were already hard to test. AI makes it worse.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">AI-generated code looks clean but can hide subtle bugs that aren&#39;t obvious at first glance. AI-powered review tools help, but they miss things too.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Smaller PRs mean less code to review. Fewer places for bugs to hide.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="5-splitting-p-rs-sharpens-your-arch"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">5. Splitting PRs sharpens your architecture</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Striving to split my PRs improved my skills in two ways:</span></p><ol start="1"><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>File organization</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> — I had to structure files so different reviewers could work in parallel without conflicts. No more spaghetti files with all the logic crammed in.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>System thinking</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> — I had to think about all the components upfront and how they fit together. This forced better separation of concerns.</span></p></li></ol><hr class="content_break"><h2 class="heading" style="text-align:left;" id="6-parallel-reviews-unblock-you"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">6. Parallel reviews unblock you</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This is the best perk of small PRs.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Say you have three colleagues. Instead of waiting for one person to slog through your giant PR, open 3 small, independent PRs. Tag a different reviewer on each.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You move three times faster. And if one PR gets blocked by feedback, you keep working on the others instead of sitting idle.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="7-fewer-merge-conflicts"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">7. Fewer merge conflicts</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Big PRs sit in review for days. The longer they sit, the more your teammates&#39; changes pile up on the target branch.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">By the time your big PR is approved, you&#39;re resolving conflicts you wouldn&#39;t have had if you&#39;d merged smaller pieces along the way.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Small PRs get reviewed fast, merge fast, and stay out of each other&#39;s way.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="how-small-is-small-enough"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How small is small enough?</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">My rule of thumb: a PR should do only one thing. If I start writing the PR description and I use &quot;and&quot;, &quot;also&quot;, or &quot;as well as&quot;, I know it&#39;s too big.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Ask yourself:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Can I ship the refactor separately from the feature?</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Can the types or interfaces go first?</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Can the tests be their own PR?</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If the answer to any of these is yes, split it.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="conclusion"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Conclusion</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When you join as a junior dev, you feel pressure to prove yourself and ship fast. I know I did.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But big PRs hurt your growth. You learn less, introduce more bugs, and wait longer for reviews.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Shipping fast and shipping big are not the same thing.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Keep your PRs small. Your future self will thank you.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That&#39;s a wrap. If this helped, share it with a junior dev who needs to hear it ❤️</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="food-for-thought">💡<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> AI TIP</span></h2><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/mattpocock/skills/tree/main/grill-me?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=i-ve-reviewed-3-000-pull-requests-your-big-pr-isn-t-getting-a-real-review" target="_blank" rel="noopener noreferrer nofollow">/grill-me</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> skill from Matt Pocock to build the right thing.</span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=d602160a-ea51-479e-a10e-464927d8864f&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Junior Devs in the Age of AI ✨</title>
  <description>Why now is the best — and hardest — time to start your career </description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8cafd51c-f051-46e7-bde3-25f94b655b0e/how_to_level_up_your_frontend_skills__30_.png" length="50279" type="image/png"/>
  <link>https://www.frontendjoy.com/p/junior-devs-in-the-age-of-ai</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/junior-devs-in-the-age-of-ai</guid>
  <pubDate>Wed, 01 Apr 2026 20:03:27 +0000</pubDate>
  <atom:published>2026-04-01T20:03:27Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I stayed 6 months away from my computer during my parental leave.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I came back, I was in shock.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Claude Code and Codex had gotten seriously good. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Tasks that used to require talking to three people? I could now do them with a single prompt. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;d invested years mastering VS Code, but now most of my time was in the terminal.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here&#39;s what I&#39;ve learned since coming back, and what I&#39;d tell any dev feeling the same confusion.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="getting-hired-is-harder-being-a-jun"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Getting hired is harder. Being a junior dev is better.</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Junior dev role openings have decreased. Getting hired is harder. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But not impossible: get referrals, network, and build real projects.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But for junior devs who are employed? This is an incredible time.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why?</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>You can onboard 10x faster.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Ask Claude or Codex to explain the codebase. Ask it again. And again. It never gets tired of your questions.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>You can skip straight to architecture.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Instead of spending weeks learning a library&#39;s API, let AI handle that. Focus on </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>why</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> systems are designed the way they are.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>You can operate at mid-level speed.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> The gap between &quot;junior&quot; and &quot;mid&quot; just got smaller.</span></p></li></ul><hr class="content_break"><h2 class="heading" style="text-align:left;" id="soft-skills-are-no-longer-optional"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Soft skills are no longer optional</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">No one can predict the future of software engineering.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But coding won&#39;t be the main part of the job anymore. That much feels certain.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you could get away with poor communication skills before because you were a strong IC, that&#39;s over. Communication, public speaking, writing clearly: these are the new hard skills.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If yours are weak, start improving them now. (You can even use AI tools to practice </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">)</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="the-ic-job-as-we-knew-it-is-gone"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The IC job as we knew it is gone</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I loved being an IC. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Waking up, opening my IDE, shipping code all day. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">No meetings. No coordination. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Just me and the problem.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That version of the job is gone.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">We can no longer afford to be pure ICs. Even if you only focus on delivering features and never go into management, you&#39;ll be managing an army of AI agents instead of coding alone.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The question shifts from </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>how to build it</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>what to build</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A small number of exceptional devs will remain pure ICs. For the rest of us, the role is evolving.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="everyone-is-becoming-fullstack"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Everyone is becoming full-stack</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Being a purely frontend or purely backend dev is a luxury of the past.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">With AI tools, you can pick up backend tasks as a frontend dev and vice versa. You might prefer one side, but you can&#39;t wait for someone else to handle a simple task on the other side.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The walls between frontend and backend are thinning fast.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="senior-devs-are-scared-too"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Senior devs are scared too</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I hear junior devs say they&#39;re afraid of AI.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Senior devs are too. I know I was.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I first discovered Claude Code, I was excited. Then scared. Then excited again. That emotional rollercoaster is completely normal.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Companies have been laying off teams to double down on AI. The fear is rational.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So I stopped being scared and started being curious. What can I build faster now? What problems were too tedious to solve before?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Fear doesn&#39;t ship code. Curiosity does.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="tech-is-still-worth-it"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Tech is still worth it</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I hear people talking about leaving tech.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Maybe they&#39;re right for themselves. But I still think tech is an </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>amazing</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> field. You learn constantly, the pay is strong, you create real impact through what you build. And yes, you can dress casually </span>😅</p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you love this work, stay. Don&#39;t let the noise push you out.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="what-id-do-as-a-junior-dev-right-no"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What I&#39;d do as a junior dev right now</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If I love being a dev:</b></span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>Employed:</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> I&#39;d sharpen my communication skills, build side projects to stretch my abilities, and read foundational books (</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>The Pragmatic Programmer</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>A Philosophy of Software Design</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">). I&#39;d use AI as a learning partner, not a crutch.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>Unemployed:</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> I&#39;d build real projects with AI as my partner. I mean really building them, understanding every architectural decision. I&#39;d also volunteer for real-world projects to get experience that stands out.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If I don&#39;t love being a dev:</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;d start looking for what I actually love. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Now. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You don&#39;t want to spend years pushing through something that doesn&#39;t excite you, only to get laid off and realise you lost time you could have spent on something meaningful.</span></p><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The irony? The skills AI can&#39;t replace (communication, judgment, knowing what to build) are the ones we&#39;ve been undervaluing for years.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you&#39;re a dev reading this and feeling the heat, you&#39;re not behind. You&#39;re at the starting line of a different race.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That&#39;s a wrap. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If this resonated, share it with a dev friend who might need to hear it ❤️</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="food-for-thought">💡<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">AI TIP</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use the Claude </span><code>/insights</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> command to analyse and improve your workflow.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/f11ef364-0ebe-4da1-b0af-7c8ade979b82/Screenshot_2026-04-01_at_21.58.34.png?t=1775073622"/></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=02ca5c11-0d28-4a24-a3e8-a4d7958ea3a7&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>✨ How to Handle Team Restructuring at Work (Without Destroying Your Career)</title>
  <description>I Cried When They Moved Me to a New Team. Here&#39;s What I Learned.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/2c611075-eae8-4c37-933a-44e898acd597/how_to_level_up_your_frontend_skills__29_.png" length="35169" type="image/png"/>
  <link>https://www.frontendjoy.com/p/team-restructuring-career-advice</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/team-restructuring-career-advice</guid>
  <pubDate>Tue, 03 Mar 2026 15:00:00 +0000</pubDate>
  <atom:published>2026-03-03T15:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Career]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">My first project at work was the best thing that had ever happened to me.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I loved my team. I loved the codebase. I was finally writing production code that mattered, alongside engineers I looked up to.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I felt invincible. Then I experienced my first team restructuring.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">One morning, my manager called a meeting and moved me to another team. Overnight.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I didn&#39;t take it well. I cried. I complained to my friends constantly. Worse, I kept helping my old team instead of investing in my new one </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This didn&#39;t work out for me. I ended up receiving my first bad feedback and had to earn trust again.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I&#39;m not alone. Over the course of my career, I&#39;ve seen many people resist team restructuring, and it almost always holds them back.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here are the lessons that cost me a bad feedback to learn.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="tldr"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">TLDR</span></h2><ol start="1"><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Restructuring is strategy, not chaos — your leads are reshuffling to win</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The wrong moves: complaining, clinging, living in the past</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Seek understanding — find someone who can explain the &quot;why&quot;</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Embrace new teammates — set up coffees, learn their strengths</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Re-assess your work — make sure it still matters in the new context</span></p></li></ol><hr class="content_break"><h2 class="heading" style="text-align:left;" id="restructuring-is-strategy-not-chaos"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Restructuring is strategy, not chaos</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Think of your team like a basketball team.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Players get injured, new talent arrives, the league changes the rules. Coaches don&#39;t reshuffle because they want to — they do it because standing still means losing.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Your team lead is doing the same thing. Someone resigns. The business shifts. New customers arrive. Leads adapt: hiring, creating new teams, or moving people around.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As brutal as these changes feel, they keep the business alive. And more importantly, they keep you employed </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You know what&#39;s worse than team restructuring? </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Layoffs</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When leads make changes, 99% of the time it&#39;s with the hope the business will be better. It&#39;s not incompetence. It&#39;s not carelessness. It&#39;s not a whim.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As a junior, your perspective is limited. You see your team. You don&#39;t see the full company picture.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>So accept it, if you plan to stay at your company.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Don&#39;t be &quot;old&quot; me.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="the-wrong-way-to-handle-team-restru"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The wrong way to handle team restructuring</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The wrong way is exactly what I did: fighting the change instead of leaning into it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here&#39;s how people fail during team restructuring:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Complaining loudly (and constantly).</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Once a decision has been made, debating it changes nothing. Especially as a junior, vocal resistance won&#39;t reverse the call. It&#39;ll change how people see you.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Working as if nothing changed.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Say your team merges with another. The wrong move is to keep working with the same people on the same things. Reach out to your new teammates. Learn what they&#39;re building.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Living in the past.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Don&#39;t waste energy romanticizing the old setup, the smaller team, the colleagues who felt like friends. Time spent mourning the old world is time you could spend building in the new one.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Now, here is what actually helps.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="how-to-thrive-when-team-restructuri"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How to thrive when team restructuring happens</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I took my first team restructuring hard.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Today, whenever my manager mentions changes, I&#39;m all in </span>💪<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. Because I learned something: restructuring is a chance to start fresh. New team, new energy.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here&#39;s how to make it work for you:</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="seek-understanding-give-yourself-a-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Seek understanding (give yourself a day first)</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You won&#39;t always understand why the change happened. That&#39;s OK.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But once you get over it, find someone who can explain the &quot;why.&quot; A manager, a lead, someone who sees the bigger picture. Ask them what drove the decision and what role you play in it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You&#39;ll often find the change makes sense. You just didn&#39;t have the full context yet.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>PS: If it still doesn&#39;t make sense after asking around, you&#39;re entitled to look for a new job </i></span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>.</i></span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="embrace-your-new-teammates"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Embrace your new teammates</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Meeting new colleagues is exciting when you let it be. It&#39;s a chance to learn their tricks, discover how they work, even make new friends.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Set up time with them: grab a coffee, learn what they care about, ask for their best career advice. Observe their strengths. Ask them to teach you something.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This one habit changed everything for me.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">For example, once I accepted that restructuring, I took the time to discuss with one of my new teammates. Turns out he was an exceptional developer with solid fundamentals and hands-on frontend experience. He shared specific Frontend resources that were the first ones I used in my learning journey.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reassess-your-work"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Re-assess your work</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Whenever dynamics change, check that your work still matters.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Is what you&#39;re building still the most valuable thing in the new context? If not, talk to your team and adjust. Don&#39;t keep pushing on a project that lost its purpose in the shuffle.</span></p><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Restructuring is scary. I know. I cried through my first one.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But it&#39;s also the reason I met some of the best engineers I&#39;ve worked with. It&#39;s the reason I learned to adapt instead of cling.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here&#39;s your homework: if you&#39;re going through a restructuring right now, schedule a 15-minute coffee with one person from your new team this week. Ask them: &quot;What&#39;s the most interesting thing you&#39;re working on?&quot;</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That&#39;s it. That&#39;s the start.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you know someone going through this, send them this post ❤️.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That&#39;s a wrap.</span></p><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Thank you for reading this post </span>🙏<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I share career tips like this every week in my free newsletter, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b><a class="link" href="https://frontendjoy.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-to-handle-team-restructuring-at-work-without-destroying-your-career" target="_blank" rel="noopener noreferrer nofollow">FrontendJoy</a></b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> — practical advice to go from junior to senior frontend developer. Join thousands of developers who already read it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you want daily tips, find me on </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://twitter.com/_ndeyefatoudiop?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-to-handle-team-restructuring-at-work-without-destroying-your-career" target="_blank" rel="noopener noreferrer nofollow">X/Twitter</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=cd7c8c2e-2cf6-4d2e-ae1e-52174e997c69&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Devs: Own your growth — or regret it later</title>
  <description>Why waiting for someone else to guide your career is the fastest way to stay stuck.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/cba2b6ff-38f8-4117-8ad7-96dc603e4cd3/how_to_level_up_your_frontend_skills__27_.png" length="36252" type="image/png"/>
  <link>https://www.frontendjoy.com/p/devs-own-your-growth-or-regret-it-later-715c</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/devs-own-your-growth-or-regret-it-later-715c</guid>
  <pubDate>Wed, 09 Jul 2025 14:00:00 +0000</pubDate>
  <atom:published>2025-07-09T14:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Career]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In 2019, one year after joining a dream company, I was frustrated.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I realized I wanted to switch to another area of software engineering (frontend), but I didn’t know how 🤷‍♀️.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>No one would give me a step-by-step plan to achieve it.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">All my life, I was used to having either my parents, teachers, or family provide me with a simple roadmap to follow.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I was expecting the same from my managers here.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Fast forward to today: I’m a Senior Frontend Engineer, and I got here by </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>owning my growth path</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>In this post, I’ll explain why you always need to own your growth as a dev — and why not doing so is reckless.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Ready? Let’s get started! </span>🚀</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="what-it-means-to-own-your-growth-as"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What it means to own your growth as a dev</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Owning your growth as a dev, especially a junior one, means:</span></p><ol start="1"><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Being clear about where you want to be in 1, 3, and 5 years.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Sharing your goals with people who can help you.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Having a plan to reach your goals (and refining it with your manager).</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Following up on the plan.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Re-adapting and adjusting when things change.</span></p></li></ol><hr class="content_break"><h2 class="heading" style="text-align:left;" id="why-its-essential-to-own-your-growt"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why it’s essential to own your growth</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As a (junior) dev, it’s way too easy to be passive and wait for opportunities.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Don’t get me wrong: that’s not always bad.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can get pretty far with a fantastic manager and a bit of luck on projects.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But it’s </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>dangerous to stay in the backseat of your career</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. Here’s why:</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reason-1-if-you-dont-set-goals-you-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #1: “If you don&#39;t set goals, you will always work for someone who does.”</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s just the truth.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you don’t have a clear idea of where you want to go, you’ll end up working for someone else’s goals.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s not necessarily bad if your goals align.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But when they don’t, 5 years down the road, you might realize you’re unhappy, stuck in a role that doesn’t fulfill you </span>🥲<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reason-2-working-toward-your-goals-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #2: Working toward your goals brings you more supporters</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Have you heard of the analogy about pushing a broken car?</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It goes like this:</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s much easier to help someone who’s already pushing their broken car than someone who’s just standing next to it, waiting.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Why?</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Because movement attracts help.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>People are far more likely to jump in and assist when they see you taking action, even if it’s messy or slow.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So if you’re stuck, start pushing.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You’ll be amazed at who shows up to give you a hand.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reason-3-owning-your-growth-gives-y"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #3: Owning your growth gives you more credibility</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When you own your growth, set goals, and work toward them, it’s easy to imagine you doing the same for a team.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Owning your growth shows strong ownership — a trait that accelerates your career.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reason-4-other-people-are-also-tryi"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #4: Other people are also trying to figure it out</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As a junior dev, I used to look at folks with 3+ years of experience and think:</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>“Wow, they’ve figured it all out.”</i></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Fast forward to today — after 5+ years — I’ve realized you never really figure it out </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The problems get harder.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As a manager, I see this too: I can give some advice, but until someone comes to me with </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>clear goals</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, it can be pretty generic.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>But if you arrive with a clear goal and a rough plan, it’s much easier to provide you with tailored, helpful advice.</b></span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reason-5-having-clear-goals-helps-y"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #5: Having clear goals helps you adjust when things change</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Tech changes all the time. Look at how AI is reshaping everything.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Clear goals act like a north star. </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">They let you reassess: is this new tech going to help or hurt in reaching them?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Without that, you’ll drift wherever the wind blows — and might wake up in a place you hate.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="how-to-own-your-growth"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How to own your growth</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Alright, so how do you actually do it?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let me start with a personal example.</span></p><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>My story:</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In 2019, I wanted to transition into frontend development. So I:</span></p><ol start="1"><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Made this goal clear to my manager.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Talked to as many people as possible who’d made the switch.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Applied all their tips (learned JavaScript, contributed to the product, etc.).</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Shared my progress regularly with my manager.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Repeated the cycle — contribute → share → repeat — until the right opportunity came up. Then I made the transition.</span></p></li></ol><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>What you can do:</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you’re not currently owning your growth, here’s how to start:</span></p><ol start="1"><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Set goals (or anti-goals):</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Where do you want to be in 1, 3, 5 years? Do you want to be an IC, a manager, or earn a specific comp?</span><br><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Can’t come up with goals? </span><br><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">👉 Try </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>anti-goals</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: what does your nightmare life look like? (low pay, endless meetings, outdated skills). Then work backwards to avoid it.</span><br></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Come up with a plan:</b></span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Start with a simple 3-year plan, a clearer 2-year plan, and a more detailed 1-year plan.</span><br><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The plan doesn’t have to be perfect or set in stone. It’s mainly a conversation starter.</span><br><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Remember, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>“Complexity is the enemy of execution.”</i></span><br></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Share and refine the plan:</b></span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Don’t just tell your manager, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>“This is what I want.”</i></span><br><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Say, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>“This is what I want, and here’s how I plan to get there.”</i></span><br><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Then gather feedback, adjust accordingly, and ensure it aligns with the business&#39;s needs as well.</span><br></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Work toward the plan every day:</b></span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Show up consistently. Small steps daily beat occasional giant leaps.</span><br></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Share your progress:</b></span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Don’t be shy. Sharing wins builds trust and shows commitment.</span><br></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Reassess and adjust:</b></span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Plans change. Don’t abandon ship at the first hurdle — some things take time. </span><br><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As Warren Buffett said, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>“You can&#39;t produce a baby in one month by getting nine women pregnant.”.</i></span><br><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But also don’t be afraid to pivot if needed.</span><br></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Keep setting goals:</b></span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s easy to coast when things go well. But this is a never-ending process.</span></p></li></ol><hr class="content_break"><h2 class="heading" style="text-align:left;" id="summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Summary</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You’re cheating yourself if you’re not owning your growth as a dev.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Owning your growth means having goals (or anti-goals) and working toward them.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you don’t, you’re 99% more likely to wake up one day in the wrong place, full of regrets.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s not that hard: set goals, build a plan, share it, work on it, show your progress, adjust — repeat.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You’ve got this. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Become the amazing developer you’re meant to be </span>💪<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="food-for-thought">💡<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> TIP OF THE WEEK</span></h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/_ndeyefatoudiop/status/1940364871104893111?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=devs-own-your-growth-or-regret-it-later"><p> Twitter tweet </p></a></blockquote><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=ffaabe82-a887-4fbb-b483-7a5a37d8cfe3&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>✨ Is React really that great?</title>
  <description>7 reasons why React is still a top choice for frontend developers in 2025</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/2cba0a5d-6079-4d48-85fd-735f9e57af79/how_to_level_up_your_frontend_skills__26_.png" length="31687" type="image/png"/>
  <link>https://www.frontendjoy.com/p/is-react-really-that-great-c09c</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/is-react-really-that-great-c09c</guid>
  <pubDate>Sun, 22 Jun 2025 14:00:00 +0000</pubDate>
  <atom:published>2025-06-22T14:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[React]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you’ve been a frontend developer for a while, you’ve heard of React.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You might even be learning it right now and wondering — is it really worth the hype?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Short answer: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>It is.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here are 7 reasons why 👇</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="1-simple-enough-to-pick-up"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">1. Simple enough to pick up</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can build your first component in minutes.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Scaffold a new project with </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://vite.dev/guide/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=is-react-really-that-great" target="_blank" rel="noopener noreferrer nofollow">Vite</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, tweak a few lines, and you’ve got this:</span></p><div class="codeblock"><pre><code>function Hello() &#123;
  return &lt;h1&gt;Hello world!&lt;/h1&gt;
&#125;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s the beauty of React:</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">React components are just JavaScript functions — no need to learn a new language.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can start small and build from there.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">All you need is:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">a good understanding of JavaScript</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">the official React docs</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">hands-on practice (and maybe AI to help debug)</span></p></li></ul><hr class="content_break"><h3 class="heading" style="text-align:left;" id="2-great-community"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">2. Great community</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Stuck on something? Someone’s been there before.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You’ll find help on StackOverflow, GitHub, Reddit, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://dev.to?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=is-react-really-that-great" target="_blank" rel="noopener noreferrer nofollow">dev.to</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, Discord, and tons of blogs and newsletters like this one </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The ecosystem is one of the most beginner-friendly out there.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="3-incredible-learning-resources"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">3. Incredible learning resources</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">From the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://react.dev/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=is-react-really-that-great" target="_blank" rel="noopener noreferrer nofollow">official React docs</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to YouTube tutorials, newsletters, and free courses…</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">There’s no shortage of quality content.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can literally build a career just by learning React from free resources.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="4-react-gives-you-building-blocks"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">4. React gives you building blocks</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">React isn’t a full framework, and that’s a good thing.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It gives you the essentials: components, state, and rendering logic.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The rest? You choose:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Router? Take your pick.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Data fetching? Use what fits your stack.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Styling? Go with CSS Modules, Tailwind, styled-components — whatever you like.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">No lock-in. No monolith.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="5-deterministic-mostly"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">5. Deterministic (mostly)</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">React removes the guesswork from UI.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If </span><code>state === x</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, your UI </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>always</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> looks like </span><code>y</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That makes your app easier to reason about — and debug.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Compare that to manually manipulating the DOM... and you’ll never go back.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="6-less-spaghetti-more-structure"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">6. Less spaghetti, more structure</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">React encourages breaking your UI into small, reusable components.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s huge.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s the difference between one 1000-line file and a clean, modular codebase with clear responsibilities.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="7-constantly-improving"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">7. Constantly improving</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">React’s not sitting still.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">From class components to hooks to server components — it keeps evolving without breaking your app.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s one of the rare libraries that’s both stable </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>and</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> moving forward.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="tldr-yes-react-is-great"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">TL;DR: Yes, React is great</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Easy to start</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Scales well</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Backed by a world-class community</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Sure, it’s not perfect. But for most web projects in 2025, it’s a smart bet.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="food-for-thought">🐞<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> SPOT THE BUG</span></h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/_ndeyefatoudiop/status/1935653827983937655?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=is-react-really-that-great"><p> Twitter tweet </p></a></blockquote><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=9211c499-e4ff-42ec-9275-7f26bdf8fa28&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>✨ 17 React Hooks That Power 90% of Modern Components</title>
  <description>No fluff. Just the React hooks you’ll use over and over again.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a1e4afdf-f522-44af-8acd-45d95839feb1/how_to_level_up_your_frontend_skills__25_.png" length="47730" type="image/png"/>
  <link>https://www.frontendjoy.com/p/17-react-hooks-that-power-90-of-modern-components</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/17-react-hooks-that-power-90-of-modern-components</guid>
  <pubDate>Tue, 13 May 2025 14:00:00 +0000</pubDate>
  <atom:published>2025-05-13T14:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[React]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>New to React?</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If yes, you’ve probably wondered what hooks you really need—or worse, you’ve been copying the same logic over and over without realizing it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This post covers all the React hooks you’ll likely need in your project.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let’s dive in.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="1-use-state"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">1. useState</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This hook is unavoidable.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Whenever you need dynamic state that persists across re-renders, this is the one.</span></p><div class="codeblock"><pre><code>const [count, setCount] = useState(0);</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="2-use-reducer"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">2. useReducer</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Once your state becomes complex (e.g. multiple correlated fields), </span><code>useReducer</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> becomes your friend.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It also pairs really well with </span><code>useContext</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, letting you update state with simple </span><code>dispatch</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> calls.</span></p><div class="codeblock"><pre><code>const reducer = (state, action) =&gt; &#123;
  switch (action.type) &#123;
    case &quot;addTodo&quot;:
      return &#123; todos: [...state.todos, action.todo] &#125;;
    case &quot;removeTodo&quot;:
      // TODO: Implement logic
    case &quot;toggleTodo&quot;:
      // TODO: Implement logic
    default:
      return state;
  &#125;
&#125;;

const [state, dispatch] = useReducer(reducer, &#123; todos: [] &#125;);</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="3-use-context"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">3. useContext</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When prop drilling gets out of hand, this hook saves the day.</span></p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Prop drilling</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> = passing props through multiple layers just to reach a deeply nested component.</span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use </span><code>useContext</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">manage global state in small apps</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">share data like the authenticated user</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">avoid passing props manually everywhere</span></p></li></ul><div class="codeblock"><pre><code>const UserContext = createContext();

function App() &#123;
  const user = useUser();
  return (
    &lt;UserContext.Provider value=&#123;user&#125;&gt;
      &#123;/* ... */&#125;
    &lt;/UserContext.Provider&gt;
  );
&#125;

function Profile() &#123;
  const user = useContext(UserContext);
  return &lt;div&gt;Hello &#123;user.name&#125;&lt;/div&gt;;
&#125;</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="4-use-effect"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">4. useEffect</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You should avoid it 99% of the time.</span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">(See: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://react.dev/learn/you-might-not-need-an-effect?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=17-react-hooks-that-power-90-of-modern-components" target="_blank" rel="noopener noreferrer nofollow">You Might Not Need an Effect</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">)</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But in real life, you’ll still need it—especially for things like syncing with external systems.</span></p><div class="codeblock"><pre><code>function useSetDocumentTitle(title: string) &#123;
  useEffect(() =&gt; &#123;
    document.title = title;
  &#125;, [title]);
&#125;</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="5-use-ref"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">5. useRef</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You should never directly manipulate the DOM in React.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But when you must (e.g. for canvas, chart libraries…), </span><code>useRef</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> is the safe way.</span></p><div class="codeblock"><pre><code>function ExampleChart(&#123; data &#125;) &#123;
  const canvasRef = useRef();

  useEffect(() =&gt; &#123;
    const ctx = canvasRef.current;
    if (!ctx) return;

    const chart = new Chart(ctx, &#123;
      type: &quot;bar&quot;,
      data: &#123;
        labels: data.map((row) =&gt; row.year),
        datasets: [&#123; label: &quot;Likes&quot;, data: data.map((r) =&gt; r.count) &#125;],
      &#125;,
    &#125;);

    return () =&gt; chart.destroy();
  &#125;, []);

  return &lt;canvas ref=&#123;canvasRef&#125; /&gt;;
&#125;</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="6-use-memo-use-callback"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">6. useMemo / useCallback</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">These may become optional thanks to the new React Compiler—but for now, they’re still useful.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use </span><code>useMemo</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> when:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">an expensive computation should not re-run on every render</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">you&#39;re memoizing a non-primitive dependency</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">you&#39;re passing values to </span><code>memo</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">-wrapped components</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use </span><code>useCallback</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to memoize functions.</span></p><div class="codeblock"><pre><code>const total = useMemo(() =&gt; computeTotal(items), [items]);

const handleClick = useCallback(() =&gt; &#123;
  console.log(&quot;clicked&quot;);
&#125;, []);
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="7-use-layout-effect"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">7. useLayoutEffect</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This one is rare but useful.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It runs </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>before paint</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, which helps prevent layout shifts or flickering UI.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">See real examples here: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.developerway.com/posts/no-more-flickering-ui?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=17-react-hooks-that-power-90-of-modern-components" target="_blank" rel="noopener noreferrer nofollow">No more flickering UI</a></span></p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you’re not comfortable with React components lifecycle, check my post </span>✨<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.frontendjoy.com/p/react-lifecycle-in-3-minutes?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=17-react-hooks-that-power-90-of-modern-components" target="_blank" rel="noopener noreferrer nofollow"><b> React Lifecycle in 3 Minutes</b></a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> </b></span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>.</b></span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><div class="codeblock"><pre><code>useLayoutEffect(() =&gt; &#123;
  const height = ref.current.offsetHeight;
  setHeight(height);
&#125;, []);
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="8-use-swr-use-query"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">8. useSWR / useQuery</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://swr.vercel.app/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=17-react-hooks-that-power-90-of-modern-components" target="_blank" rel="noopener noreferrer nofollow">SWR</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://tanstack.com/query/latest?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=17-react-hooks-that-power-90-of-modern-components" target="_blank" rel="noopener noreferrer nofollow">TanStack Query</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> are becoming the standard for fetching data in React.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">SWR is simpler and great for most use cases while TanStack Query is more complex and powerful.</span></p><h3 class="heading" style="text-align:left;" id="swr"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">SWR</span></h3><div class="codeblock"><pre><code>const fetcher = (url) =&gt; fetch(url).then((res) =&gt; res.json());

const &#123; data, error, isLoading &#125; = useSWR(&quot;/api/user&quot;, fetcher);</code></pre></div><h3 class="heading" style="text-align:left;" id="tan-stack-query"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">TanStack Query</span></h3><div class="codeblock"><pre><code>const getUser = () =&gt; fetch(&quot;/api/user&quot;).then((res) =&gt; res.json());

const &#123; data, isLoading &#125; = useQuery(&#123;
  queryKey: [&quot;user&quot;],
  queryFn: getUser,
&#125;);</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="9-use-selector-use-dispatch-or-othe"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">9. useSelector, useDispatch, or other state hooks</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Sometimes React’s built-in state tools aren’t enough.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You’ll then see these hooks depending on the state library:</span></p><ul><li><p class="paragraph" style="text-align:left;"><code>useSelector</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>useDispatch</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> from </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://react-redux.js.org/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=17-react-hooks-that-power-90-of-modern-components" target="_blank" rel="noopener noreferrer nofollow">react-redux</a></span></p></li><li><p class="paragraph" style="text-align:left;"><code>useAtom</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> from </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://jotai.org/docs?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=17-react-hooks-that-power-90-of-modern-components" target="_blank" rel="noopener noreferrer nofollow">Jotai</a></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">etc.</span></p></li></ul><hr class="content_break"><h2 class="heading" style="text-align:left;" id="10-use-navigate"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">10. useNavigate</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://reactrouter.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=17-react-hooks-that-power-90-of-modern-components" target="_blank" rel="noopener noreferrer nofollow">React Router</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> is very popular.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So is its navigation hook:</span></p><div class="codeblock"><pre><code>const navigate = useNavigate();
navigate(&quot;/profile&quot;);</code></pre></div><hr class="content_break"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Now, let’s talk about hooks I reach for in nearly every app—even though they’re not built into React.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="11-use-boolean"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">11. useBoolean</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">One of my all-time favorites.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It makes managing boolean state super clean.</span></p><div class="codeblock"><pre><code>const &#123; value: isOpen, setFalse, toggle &#125; = useBoolean();

return (
  &lt;&gt;
    &lt;button onClick=&#123;toggle&#125;&gt;
      &#123;isOpen ? &quot;Close form&quot; : &quot;Open form&quot;&#125;
    &lt;/button&gt;
    &lt;Dialog isOpen=&#123;isOpen&#125; onClose=&#123;setFalse&#125;&gt;
      &#123;/* Form content */&#125;
    &lt;/Dialog&gt;
  &lt;/&gt;
);
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="12-use-copy-to-clipboard"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">12. useCopyToClipboard</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Perfect for &quot;copy&quot; buttons.</span></p><div class="codeblock"><pre><code>const [copiedText, copy] = useCopyToClipboard();

const handleCopy = () =&gt; &#123;
  copy(&quot;Hello World&quot;).catch(err =&gt; &#123;
    errorToast(&quot;Failed to copy!&quot;, err);
  &#125;);
&#125;;

return (
  &lt;&gt;
    &lt;button onClick=&#123;handleCopy&#125;&gt;Copy&lt;/button&gt;
    &#123;copiedText &amp;&amp; &lt;span&gt;Copied!&lt;/span&gt;&#125;
  &lt;/&gt;
);
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="13-use-previous"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">13. usePrevious</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use this to compare current vs. previous values.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Great for triggering actions based on changes.</span></p><div class="codeblock"><pre><code>const prevCount = usePrevious(count);
const didIncrease = prevCount !== undefined &amp;&amp; count &gt; prevCount;

useEffect(() =&gt; &#123;
  if (didIncrease) &#123;
    console.log(&quot;Count increased!&quot;);
  &#125;
&#125;, [didIncrease]);
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="14-use-debounce"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">14. useDebounce</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Debounce your requests to avoid unnecessary API calls.</span></p><div class="codeblock"><pre><code>const [query, setQuery] = useState(&quot;&quot;);
const [debouncedQuery] = useDebounce(query, 500);

const &#123; data &#125; = useSWR(`/api/search?q=$&#123;debouncedQuery&#125;`, fetcher);

return (
  &lt;&gt; 
    &lt;input
      value=&#123;query&#125;
      onChange=&#123;(e) =&gt; setQuery(e.target.value)&#125;
      placeholder=&quot;Search...&quot;
    /&gt;
    &#123;/* TODO: Show data */&#125;
  &lt;/&gt;
  
);
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="15-use-media-query"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">15. useMediaQuery</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Want to render different things based on screen size? This hook is for you.</span></p><div class="codeblock"><pre><code>const isMobile = useMediaQuery(&quot;(max-width: 768px)&quot;);

return &lt;div&gt;&#123;isMobile ? &quot;Mobile View&quot; : &quot;Desktop View&quot;&#125;&lt;/div&gt;;
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="16-use-resize-observer"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">16. useResizeObserver</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Useful for responsive layouts or libraries like </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/bvaughn/react-window?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=17-react-hooks-that-power-90-of-modern-components" target="_blank" rel="noopener noreferrer nofollow">react-window</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="codeblock"><pre><code>const ref = useRef(null);
const &#123; width = 0, height = 0 &#125; = useResizeObserver(&#123; ref &#125;);

return (
  &lt;div ref=&#123;ref&#125;&gt;
    Width: &#123;width&#125;, Height: &#123;height&#125;
  &lt;/div&gt;
);
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="17-use-local-storage"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">17. useLocalStorage</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Store and sync data with </span><code>localStorage</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> easily.</span></p><div class="codeblock"><pre><code>const [theme, setTheme] = useLocalStorage(&quot;theme&quot;, &quot;light&quot;);

return (
  &lt;button onClick=&#123;() =&gt; setTheme(theme === &quot;light&quot; ? &quot;dark&quot; : &quot;light&quot;)&#125;&gt;
    Switch to &#123;theme === &quot;light&quot; ? &quot;dark&quot; : &quot;light&quot;&#125;
  &lt;/button&gt;
);
</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Summary</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s it!</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">These 17 hooks are more than enough to cover most use cases in any React app.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Pick your favorites and use them in your next project </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="food-for-thought">💡<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> TIP OF THE WEEK</span></h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/_ndeyefatoudiop/status/1920433519526056098?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=17-react-hooks-that-power-90-of-modern-components"><p> Twitter tweet </p></a></blockquote><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=e096c8de-bab1-4dd9-8544-604c9a511ef8&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>✨ 7 Things I Do Regularly as a Senior Frontend Developer</title>
  <description>Simple habits that helped me grow from junior to senior frontend developer—without burning out.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/5846ebca-2a9e-44a1-ace7-44f7a8e0feb3/how_to_level_up_your_frontend_skills__24_.png" length="45807" type="image/png"/>
  <link>https://www.frontendjoy.com/p/7-habits-i-recommend-to-succeed-as-a-frontend-developer</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/7-habits-i-recommend-to-succeed-as-a-frontend-developer</guid>
  <pubDate>Tue, 06 May 2025 14:00:00 +0000</pubDate>
  <atom:published>2025-05-06T14:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Career]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I’ve been a frontend developer at Palantir for the past 5+ years.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In this post, I’ll share habits that helped me go from overwhelmed junior dev to confident senior dev.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Ready?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let’s get started! </span>🎉</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="habit-1-educate-yourself-outside-of"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Habit #1: Educate yourself outside of work</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you’re not learning outside of work, you’re falling behind.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Even if you have the best employer in the world, your education is your responsibility.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So, at least once every 2–4 weeks:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Pick up books like </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=7-things-i-do-regularly-as-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow"><i>The Pragmatic Programmer</i></a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i><b><a class="link" href="https://effectivetypescript.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=7-things-i-do-regularly-as-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">Effective TypeScript</a></b></i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, or </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.advanced-react.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=7-things-i-do-regularly-as-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow"><i>Advanced React</i></a></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Read blog posts from experts like </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>Matt Pocock</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> (</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.totaltypescript.com/articles?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=7-things-i-do-regularly-as-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">Total TypeScript</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">), </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>Josh Comeau</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> (</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://joshwcomeau.com?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=7-things-i-do-regularly-as-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">joshwcomeau.com</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">), </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>Kent C. Dodds</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> (</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.epicreact.dev/articles?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=7-things-i-do-regularly-as-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">Epic React</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">), etc.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Watch courses to review your basics (</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.udemy.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=7-things-i-do-regularly-as-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">Udemy</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://frontendmasters.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=7-things-i-do-regularly-as-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">FrontendMasters</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, etc.)</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The more you learn, the more efficient you’ll be at work.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ca0e94ce-5a57-40a9-a033-5e164989d7f1/ChatGPT_Image_May_4__2025__04_06_06_PM.png?t=1746367573"/><div class="image__source"><span class="image__source_text"><p>AI-generated image of a dev reading Effective TypeScript book</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="habit-2-work-on-different-projects-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Habit #2: Work on different projects and skills every month</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>The worst thing that can happen to a frontend dev?</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">👉 Getting stale.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Especially in the age of AI.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Working on the same type of project over and over slows your growth.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why?</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You have fewer tools to solve problems</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You get less flexible and adaptable</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You become easier to replace</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Try new things every month. If you can’t at work, explore with side projects.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="habit-3-get-enough-rest"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Habit #3: Get enough rest</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The less sleep I get, the more bugs I ship </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Your brain needs rest. And what that looks like depends on you.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But one thing’s for sure: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>you can’t cheat sleep</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Getting enough rest keeps your mind sharp and your code cleaner.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d83a0e48-7e98-4261-bb48-f1c427a93f81/rest_and_recharge.png?t=1746367603"/><div class="image__source"><span class="image__source_text"><p>Rest and recharge!</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="habit-4-stay-in-touch-with-whats-ha"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Habit #4: Stay in touch with what’s happening in the frontend world</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I still see devs who ignore AI (and other new tech trends).</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This breaks my heart </span>🥲<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Most devs who ignore change will eventually get replaced by it.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You don’t need to jump on every trend. You don’t need to use the latest framework.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But you do need to stay aware. Pay attention. </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Adapt when it makes sense.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Otherwise? You’ll slowly become obsolete.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="habit-5-review-code-regularly"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Habit #5: Review code regularly</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Code reviews are underrated </span>🙂<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Not just for the code author, but for </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>you</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I’ve learned countless patterns and tricks just by reviewing code.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s a simple way to grow while helping your teammates.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">No access to reviews at work? Browse open-source projects on GitHub and read PRs.</span></p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">💡<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="color:#0e101a;font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Check out these </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><span style="text-decoration:underline;"><b><a class="link" href="https://maxrozen.com/examples-of-large-production-grade-open-source-react-apps?utm_source=www.frontendjoy.com&utm_medium=referral&utm_campaign=how-to-level-up-your-frontend-skills" target="_blank" rel="noopener noreferrer nofollow" style="color: #086f83">examples of large, production-grade open-source React apps</a></b></span></span><span style="color:#0e101a;font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a1768151-09f0-4d09-b6dc-9601e2e17faa/ChatGPT_Image_May_4__2025__03_07_44_PM.png?t=1746367629"/><div class="image__source"><span class="image__source_text"><p>AI-generated image of two devs (one reviewing the code for the other one)</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="habit-6-teach-back-what-you-learn"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Habit #6: Teach back what you learn</span></h2><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>“If you can&#39;t explain it simply, you don&#39;t understand it well enough.” — Albert Einstein</b></span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Teaching forces you to understand things deeply.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I’ve often thought I knew something—until I tried to explain it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s when I realize I don’t actually get it yet.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Teaching is a shortcut to mastery.</b></span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Run internal sessions at work. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Write on a blog. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Record short videos. </span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Anything works </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="habit-7-avoid-tutorials-and-copypas"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Habit #7: Avoid tutorials and copy/pasting</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Tutorials are fine—in small doses.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But they quickly become a way to </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>avoid</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> learning, not to encourage it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Instead of binge-watching, try to build something. Use tutorials only when you’re stuck.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Same with copy/pasting code.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you don’t understand what you’re pasting, you won’t remember it. And you’ll keep repeating the cycle.</span></p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">💡<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Quick tip: if it’s a piece of code you use often but don’t want to memorize, save it as a snippet (like in </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://code.visualstudio.com/docs/editing/userdefinedsnippets?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=7-things-i-do-regularly-as-a-senior-frontend-developer" target="_blank" rel="noopener noreferrer nofollow">VS Code snippets</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">).</span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a2b1c68a-6790-4050-aeec-ab5e2acf51e0/ChatGPT_Image_May_4__2025__04_10_20_PM.png?t=1746367831"/><div class="image__source"><span class="image__source_text"><p>AI-generated image of a dev struggling because of tutorials</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Summary</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Becoming a great frontend dev takes time.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But these 7 small habits can make a </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>huge</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> difference over the long run.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What’s next?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Pick just one—and try it this week </span>🙂<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="food-for-thought">💡<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">TIP OF THE WEEK (from Marko)</span></h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/denicmarko/status/1918258113322373465?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=7-things-i-do-regularly-as-a-senior-frontend-developer"><p> Twitter tweet </p></a></blockquote><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=bf8b3844-e105-425f-89fa-42e79ac66aa5&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Don’t do this (unless you want sh*t frontend code)</title>
  <description>Avoid These 17 Mistakes if You Want Clean Frontend Code</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8a6ef6b8-1352-4dc0-94c9-f50bea0e1b31/how_to_level_up_your_frontend_skills__22_.png" length="46343" type="image/png"/>
  <link>https://www.frontendjoy.com/p/don-t-do-this-unless-you-want-sh-t-frontend-code</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/don-t-do-this-unless-you-want-sh-t-frontend-code</guid>
  <pubDate>Thu, 24 Apr 2025 14:00:00 +0000</pubDate>
  <atom:published>2025-04-24T14:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Frontend]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s easy to end up with messy frontend code.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In this post, I’ll show you </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>17 things to avoid</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> if you want to keep your frontend code clean and maintainable.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let’s dive in 👇</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-1-using-too-many-global-var"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #1: Using too many global variables</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Global variables are accessible from anywhere in your app, which makes them risky. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you change one in a random place, you can unintentionally break something elsewhere, and that’s a nightmare to debug.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">They also make testing harder, since the function&#39;s behavior might change depending on the global state. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use function arguments or scoped variables instead.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>let userRole = &#39;guest&#39;;

function canEditPost() &#123;
  return userRole === &#39;admin&#39;;
&#125;

userRole = &#39;admin&#39;; // Changes app behavior unexpectedly</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>function canEditPost(userRole) &#123;
  return userRole === &#39;admin&#39;;
&#125;

const role = &#39;admin&#39;;
canEditPost(role);</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-2-poor-variable-and-functio"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #2: Poor variable and function names</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Using vague names like </span><code>x</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>data</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, or </span><code>handleStuff</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> slows everyone down. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Readers (including future you) will need to guess what each thing does — or worse, scroll around to find out.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A good rule of thumb: the bigger the scope, the more descriptive the name should be. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Short loops? </span><code>i</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> is fine. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Longer scope? Use names that tell the whole story.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>function d(a, b) &#123;
  return a - b;
&#125;

const x = d(100, 50);</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>function calculateDiscount(originalPrice, discountAmount) &#123;
  return originalPrice - discountAmount;
&#125;

const finalPrice = calculateDiscount(100, 50);</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-3-god-functions"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #3: “God” functions</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">These functions try to do everything — validate input, update UI, fetch data, handle errors — all in one place. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>result</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">? Long, messy functions that are painful to test and debug.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>split logic into smaller, focused functions</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> improves readability</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, makes it easier to write </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>unit tests</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, and helps you reuse logic in other places too.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>function handleFormSubmit(event) &#123;
  event.preventDefault();

  const name = event.target.name.value;
  const email = event.target.email.value;

  if (!name || !email.includes(&quot;@&quot;)) &#123;
    alert(&quot;Invalid form&quot;);
    return;
  &#125;

  setLoading(true);

  fetch(&quot;/api/submit&quot;, &#123;
    method: &quot;POST&quot;,
    body: JSON.stringify(&#123; name, email &#125;),
  &#125;)
    .then(res =&gt; res.json())
    .then(data =&gt; &#123;
      setUser(data.user);
      navigate(&quot;/dashboard&quot;);
    &#125;)
    .catch(() =&gt; &#123;
      alert(&quot;Something went wrong&quot;);
    &#125;)
    .finally(() =&gt; setLoading(false));
&#125;</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>function handleFormSubmit(event) &#123;
  event.preventDefault();

  const formData = getFormData(event);

  if (!isValidForm(formData)) &#123;
    alert(&quot;Invalid form&quot;);
    return;
  &#125;

  submitForm(formData);
&#125;

function getFormData(event) &#123;
  return &#123;
    name: event.target.name.value,
    email: event.target.email.value,
  &#125;;
&#125;

function isValidForm(&#123; name, email &#125;) &#123;
  return name &amp;&amp; email.includes(&quot;@&quot;);
&#125;

async function submitForm(data) &#123;
  try &#123;
    setLoading(true);
    const response = await fetch(&quot;/api/submit&quot;, &#123;
      method: &quot;POST&quot;,
      body: JSON.stringify(data),
    &#125;);

    const result = await response.json();
    setUser(result.user);
    navigate(&quot;/dashboard&quot;);
  &#125; catch (e) &#123;
    alert(&quot;Something went wrong&quot;);
  &#125; finally &#123;
    setLoading(false);
  &#125;
&#125;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-4-functions-with-many-samet"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #4: Functions with many same-type params</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When a function has several parameters of the same type — like booleans or strings — it’s easy to mix them up. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>pass an object with named keys</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That way, it’s clear what each value is for — and you don’t need to jump to the function definition to understand what’s going on.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>createUser(&quot;Alice&quot;, true, false, true);</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>createUser(&#123; name: &quot;Alice&quot;, isAdmin: true, isVerified: false, isActive: true &#125;);</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-5-not-cleaning-up-resources"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #5: Not cleaning up resources</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Whenever you add an event listener, create intervals, set timeouts, or use </span><code>useEffect</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> in React, clean them up once they’re no longer needed. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you don’t, you could end up with </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>memory leaks</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>stacked event listeners</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, or </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>ghost network calls</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">For frontend apps that run for a long time (such as dashboards or admin panels), these bugs can significantly impact performance — or even crash your app entirely.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad (React):</b></span></p><div class="codeblock"><pre><code>useEffect(() =&gt; &#123;   window.addEventListener(&#39;resize&#39;, handleResize); &#125;, []);</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>useEffect(() =&gt; &#123;
  window.addEventListener(&#39;resize&#39;, handleResize);
  return () =&gt; window.removeEventListener(&#39;resize&#39;, handleResize);
&#125;, []);</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-6-unitless-variables"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #6: Unit-less variables</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If a value has a unit — like milliseconds, pixels, or megabytes — </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>include that unit in the variable name</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Otherwise, other devs (or future you) will have to guess what the number means.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>const timeout = 3000; </code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>const timeoutMs = 3000;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-7-nesting-conditionals-3-le"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #7: Nesting conditionals &gt;3 levels deep</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When your logic is nested more than 2 or 3 levels, it becomes hard to read and reason about, especially if you have lots of </span><code>if/else</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> blocks.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead, try to</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> “flatten” your code</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Return early</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Invert the conditions</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Split logic into smaller functions</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That makes each block easier to read and debug.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>if (user) &#123;
  if (user.isAdmin) &#123;
    if (user.hasAccess) &#123;
      // do stuff
    &#125;
  &#125;
&#125;</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>if (!user || !user.isAdmin || !user.hasAccess) return;

// do stuff</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-8-hardcoding-ur-ls-or-confi"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #8: Hardcoding URLs or config in the code</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Hardcoding things like URLs, API keys, or environment-specific config is a trap. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The moment that value changes, you’ll have to hunt it down across the codebase.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>store config values in constants or environment variables, then import them where needed</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You’ll avoid bugs, desyncs, and hours of wasted time.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>fetch(&#39;https://api.example.com/posts&#39;);</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>const API_BASE_URL = process.env.API_BASE_URL;
fetch(`$&#123;API_BASE_URL&#125;/posts`);</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-9-keeping-dead-code-just-in"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #9: Keeping dead code “just in case”</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">We’ve all done it — comment out some code and leave it there “just in case.” </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But here’s the truth: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>99% of the time, no one will ever use it</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. And no one wants to scroll past it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=don-t-do-this-unless-you-want-sh-t-frontend-code" target="_blank" rel="noopener noreferrer nofollow">GitHub</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> or </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://about.gitlab.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=don-t-do-this-unless-you-want-sh-t-frontend-code" target="_blank" rel="noopener noreferrer nofollow">GitLab</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and delete that code.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>// old validation logic (maybe needed later)
// function validateInput(input) &#123; ... &#125;</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Just delete it.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-10-giant-utils-files"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #10: Giant “utils” files</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The classic </span><code>utils.js</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> file always starts innocent, then slowly turns into a kitchen sink of random functions. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Before you know it, it’s hundreds of lines long and impossible to navigate.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>colocate utility functions near the code that uses them</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Or, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>split</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> them into </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>focused files</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> like </span><code>arrayUtils.js</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>dateUtils.js</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, etc.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>// utils.js
export function doStuff() &#123;&#125;</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>// listUtils.js (next to List component)
export function getVisibleItems(items, filter) &#123;
  return items.filter(item =&gt; item.visible &amp;&amp; item.category === filter);
&#125;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-11-swallowing-errors"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #11: Swallowing errors</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If your code might throw an error, don’t just ignore it. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Swallowed errors are a nightmare to debug, especially in production.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Even a simple </span><code>console.error</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> can save hours of guessing. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">And if users are affected, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>show an indication in the UI so they know something went wrong</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> (instead of a blank screen).</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>try &#123;
  riskyFunction();
&#125; catch (e) &#123;
  // nothing
&#125;</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Better</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">:</span></p><div class="codeblock"><pre><code>try &#123;
  riskyFunction();
&#125; catch (e) &#123;
  console.error(&quot;Error in riskyFunction:&quot;, e);
  showToast(&quot;TODO: Useful error message + actions&quot;);
&#125;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-12-one-giant-file"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #12: One giant file</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When everything is contained in a single file — components, logic, styling, and state — the file grows rapidly. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You end up with 800+ lines of scroll hell </span>🔥<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Split things up. </span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Group related code into folders and give each file a clear role. </span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>lowers the cognitive load</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and makes onboarding new devs much easier.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>// App.js — 1000+ lines of code</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Split it up into folders:</span></p><div class="codeblock"><pre><code>/components
/context
/pages</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-13-no-linter"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #13: No linter</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Linters like ESLint catch issues </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>before</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> they hit production, from simple bugs to missing React dependencies in </span><code>useEffect</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">They also help standardize code style across a team. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Please ensure you read and act on the warnings: don’t just slap </span><code>// eslint-disable</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> everywhere </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>useEffect(() =&gt; &#123;
  fetchData();
&#125;, []); // missing fetchData in deps</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Use ESLint + React hooks plugin. It will warn you:</span></p><p class="paragraph" style="text-align:left;"><code>React Hook useEffect has a missing dependency: &#39;fetchData&#39;.</code></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-14-messy-folder-structure"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #14: Messy folder structure</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Your project folder shouldn’t feel like a junk drawer. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When files are scattered randomly, it’s challenging to find anything, and this difficulty is compounded when scaling the app.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>use a structure based on features or domains.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Group related files together so new devs can quickly understand what’s what.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>/src
  App.js
  helpers.js
  styles.css
  randomStuff.js</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>/src
  /components
  /services
  App.js</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-15-commenting-obvious-code"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #15: Commenting obvious code</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You don’t need to explain what </span><code>let count = 0</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> means. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Trust your reader </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If something’s confusing, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>try simplifying the logic or using clearer names</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Comments should explain </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>why</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> something is done, not </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>what</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> a line of code does.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>// Set count to 0
let count = 0;</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>let itemCount = 0;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-16-no-comments-for-weird-lo"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #16: No comments for weird logic</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Sometimes you need to add a workaround or support a legacy case. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s fine — but </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>explain </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i><b>why</b></i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Without a comment, your teammates (or future you) will waste time trying to understand what </span><code>magicFix42(data)</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> means. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Leave a short note. You’ll thank yourself later.</span></p><p class="paragraph" style="text-align:left;">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Bad:</b></span></p><div class="codeblock"><pre><code>const result = magicFix42(data);</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Better:</b></span></p><div class="codeblock"><pre><code>// Applies patch for backend bug #321. Read ticket for more context 
const result = magicFix42(data);</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="mistake-17-rewriting-what-already-e"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Mistake #17: Rewriting what already exists</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Don’t reinvent the wheel. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">There are tons of small, reliable libraries built by people smarter than us.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you can solve the problem with a trusted package, use it. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Just keep your dependencies in check so your bundle size doesn’t balloon (check my post </span>✨<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.frontendjoy.com/p/how-i-reduced-my-react-bundle-size-by-30-with-real-examples?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=don-t-do-this-unless-you-want-sh-t-frontend-code" target="_blank" rel="noopener noreferrer nofollow"><b> </b></a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.frontendjoy.com/p/how-i-reduced-my-react-bundle-size-by-30-with-real-examples?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=don-t-do-this-unless-you-want-sh-t-frontend-code" target="_blank" rel="noopener noreferrer nofollow">How I Reduced My React Bundle Size by 30% (With Real Examples)</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">).</span></p><p class="paragraph" style="text-align:left;">🟠<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Ok:</b></span></p><div class="codeblock"><pre><code>function debounce(fn, delay) &#123;
  let timer;
  return function (...args) &#123;
    clearTimeout(timer);
    timer = setTimeout(() =&gt; fn.apply(this, args), delay);
  &#125;;
&#125;</code></pre></div><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Easier:</b></span></p><div class="codeblock"><pre><code>import &#123; debounce&#125; from &#39;lodash-es&#39;;

const debouncedFn = debounce(myFn, 300);</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Summary</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Frontend code can get messy fast.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Avoid these 17 mistakes, and your code will be easier to read, debug, and maintain.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Your future self—and your teammates—will thank you.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=310a248d-7714-476b-a7da-d772c5e38d84&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>✨ Typescript to Know for React</title>
  <description>A no-fluff guide to switching from JavaScript to TypeScript in your React apps</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/f7236b45-c001-4cea-bec4-e67498add780/how_to_level_up_your_frontend_skills__21_.png" length="34043" type="image/png"/>
  <link>https://www.frontendjoy.com/p/typescript-to-know-for-react</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/typescript-to-know-for-react</guid>
  <pubDate>Tue, 15 Apr 2025 14:00:00 +0000</pubDate>
  <atom:published>2025-04-15T14:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Typescript]]></category>
    <category><![CDATA[React]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Two weeks ago, I stumbled upon this post on Reddit: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b><a class="link" href="https://www.reddit.com/r/react/comments/1jnadak/should_i_learn_react_with_typescript_or_javascript/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react" target="_blank" rel="noopener noreferrer nofollow">Should I learn React with TypeScript or JavaScript?</a></b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I see these posts all the time—and honestly, it breaks my heart </span>🥲</p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If you’re a React dev still using JavaScript, you’re making your life harder.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The time you spend learning TypeScript will 100% pay off in the time you save debugging weird bugs.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So here’s a guide to help you make the switch.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Just the essentials. No fluff </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="how-type-script-works"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How TypeScript works</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">TypeScript adds extra syntax on top of JavaScript to help catch errors early—before they crash your app.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It compiles to JavaScript in the end.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The best part? </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>You can slowly migrate to TypeScript. </b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Follow this </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/Microsoft/TypeScript-React-Conversion-Guide?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react#typescript-react-conversion-guide" target="_blank" rel="noopener noreferrer nofollow">guide</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> for more.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="why-you-should-switch-to-type-scrip"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why you should switch to TypeScript ASAP</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here’s why I think it’s a no-brainer:</span></p><h3 class="heading" style="text-align:left;" id="benefit-1-catch-bugs-before-they-re"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Benefit #1: Catch bugs </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>before</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> they reach production</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This JavaScript code looks fine… until it explodes:</span></p><div class="codeblock"><pre><code>function printFirstChar(users, userIndex) &#123;
  const name = users[userIndex];
  console.log(name[0]);
&#125;

const users = [&#39;Fatou&#39;, &#39;Bob&#39;];

printFirstChar(users, 5); // ❌ Runtime error: Cannot read properties of undefined</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here’s the TypeScript version:</span></p><div class="codeblock"><pre><code>function printFirstChar(users: string[], userIndex: number) &#123;
  const name = users[userIndex];

  if (name != null) &#123;
    console.log(name[0]);
  &#125;
&#125;
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">TypeScript doesn’t fix your logic, but it gives you </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>early warnings</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> like “hey, this might be undefined </span>👀<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">”</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="benefit-2-get-autocompletion-with-l"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Benefit #2: Get autocompletion with libraries</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Especially useful when you&#39;re exploring a new library.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If that library has TypeScript types, you can get autocompletion inside most editors. </span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="benefit-3-make-your-code-more-resil"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Benefit #3: Make your code more resilient to changes</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When you type things properly, TypeScript acts like a safety net.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">For example:</span></p><h5 class="heading" style="text-align:left;" id="without-type-script-this-code-can-b"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Without TypeScript, this code can break without you noticing.</span></h5><div class="codeblock"><pre><code>function getLabel(status) &#123;
  switch (status) &#123;
    case &#39;idle&#39;:
      return &#39;Idle&#39;;
    case &#39;loading&#39;:
      return &#39;Loading&#39;;
    case &#39;success&#39;:
      return &#39;Success&#39;;
  &#125;
&#125;

getLabel(&#39;loading&#39;); // ✅ works

// Months later...

getLabel(&#39;error&#39;); // ❌ returns undefined, but no JS error
</code></pre></div><h5 class="heading" style="text-align:left;" id="without-type-script"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">With TypeScript, you need to handle changes.</span></h5><div class="codeblock"><pre><code>type Status = &#39;idle&#39; | &#39;loading&#39; | &#39;success&#39;;

function getLabel(status: Status): string &#123;
  switch (status) &#123;
    case &#39;idle&#39;:
      return &#39;Idle&#39;;
    case &#39;loading&#39;:
      return &#39;Loading&#39;;
    case &#39;success&#39;:
      return &#39;Success&#39;;
    case &#39;error&#39;:
      return &#39;Error&#39;;
  &#125;
&#125;

// Months later...
type Status = &#39;idle&#39; | &#39;loading&#39; | &#39;success&#39; | &#39;error&#39;; // added &#39;error&#39;

// ✅ TypeScript will show an error for the `getLabel` function: &quot;Not all code paths return a value&quot;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you forget to handle a case, TypeScript yells at you. And that’s precisely what you want </span>😄<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a0dce78c-3200-4d1c-b113-1ed4c392dde7/Screenshot_2025-04-13_at_13.03.17.png?t=1744545617"/><div class="image__source"><span class="image__source_text"><p>TypeScript error when we forget to handle a case</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="the-type-script-concepts-you-need-f"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The TypeScript concepts you need for React</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let’s cover the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>bare minimum</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to get started.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="types">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Types</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Types let you describe the shape of your data and enforce it.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">There are native types in TypeScript, and types defined by users.</span></p><h4 class="heading" style="text-align:left;" id="native-types"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Native types</span></h4><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">These types come by default.</span></p><div class="codeblock"><pre><code>const name = &#39;Ada&#39;; // string
const age: number = 31; // number
const isActive = true; // boolean
const scores: number[] = [90, 85, 100]; // number[]</code></pre></div><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">💡<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> In some of the examples above, I typed values explicitly (like </span><code>const age: number = 31</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">). </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You don’t need to do that in real code—TypeScript can infer the types by looking at the values.</span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><h4 class="heading" style="text-align:left;" id="custom-types"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Custom types</span></h4><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can create new types using the native types.</span></p><div class="codeblock"><pre><code>type User = &#123;
  id: number;
  name: string;
&#125;;

const user: User = &#123;
  id: 1,
  name: &#39;Fatou&#39;,
&#125;;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="avoid-any">❌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Avoid </span><code>any</code></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Unless you’re in the middle of a migration, don’t use </span><code>any</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s JavaScript in disguise.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Use </b></span><code>unknown</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> instead—it forces you to check the type before using it.</b></span></p><div class="codeblock"><pre><code>// ❌ Bad: no warning, crashes at runtime
function logLength(value: any) &#123;
  console.log(value.length);
&#125;

logLength(123);

// ✅ Safer
function logLength(value: unknown) &#123;
  if (typeof value === &#39;string&#39; || Array.isArray(value)) &#123;
    console.log(value.length);
  &#125;
&#125;

// ✅✅ Better: use an explicit type
function logLength(value: string | ArrayLike&lt;unknown&gt;)&#123;
  console.log(value.length);
&#125;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="union-intersection-types">🧩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Union & intersection types</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Unions let a value be one of many types.</b></span></p><div class="codeblock"><pre><code>type Status = &#39;idle&#39; | &#39;loading&#39; | &#39;error&#39;;

let currentStatus: Status = &#39;idle&#39;;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Intersections combine multiple types into one.</b></span></p><div class="codeblock"><pre><code>type Name = &#123; name: string &#125;;
type Age = &#123; age: number &#125;;

type Person = Name &amp; Age;

const person: Person = &#123; name: &#39;Ada&#39;, age: 30 &#125;;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="interfaces">🧱<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Interfaces</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Interfaces define the structure of an object.</b></span></p><div class="codeblock"><pre><code>interface User &#123;
  name: string;
  age: number;
&#125;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can extend interfaces:</span></p><div class="codeblock"><pre><code>interface Admin extends User &#123;
  role: string;
&#125;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When to use </span><code>type</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> vs </span><code>interface</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">? Doesn’t matter much.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But here’s an interesting guide:</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">👉 </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b><a class="link" href="https://www.totaltypescript.com/type-vs-interface-which-should-you-use?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react#default-to-type-not-interface" target="_blank" rel="noopener noreferrer nofollow">Type vs Interface: Which Should You Use?</a></b></span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="generics">🔁<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Generics</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Generics let you write reusable types with flexible data.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let’s say you’re typing an API response.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Without generics:</b></span></p><div class="codeblock"><pre><code>type UserResponse = &#123;
  status: number;
  data: User;
  error?: string;
&#125;;

type ProductResponse = &#123;
  status: number;
  data: Product;
  error?: string;
&#125;;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s a lot of repetition.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>With generics:</b></span></p><div class="codeblock"><pre><code>type ApiResponse&lt;T&gt; = &#123;
  status: number;
  data: T;
  error?: string;
&#125;;

type UserResponse = ApiResponse&lt;User&gt;;
type ProductResponse = ApiResponse&lt;Product&gt;;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can use generics in functions too:</span></p><div class="codeblock"><pre><code>function wrap&lt;T&gt;(value: T): T[] &#123;
  return [value];
&#125;

wrap(42); // type: number[]
wrap(&#39;hi&#39;); // type: string[]
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I like to think of generics like function parameters—but for types </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="function-types">🔧<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Function types</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>You can type function parameters and return values.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You always need to type the parameters, but don’t need to type the returned value every time.</span></p><div class="codeblock"><pre><code>// This works
function add(a: number, b: number): number &#123;
  return a + b;
&#125;

// This also works: you don&#39;t need to type the returned value
function add(a: number, b: number) &#123;
  return a + b; // inferred as number
&#125;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can also type the function variable:</span></p><div class="codeblock"><pre><code>const add: (a: number, b: number) =&gt; number = (a, b) =&gt; a + b;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Depending on the context, you may want to type the return type. </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>When in doubt, type the return type.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can learn more about return types here:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://mkosir.github.io/typescript-style-guide/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react#return-types" target="_blank" rel="noopener noreferrer nofollow">TypeScript Style Guide: Return Types</a></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.totaltypescript.com/tips/dont-use-return-types-unless?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react" target="_blank" rel="noopener noreferrer nofollow">Don’t use return types, unless...</a></span></p></li></ul><hr class="content_break"><h2 class="heading" style="text-align:left;" id="the-type-script-concepts-you-need-f"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How to use TypeScript with React</span></h2><h3 class="heading" style="text-align:left;" id="props"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Props</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Props are just objects. Type them like any other object.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">With </span><code>type</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: </span></p><div class="codeblock"><pre><code>type GreetingProps = &#123;
  name: string;
&#125;;

function Greeting(&#123; name &#125;: GreetingProps) &#123;
  return &lt;p&gt;Hello &#123;name&#125;&lt;/p&gt;;
&#125;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">With </span><code>interface</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> :</span></p><div class="codeblock"><pre><code>interface GreetingProps &#123;
  name: string;
&#125;

function Greeting(&#123; name &#125;: GreetingProps) &#123;
  return &lt;p&gt;Hello &#123;name&#125;&lt;/p&gt;;
&#125;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="state"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">State</span></h3><p class="paragraph" style="text-align:left;"><code>useState</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> accepts a generic type, but TypeScript can also infer it.</b></span></p><div class="codeblock"><pre><code>const [count, setCount] = useState(0); // inferred as number</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But if it can’t, be explicit:</span></p><div class="codeblock"><pre><code>const [user, setUser] = useState&lt;&#123; id: number; name: string &#125; | null&gt;(null);</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="component-variables-and-functions"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Component variables and functions</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Just like normal TypeScript:</span></p><div class="codeblock"><pre><code>const users: User[] = [&#123;name: &quot;Fatou&quot;, age: 31&#125;, &#123;name: &quot;Bob&quot;, age: 25&#125; ];
const age = 30; // inferred as number</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When you have some functions like event handlers, you can hover over the DOM elements to see the types to use. </span></p><div class="codeblock"><pre><code>const handleClick = (event: React.MouseEvent&lt;HTMLButtonElement&gt;) =&gt; &#123;
  console.log(&#39;Clicked!&#39;, event);
&#125;;

// Or:
const handleClick: React.MouseEventHandler&lt;HTMLButtonElement&gt; = (event) =&gt; &#123;
  console.log(&#39;Clicked!&#39;, event);
&#125;;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reusing-types-across-components"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Re-using types across components</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>You can extend or combine types/interfaces to avoid duplication.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">With interfaces:</span></p><div class="codeblock"><pre><code>interface ButtonProps &#123;
  label: string;
&#125;

interface IconButtonProps extends ButtonProps &#123;
  icon: React.ReactNode;
&#125;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">With union types:</span></p><div class="codeblock"><pre><code>type ButtonProps = &#123;
  label: string;
&#125;;

type IconButtonProps = ButtonProps &amp; &#123;
  icon: React.ReactNode;
&#125;;</code></pre></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="hooks"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Hooks</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Hooks are just functions, so you can use the same TypeScript tools that apply to functions.</span></p><h4 class="heading" style="text-align:left;" id="native-hooks"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Native hooks</b></span></h4><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Pretty much all the native hooks have generic params.</span></p><div class="codeblock"><pre><code>const [count, setCount] = useState&lt;number&gt;(0);
// or let TS infer:
const [count, setCount] = useState(0);

const inputRef = useRef&lt;HTMLInputElement&gt;(null);

const [state, dispatch] = useReducer(
  (state: number, action: &#39;inc&#39; | &#39;dec&#39;) =&gt; &#123;
    switch (action) &#123;
      case &#39;inc&#39;:
        return state + 1;
      case &#39;dec&#39;:
        return state - 1;
    &#125;
  &#125;,
  0
);</code></pre></div><h4 class="heading" style="text-align:left;" id="custom-hooks"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Custom hooks</b></span></h4><div class="codeblock"><pre><code>function useToggle(initial: boolean): [boolean, () =&gt; void] &#123;
  const [state, setState] = useState(initial);
  const toggle = () =&gt; setState((prev) =&gt; !prev);
  return [state, toggle];
&#125;

const [isOpen, toggleOpen] = useToggle(false);</code></pre></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="where-to-learn-more"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Where to learn more</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you want to go deeper with TypeScript, here are some great resources to explore:</span></p><ul><li><p class="paragraph" style="text-align:left;">🧠<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.typescriptlang.org/docs/handbook/intro.html?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react" target="_blank" rel="noopener noreferrer nofollow">TypeScript Official Docs</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: The best place to start. It’s clear, well-structured, and packed with examples. Also includes a </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.typescriptlang.org/play?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react" target="_blank" rel="noopener noreferrer nofollow">playground</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to test things out.</span></p></li><li><p class="paragraph" style="text-align:left;">🎯<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.totaltypescript.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react" target="_blank" rel="noopener noreferrer nofollow">Total TypeScript</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: A fantastic site by Matt Pocock—especially for React devs.</span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It has a free beginner course, advanced patterns, and many real-world examples.</span></p></li><li><p class="paragraph" style="text-align:left;">✨<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://mkosir.github.io/typescript-style-guide/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react" target="_blank" rel="noopener noreferrer nofollow">TypeScript Style Guide</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: Short, practical tips on how to write clean and consistent TypeScript code. Highly recommended once you start building real apps.</span></p></li><li><p class="paragraph" style="text-align:left;">🧩<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/type-challenges/type-challenges?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react" target="_blank" rel="noopener noreferrer nofollow">Type Challenges</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: A collection of TypeScript puzzles—from beginner to insane. Great if you learn best by solving problems and want to flex your type system skills.</span></p></li><li><p class="paragraph" style="text-align:left;">📘<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://effectivetypescript.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react" target="_blank" rel="noopener noreferrer nofollow">Effective TypeScript</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: A book + blog by Dan Vanderkam. More advanced, but teaches you how to write </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>better</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> TypeScript. Worth it once you know the basics.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">⚛️ </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://react-typescript-cheatsheet.netlify.app/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react" target="_blank" rel="noopener noreferrer nofollow">React TypeScript Cheatsheets</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: Tailored for React devs. Covers everything from typing components to context and hooks. Very beginner-friendly, and super helpful as a quick reference.</span></p></li></ul><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">💡<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Make sure to also check out the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://dev.to/_ndeyefatoudiop/101-react-tips-tricks-for-beginners-to-experts-4m11?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=typescript-to-know-for-react#category-12-react-amp-typescript" target="_blank" rel="noopener noreferrer nofollow">TypeScript section</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> of my 101 React Tips & Tricks post </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Summary</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Using TypeScript with React is one of the best upgrades you can make.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It helps you </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>catch bugs early</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, gives you </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>better tooling</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, and makes your code </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>easier to maintain</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The best part? </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>You don’t need to learn everything up front.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Start with the basics—types, interfaces, generics—and grow from there.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Man</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">y examples are online if you get stuck, and AI tools can help you unblock fast.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let me know if you have any questions </span>🙂<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=eb65fea7-383a-463a-a985-532d1a3f25e1&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>✨ Why You Must Seize Control of Your Growth Journey</title>
  <description>A practical guide for junior devs to go from reactive to intentional</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/63a29d5f-13ce-4d1a-98a5-cbfe81760b69/how_to_level_up_your_frontend_skills__20_.png" length="45481" type="image/png"/>
  <link>https://www.frontendjoy.com/p/why-you-must-seize-control-of-your-growth-journey</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/why-you-must-seize-control-of-your-growth-journey</guid>
  <pubDate>Wed, 09 Apr 2025 13:00:00 +0000</pubDate>
  <atom:published>2025-04-09T13:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Career]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd?slim=true" data-test-id="beehiiv-embed" height="52" frameborder="0" style="margin: 0; border-radius: 0px !important; background-color: transparent;" width="100%"></iframe></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/b3e05aa7-64f2-4ddf-b59f-7bc05495358e/female_at_crossroads.png?t=1743950840"/><div class="image__source"><span class="image__source_text"><p>AI-generated image showing a woman at a crossroads</p></span></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>3 years ago, I found myself at a crossroads.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I was enjoying the work and the learnings, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>but</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> I couldn’t clearly articulate my impact—or even tell if I was heading in the right direction.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I was doing the work I was asked to do, going with the flow, not questioning anything.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">After some reflection, I realized I </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>did</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> want to grow—both financially and technically—but my current actions wouldn’t get me there.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s when I saw I was making the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>same mistake most juniors</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> make:</span></p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Not owning your growth and just letting things be.</b></span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Fast forward a few months, I became the go-to dev for a product and started making real career progress.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In this post, I’ll share:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why it’s important to own your growth</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why it’s so tempting to fall into the trap</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">And what you can do about it</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Let’s dive in 👇</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="what-it-means-to-own-your-career-gr"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What it means to own your career growth</span></h2><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/04d17efe-5272-4181-bfc8-a7beb15f6708/own_growth.png?t=1743951139"/><div class="image__source"><span class="image__source_text"><p>AI-generated image showing a person climbing a staircase made of sticky notes or stepping stones labeled “Goal,” “Skills,” “Feedback,” “Growth.”</p></span></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I say “own your career growth,” I mean:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Being intentional about your work and whether it’s taking you where you want to go</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Advocating for yourself—sharing your goals and expectations</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Having a rough vision of where you want to be in 1, 3, 5, or even 10 years</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Now, let’s look at </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>why</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> this matters.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="why-its-important-to-own-your-caree"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why it’s important to own your career growth</span></h2><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a4900302-1005-446c-9366-0e935eea9530/you.png?t=1743951190"/><div class="image__source"><span class="image__source_text"><p>AI-generated image showing a superhero version of a dev tearing open a shirt with a glowing &quot;YOU&quot; on the chest</p></span></div></div><h3 class="heading" style="text-align:left;" id="reason-1-only-you-know-what-you-tru"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #1: Only </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>you</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> know what you truly need</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Even with the best manager in the world, only you know what drives you.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Is it more pay? More ownership? More technical challenge?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Everyone’s different. So your version of growth will look different than your colleague’s.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You have to own that. No one else will.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reason-2-if-you-dont-have-a-plan-yo"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #2: “If you don&#39;t have a plan, you become part of somebody else&#39;s plan.”</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The more you say “yes,” the more you risk ending up on projects that don’t serve you long-term.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Unless you </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>want</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to be a “yes” person—which is totally valid </span>🙂<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">—have opinions about where you want to grow.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Because if you don’t have a plan, rest assured you’ll be helping execute someone else’s. And that might not be what you want.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reason-3-goals-make-the-journey-mor"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #3: Goals make the journey more satisfying</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>thrive</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> on setting goals and reaching them.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It gives me a sense of progress. A feeling that I’m getting better.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But that feeling disappears if all I do is jump from project to project with no cohesion. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">And work becomes... meh </span>🤣<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="why-you-might-not-be-owning-your-gr"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why you might not be owning your growth (yet)</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Especially early on, it’s easy to fall into one of these traps:</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/cf38bd0e-690d-4e01-862a-bf62bdcfa151/opportunities.png?t=1743951287"/><div class="image__source"><span class="image__source_text"><p>AI-generated image showing a developer snoozing at a desk while opportunities (represented by rockets or paths) fly past in the background.</p></span></div></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="trap-1-youre-just-happy-to-be-here"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Trap #1: You&#39;re just happy to be here</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I landed my first dev job, I was blown away—getting paid </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>that much</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> for work I mostly enjoyed? Wild.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I got </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>comfortable</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. Too comfortable. I wasn’t pushing myself or questioning the work.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But eventually, I realized:</span></p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Progress is important.</span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Especially progress in the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>right</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> direction.</span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If your work feels disconnected, it’s hard to tell what you’re becoming great at—or what makes you unique.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Once the joy of simply “being in tech” disappears, start thinking about your next milestones.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="trap-2-you-think-learning-progress"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Trap #2: You think learning = progress</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you want to explore and learn as much as possible, that’s 100% valid. That’s a plan in itself.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But don’t confuse learning with progress.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can know everything in the world—but if you’re not applying it in ways that move the business or your career forward, that knowledge won’t help much.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">To </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>grow</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> (especially in pay), you must build </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>deep expertise</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> in something.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://en.wikipedia.org/wiki/T-shaped_skills?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=why-you-must-seize-control-of-your-growth-journey" target="_blank" rel="noopener noreferrer nofollow">T-shaped skills</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> are a great model here.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="trap-3-you-dont-know-whats-possible"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Trap #3: You don’t know what’s possible</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Good news—this one’s easy to fix.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Talk to role models</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> in your company. Ask how they got where they are. Or just watch them closely.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Ask your manager</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> about growth paths that align with your strengths.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Start with life goals.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Need to buy a house? Pay for kids’ school? Cool—reverse-engineer what you’ll need in skills, roles, and pay to get there.</span></p></li></ul><hr class="content_break"><h2 class="heading" style="text-align:left;" id="how-to-start-owning-your-growth"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How to start owning your growth</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here’s what worked for me when I decided to become a major actor in my career </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: </span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/06247014-7461-4dec-b155-977f5560338d/write_own_story.png?t=1743951468"/><div class="image__source"><span class="image__source_text"><p>AI-generated image showing a pen in someone’s hand, writing their story, with a caption bubble: “Write your own story.”</p></span></div></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="step-1-set-goals"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #1: Set goals</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Set </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.notion.so/How-to-level-up-your-frontend-skills-13ab7b09cb268044b773fb845d2623aa?pvs=21&utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=why-you-must-seize-control-of-your-growth-journey" target="_blank" rel="noopener noreferrer nofollow">SMART</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> goals—specific, measurable, and realistic.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I had a simple written goal: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>Become the go-to dev for this product</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Fast forward to today, I am the dev lead for that product.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Having that goal gave me clarity and direction.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="step-2-track-your-progress"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #2: Track your progress</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Without tracking, goals are just dreams.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Make sure you’re doing </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>something</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> each day that moves you toward them.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="step-3-share-your-goals"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #3: Share your goals</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let your manager and teammates know what you’re aiming for.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">They can’t help you if they don’t know what you care about.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Once you share your goals, people will start forwarding you the right projects—and stop handing you stuff that doesn&#39;t align.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="step-4-evaluate-tasks-through-your-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #4: Evaluate tasks through your goals</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Now that you know where you’re headed, filter your tasks through that lens.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If something doesn’t move you closer, either:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Delegate it</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Or knock it out quickly and move on</span></p></li></ul><hr class="content_break"><h3 class="heading" style="text-align:left;" id="step-5-take-initiative-when-the-pat"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #5: Take initiative when the path isn’t clear</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Sometimes, no task or project helps you grow in the way you want.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s okay.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>don’t stay stuck</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Push for new projects or initiatives</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Switch to a better-fit team</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Or, if needed, change companies entirely</span></p></li></ul><hr class="content_break"><h3 class="heading" style="text-align:left;" id="step-6-copy-what-works"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #6: Copy what works</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Working with great colleagues? Lucky you.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Watch them. </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><span style="text-decoration:line-through;">Steal</span></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Copy their playbook.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If someone’s doing what you want to be doing, study how they act, what they prioritize, and how they communicate.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Then try those things at your level.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It works.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Summary</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you landed a job in tech—congrats </span>🎉<br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You earned it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>don’t get stuck in “grateful mode.”</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Don’t use that as an excuse to take every task, say yes to everything, or never question the direction you&#39;re headed in.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Be intentional. Be strategic. Own where your day is taking you.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Because especially in a world with AI and layoffs, you don’t want to wake up one day and realize you weren’t building the right skills.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Remember:</span></p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>“When writing the story of your life, don&#39;t let anyone else hold the pen.”</b></span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=bbbbfa03-5e08-4866-bf89-b706cdf11093&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>✨ How I Reduced My React Bundle Size by 30% (With Real Examples)</title>
  <description>A step-by-step guide to shrinking your React bundle with a real example</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/1828c032-3172-4c34-b300-eda4daf5514b/how_to_level_up_your_frontend_skills__19_.png" length="52850" type="image/png"/>
  <link>https://www.frontendjoy.com/p/how-i-reduced-my-react-bundle-size-by-30-with-real-examples</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/how-i-reduced-my-react-bundle-size-by-30-with-real-examples</guid>
  <pubDate>Wed, 02 Apr 2025 14:00:00 +0000</pubDate>
  <atom:published>2025-04-02T14:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Optimization]]></category>
    <category><![CDATA[React]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Ever had this happen?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You start building a new frontend app.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Everything is fast. Production builds take seconds. Users are happy </span>🥰<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>But as time goes on…</b></span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Build times start to drag.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The app feels slower.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Users complain.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You’re unsure why — you’ve just been writing “normal” code.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What’s going on?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>99% of the time, it’s because your bundle size spiraled out of control.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In this post, I’ll show you </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>7 proven ways</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to reduce bundle size and speed up your builds — with a real demo you can try.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="before-vs-after"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">⚡️ Before vs After</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">By the end of this guide, we will go from:</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>📦 283.39 kB → 198.33 kB</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">That’s a </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>30%+ size reduction</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, just by applying simple tips.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="setup"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">🛠️ Setup</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">For this demo, I built a React app (generated with </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://v0.dev/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">V0</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">) available on GitHub:</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">👉 </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">GitHub repo</a></span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/499667f3-0874-4234-b6d9-897d13534dfe/demo_app.gif?t=1743525424"/><div class="image__source"><span class="image__source_text"><p>Demo application</p></span></div></div><h3 class="heading" style="text-align:left;" id="key-details"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Key details:</span></h3><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Run </span><code>npm run build</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to bundle the app for production.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Each optimization step has a dedicated branch (</span><code>step-1-remove-side-effects</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>step-2-remove-unused-files-packages</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, etc.).</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">main</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> branch contains the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>unoptimized</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> version, and </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">the fully </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>optimized</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> code is in the</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/tree/step-7-lazy-load-components?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow"> </a></span><a class="link" href="https://github.com/nfdiop/demo_react_app/tree/step-7-lazy-load-components?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">step-7-lazy-load-components</a> branch.</p></li></ul><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">💡<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Note</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">- Each step builds on the previous one: branch </span><code>step-3-…</code> includes fixes from <code>step-1-…</code> and <code>step-2-…</code></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">- I’m using global CSS here (for speed). In real apps, prefer CSS Modules or tools like </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://tailwindcss.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">Tailwind</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><h3 class="heading" style="text-align:left;" id="tooling"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Tooling</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I used </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.npmjs.com/package/vite-bundle-analyzer?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow" style="color: rgb(var(--ds-rgb-link))">vite-bundle-analyzer</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to visualize bundle contents. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here’s the initial bundle from the </span><code>main</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> branch:</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/0ac51877-44e1-4356-9223-c2428925cbec/main_bundle.png?t=1743525969"/><div class="image__source"><span class="image__source_text"><p>Bundle graph generated on main branch</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="step-1-eliminate-side-effects-in-fi"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #1: Eliminate Side Effects in Files</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>👉 </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/pull/2/files?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow"><b>Code changes</b></a></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Bundlers rely on tree-shaking to exclude unused code from the final bundle—</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>unless a file has side effects</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> (see </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.frontendjoy.com/p/module-bundlers-demystified-what-you-actually-need-to-know?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples#benefit-3-it-optimizes-the-size-of-" target="_blank" rel="noopener noreferrer nofollow">#Benefit 3</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> in my post about bundlers).</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Side effects (like modifying the </span><code>window</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> object) force the bundler to include the file, even if unused.</span></p><p class="paragraph" style="text-align:left;">🧪<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> Example:</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In our demo, the file </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/blob/a014a4f99ee59051da6e2381889c68891a253cf3/src/components/HelloWorld/HelloWorld.jsx?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples#L1" target="_blank" rel="noopener noreferrer nofollow">HelloWorld.js</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> contains a side effect:</span></p><div class="codeblock"><pre><code>window.someBadSideEffect =
  &quot;I&#39;m a side effect and I will be included inside the bundle even if not used&quot;;
</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Result:</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Even though the file isn’t used, its code appears in the bundle file (</span><code>dist/assets/index-[hash].js</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">).</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Fix:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Remove the side effect. The file is now excluded from the bundle.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d98aa546-60ca-4e01-960f-9def079ea621/bad_side_effect.gif?t=1743526296"/><div class="image__source"><span class="image__source_text"><p>Demo opening the final bundle file and showing the side effect code</p></span></div></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/09866c84-d94c-4f87-a8eb-76f7176ddbf0/side_effect_excluded.png?t=1743526365"/><div class="image__source"><span class="image__source_text"><p>Image of the final bundle file without the side effect</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="step-2-hunt-down-unused-files-packa"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #2: Hunt Down Unused Files & Packages</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><b>👉 </b></span><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/pull/3?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow"><b>Code changes</b></a></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Unused files/packages </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>usually</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> don’t bloat your bundle—but they:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Slow down bundling (more files to process).</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Risk breaking tree-shaking (if they contain side effects).</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Tool Recommendation:</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Run </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://knip.dev/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">npx knip</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> or </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.npmjs.com/package/depcheck?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">npx depcheck</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to detect dead code.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>In our demo:</b></span></p><ul><li><p class="paragraph" style="text-align:left;"><code>HelloWorld.js</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and </span><code>lodash-es</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> were flagged as unused.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">After removing them, the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>number of</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>modules processed dropped from 44 to 42</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The impact would be more significant in more complex applications, and your app will build even faster ⚡️.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3553bf18-a2d2-4e69-b96f-4fb7c01bb13d/knip_result.png?t=1743526752"/><div class="image__source"><span class="image__source_text"><p>Results of running npx knip</p></span></div></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d0fb1b29-7b37-4721-aef5-c3654acc470a/before_after_removal.png?t=1743527039"/><div class="image__source"><span class="image__source_text"><p>The build results before/after the removal</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="step-3-avoid-barrel-files"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #3: Avoid Barrel Files</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><b>👉 </b></span><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/pull/4?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow"><b>Code changes</b></a></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Barrel files (like </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/blob/main/src/components/index.js?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">src/components/index.js</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">) consolidate exports for cleaner imports:</span></p><div class="codeblock"><pre><code>import &#123; Dashboard, UserManagement, Settings, Clock &#125; from &quot;./components&quot;;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But they introduce downsides:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Side effects propagate:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> If any exported file has side effects, the bundler can include it. This is why the side effects were present in Step #1.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>More files to process:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> The module bundler will have to process more (or even irrelevant files if someone forgot to delete them). This results in slower builds.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In my demo app, I removed all the barrels in the </span><code>step-3-remove-barrel-files</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> branch.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Result</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: The number of modules transformed went from </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>42 → 37</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/4eced53b-6b60-4182-903c-ac41553ef0f5/before_after_barrel_files_removal.png?t=1743528674"/><div class="image__source"><span class="image__source_text"><p>The build results before/after removing barrel files</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="step-4-export-functions-directly-no"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>S</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">tep #4: Export Functions Directly, Not Objects/Classes</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><b>👉 </b></span><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/pull/1?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow"><b>Code changes</b></a></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When you export an object or class, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>all its methods</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> are bundled—even unused ones. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In our demo app, the </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/blob/main/src/utils/time.js?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">time.js</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> file exports a utility object, but only </span><code>getTimeInFormat</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> is used. Yet, the entire object landed in the bundle.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/411db695-be63-4e01-9386-a4532efd045f/file_with_unused_object_methods.png?t=1743529009"/><div class="image__source"><span class="image__source_text"><p>Before: The bundle file with the unused methods</p></span></div></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Fix:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Export functions individually. Now, unused utilities are stripped automatically.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Result:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> There is a slight decrease in the bundle size.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/0285be8b-1dd6-422b-b8ee-2dd440ad8b86/file_after_removing_unused_object_methods.png?t=1743529032"/><div class="image__source"><span class="image__source_text"><p>After: The bundle file without unused functions</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="step-5-swap-heavy-libraries-for-lig"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #5: Swap Heavy Libraries for Lighter Alternatives</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><b>👉 </b></span><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/pull/5/files?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow"><b>Code changes</b></a></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This is a big one.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In the demo app, I used </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://momentjs.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">moment.js</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But if you check </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://bundlephobia.com/package/moment@2.30.1?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">Bundlephobia</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, you’ll see it’s huge.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A better choice? </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://day.js.org/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">dayjs</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> — smaller and modern.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Swapping </span><code>moment</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> for </span><code>dayjs</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> gives you an instant bundle size drop.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Pro tip:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Also check for ESM support—it helps with tree-shaking.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/2b430b02-49e6-410c-a1bf-edd8f9e27640/bundle_size_with_moment.png?t=1743529191"/><div class="image__source"><span class="image__source_text"><p>Bundle graph with moment.js</p></span></div></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/09762ade-cd0d-4a14-9ecb-228d11fe2fd8/bundle_with_dayjs.png?t=1743529221"/><div class="image__source"><span class="image__source_text"><p>Bundle graph with dayjs</p></span></div></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/6f4f6bf2-0d42-4078-a310-438bc6a9dd11/before_after_dayjs.png?t=1743529524"/><div class="image__source"><span class="image__source_text"><p>The build results before/after removing moment.js</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="step-6-lazy-load-non-critical-packa"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #6: Lazy-Load Non-Critical Packages</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><b>👉 </b></span><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/pull/6?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow"><b>Code changes</b></a></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If a package isn’t needed immediately, don’t load it at startup.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Example:</b></span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I use </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.fusejs.io/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">Fuse.js</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> for fuzzy search, but only when the user starts typing.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Solution:</b></span><br><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead of importing it statically, I load it when needed using </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://javascript.info/modules-dynamic-imports?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">dynamic imports</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: </span></p><div class="codeblock"><pre><code>// Lazy load Fuse.js
const Fuse = import(&quot;fuse.js&quot;).then((module) =&gt; module.default);</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Result:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><code>fuse.js</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> splits into a separate chunk, reducing the initial load.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/195604e5-b9f1-42d0-b270-99bd56a2732a/bundle_before_lazy_load.png?t=1743529806"/><div class="image__source"><span class="image__source_text"><p>Before: Bundle graph with fuse.js used directly</p></span></div></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/09f67ea5-76d7-4e49-ab3a-f40c99e40b75/bundle_after_lazy_loading.png?t=1743529848"/><div class="image__source"><span class="image__source_text"><p>After: Bundle graph with fuse.js imported dynamically</p></span></div></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c44c9b21-a5e7-4cff-978e-a506d4b26976/before_after_lazy_loading_fuse.png?t=1743529989"/><div class="image__source"><span class="image__source_text"><p>The build results before/after importing fuse.js dynamically</p></span></div></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="step-7-react-lazy-load-non-critical"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Step #7: [React] Lazy-Load Non-Critical Components</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><b>👉 </b></span><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/pull/7?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow"><b>Code changes</b></a></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Same idea — if components aren’t needed at startup, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>don’t load them immediately</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In my demo, files like </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/blob/main/src/components/Dashboard/Dashboard.jsx?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">Dashboard.jsx</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/blob/main/src/components/Settings/Settings.jsx?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">Settings.jsx</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> are only required when the user clicks a button.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So I lazy-load them using </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://react.dev/reference/react/lazy?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">React.lazy</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: </span></p><div class="codeblock"><pre><code>const Settings = lazy(() =&gt;
  import(&quot;./components/Settings&quot;).then((module) =&gt; (&#123;
    default: module.Settings,
  &#125;))
);</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Result:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> A smaller initial bundle, which results in faster first load of your app.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="bonus"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Bonus </span>🪄</h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A few more ideas you could explore:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Add </span><code>&quot;sideEffects&quot;: false</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> in </span><code>package.json</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to improve tree-shaking</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.npmjs.com/package/bundlewatch?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">Bundlewatch</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> or </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/ai/size-limit?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow">Size Limit</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to monitor size in CI</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Enable more code-splitting or compression with Vite plugins</span></p></li></ul><hr class="content_break"><h2 class="heading" style="text-align:left;" id="cheatsheet">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Cheatsheet</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Quick recap of everything we did:</span></p><div class="codeblock"><pre><code>✅ Remove side effects from files  
✅ Delete unused files and packages  
✅ Avoid barrel files  
✅ Export functions directly  
✅ Use smaller libraries (dayjs &gt; moment)  
✅ Lazy-load heavy packages  
✅ Lazy-load components </code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><b>👉 </b></span><span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"><a class="link" href="https://github.com/nfdiop/demo_react_app/compare/main...step-7-lazy-load-components?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-i-reduced-my-react-bundle-size-by-30-with-real-examples" target="_blank" rel="noopener noreferrer nofollow"><b>Code changes</b></a></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Summary</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Frontend apps often get slower over time — even without adding “heavy” code.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But if you apply these tips regularly, you can </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>stay fast</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, keep build times short, and make life easier for your team and users.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Got other tips? I&#39;d love to hear them </span>🙂<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=04c724a6-0dd8-4b00-bd72-1e44e73a4d50&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>✨ Your Manager Should Never Have to Ping You</title>
  <description>Why over-communicating is the easiest way to build trust, avoid stress, and accelerate your growth as a junior dev.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/fb55ee29-b5e9-42cb-9087-c763d9b6d346/how_to_level_up_your_frontend_skills__18_.png" length="39433" type="image/png"/>
  <link>https://www.frontendjoy.com/p/the-hidden-cost-of-staying-quiet</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/the-hidden-cost-of-staying-quiet</guid>
  <pubDate>Sun, 09 Mar 2025 15:00:00 +0000</pubDate>
  <atom:published>2025-03-09T15:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Career]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">On my first work assignment, I thought I was doing great work </span>😎<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I was talking to customers, handling their requirements, making them happy, etc.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">However, to my surprise, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>my manager didn’t share my point of view</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>She didn’t realize all the work I was doing and couldn’t articulate the value I was providing.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I was pretty shocked. I thought my work was speaking for itself.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">We agreed that I would post a daily update in the team chat to keep them informed. I still didn’t see the need.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But hey, why not?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Fast forward to today</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">—as a team lead, I totally get it </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>If I don’t hear from a junior dev on my team regularly, I start getting slightly worried that things are going wrong.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Even with meetings, it’s impossible to have an accurate picture of what everyone is doing unless they communicate it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In this post, I’ll share why you must over-communicate as a junior dev—and how to do it properly.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="what-happens-when-you-dont-over-com"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What Happens When You Don’t Over-Communicate</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Imagine you ask your younger sibling (3-4 years old) to help you with something.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">They’ve never done it before and have no experience.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How would you feel if they stayed silent the whole day?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Chances are, you’d feel uneasy—scared they might be doing something completely wrong (and your mom will kill you </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">).</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Having a junior dev on the team can feel the same way </b></span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As mentors, our responsibilities are to:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Make sure they are doing as well as they can</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Prevent them from going down rabbit holes</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Ensure they don’t make mistakes and try to fix them in silence</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>when a junior dev doesn’t communicate progress often, something feels off.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As a junior dev:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You should have multiple questions daily.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You should encounter blockers (and ask for help).</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You should share progress frequently.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Even if you’re amazing and don’t need help, you should communicate progress at least twice daily (personal preference).</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you don’t, your mentors will feel stressed or have to ping you regularly.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As a </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>rule of thumb: After the first few weeks, no one should have to ask you for status updates.</b></span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="how-to-over-communicate-properly"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How to Over-Communicate Properly</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This is as easy as it gets.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It depends on your circumstances:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you sit next to your manager or team lead, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>talk to them periodically</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">—ask questions, provide status updates, etc.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you’re remote,</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b> send updates using your team’s communication channels </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">(Slack, messages, etc.).</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As a junior dev staffed on a task, you should:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Clarify how long the task is expected to take</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Work your best to meet expectations by asking for help when needed</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you can </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>split your task into smaller steps</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, that would be even better. This will clearly show that you’re actively working and making progress.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In general, communicate with your manager about:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Anything wrong—even if it’s not your fault (e.g., issues caused by another team that impact your work)</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Anything blocking or bothering you</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Communication doesn’t always have to be written.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Opening pull requests and writing code are also ways to show progress.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Over time, you’ll have to communicate less because your manager will trust that you can work independently.</span></p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Caveat:</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> My advice applies to someone in a </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>healthy team</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">—which has been my case for the past six years at Palantir. If that’s not your case, frequent questions may not be welcomed. </span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">However, you should still communicate your progress regularly, even if it’s just: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>“I’m blocked by A and B, but I’m currently doing X and Y to get unblocked.”</i></span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="your-challenge-this-week"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Your Challenge This Week:</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you’re a junior developer, evaluate how often your manager has to ping you for an update.</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If they regularly ping you, start giving them updates before they ask.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If they don’t, that’s a good sign—but it could also mean they don’t want to be intrusive or don’t care.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Either way, make sure you share daily progress on your tasks.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Summary</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Even if you’re doing an excellent job as a junior dev, your main job is to </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>reassure</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> your manager/team lead by over-communicating.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Share updates as often as possible (at least twice daily).</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The more you do this, the more trust you’ll build. Over time, you’ll have to do it less frequently </span>😉<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="food-for-thought">🍔<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> FOOD FOR THOUGHT</span></h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/_ndeyefatoudiop/status/1897195388924494128?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=your-manager-should-never-have-to-ping-you"><p> Twitter tweet </p></a></blockquote></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=700815c2-1c8a-4463-9d51-e22e17917f55&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>✨ Module Bundlers, Demystified: What You Actually Need to Know</title>
  <description>Why They Matter, How They Work, and What Every Frontend Developer Should Know</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/1dff2d8c-597b-4055-a634-c47fe717e037/how_to_level_up_your_frontend_skills__15_.png" length="52701" type="image/png"/>
  <link>https://www.frontendjoy.com/p/module-bundlers-demystified-what-you-actually-need-to-know</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/module-bundlers-demystified-what-you-actually-need-to-know</guid>
  <pubDate>Sun, 23 Feb 2025 15:14:09 +0000</pubDate>
  <atom:published>2025-02-23T15:14:09Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Frontend Infra]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I first heard </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>module bundler</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> as a front-end developer, I thought, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>“What is that magic again?” </i></span>😅</p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I remember trying to read about them or even use one, but I didn’t see the usefulness.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">All I knew was that every article recommended using module bundlers like Webpack—and setting them up was hell </span>🔥<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>I later realized that they’re one of the most crucial parts of modern frontend development, and you absolutely need to understand them.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In this post, I’ll share what I </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>wish</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> I had known about module bundlers.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let’s get started. </span>🚀</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="first-what-do-module-bundlers-do"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">First, what do module bundlers do?</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let’s start with an example.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">For this post, I made a React app called </span><code>demo_bundling_esbuild</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> (</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo-bundling-esbuild?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=module-bundlers-demystified-what-you-actually-need-to-know" target="_blank" rel="noopener noreferrer nofollow">Github code</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">).</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s a simple app that displays my name, age, and other personal information. (I know it&#39;s it&#39;s a bit self-centered </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">)</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It uses </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://esbuild.github.io/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=module-bundlers-demystified-what-you-actually-need-to-know" target="_blank" rel="noopener noreferrer nofollow">esbuild</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> as a module bundler and is structured like this:</span></p><div class="codeblock"><pre><code>project/
├── src/
│   ├── App.tsx
│   ├── index.tsx
│   ├── data.json
│   ├── utils.ts
│   └── constants.ts
├── index.html
├── build.js
└── package.json</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Once I finished development, I needed to </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>build</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> the app so I could have an </span><code>index.html</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> file to load in the browser.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This is roughly what the app looks like:</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/eae7d268-1af5-471c-a823-72a50c54cda3/Screenshot_2025-02-18_at_06.44.26.png?t=1739859624"/><div class="image__source"><span class="image__source_text"><p>Demo Application Using Bundling</p></span></div></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="but-then-something-interesting-happ"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But then something interesting happens...</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I open my </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://developer.chrome.com/docs/devtools/network?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=module-bundlers-demystified-what-you-actually-need-to-know" target="_blank" rel="noopener noreferrer nofollow"><b>Network</b></a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> tab, I don’t see the same files as in my code editor.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I can see the </span><code>index.html</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> file, but where are </span><code>App.tsx</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>index.tsx</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, and </span><code>constants.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">? 🤷‍♀️</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead, I see a single file: </span><code>dist/bundle.js</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When I open it (see gif below), I find the content of </span><code>App.tsx</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>index.tsx</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, and </span><code>utils.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">—but in a weird/minified format.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c678cf9e-52f5-44d7-a10a-10d700631985/demo_bundling_app.gif?t=1739859791"/><div class="image__source"><span class="image__source_text"><p>Demo opening the network tab and looking at the files loaded</p></span></div></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/af8d43e8-96dc-4068-a634-190c804bdb93/Screenshot_2025-02-18_at_06.51.27.png?t=1739859850"/><div class="image__source"><span class="image__source_text"><p>Bundle size content</p></span></div></div><hr class="content_break"><h3 class="heading" style="text-align:left;" id="so-what-happened"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So, what happened?</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How did I go from </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>5 files</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> (</span><code>index.tsx</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>utils.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>constants.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>App.tsx</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>data.json</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">) to </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>1 file (</b></span><code>dist/bundle.js</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">)?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How did all these files turn into a single </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>big</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> file?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">👉 </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Bundling happened.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">My module bundler (esbuild) took all the </span><code>.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and </span><code>.json</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> files and compiled them into </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>one</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> file: </span><code>dist/bundle.js</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>PS: You can find the configuration here 👉 </i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://github.com/nfdiop/demo-bundling-esbuild/blob/main/build.js?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=module-bundlers-demystified-what-you-actually-need-to-know" target="_blank" rel="noopener noreferrer nofollow"><i>build.js</i></a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>.</i></span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/035ec88a-1dd2-4e2d-93ab-71cb07015010/Screenshot_2025-02-18_at_07.40.20.png?t=1739860838"/><div class="image__source"><span class="image__source_text"><p>Bundling diagram</p></span></div></div><h3 class="heading" style="text-align:left;" id="in-summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In summary:</span></h3><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Module bundlers</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> are tools that combine multiple files in your codebase into fewer files.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">And this is amazing for several reasons.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="why-bundling-is-important"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why bundling is important</span></h2><h3 class="heading" style="text-align:left;" id="benefit-1-it-ensures-your-dependenc"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Benefit #1. It ensures your dependencies load in the correct order</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you’re using dependencies (i.e., </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://www.npmjs.com/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=module-bundlers-demystified-what-you-actually-need-to-know" target="_blank" rel="noopener noreferrer nofollow">npm</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> packages), you probably import them like this:</span></p><div class="codeblock"><pre><code>import &#123; partition &#125; from &quot;lodash-es&quot;;
import &#123; v4 as uuidv4 &#125; from &#39;uuid&#39;;</code></pre></div><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In the past, these imports didn’t work in all browsers.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Module bundlers solve this by ensuring that dependencies load correctly.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">For example, if </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>File A</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> depends on </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>File B</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, which depends on </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>File C</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, the bundler makes sure all necessary files are present before execution.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="benefit-2-it-reduces-the-number-of-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Benefit #2. It reduces the number of HTTP requests</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Without bundling, every file would need to be loaded separately.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Browsers </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>limit</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> the number of parallel network requests, so for large apps, this could mean waiting </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>minutes</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> (or even </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>hours</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">) just for files to download and parse.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Bundlers reduce the number of files (usually 1–2 for small apps), significantly </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>speeding up</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> the loading process.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="benefit-3-it-optimizes-the-size-of-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Benefit #3. It optimizes the size of your files</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Before bundling your files, module bundlers apply </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>optimizations</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to make them as small as possible.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Some of the key optimizations include:</span></p><ul><li><p class="paragraph" style="text-align:left;">🌴 <span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Tree-shaking</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: If you import a package but don’t use it, the bundler doesn’t include it in the final bundle. The bundler only consists of the code needed.</span></p></li><li><p class="paragraph" style="text-align:left;">✂️ <span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Minification</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">: It removes unnecessary whitespace and comments and renames variables to make files smaller.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In our example app, I have a constant called </span><code>NOT_USED_CONSTANT</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> that I am importing inside </span><code>index.tsx</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> but not using. So it won’t be inside </span><code>bundle.js</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="benefit-4-it-enables-dynamic-import"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Benefit #4. It enables dynamic imports (a.k.a. code-splitting)</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Let’s say part of your app is </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>only</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> needed for specific users (e.g., a dashboard for logged-in users).</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You don’t want to load </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>everything</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> upfront—you want to </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>lazy-load</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> that code only when needed.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You can tell your module bundler to </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>“put some piece of code</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>in a separate file and load it only when required.</i></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">When you do this, you increase your app speed </span>🚀<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> since there are fewer files to download.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="benefit-5-bonus-it-supports-differe"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Benefit #5. (Bonus) It supports different file types (.ts, .json, etc.)</b></span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">By default, bundlers work with JavaScript files.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">But they also support other formats (</span><code>.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>.json</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, </span><code>.jsx</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">, etc.) using </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>loaders (</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://webpack.js.org/concepts/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=module-bundlers-demystified-what-you-actually-need-to-know#loaders" target="_blank" rel="noopener noreferrer nofollow"><b>Webpack</b></a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>, </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://esbuild.github.io/content-types/?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=module-bundlers-demystified-what-you-actually-need-to-know" target="_blank" rel="noopener noreferrer nofollow"><b>Esbuild</b></a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>, etc.</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">)</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Without this, you’d need to manually process these files before bundling them.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="do-i-need-to-know-how-to-configure-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Do I need to know how to configure a module bundler?</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>👉 No.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Unless you’re </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>very</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> unlucky, you shouldn’t have to.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">For this post, I asked </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><a class="link" href="https://v0.dev?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=module-bundlers-demystified-what-you-actually-need-to-know" target="_blank" rel="noopener noreferrer nofollow">v0.dev</a></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to generate the esbuild setup for me </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In my professional life, I’ve never had to configure bundlers myself—our great </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>infra team</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> handles it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you don’t have an infra team, here are your options:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Use tools (like </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Vite)</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> that configure bundlers for you.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Google how to do it (plenty of examples out there).</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Ask AI (which is what I did).</span></p></li></ul><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>matters</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> is understanding </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>what</i></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> bundlers do so you don’t get in their way.</span></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Summary</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Module bundlers (esbuild, Rollup, Webpack, etc.) </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>are not hard to understand</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">They take </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>many files</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and output </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>fewer files</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">They’re useful because they:</span></p><p class="paragraph" style="text-align:left;">✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Ensure dependencies load in the correct order.</span><br>✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Reduce the number of HTTP requests needed.</span><br>✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Optimize file sizes for faster downloads.</span><br>✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> Enable </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>code-splitting</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> for better performance.</span><br>✅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> (Bonus) Support non-JS files like </span><code>.ts</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> and </span><code>.json</code><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So, pick a bundler, play with it, and see it in action.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In my next post, I’ll share </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>tips to optimize bundle size.</b></span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="food-for-thought">🍔<span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"> FOOD FOR THOUGHT</span></h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/_ndeyefatoudiop/status/1891397193673953552?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=module-bundlers-demystified-what-you-actually-need-to-know"><p> Twitter tweet </p></a></blockquote></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=fefe5ba6-240c-4cda-b379-389e172bc02a&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>How to Be More Confident as a Junior Dev—Even When You’re Overwhelmed</title>
  <description>Practical tips to show your potential, earn trust, and keep growing—without the stress.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ebfe72b6-5ea7-4236-ae99-ba694f98b1ec/how_to_level_up_your_frontend_skills__13_.png" length="73546" type="image/png"/>
  <link>https://www.frontendjoy.com/p/how-to-be-more-confident-as-a-junior-dev-even-when-you-re-overwhelmed</link>
  <guid isPermaLink="true">https://www.frontendjoy.com/p/how-to-be-more-confident-as-a-junior-dev-even-when-you-re-overwhelmed</guid>
  <pubDate>Mon, 20 Jan 2025 15:00:00 +0000</pubDate>
  <atom:published>2025-01-20T15:00:00Z</atom:published>
    <dc:creator>Ndeye Fatou Diop</dc:creator>
    <category><![CDATA[Career]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Inter',-apple-system,BlinkMacSystemFont,Roboto,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Do you constantly look under-confident at your job and need to be pumped?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If yes, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>stop</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s OK to feel overwhelmed, but it’s not OK to constantly show it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In this article, I will explain why it’s important to display confidence and how to achieve it.</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:left;">Table of Contents</h2><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#why-it-is-important-to-display-conf" rel="noopener noreferrer nofollow">Why it is important to display confidence</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#reason-1-the-more-confidence-you-di" rel="noopener noreferrer nofollow">Reason #1: The more confidence you display, the ea …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#reason-2-the-more-confidence-you-di" rel="noopener noreferrer nofollow">Reason #2: The more confidence you display, the mo …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#reason-3-the-more-confidence-you-di" rel="noopener noreferrer nofollow">Reason #3: The more confidence you display, the le …</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#how-to-build-and-show-your-confiden" rel="noopener noreferrer nofollow">How to Build (and Show) Your Confidence</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#hack-1-dont-bite-more-than-you-can-" rel="noopener noreferrer nofollow">Hack #1: Don’t bite more than you can chew</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#hack-2-give-yourself-permission-to-" rel="noopener noreferrer nofollow">Hack #2: Give yourself permission to ask for help</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#hack-3-take-regular-breaks" rel="noopener noreferrer nofollow">Hack #3: Take regular breaks</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#hack-4-track-your-achievements-regu" rel="noopener noreferrer nofollow">Hack #4: Track your achievements regularly</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#hack-5-share-experiences-with-your-" rel="noopener noreferrer nofollow">Hack #5: Share experiences with your peers or disc …</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#summary" rel="noopener noreferrer nofollow">Summary</a></p></li></ul><div class="custom_html"><iframe src="https://embeds.beehiiv.com/4b52f101-5150-4e42-abc6-28785fdd68cd" data-test-id="beehiiv-embed" width="100%" height="320" frameborder="0" style="border-radius: 4px; border: 2px solid #e5e7eb; margin: 0; background-color: transparent;"></iframe></div><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="this-week-sponsor">THIS WEEK SPONSOR 💰</h2><h3 class="heading" style="text-align:left;">The Daily Newsletter for Intellectually Curious Readers</h3><div class="image"><a class="image__link" href="https://l.join1440.com/bh?utm_source=beehiiv&utm_medium=cpc&utm_campaign={{publication_name_param}}_{{publication_alphanumeric_id}}&utm_content=prospecting_turtleneck&_bhiiv=opp_f6bcf77d-82ab-4a9b-a980-0fdce81c8b4f_1b75ca79&bhcl_id=c4e16cde-1c27-4032-a39e-e17eeabfb603_{{subscriber_id}}_{{email_address_id}}" rel="noopener" target="_blank"><img class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d40472ec-5bdb-4069-8942-e6d0bdae63cb/dbcd9478d1335623e8506e7ed6273a88.png?t=1715814779"/></a></div><p class="paragraph" style="text-align:left;">If you&#39;re <a class="link" href="https://l.join1440.com/bh?utm_source=beehiiv&utm_medium=cpc&utm_campaign={{publication_name_param}}_{{publication_alphanumeric_id}}&utm_content=prospecting_turtleneck&_bhiiv=opp_f6bcf77d-82ab-4a9b-a980-0fdce81c8b4f_1b75ca79&bhcl_id=c4e16cde-1c27-4032-a39e-e17eeabfb603_{{subscriber_id}}_{{email_address_id}}" target="_blank" rel="noopener noreferrer nofollow">frustrated</a> by one-sided reporting, our 5-minute newsletter is the missing piece. We sift through 100+ sources to bring you comprehensive, unbiased news—free from political agendas. Stay informed with factual coverage on the topics that matter.</p><p class="paragraph" style="text-align:left;"><a class="link" href="https://l.join1440.com/bh?utm_source=beehiiv&utm_medium=cpc&utm_campaign={{publication_name_param}}_{{publication_alphanumeric_id}}&utm_content=prospecting_turtleneck&_bhiiv=opp_f6bcf77d-82ab-4a9b-a980-0fdce81c8b4f_1b75ca79&bhcl_id=c4e16cde-1c27-4032-a39e-e17eeabfb603_{{subscriber_id}}_{{email_address_id}}" target="_blank" rel="noopener noreferrer nofollow">Join for free today!</a></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:left;" id="why-it-is-important-to-display-conf"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Why it is important to display confidence</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Have you noticed how we are all attracted to confident leaders?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Because they are reassuring and look like they know where they are going.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Well, turns out </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>confidence is not just a good thing for leaders</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It will also tremendously help you as a junior frontend dev.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Here are </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>3</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> reasons why:</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reason-1-the-more-confidence-you-di"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #1: The more confidence you display, the easier it is to trust you</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Imagine you are sick </span>🥴<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You go to the hospital and have the option between two doctors for your treatment.</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The first doctor talks confidently, speaks assertively and can reassure you while being honest.</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">The second doctor talks tentatively, hesitates a lot, and doesn’t give you a clear answer.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Which doctor are you more likely to choose?</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you’re like me and most people, you would choose the first doctor.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Because if someone doesn’t trust themselves, why should you trust them?</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This also applies to you as a junior frontend dev.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">If you don’t trust yourself and make this evident to everyone, it will be harder for others to trust you.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reason-2-the-more-confidence-you-di"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #2: The more confidence you display, the more ownership you can get</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Since you get more trust, you’ll also have more opportunities than a less confident dev.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">And when you can turn these opportunities around, you get even more ownership.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="reason-3-the-more-confidence-you-di"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reason #3: The more confidence you display, the less effort it takes to reassure you</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Unfortunately, people will generally try to comfort you when you show under-confidence.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This is OK in small doses.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">However, if you consistently need reassurance, it could be tiring in the long term.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Time that could have been spent mentoring you is now spent comforting you.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This is rarely sustainable.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:left;" id="how-to-build-and-show-your-confiden"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">How to Build (and Show) Your Confidence</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Displaying confidence is hard.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I know because I still have to force myself to do it after 5+ years of experience </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">However, you can use these </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>5 hacks</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> to feel and look more confident.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="hack-1-dont-bite-more-than-you-can-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Hack #1: Don’t bite more than you can chew</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This hack is obvious.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">However, it is easy to fall into this trap </span>🪤<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">We generally fall into it because:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">We volunteer for too many projects to show willingness</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">We volunteer for projects without knowing the scale or discussing with a more senior dev first</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">We suffer from people-pleasing and can’t say </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>“No”</i></span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Unfortunately, </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>when you bite more than you can chew, your confidence will take a toll </b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">since you are more likely to:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">underperform on tasks and lose some of your confidence</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">overwork, which leads to tiredness and feeling overwhelmed</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">etc.</span></p></li></ul><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>What to do instead:</b></span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Have a clear idea of your workload and make it clear to your manager</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Only volunteer for projects you have 100% confidence in at the beginning, then be more audacious over time</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Re-evaluate your workload with your manager regularly (and drop some tasks if needed)</span></p></li></ul><hr class="content_break"><h3 class="heading" style="text-align:left;" id="hack-2-give-yourself-permission-to-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Hack #2: Give yourself permission to ask for help</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Whenever I felt under-confident, I wanted to do everything alone and didn’t want to ask for help.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As a result, I would get stuck and not ask for help </span>🤪<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This would undermine my confidence since I was expecting to do something, then realized I couldn’t.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">A good remedy is to </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>ask for help when you’re stuck after some time</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This is great because:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It stops the stress buildup since you’re forced to stop and interact with others</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It helps you brainstorm with other people and feel less alone</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It often enables you to realize the task was more challenging than you expected</span></p></li></ul><hr class="content_break"><h3 class="heading" style="text-align:left;" id="hack-3-take-regular-breaks"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Hack #3: Take regular breaks</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">After working long hours, your productivity drops, and further work can become counterproductive.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Your brain is tired, and you make more mistakes than actual progress.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Unfortunately, this can break your confidence since you keep spending time on the problem without progress.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>The solution is simple: take regular breaks</b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">. At least one break every 90 minutes.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Unfortunately, this can be hard to do (at least for me </span>😅<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">).</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">What helps is to:</span></p><ul><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Schedule catchups/meetings that force you to stop</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Interact with your colleagues</span></p></li><li><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Do something not related to coding, like code reviews</span></p></li></ul><hr class="content_break"><h3 class="heading" style="text-align:left;" id="hack-4-track-your-achievements-regu"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Hack #4: Track your achievements regularly</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">You may not realize it, but you’ve already achieved much as a junior frontend dev </span>👏<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Unfortunately, it’s easy to focus on what you don’t know instead of what you’ve learned.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This can undermine your confidence since you feel like you don’t know enough.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I have some good news: </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><i>“None of us know enough. What we don’t know is way more than what we know.”</i></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">So don’t let this hold you back.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Have a place to track your achievements to see how far you’ve already come.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">This will boost your confidence </span>💪<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="hack-5-share-experiences-with-your-"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Hack #5: Share experiences with your peers or discuss your journey with others</span></h3><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">As soon as you talk with other junior devs or senior devs about their early experiences, you’ll realize that feeling overwhelmed is normal.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">In fact, the tech space is fast-changing, complex, and varied.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">It’s normal to feel overwhelmed initially, especially when navigating old code or completing your first tasks.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead of panicking, embrace the process </span>😌<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Expect discomfort to be part of the job.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Stay calm and learn.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:left;" id="summary"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Summary</span></h2><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Feeling overwhelmed as a junior frontend developer is normal.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">However, just because you feel overwhelmed doesn’t mean you have to show it.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Instead, strive to display confidence so you get more opportunities and trust.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b>Ensure you don’t bite more than you can chew, build a support system, and interact with your peers.</b></span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">I trust you’ll be successful </span>🚀<span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">.</span></p><p class="paragraph" style="text-align:left;"><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">Reach out to me on </span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b><a class="link" href="https://bsky.app/profile/ndeyefatoudiop.bsky.social?utm_source=www.frontendjoy.com&utm_medium=referral&utm_campaign=17-tips-from-a-senior-react-developer" target="_blank" rel="noopener noreferrer nofollow">Bluesky</a></b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;">/</span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"><b><a class="link" href="https://x.com/_ndeyefatoudiop?utm_source=www.frontendjoy.com&utm_medium=referral&utm_campaign=17-tips-from-a-senior-react-developer" target="_blank" rel="noopener noreferrer nofollow">X</a></b></span><span style="font-family:Space Grotesk,Helvetica,Arial,sans-serif;"> if you have any questions.</span></p><div class="image"><img alt="" class="image__image" style="border-radius:0px 0px 0px 0px;border-style:solid;border-width:0px 0px 0px 0px;box-sizing:border-box;border-color:#E5E7EB;" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/392eb46b-3917-461a-80de-4b66d82ad61a/newsletter_divider__2_.png?t=1736759018"/></div><h2 class="heading" style="text-align:center;" id="spot-the-bug">🐞<span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"> SPOT THE BUG</span></h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/_ndeyefatoudiop/status/1879498832100442408?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-to-be-more-confident-as-a-junior-dev-even-when-you-re-overwhelmed"><p> Twitter tweet </p></a></blockquote><h2 class="heading" style="text-align:center;" id="food-for-thought">🍔<span style="font-family:&quot;Space Grotesk&quot;, Helvetica, Arial, sans-serif;"> FOOD FOR THOUGHT</span></h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/_ndeyefatoudiop/status/1879438387150811498?utm_source=www.frontendjoy.com&utm_medium=newsletter&utm_campaign=how-to-be-more-confident-as-a-junior-dev-even-when-you-re-overwhelmed"><p> Twitter tweet </p></a></blockquote></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/powered-by?publication_logo=https%3A%2F%2Fmedia.beehiiv.com%2Fcdn-cgi%2Fimage%2Ffit%3Dscale-down%2Cformat%3Dauto%2Conerror%3Dredirect%2Cquality%3D80%2Fuploads%2Fpublication%2Flogo%2Fbfa5571b-1050-49e1-bab0-61337cfe7458%2Ffavicon.png%3Fv%3D1788377150&publication_name=FrontendJoy&utm_campaign=ef5f0125-1235-4933-926b-0d9fc0e75ab8&utm_medium=post_rss&utm_source=frontendjoy">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

  </channel>
</rss>
