<?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>DEV Community: Pratik Dhore</title>
    <description>The latest articles on DEV Community by Pratik Dhore (@drpratik).</description>
    <link>https://dev.to/drpratik</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F253375%2F05988332-85ad-4a07-996b-f9c88047deea.jpg</url>
      <title>DEV Community: Pratik Dhore</title>
      <link>https://dev.to/drpratik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/drpratik"/>
    <language>en</language>
    <item>
      <title>The Psychology of Technical Debt</title>
      <dc:creator>Pratik Dhore</dc:creator>
      <pubDate>Mon, 27 Jul 2026 14:30:00 +0000</pubDate>
      <link>https://dev.to/drpratik/the-psychology-of-technical-debt-5554</link>
      <guid>https://dev.to/drpratik/the-psychology-of-technical-debt-5554</guid>
      <description>&lt;p&gt;Ask any developer if technical debt is a good thing.&lt;/p&gt;

&lt;p&gt;Almost everyone will say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"No."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then ask them another question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Have you ever knowingly introduced technical debt?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Almost everyone will say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Yes."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've always found that fascinating.&lt;/p&gt;

&lt;p&gt;We're all aware of technical debt.&lt;/p&gt;

&lt;p&gt;We know it slows projects down.&lt;/p&gt;

&lt;p&gt;We know it makes bugs harder to fix.&lt;/p&gt;

&lt;p&gt;We know future developers—including our future selves—will probably hate it.&lt;/p&gt;

&lt;p&gt;And yet...&lt;/p&gt;

&lt;p&gt;We still do it.&lt;/p&gt;

&lt;p&gt;Not because we're careless.&lt;/p&gt;

&lt;p&gt;Not because we're bad developers.&lt;/p&gt;

&lt;p&gt;But because software development is rarely about making perfect decisions.&lt;/p&gt;

&lt;p&gt;It's about making the best decision with the information and constraints we have today.&lt;/p&gt;




&lt;h1&gt;
  
  
  Technical Debt Isn't Usually an Engineering Problem
&lt;/h1&gt;

&lt;p&gt;When people talk about technical debt, they often describe code.&lt;/p&gt;

&lt;p&gt;Messy functions.&lt;/p&gt;

&lt;p&gt;Duplicate logic.&lt;/p&gt;

&lt;p&gt;Huge classes.&lt;/p&gt;

&lt;p&gt;Poor architecture.&lt;/p&gt;

&lt;p&gt;But I've started to think technical debt has much less to do with code than it does with psychology.&lt;/p&gt;

&lt;p&gt;The code is just where the decisions become visible.&lt;/p&gt;

&lt;p&gt;The real causes are usually things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deadlines&lt;/li&gt;
&lt;li&gt;Uncertainty&lt;/li&gt;
&lt;li&gt;Fear of breaking working code&lt;/li&gt;
&lt;li&gt;Limited information&lt;/li&gt;
&lt;li&gt;Business priorities&lt;/li&gt;
&lt;li&gt;Optimism&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are human problems.&lt;/p&gt;

&lt;p&gt;Not technical ones.&lt;/p&gt;




&lt;h1&gt;
  
  
  "We'll Clean It Up Later"
&lt;/h1&gt;

&lt;p&gt;I think every developer has said this at least once.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let's just get this working first."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes that's exactly the right decision.&lt;/p&gt;

&lt;p&gt;Shipping matters.&lt;/p&gt;

&lt;p&gt;Customers matter.&lt;/p&gt;

&lt;p&gt;Deadlines matter.&lt;/p&gt;

&lt;p&gt;The problem is that "later" rarely arrives.&lt;/p&gt;

&lt;p&gt;A shortcut taken during a two-hour sprint quietly becomes part of the system for the next three years.&lt;/p&gt;

&lt;p&gt;Not because nobody cared.&lt;/p&gt;

&lt;p&gt;Because everyone was busy solving the next urgent problem.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Fear of Touching Working Code
&lt;/h1&gt;

&lt;p&gt;One of the biggest sources of technical debt isn't writing bad code.&lt;/p&gt;

&lt;p&gt;It's avoiding code that already works.&lt;/p&gt;

&lt;p&gt;We've all experienced it.&lt;/p&gt;

&lt;p&gt;You open a file.&lt;/p&gt;

&lt;p&gt;It's 2,500 lines long.&lt;/p&gt;

&lt;p&gt;Nobody on the team originally wrote it.&lt;/p&gt;

&lt;p&gt;There are no tests.&lt;/p&gt;

&lt;p&gt;The last person who understood it left the company.&lt;/p&gt;

&lt;p&gt;Everything inside feels interconnected.&lt;/p&gt;

&lt;p&gt;You make one tiny change...&lt;/p&gt;

&lt;p&gt;...and suddenly you're wondering if you've broken six unrelated features.&lt;/p&gt;

&lt;p&gt;So what happens?&lt;/p&gt;

&lt;p&gt;You don't refactor.&lt;/p&gt;

&lt;p&gt;You work around it.&lt;/p&gt;

&lt;p&gt;Then someone else works around your workaround.&lt;/p&gt;

&lt;p&gt;And eventually everyone agrees that the file is "too risky to touch."&lt;/p&gt;

&lt;p&gt;Technical debt grows because fear compounds over time.&lt;/p&gt;




&lt;h1&gt;
  
  
  Success Can Create Technical Debt
&lt;/h1&gt;

&lt;p&gt;This one surprised me.&lt;/p&gt;

&lt;p&gt;We often assume technical debt comes from failure.&lt;/p&gt;

&lt;p&gt;In reality, it often comes from success.&lt;/p&gt;

&lt;p&gt;Imagine building a feature that's expected to be used for six months.&lt;/p&gt;

&lt;p&gt;You optimise for speed.&lt;/p&gt;

&lt;p&gt;Simple architecture.&lt;/p&gt;

&lt;p&gt;Minimal abstraction.&lt;/p&gt;

&lt;p&gt;Reasonable shortcuts.&lt;/p&gt;

&lt;p&gt;Then the feature becomes incredibly popular.&lt;/p&gt;

&lt;p&gt;Three years later it's one of the most important parts of the application.&lt;/p&gt;

&lt;p&gt;The shortcuts are still there.&lt;/p&gt;

&lt;p&gt;The temporary solution became permanent because the product succeeded beyond expectations.&lt;/p&gt;

&lt;p&gt;Sometimes technical debt is simply yesterday's sensible decision.&lt;/p&gt;




&lt;h1&gt;
  
  
  Every Shortcut Has Compound Interest
&lt;/h1&gt;

&lt;p&gt;Financial debt grows because of interest.&lt;/p&gt;

&lt;p&gt;Technical debt works the same way.&lt;/p&gt;

&lt;p&gt;At first it's barely noticeable.&lt;/p&gt;

&lt;p&gt;Adding a new feature takes an afternoon.&lt;/p&gt;

&lt;p&gt;A few months later it takes two days.&lt;/p&gt;

&lt;p&gt;Eventually simple changes require multiple developers, several meetings, and a full regression test.&lt;/p&gt;

&lt;p&gt;The code didn't suddenly become bad.&lt;/p&gt;

&lt;p&gt;It became expensive to change.&lt;/p&gt;

&lt;p&gt;That's the real cost of technical debt.&lt;/p&gt;

&lt;p&gt;Not ugly code.&lt;/p&gt;

&lt;p&gt;Reduced velocity.&lt;/p&gt;




&lt;h1&gt;
  
  
  Perfection Is Also Expensive
&lt;/h1&gt;

&lt;p&gt;Here's something I wish I'd understood earlier.&lt;/p&gt;

&lt;p&gt;Not every shortcut is bad.&lt;/p&gt;

&lt;p&gt;And not every refactor is worth doing.&lt;/p&gt;

&lt;p&gt;I've seen developers spend weeks creating the "perfect" architecture for a feature that might never need to scale.&lt;/p&gt;

&lt;p&gt;That's a different kind of waste.&lt;/p&gt;

&lt;p&gt;The goal isn't eliminating technical debt.&lt;/p&gt;

&lt;p&gt;That's impossible.&lt;/p&gt;

&lt;p&gt;The goal is choosing &lt;strong&gt;which debt is worth taking on&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Just like financial debt, some investments make sense.&lt;/p&gt;

&lt;p&gt;Others don't.&lt;/p&gt;




&lt;h1&gt;
  
  
  Good Teams Talk About Debt
&lt;/h1&gt;

&lt;p&gt;One thing I've noticed on stronger engineering teams is that technical debt isn't ignored.&lt;/p&gt;

&lt;p&gt;It's discussed openly.&lt;/p&gt;

&lt;p&gt;Not as blame.&lt;/p&gt;

&lt;p&gt;Not as failure.&lt;/p&gt;

&lt;p&gt;As a conscious trade-off.&lt;/p&gt;

&lt;p&gt;Sometimes the conversation sounds like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We're taking this shortcut because we need to ship this release."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The important part comes next.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let's create a ticket to revisit this after launch."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Will every piece of debt get paid back?&lt;/p&gt;

&lt;p&gt;Probably not.&lt;/p&gt;

&lt;p&gt;But acknowledging it is much healthier than pretending it doesn't exist.&lt;/p&gt;




&lt;h1&gt;
  
  
  My Biggest Lesson
&lt;/h1&gt;

&lt;p&gt;The longer I work in software, the less I think technical debt is about code quality.&lt;/p&gt;

&lt;p&gt;It's about decision-making.&lt;/p&gt;

&lt;p&gt;Every line of code represents a trade-off between time, complexity, risk, and value.&lt;/p&gt;

&lt;p&gt;Sometimes the right decision is the elegant solution.&lt;/p&gt;

&lt;p&gt;Sometimes it's the quickest one.&lt;/p&gt;

&lt;p&gt;The important thing is understanding why you're making that decision.&lt;/p&gt;

&lt;p&gt;Because technical debt isn't dangerous when it's intentional.&lt;/p&gt;

&lt;p&gt;It's dangerous when everyone forgets it exists.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;I don't think we'll ever eliminate technical debt.&lt;/p&gt;

&lt;p&gt;And honestly, I don't think we should try.&lt;/p&gt;

&lt;p&gt;Software evolves.&lt;/p&gt;

&lt;p&gt;Requirements change.&lt;/p&gt;

&lt;p&gt;Deadlines exist.&lt;/p&gt;

&lt;p&gt;Business priorities shift.&lt;/p&gt;

&lt;p&gt;Technical debt is simply part of building products.&lt;/p&gt;

&lt;p&gt;The challenge isn't avoiding it.&lt;/p&gt;

&lt;p&gt;The challenge is making sure today's shortcut doesn't quietly become tomorrow's biggest obstacle.&lt;/p&gt;

&lt;p&gt;I'd love to hear your thoughts.&lt;/p&gt;

&lt;p&gt;What's the biggest piece of technical debt you've inherited—or accidentally created?&lt;/p&gt;

&lt;p&gt;Sometimes those stories teach us more than any architecture diagram ever could.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading! If this resonated with you, I'd love to hear how your team approaches technical debt. Every project has it—the interesting part is how we choose to live with it.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  programming #softwareengineering #career #productivity
&lt;/h1&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>softwareengineering</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Angular Isn't Slow. Your Architecture Is.</title>
      <dc:creator>Pratik Dhore</dc:creator>
      <pubDate>Sun, 26 Jul 2026 11:06:25 +0000</pubDate>
      <link>https://dev.to/drpratik/angular-isnt-slow-your-architecture-is-52ip</link>
      <guid>https://dev.to/drpratik/angular-isnt-slow-your-architecture-is-52ip</guid>
      <description>&lt;h2&gt;
  
  
  Angular Isn't Slow. Your Architecture Is.
&lt;/h2&gt;

&lt;p&gt;Every few months, I come across a post saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Angular is slow."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Honestly, I used to believe there was at least some truth to it.&lt;/p&gt;

&lt;p&gt;Over the last few weeks, I spent a significant amount of time migrating a fairly large enterprise application from &lt;strong&gt;Angular 16 to Angular 21&lt;/strong&gt;. Like most migrations, I expected dependency conflicts, build issues, and a few breaking changes.&lt;/p&gt;

&lt;p&gt;I got all of those.&lt;/p&gt;

&lt;p&gt;What I didn't expect was to question how I write Angular applications.&lt;/p&gt;

&lt;p&gt;The migration made me realize something that I hadn't thought about before:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular isn't slow anymore.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most of us are simply writing Angular 21 applications using patterns that were perfectly reasonable five or six years ago.&lt;/p&gt;

&lt;p&gt;The framework has evolved much faster than many of our codebases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Angular Has Changed More Than You Think
&lt;/h2&gt;

&lt;p&gt;If the last Angular version you seriously explored was Angular 10 or 11, modern Angular might surprise you.&lt;/p&gt;

&lt;p&gt;Today we have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Standalone Components&lt;/li&gt;
&lt;li&gt;✅ Signals&lt;/li&gt;
&lt;li&gt;✅ New template control flow (&lt;code&gt;@if&lt;/code&gt;, &lt;code&gt;@for&lt;/code&gt;, &lt;code&gt;@switch&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;✅ Deferred loading&lt;/li&gt;
&lt;li&gt;✅ Faster builds with esbuild&lt;/li&gt;
&lt;li&gt;✅ Better SSR and hydration&lt;/li&gt;
&lt;li&gt;✅ Zoneless applications&lt;/li&gt;
&lt;li&gt;✅ Functional dependency injection using &lt;code&gt;inject()&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't just quality-of-life improvements.&lt;/p&gt;

&lt;p&gt;They fundamentally change how applications can be structured.&lt;/p&gt;

&lt;p&gt;The problem is that many teams upgrade Angular every six months, but their architecture stays exactly the same.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Framework Gets Blamed for Problems It Didn't Create
&lt;/h2&gt;

&lt;p&gt;Whenever I hear someone say Angular is slow, I usually ask one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What exactly is slow?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most of the time, the answers sound familiar.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initial page load&lt;/li&gt;
&lt;li&gt;Long build times&lt;/li&gt;
&lt;li&gt;Components taking forever to render&lt;/li&gt;
&lt;li&gt;UI freezing&lt;/li&gt;
&lt;li&gt;Huge bundle sizes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are real problems.&lt;/p&gt;

&lt;p&gt;But after looking at enough enterprise applications, I've noticed they rarely come from Angular itself.&lt;/p&gt;

&lt;p&gt;Instead, they usually come from things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Components with thousands of lines of code&lt;/li&gt;
&lt;li&gt;Massive SharedModules importing everything&lt;/li&gt;
&lt;li&gt;Every feature loading on startup&lt;/li&gt;
&lt;li&gt;Too many unnecessary RxJS subscriptions&lt;/li&gt;
&lt;li&gt;Heavy third-party libraries&lt;/li&gt;
&lt;li&gt;Business logic living inside components&lt;/li&gt;
&lt;li&gt;Poor change detection strategies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those problems would exist regardless of the framework.&lt;/p&gt;




&lt;h2&gt;
  
  
  Stop Writing Angular 21 Like It's Angular 10
&lt;/h2&gt;

&lt;p&gt;One thing I noticed during migration was how many old habits I had carried forward simply because "that's how Angular projects are built."&lt;/p&gt;

&lt;p&gt;It turns out many of those habits are no longer the recommended approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Standalone Components
&lt;/h2&gt;

&lt;p&gt;When Standalone Components were first introduced, I thought they were just another way to avoid NgModules.&lt;/p&gt;

&lt;p&gt;After using them throughout a migration, I completely changed my opinion.&lt;/p&gt;

&lt;p&gt;Each component clearly declares what it depends on.&lt;/p&gt;

&lt;p&gt;Features become easier to lazy load.&lt;/p&gt;

&lt;p&gt;There's less boilerplate.&lt;/p&gt;

&lt;p&gt;And perhaps most importantly, navigating the project becomes much easier.&lt;/p&gt;

&lt;p&gt;Instead of jumping through multiple modules trying to understand where something is declared, everything is right where you'd expect it.&lt;/p&gt;

&lt;p&gt;Small improvement.&lt;/p&gt;

&lt;p&gt;Huge quality-of-life difference.&lt;/p&gt;




&lt;h2&gt;
  
  
  Signals Changed How I Think About State
&lt;/h2&gt;

&lt;p&gt;For years, my default approach looked something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Need reactive data? Create another Observable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now I find myself asking a different question.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Does this actually need to be an Observable?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A surprising amount of component state doesn't.&lt;/p&gt;

&lt;p&gt;Loading indicators.&lt;/p&gt;

&lt;p&gt;Selected items.&lt;/p&gt;

&lt;p&gt;Counters.&lt;/p&gt;

&lt;p&gt;Filters.&lt;/p&gt;

&lt;p&gt;Simple UI state.&lt;/p&gt;

&lt;p&gt;Signals handle these incredibly well while keeping components much easier to understand.&lt;/p&gt;

&lt;p&gt;I'm definitely &lt;strong&gt;not&lt;/strong&gt; saying RxJS is obsolete.&lt;/p&gt;

&lt;p&gt;Far from it.&lt;/p&gt;

&lt;p&gt;It's still the right tool for asynchronous streams, HTTP requests, websockets, and complex event flows.&lt;/p&gt;

&lt;p&gt;But using RxJS for every piece of state now feels a bit like using a sledgehammer to hang a picture frame.&lt;/p&gt;




&lt;h2&gt;
  
  
  The New Template Syntax Is Better Than I Expected
&lt;/h2&gt;

&lt;p&gt;I'll admit it.&lt;/p&gt;

&lt;p&gt;When Angular announced the new control flow syntax, I didn't think it would make much difference.&lt;/p&gt;

&lt;p&gt;I was wrong.&lt;/p&gt;

&lt;p&gt;Instead of writing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;*ngIf=&lt;/span&gt;&lt;span class="s"&gt;"users.length"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;app-user-card&lt;/span&gt;
    &lt;span class="na"&gt;*ngFor=&lt;/span&gt;&lt;span class="s"&gt;"let user of users; trackBy: trackById"&lt;/span&gt;
    &lt;span class="na"&gt;[user]=&lt;/span&gt;&lt;span class="s"&gt;"user"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/app-user-card&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can now write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;@if (users.length) {
  @for (user of users; track user.id) {
    &lt;span class="nt"&gt;&amp;lt;app-user-card&lt;/span&gt; &lt;span class="na"&gt;[user]=&lt;/span&gt;&lt;span class="s"&gt;"user"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It feels cleaner.&lt;/p&gt;

&lt;p&gt;It's easier to read.&lt;/p&gt;

&lt;p&gt;And because &lt;code&gt;track&lt;/code&gt; becomes part of the syntax, it's easier to write performant lists by default.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build Speed Matters More Than We Admit
&lt;/h2&gt;

&lt;p&gt;One of my favourite improvements had nothing to do with runtime performance.&lt;/p&gt;

&lt;p&gt;It was the build process.&lt;/p&gt;

&lt;p&gt;Moving to Angular's modern build system with &lt;strong&gt;esbuild&lt;/strong&gt; made local development noticeably faster.&lt;/p&gt;

&lt;p&gt;The interesting thing about faster builds isn't just saving a few seconds.&lt;/p&gt;

&lt;p&gt;When builds are quicker:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You experiment more.&lt;/li&gt;
&lt;li&gt;You refactor more confidently.&lt;/li&gt;
&lt;li&gt;You test ideas more often.&lt;/li&gt;
&lt;li&gt;You spend less time waiting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developer experience matters.&lt;/p&gt;

&lt;p&gt;Over hundreds of builds each month, those small improvements add up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Performance Isn't Just About Rendering
&lt;/h2&gt;

&lt;p&gt;When developers say an application is slow, they're usually describing the entire experience.&lt;/p&gt;

&lt;p&gt;Questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How quickly does the application start?&lt;/li&gt;
&lt;li&gt;How responsive does the UI feel?&lt;/li&gt;
&lt;li&gt;How long do builds take?&lt;/li&gt;
&lt;li&gt;How much JavaScript are users downloading?&lt;/li&gt;
&lt;li&gt;How much code executes before the first interaction?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Angular 21 improves many of these areas.&lt;/p&gt;

&lt;p&gt;But if we're still shipping huge bundles, importing entire libraries for one utility function, or putting thousands of lines of business logic into a single component, the framework can't solve those problems for us.&lt;/p&gt;

&lt;p&gt;Architecture still matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  Things I'd Review in Any Angular Project Today
&lt;/h2&gt;

&lt;p&gt;If I joined a new Angular project tomorrow, these are some of the first things I'd look at.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are we still relying on huge SharedModules?&lt;/li&gt;
&lt;li&gt;Could some component state become Signals instead of Observables?&lt;/li&gt;
&lt;li&gt;Are routes properly lazy loaded?&lt;/li&gt;
&lt;li&gt;Are components trying to do too much?&lt;/li&gt;
&lt;li&gt;Are we importing libraries we barely use?&lt;/li&gt;
&lt;li&gt;Are we using &lt;code&gt;track&lt;/code&gt; with &lt;code&gt;@for&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Are Standalone Components being used consistently?&lt;/li&gt;
&lt;li&gt;Can features be split into smaller, independent pieces?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these changes are revolutionary.&lt;/p&gt;

&lt;p&gt;But together they make projects easier to maintain, easier to scale, and often noticeably faster.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Biggest Takeaway
&lt;/h2&gt;

&lt;p&gt;The biggest lesson from this migration wasn't learning a new Angular feature.&lt;/p&gt;

&lt;p&gt;It was realizing how easy it is to upgrade the framework without upgrading our thinking.&lt;/p&gt;

&lt;p&gt;Installing Angular 21 takes a few commands.&lt;/p&gt;

&lt;p&gt;Writing applications that actually take advantage of Angular 21 takes a different mindset.&lt;/p&gt;

&lt;p&gt;Sometimes the biggest performance improvement isn't a new API.&lt;/p&gt;

&lt;p&gt;It's letting go of patterns we've been carrying around for years.&lt;/p&gt;




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

&lt;p&gt;Angular has evolved a lot.&lt;/p&gt;

&lt;p&gt;The tooling is faster.&lt;/p&gt;

&lt;p&gt;The APIs are cleaner.&lt;/p&gt;

&lt;p&gt;The developer experience is better than it's ever been.&lt;/p&gt;

&lt;p&gt;The question isn't whether Angular is fast enough anymore.&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Are we building applications that take advantage of what modern Angular offers?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'd genuinely love to hear what others think.&lt;/p&gt;

&lt;p&gt;If you've migrated to Angular 20 or 21 recently, what architectural change made the biggest difference in your project?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading! If you enjoyed this article or have a different perspective, let's discuss it in the comments. I always enjoy hearing how other teams are approaching modern Angular.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  angular #webdev #performance #javascript
&lt;/h1&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>performance</category>
    </item>
    <item>
      <title>Some Bugs Aren't in Your Code. They're Hidden in Your Dependencies.</title>
      <dc:creator>Pratik Dhore</dc:creator>
      <pubDate>Mon, 20 Jul 2026 16:35:46 +0000</pubDate>
      <link>https://dev.to/drpratik/some-bugs-arent-in-your-code-theyre-hidden-in-your-dependencies-2dgg</link>
      <guid>https://dev.to/drpratik/some-bugs-arent-in-your-code-theyre-hidden-in-your-dependencies-2dgg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is my second submission for &lt;a href="https://dev.to/bugsmash"&gt;DEV's Summer Bug Smash: Smash Stories&lt;/a&gt; powered by &lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As developers, we've all heard it before:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It works on my machine."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In my case, it was even stranger.&lt;/p&gt;

&lt;p&gt;It worked perfectly on one set of development VMs.&lt;/p&gt;

&lt;p&gt;It consistently failed on another.&lt;/p&gt;

&lt;p&gt;Same codebase.&lt;br&gt;
Same branch.&lt;br&gt;
Same application version.&lt;/p&gt;

&lt;p&gt;Different behavior.&lt;/p&gt;

&lt;p&gt;At first glance, it looked like an environment issue. But what started as a simple investigation turned into one of the most interesting debugging sessions I've had—and it taught me an important lesson about trusting assumptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mystery
&lt;/h2&gt;

&lt;p&gt;A few developers on our team started reporting inconsistent behavior while testing the same feature.&lt;/p&gt;

&lt;p&gt;Developers working on one group of VMs couldn't reproduce the issue.&lt;/p&gt;

&lt;p&gt;Developers using another group of VMs could reproduce it every single time.&lt;/p&gt;

&lt;p&gt;Naturally, we started comparing everything.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Were we using different builds?&lt;/li&gt;
&lt;li&gt;Different configuration files?&lt;/li&gt;
&lt;li&gt;Different database versions?&lt;/li&gt;
&lt;li&gt;Different operating system patches?&lt;/li&gt;
&lt;li&gt;Different .NET runtimes?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing stood out.&lt;/p&gt;

&lt;p&gt;The environments were supposed to be identical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chasing the Wrong Suspects
&lt;/h2&gt;

&lt;p&gt;When a bug only appears in one environment, it's tempting to blame infrastructure.&lt;/p&gt;

&lt;p&gt;We spent hours checking VM configurations, network settings, installed software, and deployment differences.&lt;/p&gt;

&lt;p&gt;Every comparison ended with the same conclusion:&lt;/p&gt;

&lt;p&gt;Everything looked correct.&lt;/p&gt;

&lt;p&gt;The more we investigated, the less the infrastructure looked guilty.&lt;/p&gt;

&lt;p&gt;So we changed our approach.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"What's different about these VMs?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We started asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"What exactly happens between sending a request and receiving a response?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That shifted our attention from the environment to the application's HTTP layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Beyond Business Logic
&lt;/h2&gt;

&lt;p&gt;We started comparing requests and responses generated from both environments.&lt;/p&gt;

&lt;p&gt;Headers looked normal.&lt;/p&gt;

&lt;p&gt;Payloads looked normal.&lt;/p&gt;

&lt;p&gt;The API wasn't returning errors.&lt;/p&gt;

&lt;p&gt;Business logic wasn't failing.&lt;/p&gt;

&lt;p&gt;At first, nothing explained why identical requests were producing different behavior.&lt;/p&gt;

&lt;p&gt;Then we started looking at something nobody had questioned:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The HTTP client itself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our project was still using an older version of &lt;strong&gt;RestSharp&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Digging deeper revealed something interesting.&lt;/p&gt;

&lt;p&gt;Older versions of RestSharp relied on &lt;strong&gt;SimpleJson&lt;/strong&gt; as their built-in serializer.&lt;/p&gt;

&lt;p&gt;That wasn't something we'd consciously chosen—it had simply existed in the project for years.&lt;/p&gt;

&lt;p&gt;Until now, nobody had questioned it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hidden Dependency
&lt;/h2&gt;

&lt;p&gt;The breakthrough came when we focused on serialization instead of infrastructure.&lt;/p&gt;

&lt;p&gt;Serialization sits in an awkward place in an application.&lt;/p&gt;

&lt;p&gt;You rarely think about it.&lt;/p&gt;

&lt;p&gt;You trust it to convert objects into JSON and JSON back into objects.&lt;/p&gt;

&lt;p&gt;When it works, it's invisible.&lt;/p&gt;

&lt;p&gt;When it doesn't...&lt;/p&gt;

&lt;p&gt;Nothing makes sense.&lt;/p&gt;

&lt;p&gt;The issue wasn't our business logic.&lt;/p&gt;

&lt;p&gt;It wasn't the API.&lt;/p&gt;

&lt;p&gt;It wasn't the database.&lt;/p&gt;

&lt;p&gt;It was a legacy serialization layer quietly sitting underneath everything.&lt;/p&gt;

&lt;p&gt;While researching the dependency, we discovered that this wasn't unique to our project.&lt;/p&gt;

&lt;p&gt;When RestSharp introduced version 107, the maintainers removed &lt;strong&gt;SimpleJson&lt;/strong&gt; completely and migrated to &lt;strong&gt;System.Text.Json&lt;/strong&gt;, citing legacy architecture and serialization quirks as reasons for the redesign.&lt;/p&gt;

&lt;p&gt;That discovery completely changed how we looked at the problem.&lt;/p&gt;

&lt;p&gt;Instead of trying to patch symptoms, we focused on eliminating the outdated dependency.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix
&lt;/h2&gt;

&lt;p&gt;Rather than adding workarounds around the failing behavior, we updated our serialization approach by moving away from the older RestSharp implementation that depended on SimpleJson.&lt;/p&gt;

&lt;p&gt;After validating the changes across both VM environments, the inconsistent behavior disappeared.&lt;/p&gt;

&lt;p&gt;The application behaved the same everywhere.&lt;/p&gt;

&lt;p&gt;Not because we changed our business logic.&lt;/p&gt;

&lt;p&gt;Not because we reconfigured the VMs.&lt;/p&gt;

&lt;p&gt;But because we removed a piece of technical debt that had quietly become part of the application's foundation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Bug Taught Me
&lt;/h2&gt;

&lt;p&gt;This incident completely changed the way I investigate environment-specific issues.&lt;/p&gt;

&lt;p&gt;When code behaves differently across environments, it's easy to blame the environment itself.&lt;/p&gt;

&lt;p&gt;Sometimes that's true.&lt;/p&gt;

&lt;p&gt;But sometimes the real culprit is hidden several layers beneath your own code.&lt;/p&gt;

&lt;p&gt;A dependency you haven't updated in years.&lt;/p&gt;

&lt;p&gt;A serializer you didn't even know your project was using.&lt;/p&gt;

&lt;p&gt;A library that everyone forgot existed because it "just worked."&lt;/p&gt;

&lt;p&gt;Until it didn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Don't stop at your own code—inspect the libraries underneath it.&lt;/li&gt;
&lt;li&gt;Environment-specific bugs aren't always infrastructure bugs.&lt;/li&gt;
&lt;li&gt;Legacy dependencies can introduce behavior that's incredibly difficult to diagnose.&lt;/li&gt;
&lt;li&gt;If a dependency has been completely redesigned by its maintainers, it's worth understanding &lt;strong&gt;why&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest lesson from this bug wasn't about RestSharp.&lt;/p&gt;

&lt;p&gt;It was about curiosity.&lt;/p&gt;

&lt;p&gt;The answer wasn't in our application code.&lt;/p&gt;

&lt;p&gt;It was hiding inside a dependency that most of us had never looked at.&lt;/p&gt;

&lt;p&gt;Sometimes, the hardest bugs aren't the ones you wrote.&lt;/p&gt;

&lt;p&gt;They're the ones you've been shipping for years without even realizing it.&lt;/p&gt;

&lt;h1&gt;
  
  
  restsharp #dotnet #api-development #serializer #deserializer
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>bugsmash</category>
      <category>api</category>
      <category>backend</category>
    </item>
    <item>
      <title>Enterprise Development Isn't Hard Because of Code</title>
      <dc:creator>Pratik Dhore</dc:creator>
      <pubDate>Sun, 19 Jul 2026 11:29:40 +0000</pubDate>
      <link>https://dev.to/drpratik/enterprise-development-isnt-hard-because-of-code-2a5m</link>
      <guid>https://dev.to/drpratik/enterprise-development-isnt-hard-because-of-code-2a5m</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/bugsmash"&gt;DEV's Summer Bug Smash: Smash Stories&lt;/a&gt; powered by &lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When I first started my career as a software engineer, I believed the hardest part of the job would be writing complex code.&lt;/p&gt;

&lt;p&gt;I imagined solving difficult algorithms, implementing challenging features, and fixing obscure bugs buried deep inside thousands of lines of code.&lt;/p&gt;

&lt;p&gt;But after working on a large enterprise application, I've realized something very different.&lt;/p&gt;

&lt;p&gt;Enterprise development isn't hard because of the code.&lt;/p&gt;

&lt;p&gt;It's hard because of everything connected to the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  It Started With "Just an Angular Upgrade"
&lt;/h2&gt;

&lt;p&gt;A few weeks ago, I was asked to assess what it would take to migrate one of our enterprise Angular applications to a newer version.&lt;br&gt;
My first thought was simple.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Update Angular, fix a few compilation errors, run the tests, and we're done."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you've ever worked on a side project or a small application, that's usually how it goes.&lt;/p&gt;

&lt;p&gt;But enterprise software doesn't work that way.&lt;/p&gt;

&lt;p&gt;Within the first hour, I realized I wasn't looking at an Angular upgrade anymore.&lt;/p&gt;

&lt;p&gt;I was looking at an ecosystem.&lt;/p&gt;

&lt;p&gt;Every Answer Led to Three More Questions&lt;/p&gt;

&lt;p&gt;Updating Angular wasn't the real challenge.&lt;/p&gt;

&lt;p&gt;The real challenge was understanding everything that depended on Angular.&lt;/p&gt;

&lt;p&gt;Questions started appearing one after another.&lt;/p&gt;

&lt;p&gt;Is our UI component library compatible?&lt;br&gt;
What about Angular Material?&lt;br&gt;
Will our build tools still work?&lt;br&gt;
Does our Node.js version meet the new requirements?&lt;br&gt;
Are all third-party libraries still maintained?&lt;br&gt;
Will our Docker builds continue to succeed?&lt;br&gt;
Will the CI pipeline require changes?&lt;br&gt;
Are there multiple applications sharing the same workspace?&lt;/p&gt;

&lt;h2&gt;
  
  
  Every answer uncovered another dependency.
&lt;/h2&gt;

&lt;p&gt;Instead of updating packages, I spent most of my time mapping relationships between technologies.&lt;/p&gt;

&lt;p&gt;And honestly...&lt;br&gt;
That was the right thing to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Biggest Surprise
&lt;/h2&gt;

&lt;p&gt;At one point, I realized I had spent almost an entire afternoon without writing a single line of code.&lt;/p&gt;

&lt;p&gt;Normally, that would feel unproductive.&lt;/p&gt;

&lt;p&gt;This time, it wasn't.&lt;/p&gt;

&lt;p&gt;By understanding the system first, I was preventing problems that could have taken days to debug later.&lt;/p&gt;

&lt;p&gt;I wasn't writing code.&lt;/p&gt;

&lt;p&gt;I was reducing risk.&lt;/p&gt;

&lt;p&gt;That was the moment my perspective on software engineering changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Software Is a Web of Dependencies
&lt;/h2&gt;

&lt;p&gt;In smaller projects, changing a package version usually affects only your application.&lt;/p&gt;

&lt;p&gt;In enterprise software, a single version upgrade can affect:&lt;/p&gt;

&lt;p&gt;Internal shared libraries&lt;br&gt;
Build tools&lt;br&gt;
Deployment pipelines&lt;br&gt;
Docker images&lt;br&gt;
CI/CD workflows&lt;br&gt;
Authentication systems&lt;br&gt;
Shared components&lt;br&gt;
Multiple development teams&lt;/p&gt;

&lt;p&gt;Every dependency has its own lifecycle.&lt;/p&gt;

&lt;p&gt;Every change has a ripple effect.&lt;/p&gt;

&lt;p&gt;Sometimes the code you're changing is actually the easiest part.&lt;/p&gt;

&lt;p&gt;Understanding the consequences of that change is where the real challenge begins.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lesson I Didn't Expect to Learn
&lt;/h2&gt;

&lt;p&gt;When I was a junior developer, I measured progress by the number of lines of code I wrote.&lt;/p&gt;

&lt;p&gt;Today, I measure progress differently.&lt;/p&gt;

&lt;p&gt;Sometimes the most valuable thing you can do is:&lt;/p&gt;

&lt;p&gt;Read documentation.&lt;br&gt;
Trace dependencies.&lt;br&gt;
Understand the architecture.&lt;br&gt;
Ask the right questions.&lt;br&gt;
Identify risks before touching the code.&lt;/p&gt;

&lt;p&gt;None of these activities produce immediate results.&lt;/p&gt;

&lt;p&gt;But they prevent future problems.&lt;/p&gt;

&lt;p&gt;And that's what good engineering looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's Not About Being the Fastest Coder
&lt;/h2&gt;

&lt;p&gt;One thing I've learned after working on enterprise applications is that the best engineers aren't necessarily the fastest programmers.&lt;/p&gt;

&lt;p&gt;They're the people who understand the system.&lt;/p&gt;

&lt;p&gt;They know which component depends on another.&lt;/p&gt;

&lt;p&gt;They know why a seemingly harmless package update can break a deployment pipeline.&lt;/p&gt;

&lt;p&gt;They know when not to change something.&lt;/p&gt;

&lt;p&gt;Most importantly, they understand that software isn't just code.&lt;/p&gt;

&lt;p&gt;It's people, processes, tools, infrastructure, history, and countless decisions made over many years.&lt;/p&gt;

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

&lt;p&gt;If someone asked me today what makes enterprise software difficult, my answer would be very different from what it was.&lt;/p&gt;

&lt;p&gt;It isn't the complexity of the code.&lt;/p&gt;

&lt;p&gt;It's the complexity of the ecosystem surrounding it.&lt;/p&gt;

&lt;p&gt;The next time you're asked to make what sounds like a "simple upgrade," take a step back before opening your editor.&lt;/p&gt;

&lt;p&gt;Understand the system first.&lt;/p&gt;

&lt;p&gt;Because in enterprise development, changing one line of code is often easy.&lt;/p&gt;

&lt;p&gt;I'd love to hear from other developers:&lt;/p&gt;

&lt;p&gt;What's one task that sounded simple at first but turned out to reveal the hidden complexity of an enterprise system? Share your story in the comments!&lt;/p&gt;

&lt;h1&gt;
  
  
  bugsmash #webdev #programming #angular #career
&lt;/h1&gt;

&lt;p&gt;Understanding everything that line touches is the real challenge.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>bugsmash</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>7 Things Nobody Tells You Before Deploying Your First Full-Stack Application</title>
      <dc:creator>Pratik Dhore</dc:creator>
      <pubDate>Fri, 17 Jul 2026 17:36:40 +0000</pubDate>
      <link>https://dev.to/drpratik/7-things-nobody-tells-you-before-deploying-your-first-full-stack-application-c5j</link>
      <guid>https://dev.to/drpratik/7-things-nobody-tells-you-before-deploying-your-first-full-stack-application-c5j</guid>
      <description>&lt;p&gt;When I built my first full-stack application, I thought the hard part was writing the code.&lt;/p&gt;

&lt;p&gt;I was wrong.&lt;/p&gt;

&lt;p&gt;The application worked perfectly on my local machine. The frontend loaded, the backend responded, the database connected, and everything seemed ready for production.&lt;/p&gt;

&lt;p&gt;Then I deployed it.&lt;/p&gt;

&lt;p&gt;That's when I realized deployment isn't just the final step—it's an entirely different skill.&lt;/p&gt;

&lt;p&gt;Here are seven lessons I learned while deploying my projects.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;"It Works on My Machine" Doesn't Mean Anything&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your local environment is comfortable because everything is already configured.&lt;/p&gt;

&lt;p&gt;Production is not.&lt;/p&gt;

&lt;p&gt;Different operating systems, missing environment variables, different file paths, and networking rules can expose issues you never noticed during development.&lt;/p&gt;

&lt;p&gt;Before assuming your code is broken, compare the environments.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Logs Are Your Best Friend&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When something goes wrong, don't immediately start changing code.&lt;/p&gt;

&lt;p&gt;Read the logs.&lt;/p&gt;

&lt;p&gt;Whether you're using Docker, ASP.NET, Flask, or Node.js, logs usually tell you where to start looking.&lt;/p&gt;

&lt;p&gt;Many hours of debugging can be saved by reading the first meaningful error instead of the last one.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Environment Variables Matter More Than You Think&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;API keys, database credentials, secrets, and configuration values should never be hardcoded.&lt;/p&gt;

&lt;p&gt;More importantly, make your application fail fast when required variables are missing.&lt;/p&gt;

&lt;p&gt;A clear startup error is much better than mysterious runtime failures.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Docker Solves Many Problems—but Not All of Them&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Docker makes applications portable and reproducible, which is why I use it for my projects.&lt;/p&gt;

&lt;p&gt;However, Docker doesn't magically fix configuration issues.&lt;/p&gt;

&lt;p&gt;If your build succeeds but the application doesn't work, the problem is often in networking, volumes, permissions, or configuration rather than Docker itself.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Reverse Proxies Deserve More Respect&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I underestimated how important a reverse proxy like NGINX is.&lt;/p&gt;

&lt;p&gt;Routing requests correctly, serving frontend assets, forwarding API calls, and handling HTTPS all become much easier once it's configured properly.&lt;/p&gt;

&lt;p&gt;Learning how requests flow through your application stack is worth the effort.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Automate Deployments Early&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Manual deployments work...&lt;/p&gt;

&lt;p&gt;Until you forget a step.&lt;/p&gt;

&lt;p&gt;Automating builds and deployments gave me more confidence and reduced mistakes.&lt;/p&gt;

&lt;p&gt;Even a simple CI/CD pipeline is better than copying files manually.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Deployment Is Part of Software Engineering&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Writing code is only one part of building software.&lt;/p&gt;

&lt;p&gt;Deployment, monitoring, logging, backups, security, and maintenance are just as important.&lt;/p&gt;

&lt;p&gt;The sooner you start treating deployment as part of development rather than an afterthought, the better engineer you'll become.&lt;/p&gt;




&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Looking back, deployment taught me more about software engineering than many tutorials ever did.&lt;/p&gt;

&lt;p&gt;Every failed deployment forced me to understand my application a little better.&lt;/p&gt;

&lt;p&gt;If you're building side projects, don't stop after getting them to run locally.&lt;/p&gt;

&lt;p&gt;Deploy them.&lt;/p&gt;

&lt;p&gt;That's where the real learning begins.&lt;/p&gt;




&lt;p&gt;What deployment lesson taught you the most? I'd love to hear your experience in the comments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>docker</category>
      <category>devops</category>
      <category>beginners</category>
    </item>
    <item>
      <title>What If Every Stadium Had an AI Copilot?</title>
      <dc:creator>Pratik Dhore</dc:creator>
      <pubDate>Mon, 13 Jul 2026 14:43:02 +0000</pubDate>
      <link>https://dev.to/drpratik/what-if-every-stadium-had-an-ai-copilot-33dn</link>
      <guid>https://dev.to/drpratik/what-if-every-stadium-had-an-ai-copilot-33dn</guid>
      <description>&lt;p&gt;ArenaMind 🏟️🧠&lt;/p&gt;

&lt;p&gt;This is a submission for "Weekend Challenge: Passion Edition" (&lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;https://dev.to/challenges/weekend-2026-07-09&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;What I Built&lt;/p&gt;

&lt;p&gt;I'm excited to share ArenaMind, an AI-powered smart stadium platform that I built for the Google GenAI Hackathon.&lt;/p&gt;

&lt;p&gt;The challenge was to reimagine how Generative AI could transform the experience of hosting one of the world's largest sporting events—the FIFA World Cup 2026.&lt;/p&gt;

&lt;p&gt;Rather than building another chatbot, I wanted to create a platform that delivers meaningful, real-world value for both football fans and stadium operations teams. ArenaMind combines the reasoning capabilities of Google Gemini with deterministic backend workflows, ensuring reliable assistance even during high-footfall events where accuracy and responsiveness are critical.&lt;/p&gt;

&lt;p&gt;Using Google Gemini Function Calling, the AI understands user intent and invokes backend services to provide personalized, context-aware responses.&lt;/p&gt;

&lt;p&gt;👥 Features for Fans&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌍 Multilingual voice and chat assistant supporting English, Spanish, Portuguese, French, Hindi, and Arabic&lt;/li&gt;
&lt;li&gt;🎟️ QR e-ticket awareness for personalized gate and seat navigation&lt;/li&gt;
&lt;li&gt;♿ WCAG 2.1 AA accessible routing for wheelchair users and step-free navigation&lt;/li&gt;
&lt;li&gt;🚻 Real-time food stall and restroom queue monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🏟️ Features for Stadium Operations&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📊 Interactive crowd congestion heatmaps&lt;/li&gt;
&lt;li&gt;🔮 Predictive crowd overload forecasting with proactive mitigation alerts&lt;/li&gt;
&lt;li&gt;💬 Natural-language Operations Assistant for venue staff&lt;/li&gt;
&lt;li&gt;🚨 AI-powered incident triage with automatic P1–P4 severity classification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The passion behind ArenaMind was to demonstrate that AI can do much more than answer questions—it can improve accessibility, reduce congestion, enhance safety, and create a better live event experience for everyone.&lt;/p&gt;




&lt;p&gt;Demo&lt;/p&gt;

&lt;p&gt;Project Screenshots&lt;/p&gt;

&lt;p&gt;Fan Experience&lt;/p&gt;

&lt;p&gt;"Fan App Home page" (&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/j4rj2stb0ryssb66il59.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/j4rj2stb0ryssb66il59.png&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;"Fan AI chat navigation" (&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/a7cl9cylmgt19k2tixsf.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/a7cl9cylmgt19k2tixsf.png&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;"Fan AI Smart redirection card" (&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/cm0xascqxai9e2i8nwuw.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/cm0xascqxai9e2i8nwuw.png&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Operations Dashboard&lt;/p&gt;

&lt;p&gt;"Organizer command center heatmap" (&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/y1u1twqpw2n07jv7ztvt.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/y1u1twqpw2n07jv7ztvt.png&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;"Organizer AI Ops Copilot" (&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/16b9rirbuznyzrmrxmdk.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/16b9rirbuznyzrmrxmdk.png&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;(Add your deployed application or demo video here if available.)&lt;/p&gt;




&lt;p&gt;Code&lt;/p&gt;

&lt;p&gt;Tech Stack&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Gemini&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;SOLID Architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Add your GitHub repository here if it is public.)&lt;/p&gt;




&lt;p&gt;How I Built It&lt;/p&gt;

&lt;p&gt;ArenaMind follows a modular architecture that combines AI reasoning with deterministic backend services.&lt;/p&gt;

&lt;p&gt;Google Gemini serves as the intelligent orchestration layer using Function Calling. Instead of generating responses alone, Gemini invokes backend APIs responsible for navigation, crowd analytics, queue information, accessibility routing, and incident management. This approach ensures responses remain grounded in real operational data while maintaining reliability if AI services become unavailable.&lt;/p&gt;

&lt;p&gt;The frontend was developed using React and TypeScript, while the backend leverages Node.js with PostgreSQL for structured operational data. Docker was used to containerize the application, making deployment consistent across environments.&lt;/p&gt;

&lt;p&gt;One of the most rewarding aspects of the project was designing a system where AI enhances decision-making without becoming a single point of failure. Critical workflows remain deterministic, while Gemini adds natural language understanding and intelligent orchestration on top.&lt;/p&gt;

&lt;p&gt;Building ArenaMind reinforced my belief that the future of Generative AI lies not only in conversation but in empowering real-world systems that improve accessibility, navigation, crowd management, and operational efficiency.&lt;/p&gt;




&lt;p&gt;Prize Categories&lt;/p&gt;

&lt;p&gt;Best Use of Google AI&lt;/p&gt;

&lt;p&gt;ArenaMind is built around Google Gemini Function Calling, using Gemini as the intelligent decision-making layer that coordinates real-time backend services to provide contextual, reliable assistance for both fans and stadium operators.&lt;/p&gt;




&lt;p&gt;Thank you for reading!&lt;/p&gt;

&lt;p&gt;A big thank you to Google for Developers and Hack2Skill for organizing such an inspiring hackathon.&lt;/p&gt;

&lt;p&gt;If you were attending the FIFA World Cup 2026, which ArenaMind feature would you use first? I'd love to hear your thoughts and feedback!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>EarthPulse AI — Hack2Skill Challenge 3: Carbon Footprint Awareness</title>
      <dc:creator>Pratik Dhore</dc:creator>
      <pubDate>Sun, 21 Jun 2026 02:43:55 +0000</pubDate>
      <link>https://dev.to/drpratik/earthpulse-ai-hack2skill-challenge-3-carbon-footprint-awareness-2fn7</link>
      <guid>https://dev.to/drpratik/earthpulse-ai-hack2skill-challenge-3-carbon-footprint-awareness-2fn7</guid>
      <description>&lt;p&gt;🚀 Had a blast participating in the Hack2Skill Virtual Hackathon tackling Challenge 3: Carbon Footprint Awareness Platform! &lt;/p&gt;

&lt;p&gt;Instead of just building a standard tracking app, I wanted to experiment a bit for fun. This hackathon was promoting the use of AntiGravity, so I decided to dive in and use it for the very first time. &lt;/p&gt;

&lt;p&gt;My biggest takeaway? The developer experience was incredibly smooth. Integrating AntiGravity to handle the application logic made building out EarthPulse AI a really great learning curve, especially under a hackathon timeline. &lt;/p&gt;

&lt;p&gt;The app translates daily habits—like commuting and energy use—into visual data insights to help people step up their sustainability game.&lt;/p&gt;

&lt;p&gt;Check out the live link or dive into the code below to see how it came together:&lt;br&gt;
🌐 Live Application: &lt;a href="https://drpratik.github.io/EarthPulse-AI/" rel="noopener noreferrer"&gt;https://drpratik.github.io/EarthPulse-AI/&lt;/a&gt;&lt;br&gt;
💻 Codebase: &lt;a href="https://github.com/DrPratik/EarthPulse-AI/" rel="noopener noreferrer"&gt;https://github.com/DrPratik/EarthPulse-AI/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Always great to walk away from a hackathon with a new tool in the toolkit! 🛠️&lt;/p&gt;

&lt;h1&gt;
  
  
  WebDev #AntiGravity #Hackathon #GreenTech #BuildInPublic #SoftwareEngineering
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>learning</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
