<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Rohtash Sethi</title>
    <description>The latest articles on Forem by Rohtash Sethi (@rohtashsethi).</description>
    <link>https://forem.com/rohtashsethi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F292901%2F350de999-5a95-4f26-91a6-5669deb8c268.jpeg</url>
      <title>Forem: Rohtash Sethi</title>
      <link>https://forem.com/rohtashsethi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rohtashsethi"/>
    <language>en</language>
    <item>
      <title>What's the Hardest Part of Software Engineering? (Hint: It's Not What You Think)</title>
      <dc:creator>Rohtash Sethi</dc:creator>
      <pubDate>Thu, 04 Sep 2025 06:11:24 +0000</pubDate>
      <link>https://forem.com/playfulprogramming/whats-the-hardest-part-of-software-engineering-hint-its-not-what-you-think-5cpl</link>
      <guid>https://forem.com/playfulprogramming/whats-the-hardest-part-of-software-engineering-hint-its-not-what-you-think-5cpl</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;After 10+ years and now working as a Principal Software Engineer, I've discovered the real challenge isn't in the code, it's in everything that happens around it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Last week, I watched my wife (who happens to be a software engineer) spend three hours debugging what turned out to be a simple typo.&lt;/p&gt;

&lt;p&gt;The fix? &lt;em&gt;One character&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;But here's what struck me: those three hours weren't wasted. They were spent thinking, investigating, and understanding the system. The actual typing took 30 seconds.&lt;/p&gt;

&lt;p&gt;This perfectly captures the reality of software engineering that most people miss.&lt;/p&gt;

&lt;p&gt;Whenever someone outside the tech world hears you're a software engineer, they usually imagine you're some kind of wizard, typing furious lines of code, fixing bugs in seconds, and pushing the next billion-dollar feature by lunchtime.&lt;/p&gt;

&lt;p&gt;But the truth? Coding is not the hardest part of software engineering.&lt;/p&gt;

&lt;p&gt;Sure, writing code can be tricky. But for most of us, especially after a few years of experience, syntax becomes second nature. We know the tools. We know the patterns. We've solved enough problems to know how to Google the rest.&lt;/p&gt;

&lt;p&gt;The real challenge lies in everything that happens before, during, and after we write that code. It's the invisible mental work that determines whether our solutions actually solve problems or create new ones.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Understanding the Problem (The Real One)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7n45yfhqvwxr4jsbl7n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7n45yfhqvwxr4jsbl7n.jpg" alt="Photo by Zuzana Ruttkay" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@zuzi_ruttkay?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Zuzana Ruttkay&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/brown-wooden-dock-near-body-of-water-under-cloudy-sky-during-daytime-1kslaBtXBk8?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's where things often start to wobble, and it's usually the biggest source of project delays.&lt;/p&gt;

&lt;p&gt;In most projects, the hardest part is not writing the logic, it's figuring out what the actual problem is. You get a task for a feature request, and it seems simple enough:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Add a filter to the dashboard."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Easy, right? Until you start asking questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What should the default behaviour be?&lt;/li&gt;
&lt;li&gt;How should it interact with existing filters?&lt;/li&gt;
&lt;li&gt;What happens when there's no data to filter?&lt;/li&gt;
&lt;li&gt;How will this affect page load times with large datasets?&lt;/li&gt;
&lt;li&gt;Should filters persist across user sessions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Suddenly, you're not just adding a UI component, you're designing a feature that touches the database, affects user experience, and needs to scale.&lt;/p&gt;

&lt;p&gt;The key insight: Most requirements are actually requirements in disguise. Your job is detective work first, coding second. The best engineers I know spend 30% of their time just making sure they're solving the right problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Brainstorming and Aligning on Solutions
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffc5ktyrh04ht1333tfxq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffc5ktyrh04ht1333tfxq.jpeg" alt="Brainstorming at NG Delhi Meetup" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you understand the problem, the next challenge is deciding how to solve it and getting everyone on the same page.&lt;/p&gt;

&lt;p&gt;Picture this: You're in a meeting discussing that dashboard filter. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;One engineer suggests adding it client-side for speed. Another wants a new microservice for scalability. The product manager just wants it "simple." The designer worries about mobile layouts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is where good teams separate themselves from struggling ones. The best solutions emerge when you can navigate these conversations effectively:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evaluating trade-offs between speed and maintainability&lt;/li&gt;
&lt;li&gt;Balancing current needs with future scalability&lt;/li&gt;
&lt;li&gt;Considering team expertise and available time&lt;/li&gt;
&lt;li&gt;Understanding the broader system implications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The challenge: There are usually multiple right answers, and you need to pick one that works for this context, this team, this moment. It's like playing chess while juggling, you're thinking three moves ahead while keeping current priorities in focus.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Naming Things and Designing Structure
&lt;/h2&gt;

&lt;p&gt;Does this gives you nostalgia!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nmxxbm0qqcwcom54fzc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nmxxbm0qqcwcom54fzc.png" alt="Bad Variable Name Examples" width="755" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's an old programming joke: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's funny because it's painfully accurate.&lt;/p&gt;

&lt;p&gt;I once spent 20 minutes naming a single function. Not because I couldn't think of a name, but because I wanted it to be clear, descriptive, appropriately scoped, and meaningful to future developers (including future me).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foynuv7x5rb7lsc58dbet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foynuv7x5rb7lsc58dbet.png" alt="Breaking a UI into atomic components" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then comes the structural decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where should this code live?&lt;/li&gt;
&lt;li&gt;How do we organize these components?&lt;/li&gt;
&lt;li&gt;What's the right level of abstraction?&lt;/li&gt;
&lt;li&gt;Will someone understand this in six months?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last month, I inherited a codebase where someone had named a critical function processStuff(). It took me two hours to understand what "stuff" actually meant and why it mattered.&lt;/p&gt;

&lt;p&gt;The reality: You're not just coding for now, you're coding for the future. Every naming choice and structural decision is a message to future developers about how the system works and why it's designed that way.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Edge Cases and Real-World Complexity
&lt;/h2&gt;

&lt;p&gt;Let's say you've implemented that dashboard filter. The happy path works perfectly. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Users can filter by date, see results instantly, and everything looks great in your demo."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then reality hits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A user with 10,000 records tries to filter and the page crashes&lt;/li&gt;
&lt;li&gt;Someone enters an invalid date format and breaks the UI&lt;/li&gt;
&lt;li&gt;The API is slow and users see empty screens&lt;/li&gt;
&lt;li&gt;A user with restricted permissions sees data they shouldn't&lt;/li&gt;
&lt;li&gt;Mobile users can't scroll through filtered results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8ptf12qj1h6xqhqdhux.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8ptf12qj1h6xqhqdhux.jpg" alt="Messy Electrical Wires showing complexity" width="399" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remember! Nothing is as easy as it seams!&lt;/p&gt;

&lt;p&gt;These edge cases aren't fun to think about, but they're what separate amateur projects from professional software. Engineering isn't just about building what works, it's about building something resilient that gracefully handles the unexpected.&lt;/p&gt;

&lt;p&gt;The mental cost: Thinking through edge cases requires patience and methodical analysis. It's the difference between "it works on my machine" and "it works for our users in the real world."&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Working with People, Not Just Code
&lt;/h2&gt;

&lt;p&gt;Here's the plot twist that no computer science program adequately prepares you for: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Software engineering is fundamentally a team sport."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your daily work involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Translating business requirements with product managers&lt;/li&gt;
&lt;li&gt;Collaborating on user experience with designers&lt;/li&gt;
&lt;li&gt;Mentoring junior developers through complex problems&lt;/li&gt;
&lt;li&gt;Getting architectural guidance from senior engineers&lt;/li&gt;
&lt;li&gt;Reviewing code and providing constructive feedback&lt;/li&gt;
&lt;li&gt;Explaining technical decisions to non-technical stakeholders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've seen brilliant developers struggle because they couldn't communicate their ideas effectively. I've also seen average coders become invaluable team members because they excelled at collaboration and knowledge sharing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj55wgpmtbc6a1q8z7dhm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj55wgpmtbc6a1q8z7dhm.jpg" alt="Team Sport" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The human element: Technical skills get you in the door, but people skills determine how far you'll go. Miscommunication leads to delays, frustration, and sometimes building the perfect solution to the wrong problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes This So Challenging (And Rewarding)
&lt;/h2&gt;

&lt;p&gt;The hardest part of software engineering isn't choosing between React and Angular, writing perfect SQL queries, or configuring cloud services (though AWS IAM permissions can be pretty brutal).&lt;/p&gt;

&lt;p&gt;The hardest part is the thinking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The thinking before you code&lt;/li&gt;
&lt;li&gt;The thinking during implementation&lt;/li&gt;
&lt;li&gt;The thinking afterward when you're making it better&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every line of code represents a decision, and those decisions compound over time. Choose poorly, and you'll be fighting technical debt for months. Choose well, and you've built something that can adapt and grow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdybcdz84nf4l0mibfcbr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdybcdz84nf4l0mibfcbr.jpg" alt="Challenging and Rewarding" width="736" height="1308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But here's the beautiful part: this is also where the real satisfaction lives. When you solve a genuine problem elegantly, when your code helps users accomplish something meaningful, when your architectural decisions make the next feature easier to build, that's the magic of software engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  If You're Struggling, You're Growing
&lt;/h2&gt;

&lt;p&gt;If you ever feel mentally exhausted by these invisible challenges, that's not a sign of weakness, it's evidence you're doing the real work of engineering.&lt;/p&gt;

&lt;p&gt;Software engineering has never been about typing fast or memorizing syntax. It's about thinking clearly under complexity, making thoughtful decisions with incomplete information, and building solutions that work for real people in the real world.&lt;/p&gt;

&lt;p&gt;Here are three ways to embrace this reality:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ask more questions upfront&lt;/strong&gt;: Spend extra time understanding the problem before jumping to solutions. Those "annoying" clarifying questions prevent expensive mistakes later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invest in your communication skills&lt;/strong&gt;: Practice explaining technical concepts to non-technical colleagues. The better you communicate, the better your solutions become.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Think like a future developer&lt;/strong&gt;: When naming functions, designing APIs, or structuring code, ask yourself: "Will this make sense to someone else in six months?"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The next time someone asks what you do for work, you can tell them: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I solve problems by thinking through complexity and building solutions that work reliably for real people."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because that's the real work. And that's why it matters.&lt;/p&gt;




&lt;p&gt;What's the hardest part of software engineering for you? I'd love to hear about the invisible challenges you face daily. Share your thoughts in the comments below or connect with me on LinkedIn &lt;a href="https://www.linkedin.com/in/rohtashsethi/" rel="noopener noreferrer"&gt;@rohtashsethi&lt;/a&gt;, let's start a conversation about the real work behind the code.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rohtash Sethi&lt;/strong&gt; is a &lt;strong&gt;Principal Software Engineer&lt;/strong&gt; at &lt;strong&gt;Sophos&lt;/strong&gt; with over 10 years of experience building software solutions. While he primarily focuses on frontend development and Angular (and writes extensively about Angular), this post explores the broader challenges that transcend any specific technology stack.&lt;/p&gt;

&lt;p&gt;As Co-founder of NG DELHI Community, Rohtash is passionate about mentoring and providing the guidance he wishes he'd had in his early career. He believes the most valuable lessons in software engineering often come from understanding the human and thinking aspects of the job, not just the technical ones.&lt;/p&gt;

&lt;p&gt;He's always open to discussing the real challenges of software engineering, sharing experiences, or helping fellow developers navigate their careers.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>learning</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Open for contributions!</title>
      <dc:creator>Rohtash Sethi</dc:creator>
      <pubDate>Thu, 15 May 2025 13:05:27 +0000</pubDate>
      <link>https://forem.com/rohtashsethi/open-for-contributions-591i</link>
      <guid>https://forem.com/rohtashsethi/open-for-contributions-591i</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ng-delhi/we-use-angular-discover-the-companies-powering-their-products-with-angular-j1g" class="crayons-story__hidden-navigation-link"&gt;We Use Angular: Discover the Companies Powering Their Products with Angular&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/ng-delhi"&gt;
            &lt;img alt="NG DELHI logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F10836%2F15f9d32c-a87b-44a6-b42c-9b0074f3c313.png" class="crayons-logo__image"&gt;
          &lt;/a&gt;

          &lt;a href="/rohtashsethi" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F292901%2F350de999-5a95-4f26-91a6-5669deb8c268.jpeg" alt="rohtashsethi profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/rohtashsethi" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Rohtash Sethi
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Rohtash Sethi
                
              
              &lt;div id="story-author-preview-content-2488726" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/rohtashsethi" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F292901%2F350de999-5a95-4f26-91a6-5669deb8c268.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Rohtash Sethi&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/ng-delhi" class="crayons-story__secondary fw-medium"&gt;NG DELHI&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/ng-delhi/we-use-angular-discover-the-companies-powering-their-products-with-angular-j1g" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 14 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/ng-delhi/we-use-angular-discover-the-companies-powering-their-products-with-angular-j1g" id="article-link-2488726"&gt;
          We Use Angular: Discover the Companies Powering Their Products with Angular
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/angular"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;angular&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/community"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;community&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/frontend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;frontend&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/ng-delhi/we-use-angular-discover-the-companies-powering-their-products-with-angular-j1g" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;7&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ng-delhi/we-use-angular-discover-the-companies-powering-their-products-with-angular-j1g#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>angular</category>
      <category>opensource</category>
      <category>community</category>
      <category>frontend</category>
    </item>
    <item>
      <title>🔍 Angular Challenge #1: Understanding OnPush Change Detection in Angular</title>
      <dc:creator>Rohtash Sethi</dc:creator>
      <pubDate>Wed, 14 May 2025 19:53:16 +0000</pubDate>
      <link>https://forem.com/ng-delhi/angular-challenge-1-understanding-onpush-change-detection-in-angular-58og</link>
      <guid>https://forem.com/ng-delhi/angular-challenge-1-understanding-onpush-change-detection-in-angular-58og</guid>
      <description>&lt;p&gt;Welcome to the &lt;strong&gt;Angular Daily Challenge Series&lt;/strong&gt;, where we decode real-world Angular concepts through fun and practical coding puzzles. This article dives into a common interview-level topic: &lt;strong&gt;OnPush change detection&lt;/strong&gt; in Angular.&lt;/p&gt;

&lt;p&gt;Let's analyze today's challenge and uncover the behavior of &lt;code&gt;ChangeDetectorRef&lt;/code&gt; and &lt;code&gt;OnPush&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❓ Angular OnPush Change Detection Challenge
&lt;/h2&gt;

&lt;p&gt;Here's the scenario:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-child&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
    &amp;lt;h1&amp;gt;Child Component&amp;lt;/h1&amp;gt;
    &amp;lt;span&amp;gt;{{ data().text }}&amp;lt;/span&amp;gt;
  `&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;changeDetection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ChangeDetectionStrategy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OnPush&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ChildComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
    &amp;lt;h1&amp;gt;Parent Component&amp;lt;/h1&amp;gt;
    &amp;lt;app-child [data]="data" /&amp;gt;
  `&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ChangeDetectionComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;cdRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ChangeDetectorRef&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello from Parent!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Updated from Parent!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="c1"&gt;// Ensure the change is visible in the OnPush child&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;cdRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;detectChanges&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ What Will Be Displayed in the Child After 3 Seconds?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Output: "Updated from Parent!"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But why does this happen? Let's break it down with a deeper look into Angular's change detection system.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 How Angular OnPush Works
&lt;/h2&gt;

&lt;p&gt;When you use &lt;code&gt;ChangeDetectionStrategy.OnPush&lt;/code&gt;, Angular skips checking the component’s template &lt;strong&gt;unless one of these occurs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The component receives a &lt;strong&gt;new reference&lt;/strong&gt; via &lt;code&gt;input&lt;/code&gt; signal&lt;/li&gt;
&lt;li&gt;An event happens inside the component&lt;/li&gt;
&lt;li&gt;Change detection is &lt;strong&gt;manually triggered&lt;/strong&gt; using &lt;code&gt;ChangeDetectorRef&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔄 Why Mutation Doesn’t Trigger OnPush Detection
&lt;/h2&gt;

&lt;p&gt;In our example, we changed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Updated from Parent!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This &lt;strong&gt;modifies&lt;/strong&gt; a property of the object but doesn't change the &lt;strong&gt;object reference&lt;/strong&gt;, so Angular &lt;strong&gt;doesn't detect&lt;/strong&gt; this change on its own.&lt;/p&gt;

&lt;p&gt;Hence, Angular won't rerender the child unless we force it using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;cdRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;detectChanges&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how we &lt;strong&gt;manually notify Angular&lt;/strong&gt; to run change detection for all components, including &lt;code&gt;OnPush&lt;/code&gt; ones.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Bonus Tip: &lt;code&gt;3_000&lt;/code&gt; vs &lt;code&gt;3000&lt;/code&gt; in JavaScript
&lt;/h2&gt;

&lt;p&gt;You might have spotted:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is &lt;strong&gt;JavaScript numeric separator&lt;/strong&gt; syntax introduced in &lt;strong&gt;ES2021&lt;/strong&gt;. It’s functionally identical to &lt;code&gt;3000&lt;/code&gt;, but &lt;strong&gt;more readable&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Benefits:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Easier to read large numbers (&lt;code&gt;1_000_000&lt;/code&gt;, &lt;code&gt;3_000&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Especially useful for &lt;strong&gt;time intervals&lt;/strong&gt;, &lt;strong&gt;byte sizes&lt;/strong&gt;, and &lt;strong&gt;money values&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Use it in modern Angular projects, it improves code clarity without affecting performance.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Learnings Recap
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ChangeDetectionStrategy.OnPush&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Optimizes performance by skipping change detection unless needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ChangeDetectorRef.detectChanges()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manually triggers Angular’s change detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mutating object properties&lt;/td&gt;
&lt;td&gt;Doesn’t trigger OnPush if the reference is unchanged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;3_000&lt;/code&gt; in &lt;code&gt;setTimeout&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;JavaScript numeric separator for better readability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  📣 Challenge for You: Can You Optimize This?
&lt;/h2&gt;

&lt;p&gt;In this challenge, we manually triggered change detection. But is that always the best approach?&lt;/p&gt;

&lt;h3&gt;
  
  
  🔁 Explore These Alternatives:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Use &lt;strong&gt;immutable patterns&lt;/strong&gt;: Replace the object entirely using &lt;code&gt;this.data = { text: 'Updated' }&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;⚡ Adopt &lt;strong&gt;Angular Signals&lt;/strong&gt; (Angular 17+): Better reactivity with built-in efficiency&lt;/li&gt;
&lt;li&gt;🧠 Try &lt;strong&gt;markForCheck()&lt;/strong&gt; instead of &lt;code&gt;detectChanges()&lt;/code&gt; in some cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💬 &lt;strong&gt;What’s your go-to strategy&lt;/strong&gt; for handling &lt;code&gt;OnPush&lt;/code&gt; changes? Drop your ideas and code snippets in the comments!&lt;/p&gt;




&lt;h2&gt;
  
  
  🙌 Stay Connected
&lt;/h2&gt;

&lt;p&gt;👨🏻‍💻 Follow &lt;a href="https://www.linkedin.com/in/rohtashsethi/" rel="noopener noreferrer"&gt;&lt;strong&gt;Rohtash Sethi&lt;/strong&gt; 👨‍💻🥷🌟&lt;/a&gt; for daily &lt;strong&gt;Angular challenges&lt;/strong&gt;, JavaScript insights, and performance tips!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>devchallenge</category>
      <category>webperf</category>
      <category>frontend</category>
    </item>
    <item>
      <title>We Use Angular: Discover the Companies Powering Their Products with Angular</title>
      <dc:creator>Rohtash Sethi</dc:creator>
      <pubDate>Wed, 14 May 2025 19:10:47 +0000</pubDate>
      <link>https://forem.com/ng-delhi/we-use-angular-discover-the-companies-powering-their-products-with-angular-j1g</link>
      <guid>https://forem.com/ng-delhi/we-use-angular-discover-the-companies-powering-their-products-with-angular-j1g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Tired of hearing “Nobody uses Angular anymore”?  &lt;/p&gt;

&lt;p&gt;Ever been told to 'just switch to React'? Same. But what if I told you that Angular is quietly powering hundreds of real-world apps, from startups to enterprises?&lt;/p&gt;

&lt;p&gt;Let’s put that myth to rest, with facts, logos, and code commits.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🎯 The Problem
&lt;/h2&gt;

&lt;p&gt;As Angular developers, we’ve all been there:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"React is the default."&lt;/p&gt;

&lt;p&gt;"Angular is too enterprise-y."&lt;/p&gt;

&lt;p&gt;"Is anyone even hiring for Angular anymore?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But behind the noise, there are big companies quietly building &lt;strong&gt;real, production-grade apps&lt;/strong&gt; using Angular, and doing it at scale.&lt;/p&gt;

&lt;p&gt;The only problem? This information is scattered, hard to find, and often not public.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 The Solution: &lt;em&gt;We Use Angular&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6rbazywoj5s929td4sxe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6rbazywoj5s929td4sxe.png" alt="We Use Angular UI" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ng-Delhi&lt;/strong&gt;, an Angular community from Delhi NCR (India), has launched the &lt;strong&gt;We Use Angular&lt;/strong&gt; initiative — a &lt;strong&gt;GitHub-powered, open-source directory&lt;/strong&gt; of companies using Angular.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://github.com/ng-delhi/we-use-angular" rel="noopener noreferrer"&gt;👉 Visit the GitHub Repo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb0rzv8mv4loctmg2aw6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb0rzv8mv4loctmg2aw6c.png" alt="We Use Angular GitHub Repo Screenshot" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧭 Why This Matters
&lt;/h2&gt;

&lt;p&gt;Too often, developers struggle to find:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Companies that are committed to Angular&lt;/li&gt;
&lt;li&gt;Jobs that match their Angular skillset&lt;/li&gt;
&lt;li&gt;Proof that Angular is &lt;em&gt;still very much alive&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s where &lt;strong&gt;We Use Angular&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;✅ It showcases real-world usage&lt;br&gt;&lt;br&gt;
✅ Helps job-seekers target the right companies&lt;br&gt;&lt;br&gt;
✅ Celebrates Angular’s presence in the wild&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This initiative was born after mentoring juniors who were confused about Angular's future. We wanted to give them, and all of us, clarity and hope.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🗂️ What You'll Find in the Repo
&lt;/h2&gt;

&lt;p&gt;We’ve curated a list of companies that use Angular in production.&lt;/p&gt;

&lt;p&gt;📦 The repo includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Company name + website
&lt;/li&gt;
&lt;li&gt;🏷️ Industry segment
&lt;/li&gt;
&lt;li&gt;📍 Region or headquarters&lt;/li&gt;
&lt;li&gt;🏢 Work Mode (On-Site / Remote / Hybrid)&lt;/li&gt;
&lt;li&gt;🧱 Tech Stack (Frontend + Backend + DB + Hosting, etc.)&lt;/li&gt;
&lt;li&gt;🛠️ Angular usage context (if known) &lt;/li&gt;
&lt;li&gt;🖼️ Logo gallery (coming soon!)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9uj4c19bppgxw3kjqr3x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9uj4c19bppgxw3kjqr3x.png" alt="Companies" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We’ve already listed &lt;strong&gt;33+ companies&lt;/strong&gt;, and it’s growing fast!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🙌 How You Can Contribute
&lt;/h2&gt;

&lt;p&gt;You don’t have to be a Git master to help out. We’ve got multiple ways for you to participate:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 Option 1: Raise a PR
&lt;/h3&gt;

&lt;p&gt;Familiar with GitHub? Just fork the repo and submit a Pull Request.&lt;/p&gt;

&lt;h3&gt;
  
  
  💬 Option 2: Community Submissions (No Git Required!)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tag &lt;a href="https://www.linkedin.com/company/ng-delhi/" rel="noopener noreferrer"&gt;@NgDelhi&lt;/a&gt; on LinkedIn with the company name
&lt;/li&gt;
&lt;li&gt;Reply to our LinkedIn announcement posts
&lt;/li&gt;
&lt;li&gt;🐛 Open a GitHub issue with the company details
&lt;/li&gt;
&lt;li&gt;📥 Drop details in our &lt;a href="https://github.com/ng-delhi" rel="noopener noreferrer"&gt;Ng Delhi community chat&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Your one submission might help someone land their dream job.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🏆 Recognition &amp;amp; Credits
&lt;/h2&gt;

&lt;p&gt;Every contributor gets public credit for their help in growing the Angular ecosystem!&lt;/p&gt;

&lt;p&gt;✅ Your name will appear in the Contributors section of our GitHub repo&lt;br&gt;
✅ We'll give shoutouts from the Ng Delhi LinkedIn page&lt;br&gt;
✅ Top contributors will be featured in our leaderboards and events&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl63y82cxz4bj9rda1hpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl63y82cxz4bj9rda1hpt.png" alt="Credits &amp;amp; Leaderboard" width="800" height="798"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because your contributions matter, and should be seen by the community 🌟&lt;/p&gt;




&lt;h2&gt;
  
  
  📢 Spread the Word
&lt;/h2&gt;

&lt;p&gt;If you believe in Angular and want to support the ecosystem, here’s how you can help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ &lt;strong&gt;Star&lt;/strong&gt; the &lt;a href="https://github.com/ng-delhi/we-use-angular" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔁 &lt;strong&gt;Repost&lt;/strong&gt; this blog or share it with your Angular circle
&lt;/li&gt;
&lt;li&gt;🧑‍💻 &lt;strong&gt;Contribute&lt;/strong&gt; a company you know uses Angular
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Let’s make Angular visible again. Let’s show the world: &lt;strong&gt;We Use Angular.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧡 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Angular isn’t dead — it’s thriving in companies that value structure, scale, and maintainability. We just need to &lt;strong&gt;make its impact visible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Join us in this movement. Help us build a better map for Angular devs, job seekers, and tech leaders alike.&lt;/p&gt;

&lt;h2&gt;
  
  
  👥 About Ng-Delhi
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fig0omkd3koii365ckrd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fig0omkd3koii365ckrd5.png" alt="Ng Delhi Community" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’re a passionate Angular community from Delhi NCR (India), dedicated to sharing knowledge, organizing meetups, and contributing to open-source.&lt;/p&gt;

&lt;p&gt;Follow us at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🟦 &lt;a href="https://www.linkedin.com/company/ng-delhi/" rel="noopener noreferrer"&gt;Ng Delhi on LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐙 &lt;a href="https://github.com/ng-delhi" rel="noopener noreferrer"&gt;Ng Delhi on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 Your Turn!
&lt;/h2&gt;

&lt;p&gt;🔥 Know a company that uses Angular?&lt;br&gt;&lt;br&gt;
🎯 Challenge yourself to submit just one today!&lt;/p&gt;




&lt;p&gt;✍️ Like this post? Save it and share it.&lt;br&gt;&lt;br&gt;
⭐ Star the repo → &lt;a href="https://github.com/ng-delhi/we-use-angular" rel="noopener noreferrer"&gt;We Use Angular on GitHub&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💬 Comment below if you have a company to suggest!  &lt;/p&gt;

</description>
      <category>angular</category>
      <category>opensource</category>
      <category>community</category>
      <category>frontend</category>
    </item>
    <item>
      <title>🚀 Angular 20: What’s Coming</title>
      <dc:creator>Rohtash Sethi</dc:creator>
      <pubDate>Tue, 13 May 2025 21:03:47 +0000</pubDate>
      <link>https://forem.com/rohtashsethi/angular-20-whats-coming-and-why-the-release-cycle-matters-4kdo</link>
      <guid>https://forem.com/rohtashsethi/angular-20-whats-coming-and-why-the-release-cycle-matters-4kdo</guid>
      <description>&lt;p&gt;Angular continues to lead the way in enterprise web development with its commitment to high performance, scalability, and developer, friendly tools. With &lt;strong&gt;Angular 20 releasing on May 29, 2025&lt;/strong&gt;, the framework is set to deliver groundbreaking new features that promise to elevate development workflows. But what truly sets Angular apart is not just its technical prowess, it’s the &lt;strong&gt;reliability of its release cycle&lt;/strong&gt;, which ensures Angular evolves in a stable and predictable way. Let’s explore what’s coming in Angular 20 and why the Angular team's disciplined release schedule is a major asset for developers.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌟 What’s Coming in Angular 20?
&lt;/h2&gt;

&lt;p&gt;Angular 20 introduces several exciting enhancements designed to boost performance, improve the developer experience, and keep up with modern web standards. Here's a closer look at the most anticipated features:&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Zoneless Change Detection
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What’s New in Angular 20?&lt;/strong&gt;&lt;br&gt;
Developer preview of zoneless change detection, moving away from Zone.js.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Why You Should Care:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster rendering for better performance.&lt;/li&gt;
&lt;li&gt;Smaller application bundle sizes.&lt;/li&gt;
&lt;li&gt;Simplified debugging without the need for Zone.js.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Benefit:&lt;/strong&gt; This feature will enable faster updates in your applications, improving the overall performance and reducing the size of your deployed code.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧩 Selectorless Components
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What’s New in Angular 20?&lt;/strong&gt;&lt;br&gt;
Import components directly into templates without using selectors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Why You Should Care:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Less boilerplate code.&lt;/li&gt;
&lt;li&gt;Easier component refactoring and streamlined usage.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Benefit:&lt;/strong&gt; This change simplifies code by reducing the need for manually managing component selectors, making templates more readable and maintainable.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧪 Enhanced Testing Facilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What’s New in Angular 20?&lt;/strong&gt;&lt;br&gt;
The default test runner options now include Web Test Runner, Vitest, and Jest, with Karma deprecated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Why You Should Care:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster, more modern testing workflows.&lt;/li&gt;
&lt;li&gt;Support for modern testing libraries and tools.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Benefit:&lt;/strong&gt; This change will result in faster test execution, giving developers quicker feedback and enabling them to catch issues early.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚙️ Incremental Hydration &amp;amp; Flexible Rendering
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What’s New in Angular 20?&lt;/strong&gt;&lt;br&gt;
Stabilized incremental hydration for server-side rendering (SSR).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Why You Should Care:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster load times.&lt;/li&gt;
&lt;li&gt;Better SEO through server-side rendering improvements.&lt;/li&gt;
&lt;li&gt;Enhanced user experience with improved interactive elements.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Benefit:&lt;/strong&gt; Incremental hydration improves the rendering of SSR pages, making them more interactive sooner, thus enhancing the user experience.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔄 Reactive API Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What’s New in Angular 20?&lt;/strong&gt;&lt;br&gt;
Stabilization of the &lt;code&gt;effect&lt;/code&gt; API and a preview of resource APIs for handling async data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Why You Should Care:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easier management of side effects and asynchronous operations.&lt;/li&gt;
&lt;li&gt;Enhanced support for modern reactive programming paradigms.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Benefit:&lt;/strong&gt; With these improvements, developers can handle async logic more effectively, resulting in cleaner, more maintainable code.&lt;/p&gt;




&lt;h3&gt;
  
  
  ♿ Accessibility Primitives
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What’s New in Angular 20?&lt;/strong&gt;&lt;br&gt;
New built-in utilities aimed at improving accessibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Why You Should Care:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplified implementation of inclusive, accessible applications.&lt;/li&gt;
&lt;li&gt;Enhanced compliance with accessibility standards.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Benefit:&lt;/strong&gt; Angular 20 makes it easier to ensure your applications are accessible to all users, improving user experience and adhering to legal standards.&lt;/p&gt;




&lt;h3&gt;
  
  
  🏷️ Tagged Template Literals in Templates
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What’s New in Angular 20?&lt;/strong&gt;&lt;br&gt;
Full support for tagged template literals in Angular templates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Why You Should Care:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modernized syntax for easier inline templates.&lt;/li&gt;
&lt;li&gt;Improved tooling and code readability.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Benefit:&lt;/strong&gt; Tagged template literals make it easier to handle dynamic content within templates, providing a more intuitive syntax for developers.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔁 Two-Way Binding for Dynamic Components
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What’s New in Angular 20?&lt;/strong&gt;&lt;br&gt;
Support for two-way data binding with dynamically created components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Why You Should Care:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplifies data flow in dynamic UIs.&lt;/li&gt;
&lt;li&gt;Reduces boilerplate code and improves reactivity.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Benefit:&lt;/strong&gt; This new feature helps developers manage data in dynamic components more effectively, making it easier to create complex user interfaces.&lt;/p&gt;




&lt;h3&gt;
  
  
  🤖 AI-Assisted Development Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What’s New in Angular 20?&lt;/strong&gt;&lt;br&gt;
AI-powered linting and CLI recommendations to assist with development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Why You Should Care:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Boosts productivity by offering intelligent code suggestions.&lt;/li&gt;
&lt;li&gt;Helps catch potential errors early in the development process.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Benefit:&lt;/strong&gt; With AI-powered assistance, developers can be more productive and write better code with fewer errors.&lt;/p&gt;




&lt;h2&gt;
  
  
  📅 Angular 20 Release Date: Mark Your Calendar!
&lt;/h2&gt;

&lt;p&gt;The official release date for Angular 20 is &lt;strong&gt;May 29, 2025&lt;/strong&gt;. On the same day, the Angular team will host a developer event at &lt;strong&gt;9 AM PDT&lt;/strong&gt; to showcase new features and provide insights into the future of Angular development. Be sure to tune in and stay up-to-date with all the latest updates from the Angular team! &lt;a href="https://x.com/angular?lang=en" rel="noopener noreferrer"&gt;Event details here&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🗓️ The Angular Release Cycle: Predictability That Drives Progress
&lt;/h2&gt;

&lt;p&gt;One of Angular’s key advantages is its &lt;strong&gt;predictable and transparent release schedule&lt;/strong&gt;, ensuring that developers can plan their projects with confidence.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“A major release every 6 months · 1-3 minor releases per major release · A patch release and pre-release (next or rc) build almost every week.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Major Releases:&lt;/strong&gt; Every 6 months (introduces big features &amp;amp; improvements).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minor Releases:&lt;/strong&gt; 1-3 per major release (smaller enhancements, always backward-compatible).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Patch Releases:&lt;/strong&gt; Almost weekly (bug fixes and stability improvements).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-releases:&lt;/strong&gt; “Next” and “Release Candidate” builds for early previews.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why This Matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stability &amp;amp; Planning:&lt;/strong&gt; Teams can confidently schedule upgrades and feature releases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access to Innovation:&lt;/strong&gt; Developers get early access to features and stable, production-ready updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-Term Support:&lt;/strong&gt; Each major release gets 18 months of support (6 months active, 12 months LTS) [^3][^5].&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🏆 Angular’s Evolution: A History of Consistency
&lt;/h2&gt;

&lt;p&gt;Since &lt;strong&gt;Angular 4&lt;/strong&gt; (released in March 2017), the framework has maintained its six-month release rhythm, ensuring a steady flow of innovation without sacrificing stability. This predictability makes Angular a trusted choice for large-scale, long-term projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ Conclusion: The Future of Web Development
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Angular 20&lt;/strong&gt;, releasing on &lt;strong&gt;May 29, 2025&lt;/strong&gt;, is packed with powerful new features that will streamline development, enhance performance, and support modern web standards. But just as important is the Angular team’s commitment to a &lt;strong&gt;predictable, transparent release cycle&lt;/strong&gt;. This ensures developers can innovate with confidence, knowing Angular will continue to evolve with their needs in mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Ready to Upgrade?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Check out the &lt;a href="https://update.angular.io/" rel="noopener noreferrer"&gt;official Angular update guide&lt;/a&gt; and join the community as we embrace the future of web development together! 🚀&lt;/p&gt;




&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/angular?lang=en" rel="noopener noreferrer"&gt;Angular on Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/angular/status/1920146610928894164" rel="noopener noreferrer"&gt;Developer Event Announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.codedthemes.com/angular-20/" rel="noopener noreferrer"&gt;Angular 20 Release Details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/angular/angular/releases" rel="noopener noreferrer"&gt;Angular GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>angular</category>
      <category>news</category>
      <category>learning</category>
      <category>web</category>
    </item>
    <item>
      <title>Why TypeScript Enums Increase Angular Bundle Size and How to Fix It</title>
      <dc:creator>Rohtash Sethi</dc:creator>
      <pubDate>Mon, 12 May 2025 04:52:46 +0000</pubDate>
      <link>https://forem.com/rohtashsethi/why-typescript-enums-increase-angular-bundle-size-and-how-to-fix-it-1908</link>
      <guid>https://forem.com/rohtashsethi/why-typescript-enums-increase-angular-bundle-size-and-how-to-fix-it-1908</guid>
      <description>&lt;p&gt;When optimizing Angular applications for performance, developers often overlook a silent culprit: TypeScript enums. While enums improve code readability and type safety, they introduce unexpected overhead in your final JavaScript bundle. This can lead to larger file sizes, slower load times, and diminished performance, especially on mobile or low-bandwidth connections. &lt;/p&gt;

&lt;p&gt;In this article, we'll explore how enums contribute to bundle bloat, why Angular's build tools struggle to optimize them, and which alternatives you can use to write cleaner, faster, and more efficient code.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚩 The Problem with TypeScript Enums in Angular
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Are Enums in TypeScript?
&lt;/h3&gt;

&lt;p&gt;An &lt;code&gt;enum&lt;/code&gt; is a TypeScript feature that lets you define a set of named constants. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;UserRole&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Admin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Editor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Viewer&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under the hood, this compiles to something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;use strict&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;UserRole&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;UserRole&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;UserRole&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;UserRole&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;UserRole&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;UserRole&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Editor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Editor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;UserRole&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;UserRole&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Viewer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Viewer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;})(&lt;/span&gt;&lt;span class="nx"&gt;UserRole&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;UserRole&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s a &lt;strong&gt;bi-directional object&lt;/strong&gt;: you can look up a value by key and vice versa.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Why Enums Bloat Angular Bundle Size
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Bi-Directional Mapping = More Code&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript enums emit extra JavaScript to support both directions.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This results in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extra object initialization code&lt;/li&gt;
&lt;li&gt;More JavaScript in your output&lt;/li&gt;
&lt;li&gt;Each import of an enum adds to your bundle&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Poor Tree-Shaking Support&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enums are treated as &lt;strong&gt;live objects&lt;/strong&gt; with potential side effects.&lt;/li&gt;
&lt;li&gt;Tree-shakers cannot safely eliminate unused enum members.&lt;/li&gt;
&lt;li&gt;The entire enum stays even if you use just one value.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Repeated Across Lazy-Loaded Modules&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enums used in shared files may be duplicated in chunks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wastes KBs&lt;/strong&gt; across multiple modules.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📊 Impact Example
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bundle Size Comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Size Increase&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 Simple Enum (&lt;code&gt;UserRole&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;+300B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10 Enums (average size)&lt;/td&gt;
&lt;td&gt;+3KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complex Enum with String Values&lt;/td&gt;
&lt;td&gt;+500–700B per enum&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Multiply this across dozens of enums and you could see a &lt;strong&gt;significant increase&lt;/strong&gt; in final bundle size.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Alternatives to Enums
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;String Literal Union Types&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UserRole&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Admin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Editor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Viewer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No runtime JavaScript&lt;/li&gt;
&lt;li&gt;Fully tree-shakable&lt;/li&gt;
&lt;li&gt;IDE support for autocomplete&lt;/li&gt;
&lt;li&gt;Smaller bundle size&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No reverse mapping&lt;/li&gt;
&lt;li&gt;No built-in iteration&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. &lt;strong&gt;Constant Objects with &lt;code&gt;as const&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;UserRole&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;Admin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Admin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;Editor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Editor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;Viewer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Viewer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UserRole&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;UserRole&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;UserRole&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero runtime cost beyond plain objects&lt;/li&gt;
&lt;li&gt;Type-safe&lt;/li&gt;
&lt;li&gt;Retains structure similar to enums&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Still an object, but no reverse mapping&lt;/li&gt;
&lt;li&gt;Slightly more verbose&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. &lt;strong&gt;Use &lt;code&gt;const enums&lt;/code&gt; with Caveats&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;UserRole&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Admin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Editor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Viewer&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inlined during compilation (zero JS output)&lt;/li&gt;
&lt;li&gt;No runtime cost&lt;/li&gt;
&lt;li&gt;Very small bundle footprint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires &lt;code&gt;preserveConstEnums: false&lt;/code&gt; in tsconfig&lt;/li&gt;
&lt;li&gt;Cannot use with libraries or emitDeclarationOnly workflows&lt;/li&gt;
&lt;li&gt;No reverse mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;const enums&lt;/code&gt; can break third-party tooling and are not always compatible with Angular CLI settings.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  💡 Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;string literal unions&lt;/strong&gt; for simple sets of constants.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;as const&lt;/code&gt; objects&lt;/strong&gt; when you need iterable values or more structure.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;const enums&lt;/code&gt;&lt;/strong&gt; cautiously and only in internal modules or performance-critical code paths.&lt;/li&gt;
&lt;li&gt;Avoid using enums in &lt;strong&gt;shared interfaces or models&lt;/strong&gt; passed between many modules.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ Summary Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Tree-shakable&lt;/th&gt;
&lt;th&gt;Bundle Size&lt;/th&gt;
&lt;th&gt;Reverse Mapping&lt;/th&gt;
&lt;th&gt;IDE Support&lt;/th&gt;
&lt;th&gt;Safe for Libraries&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;enum&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;⬆️ High&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;const enum&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Minimal&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;string union&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Minimal&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;as const&lt;/code&gt; object&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Minimal&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🧠 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Enums are elegant and readable, but in Angular apps where &lt;strong&gt;performance matters&lt;/strong&gt;, they can be surprisingly heavy. By understanding how TypeScript compiles enums and how Angular handles them in the build process, you can make smarter choices and keep your bundles fast and slim.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💬 If you’re building a performance-sensitive Angular application, &lt;strong&gt;ditch the enums&lt;/strong&gt;, your users (and Lighthouse score) will thank you.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>typescript</category>
      <category>angular</category>
      <category>webperf</category>
      <category>frontend</category>
    </item>
    <item>
      <title>👩‍💻 Can You Build This Website? Yes, You Can in 2025!</title>
      <dc:creator>Rohtash Sethi</dc:creator>
      <pubDate>Sat, 03 May 2025 03:41:02 +0000</pubDate>
      <link>https://forem.com/rohtashsethi/how-to-become-a-frontend-developer-in-2025-171l</link>
      <guid>https://forem.com/rohtashsethi/how-to-become-a-frontend-developer-in-2025-171l</guid>
      <description>&lt;p&gt;👋 Hey future developers!&lt;/p&gt;

&lt;p&gt;The next time you’re using a website, ask yourself: &lt;strong&gt;&lt;em&gt;Can I build this?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
If that question sparks even a little curiosity, &lt;strong&gt;frontend development&lt;/strong&gt; might just be your thing.&lt;/p&gt;

&lt;p&gt;And in &lt;strong&gt;2025&lt;/strong&gt;, there's &lt;strong&gt;never been a better time&lt;/strong&gt; to dive in.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Why Learn Frontend?
&lt;/h2&gt;

&lt;p&gt;Frontend is more than just styling buttons and writing code—it’s where your ideas come to life. Here’s why it’s worth exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎨 Combine &lt;strong&gt;creativity&lt;/strong&gt; with &lt;strong&gt;logic&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🧱 Turn designs into real, usable websites&lt;/li&gt;
&lt;li&gt;🌍 Reach and impact &lt;strong&gt;millions of users&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;💼 Stay &lt;strong&gt;in-demand&lt;/strong&gt;—every tech company needs frontend skills&lt;/li&gt;
&lt;li&gt;💻 Start with just a &lt;strong&gt;laptop and a browser&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you like seeing results fast and making things people can use, the frontend is for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ What to Learn: Frontend Core Skills for 2025
&lt;/h2&gt;

&lt;p&gt;Here’s a simple roadmap to get you going:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HTML, CSS, JavaScript&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The “holy trinity” of the web—essential for every frontend dev.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Git &amp;amp; GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Track your code, collaborate, and build in public.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Responsive Design&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Make your site work on &lt;strong&gt;all&lt;/strong&gt; screen sizes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A smarter, safer version of JavaScript. Companies love it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend Framework&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Choose one: &lt;strong&gt;Angular&lt;/strong&gt;, &lt;strong&gt;React&lt;/strong&gt;, or &lt;strong&gt;Vue&lt;/strong&gt; (try Angular 😉).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dev Tools&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Get comfy with &lt;strong&gt;VS Code&lt;/strong&gt;, browser dev tools, and useful extensions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Accessibility &amp;amp; SEO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build for &lt;em&gt;everyone&lt;/em&gt; and help your work get discovered.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;🔗 Want a detailed, open-source roadmap? Check this out: &lt;a href="https://roadmap.sh/frontend" rel="noopener noreferrer"&gt;roadmap.sh/frontend&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 The Student Mindset: How to Grow Fast
&lt;/h2&gt;

&lt;p&gt;Success isn’t about being perfect, it’s about &lt;strong&gt;showing up consistently&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🕐 &lt;strong&gt;Start now&lt;/strong&gt;, don’t wait for “the right time”&lt;/li&gt;
&lt;li&gt;🧪 Learn by &lt;strong&gt;doing&lt;/strong&gt;, not just watching tutorials&lt;/li&gt;
&lt;li&gt;🌱 &lt;strong&gt;30 minutes daily&lt;/strong&gt; beats 8 hours once a month&lt;/li&gt;
&lt;li&gt;📢 &lt;strong&gt;Share your journey&lt;/strong&gt; on GitHub, LinkedIn, or even a blog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small steps add up. Build momentum with curiosity, not pressure.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Level-Up Ideas for 2025
&lt;/h2&gt;

&lt;p&gt;Here’s how you can go from beginner to confident creator:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Build simple projects: To-do list, portfolio, blog&lt;/li&gt;
&lt;li&gt;🤝 Contribute to open source: Fix bugs or improve docs&lt;/li&gt;
&lt;li&gt;🎥 Follow devs on YouTube, LinkedIn, and X (Twitter)&lt;/li&gt;
&lt;li&gt;👥 Join communities (e.g., &lt;strong&gt;NG Delhi&lt;/strong&gt; if you're in NCR!)&lt;/li&gt;
&lt;li&gt;🏆 Attend hackathons: You’ll learn fast, and meet awesome people&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧭 8-Month Roadmap Snapshot
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Months&lt;/th&gt;
&lt;th&gt;Focus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1–2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Learn HTML, CSS, and JS basics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build 2–3 small projects (e.g., Calculator, Weather App)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Learn a framework (Angular, React, or Vue)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5–6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build a complete app (Blog, ToDo with login, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Learn Git, host projects (Netlify, Vercel, GitHub Pages)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;8&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Share your journey, ask for feedback, join a dev circle&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;🎯 By the end, you’ll have projects, a portfolio, and confidence.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If you enjoy solving problems, being creative, and seeing your work come to life—&lt;strong&gt;frontend is for you&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You &lt;strong&gt;don’t need a degree&lt;/strong&gt; to begin.&lt;br&gt;
You just need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 Curiosity&lt;/li&gt;
&lt;li&gt;❤️ Commitment&lt;/li&gt;
&lt;li&gt;💪 A bit of courage&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;📣 Let’s Connect!&lt;/p&gt;

&lt;p&gt;Got questions? Drop them in the comments.&lt;br&gt;
Follow me for more frontend tips, motivation, and resources!&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I18n in Web Apps Series Part-1</title>
      <dc:creator>Rohtash Sethi</dc:creator>
      <pubDate>Fri, 22 Dec 2023 09:28:42 +0000</pubDate>
      <link>https://forem.com/rohtashsethi/i18n-in-web-apps-series-part-1-4e4b</link>
      <guid>https://forem.com/rohtashsethi/i18n-in-web-apps-series-part-1-4e4b</guid>
      <description>&lt;p&gt;As a web developer, you must have developed many great web applications designed for a specific target audience in a specific region or country.&lt;/p&gt;

&lt;p&gt;This practice is called Localization.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Localization?
&lt;/h2&gt;

&lt;p&gt;Localization refers to the adaptation of a product, application or document content to meet the language, cultural and other requirements of a specific target market (a locale).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Localization is sometimes written in English as l10n, where 10 is the number of letters in the English word between l and n.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It includes customization related to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Numeric, date and time formats&lt;/li&gt;
&lt;li&gt;Use of currency&lt;/li&gt;
&lt;li&gt;Keyboard usage&lt;/li&gt;
&lt;li&gt;Collation and sorting&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Symbols, icons and colors&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Text and graphics containing references to objects, actions or ideas which, in a given culture, may be subject to misinterpretation or viewed as insensitive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Varying legal requirements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;and many more things.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Taking the product/service to the next level
&lt;/h2&gt;

&lt;p&gt;Now, what if the business wants to scale and expand its reach to make their product/service accessible and adaptable to a diverse or global audience?&lt;/p&gt;

&lt;p&gt;Ever wondered what practices a web developer needs to follow and implement to enable the expansion of business in multiple regions or countries so their audience can adapt and feel inclusive?&lt;/p&gt;

&lt;p&gt;The answer to all above questions is Internationalization!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Internationalization?
&lt;/h2&gt;

&lt;p&gt;Internationalization is the process of designing and developing products or services in a way that enables easy adaptation to different languages, cultures, and regions. It involves considering various aspects such as language translation, date and time formats, currency symbols, and cultural norms.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Internationalization is often abbreviated as i18n, where 18 is the number of letters between ‘i’ and ‘n’ in the English word.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By implementing internationalization best practices, businesses and organizations can reach a wider audience, increase user satisfaction, and improve their global market presence.&lt;/p&gt;

&lt;p&gt;It is an essential aspect of software development, website design, and content creation, particularly for companies with a global customer base or expansion plans.&lt;/p&gt;

&lt;p&gt;In addition to language and cultural adaptation, internationalization also involves considering other factors like time zones, measurement units, and regional preferences. It requires careful planning, collaboration with localization teams, and the use of standardized methodologies and tools.&lt;/p&gt;

&lt;p&gt;Overall, internationalization plays a crucial role in breaking down language and cultural barriers, enabling effective communication, and providing inclusive experiences for users around the world.&lt;/p&gt;

&lt;p&gt;In upcoming articles of this series, we will dive deeper into the actual aspects which will help us implement Internationalization in Web Apps.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
