<?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: Karol Modelski</title>
    <description>The latest articles on DEV Community by Karol Modelski (@karol_modelski).</description>
    <link>https://dev.to/karol_modelski</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%2F818538%2F0481ed7f-eae3-4a0c-bd38-f098000862f3.png</url>
      <title>DEV Community: Karol Modelski</title>
      <link>https://dev.to/karol_modelski</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karol_modelski"/>
    <language>en</language>
    <item>
      <title>The Hidden Nightmare of Scaling Massive Angular Monoliths</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 25 Jun 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/the-hidden-nightmare-of-scaling-massive-angular-monoliths-58bi</link>
      <guid>https://dev.to/karol_modelski/the-hidden-nightmare-of-scaling-massive-angular-monoliths-58bi</guid>
      <description>&lt;p&gt;Everyone loves to talk about new frameworks.&lt;/p&gt;

&lt;p&gt;Almost nobody wants to talk about what most senior Angular devs actually live in every day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a 6+ year old enterprise app,
&lt;/li&gt;
&lt;li&gt;one Angular “app” that’s actually 40 products,
&lt;/li&gt;
&lt;li&gt;20+ minute build times on CI,
&lt;/li&gt;
&lt;li&gt;circular dependencies hiding in every corner.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The docs tell you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use esbuild. Use Nx. Use module boundaries. Problem solved.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then you try it in a real bank, healthcare, or legacy SaaS codebase and discover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you didn’t adopt a tool,
&lt;/li&gt;
&lt;li&gt;you adopted a new category of pain.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Modern tooling doesn’t magically fix legacy monoliths. It just makes their problems visible — and sometimes even more expensive.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  When “Just Switch to esbuild” Turns Into “Why Is This Build 30 Minutes Now?”
&lt;/h3&gt;

&lt;p&gt;esbuild is a genuinely impressive piece of technology:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;extremely fast bundling,
&lt;/li&gt;
&lt;li&gt;great for modern Angular apps,
&lt;/li&gt;
&lt;li&gt;lighter config than classic Webpack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But real-world reports from large Angular monoliths are… mixed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;teams migrating from Webpack to esbuild see blazing fast local builds,
&lt;/li&gt;
&lt;li&gt;then discover production or CI builds get slower or more fragile because of chunking and splitting behavior in huge apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One Nx issue described:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a module federation setup where initial build time jumped from ~90 seconds to close to &lt;strong&gt;30 minutes&lt;/strong&gt; after changes — due to complex chunking strategies and the way dependencies were wired.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In another case, a team with “one of the largest monolithic Angular apps in the world” moved to esbuild and ended up with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local dev: better,
&lt;/li&gt;
&lt;li&gt;production bundling: complicated chunk management,
&lt;/li&gt;
&lt;li&gt;final solution: &lt;strong&gt;two separate projects&lt;/strong&gt; in &lt;em&gt;angular.json&lt;/em&gt; — esbuild for dev, Webpack for prod.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s not a failure of esbuild.&lt;/p&gt;

&lt;p&gt;It’s what happens when you bolt a modern bundler onto an app that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;was never designed with clear boundaries,
&lt;/li&gt;
&lt;li&gt;uses dynamic imports everywhere,
&lt;/li&gt;
&lt;li&gt;and treats lazy-loaded routes as a dumping ground.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;f your architecture is a junk drawer, a faster compiler just lets you open the drawer quicker. It doesn’t organize what’s inside.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6n4yy3dotys9hojmhyj8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6n4yy3dotys9hojmhyj8.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Nx, Monorepos, and the “Modularization Will Save Us” Myth
&lt;/h3&gt;

&lt;p&gt;Nx and monorepos can be game-changers when used from the start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;incremental builds,
&lt;/li&gt;
&lt;li&gt;affected-only testing,
&lt;/li&gt;
&lt;li&gt;module boundaries enforced,
&lt;/li&gt;
&lt;li&gt;CI time dropping from ~20 minutes to under 2 in large, well-designed workspaces.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But migrating a giant, messy Angular app into Nx is where a lot of teams hit the &lt;strong&gt;Enterprise Monolith Trap&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drop the app into an Nx workspace,
&lt;/li&gt;
&lt;li&gt;run &lt;em&gt;nx graph&lt;/em&gt;,
&lt;/li&gt;
&lt;li&gt;discover a terrifying dependency diagram with cycles everywhere.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The docs tell you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enable &lt;em&gt;@nx/enforce-module-boundaries&lt;/em&gt;,
&lt;/li&gt;
&lt;li&gt;break circular dependencies by moving shared pieces into new libraries,
&lt;/li&gt;
&lt;li&gt;create a clean layer structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All correct.&lt;/p&gt;

&lt;p&gt;But on a legacy app, that means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;weeks or months of refactoring just to make the tooling happy,
&lt;/li&gt;
&lt;li&gt;teams blocked on breaking cycles instead of shipping features,
&lt;/li&gt;
&lt;li&gt;regression risk across critical flows when you move “shared” code around.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Talks about modular monoliths show beautiful patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clear domain layers,
&lt;/li&gt;
&lt;li&gt;private APIs,
&lt;/li&gt;
&lt;li&gt;top-down dependency rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In greenfield projects, that works brilliantly.&lt;/p&gt;

&lt;p&gt;In a legacy enterprise frontend, you’re often starting from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shared utils imported directly from &lt;em&gt;/src/app&lt;/em&gt; everywhere,
&lt;/li&gt;
&lt;li&gt;cross-feature imports that ignore any sense of boundaries,
&lt;/li&gt;
&lt;li&gt;tight coupling between “unrelated” modules because of convenience imports.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Nx doesn’t turn your monolith into a modulith. It just stops pretending your monolith is fine — and forces you to pay down chaos you’ve been borrowing against for years.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F995vcs78la7fvgi3nn9d.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F995vcs78la7fvgi3nn9d.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Silent Killer: Build Pipelines That Eat Your Day
&lt;/h3&gt;

&lt;p&gt;The biggest productivity killer in large Angular apps usually isn’t the framework.&lt;/p&gt;

&lt;p&gt;It’s the pipeline.&lt;/p&gt;

&lt;p&gt;Symptoms you see in banks, healthcare, and legacy SaaS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10–30 minute builds in CI for every branch.
&lt;/li&gt;
&lt;li&gt;pipelines that must run extra code generators (proxies, API clients, etc.) before Angular even starts building.
&lt;/li&gt;
&lt;li&gt;flaky steps: tests, lints, and bundlers failing intermittently, forcing devs to rerun jobs.
&lt;/li&gt;
&lt;li&gt;“tiny” changes that still trigger full rebuilds because incremental builds weren’t designed in from the start.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nx can help with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;caching,
&lt;/li&gt;
&lt;li&gt;incremental builds,
&lt;/li&gt;
&lt;li&gt;rebuilding only what changed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But only if you’ve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;actually split code into buildable libraries,
&lt;/li&gt;
&lt;li&gt;wired all apps and libs to use the right executors,
&lt;/li&gt;
&lt;li&gt;aligned build target names across projects and libraries (or targetDefaults) so incremental executors can work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Otherwise you get the worst of both worlds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nx complexity,
&lt;/li&gt;
&lt;li&gt;plus still building everything, every time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And if your build also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;runs &lt;em&gt;abp&lt;/em&gt; CLI proxies,
&lt;/li&gt;
&lt;li&gt;bundles multiple Angular apps,
&lt;/li&gt;
&lt;li&gt;packs everything into a deployment artifact,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;you end up with a pipeline where nobody truly understands which step is slow, only that &lt;strong&gt;the whole thing is crushing morale&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can’t have a healthy engineering culture if every experiment costs you a 30-minute CI penalty.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  When “Just Modularize It” Becomes a Multi-Year Migration Trap
&lt;/h3&gt;

&lt;p&gt;Enterprise talks make modularization sound simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;extract domains into libraries,
&lt;/li&gt;
&lt;li&gt;define boundaries,
&lt;/li&gt;
&lt;li&gt;profit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In reality, long-lived Angular apps usually have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;features that started as experiments and became core products,
&lt;/li&gt;
&lt;li&gt;modules that secretly depend on each other in both directions,
&lt;/li&gt;
&lt;li&gt;design systems and shared components that leak business logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you try to modularize this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you discover dozens or hundreds of circular dependencies.
&lt;/li&gt;
&lt;li&gt;you create “shared” libraries that quickly become new dumping grounds,
&lt;/li&gt;
&lt;li&gt;you end up either:
 — endlessly slicing code into more libs, or
 — merging libs back together because cycles are unmanageable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The official Nx guidance on circular dependencies is sensible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;move small pieces from one project to another,
&lt;/li&gt;
&lt;li&gt;create a new shared lib for common dependencies,
&lt;/li&gt;
&lt;li&gt;or &lt;strong&gt;merge&lt;/strong&gt; two libraries if they’re truly inseparable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in legacy frontends, &lt;strong&gt;everything&lt;/strong&gt; feels inseparable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;because business logic and UI are tangled,
&lt;/li&gt;
&lt;li&gt;because features were never designed as domains,
&lt;/li&gt;
&lt;li&gt;because “shared” abstractions depend on concrete modules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can absolutely succeed with gradual modularization.&lt;/p&gt;

&lt;p&gt;You just can’t pretend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it’s a “quick Nx migration,”
&lt;/li&gt;
&lt;li&gt;or that tools alone will rescue you without rewriting some business logic and boundaries.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Large-scale migration isn’t a strategy. It’s what you call it when you don’t want to admit you’re rewriting while pretending you’re just ‘moving things around’.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  The Enterprise Developer’s Reality: You’re Not Doing It Wrong
&lt;/h3&gt;

&lt;p&gt;If you’re maintaining a massive Angular monolith, you’re probably:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;doing on-call for a business-critical system,
&lt;/li&gt;
&lt;li&gt;juggling EOL reminders (Angular 19 end-of-life, libs that are no longer maintained),
&lt;/li&gt;
&lt;li&gt;forced to be cautious about every “cool” refactor because downtime has real cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When blog posts and conference talks say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Just adopt esbuild, it’s 10x faster,”
&lt;/li&gt;
&lt;li&gt;“Just move to an Nx monorepo,”
&lt;/li&gt;
&lt;li&gt;“Just break everything into micro frontends,”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;they often ignore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;regulatory constraints,
&lt;/li&gt;
&lt;li&gt;long CI pipelines you can’t rewrite from scratch,
&lt;/li&gt;
&lt;li&gt;the risk of mass refactors in a system nobody fully understands anymore.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your frustration is not a lack of skill.&lt;/p&gt;

&lt;p&gt;It’s a rational response to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;brittle pipelines,
&lt;/li&gt;
&lt;li&gt;historical decisions,
&lt;/li&gt;
&lt;li&gt;and tools that were designed for idealized codebases.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Enterprise frontends aren’t broken because seniors are clueless. They’re broken because trade-offs compound — and tools arrived ten years after the architecture was decided.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  What Actually Helps: Constraints, Not Silver Bullets
&lt;/h3&gt;

&lt;p&gt;If you’re responsible for one of these monsters, here’s the boring but effective playbook grounded in what real teams report:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Accept the monolith, then modularize within it&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Think “modulith” before micro frontends: one deployable, internally modular.
 — Introduce clear layers and boundaries gradually — not everything at once.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fix the worst pipeline bottlenecks first&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Profile where time actually goes: bundling, tests, codegen, artifact uploads.
 — Use Nx incremental builds where possible, even if only for part of the codebase at first.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Use tools to reveal problems, not to declare victory&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;nx graph&lt;/em&gt; to see dependency chaos.
 — &lt;em&gt;@nx/enforce-module-boundaries&lt;/em&gt; to prevent &lt;strong&gt;new&lt;/strong&gt; damage while you slowly untangle the old.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Treat circular dependencies as design feedback, not just lint errors&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;if two libs constantly depend on each other, maybe they’re the same domain; merge them.
 — if “shared” is depending on “feature,” you don’t have a shared lib — you have inverted design.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Limit how many technologies you add to the party&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;don’t add module federation, custom bundlers, a new design system, and a new monorepo in the same quarter.
 — every move that touches build + architecture at once multiplies risk.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The goal isn’t to turn your enterprise monolith into a conference talk. It’s to make it slightly less painful every quarter without blowing it up in production.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbfuz1cp4zxciv5dfjk1c.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbfuz1cp4zxciv5dfjk1c.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;I’m an &lt;strong&gt;Independent Technology Partner&lt;/strong&gt; for SMEs. If you’re looking to optimize your architecture or accelerate your MVP, let’s connect at &lt;a href="https://www.karolmodelski.pl/" rel="noopener noreferrer"&gt;&lt;strong&gt;karolmodelski.pl&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>angular</category>
      <category>architecture</category>
      <category>webdev</category>
      <category>performance</category>
    </item>
    <item>
      <title>Why “Building in Public” Is Hollowing Out Your Developer Career</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 18 Jun 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/why-building-in-public-is-hollowing-out-your-developer-career-5a42</link>
      <guid>https://dev.to/karol_modelski/why-building-in-public-is-hollowing-out-your-developer-career-5a42</guid>
      <description>&lt;p&gt;Somewhere in the last few years, “being a developer” quietly turned into “being a content creator with VS Code open in the background.”&lt;/p&gt;

&lt;p&gt;You’re told to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;post daily on X,
&lt;/li&gt;
&lt;li&gt;share screenshots on LinkedIn,
&lt;/li&gt;
&lt;li&gt;thread your way to a “personal brand,”
&lt;/li&gt;
&lt;li&gt;and narrate every micro-step of your side project like a reality show.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re honest, a lot of it doesn’t feel like growth.&lt;/p&gt;

&lt;p&gt;It feels like performance.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The industry told you to build in public to grow your career. What it often did instead was trade your deep work for a never‑ending cycle of performative updates.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  The Illusion of “Building in Public” as Career Growth
&lt;/h3&gt;

&lt;p&gt;In theory, building in public has real benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you share your journey,
&lt;/li&gt;
&lt;li&gt;you attract collaborators and users,
&lt;/li&gt;
&lt;li&gt;you get feedback early,
&lt;/li&gt;
&lt;li&gt;you build trust over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, a lot of devs experience something closer to this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pressure to post even when there’s nothing meaningful to say,
&lt;/li&gt;
&lt;li&gt;anxiety about negative feedback and nitpicking, especially early on,
&lt;/li&gt;
&lt;li&gt;a creeping sense that the project now exists for the timeline, not for users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Founders and solo builders have already started saying:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building in public added pressure and opened them up to criticism before they were ready;
&lt;/li&gt;
&lt;li&gt;sharing every step sometimes attracted the wrong audience — other builders, not actual customers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For developers, it’s even worse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your “work” isn’t just code; it’s suddenly threads, carousels, and engagement metrics.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Building in public can work when it’s in service of a real product. When it becomes its own product, your career quietly turns into a content channel.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Hustle Culture in a Hoodie: When “Community” Is Just a Content Farm
&lt;/h3&gt;

&lt;p&gt;Scroll LinkedIn or X long enough and you’ll see the same formula:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Day 27 of building my SaaS in public.”
&lt;/li&gt;
&lt;li&gt;“Five lessons I learned shipping this tiny feature.”
&lt;/li&gt;
&lt;li&gt;“Here’s how I grew from 0 to 10k impressions in a month.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It looks like community.&lt;/p&gt;

&lt;p&gt;Underneath, it’s often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;everyone broadcasting,
&lt;/li&gt;
&lt;li&gt;almost nobody actually talking,
&lt;/li&gt;
&lt;li&gt;endless “value posts” designed to farm engagement, not build relationships.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hustle culture research is very clear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;constant pressure to be “always on,” visible, and optimizing yourself is a fast path to burnout;
&lt;/li&gt;
&lt;li&gt;people burn out not from hard work alone, but from tying their identity and worth to constant output and public performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;“Developer community” can quietly morph into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a place where you perform your progress to be seen as serious,
&lt;/li&gt;
&lt;li&gt;instead of a place where you can be confused, wrong, and still belong.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If every post needs to be ‘high value,’ you’re not in a community — you’re on a stage. And you can’t do deep engineering from a stage.&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%2Febo313ugqv097bmtj4sw.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%2Febo313ugqv097bmtj4sw.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Myth of Networking: Why Most “Connections” Feel Empty
&lt;/h3&gt;

&lt;p&gt;A lot of dev networking advice sounds like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;comment on 20 posts a day,
&lt;/li&gt;
&lt;li&gt;DM people with a “value offer,”
&lt;/li&gt;
&lt;li&gt;build a pipeline of leads,
&lt;/li&gt;
&lt;li&gt;track your interactions like a CRM.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No wonder networking feels gross.&lt;/p&gt;

&lt;p&gt;When you see people as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“targets,”
&lt;/li&gt;
&lt;li&gt;“leads,”
&lt;/li&gt;
&lt;li&gt;“potential collabs,”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;every interaction becomes a bit of a transaction.&lt;/p&gt;

&lt;p&gt;Writers on networking point out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;transactional networking focuses on what you get and what you give right now;
&lt;/li&gt;
&lt;li&gt;real, long-term networking looks more like friendships: shared curiosity, vulnerability, mutual support without immediate ROI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The developer version of this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;boosting each other’s posts,
&lt;/li&gt;
&lt;li&gt;trading likes and “fire thread bro,”
&lt;/li&gt;
&lt;li&gt;without ever actually reading each other’s code, docs, or ideas.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If your “network” disappears the moment you stop posting, you didn’t build relationships. You built an audience with commitment issues.&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%2F1fcwxhwi97cphc5tm132.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%2F1fcwxhwi97cphc5tm132.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Deep Work vs. Shallow Visibility: What Actually Moves Your Career
&lt;/h3&gt;

&lt;p&gt;Here’s the part almost no “build in public” thread admits:&lt;/p&gt;

&lt;p&gt;High-quality engineering work still comes from long, quiet, cognitively demanding sessions — deep work.&lt;/p&gt;

&lt;p&gt;Deep work for engineers looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;designing or refactoring serious systems,
&lt;/li&gt;
&lt;li&gt;debugging hairy production issues,
&lt;/li&gt;
&lt;li&gt;learning technologies deeply enough to bend them, not just copy patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shallow work looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;checking analytics,
&lt;/li&gt;
&lt;li&gt;replying to on-platform comments,
&lt;/li&gt;
&lt;li&gt;cranking out posts to stay “top of mind,”
&lt;/li&gt;
&lt;li&gt;tweaking your “personal brand.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Productivity research keeps finding the same thing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deep work blocks (60–90 minutes, protected from distraction) are where engineers produce lasting value;
&lt;/li&gt;
&lt;li&gt;constant context-switching into social apps and content creation erodes your ability to concentrate and reason deeply.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even content people are starting to say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;meaningful writing and creative work also need deep work;
&lt;/li&gt;
&lt;li&gt;churning out fast food content creates attention, not substance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when developers try to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;be great engineers,
&lt;/li&gt;
&lt;li&gt;be consistent content creators,
&lt;/li&gt;
&lt;li&gt;be always-on networkers,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;they’re effectively trying to run three cognitively expensive careers at once.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can either optimize for long-term leverage in your skills, or for daily impressions. Pretending you can do both at scale is how you quietly burn out.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  How to Grow Your Career Without Becoming a “Content Creator”
&lt;/h3&gt;

&lt;p&gt;If building in public and hustle-flavored networking feel wrong to you, good.&lt;/p&gt;

&lt;p&gt;You’re not anti-growth. You’re allergic to nonsense.&lt;/p&gt;

&lt;p&gt;There &lt;strong&gt;is&lt;/strong&gt; a quieter, more sustainable path.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Trade public performance for small, real circles
&lt;/h4&gt;

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

&lt;ul&gt;
&lt;li&gt;broadcasting to thousands you don’t know,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;do this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;join or form a small group (3–8 devs) around a stack or topic you care about.
&lt;/li&gt;
&lt;li&gt;meet regularly (monthly/bi-weekly) to:
 — review each other’s code,
 — share real problems,
 — talk about trade-offs and decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is closer to genuine networking research:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;relationships built around vulnerability and mutual help, not transactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Treat deep work as your primary “brand”
&lt;/h4&gt;

&lt;p&gt;Your actual career capital is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;systems you’ve built,
&lt;/li&gt;
&lt;li&gt;migrations you’ve survived,
&lt;/li&gt;
&lt;li&gt;incidents you’ve handled well,
&lt;/li&gt;
&lt;li&gt;weird bugs you’ve debugged and understood.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Protect daily deep work blocks like meetings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;60–90 minutes a day where Slack, socials, and posting are off.
&lt;/li&gt;
&lt;li&gt;learn, design, or build something hard, then document it privately first (notes, ADRs, internal docs).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll have far more to say publicly later if and when you choose.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Share selectively, not compulsively
&lt;/h4&gt;

&lt;p&gt;You don’t owe the internet your process.&lt;/p&gt;

&lt;p&gt;A healthier rhythm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;focus on building for weeks or months,
&lt;/li&gt;
&lt;li&gt;periodically share &lt;strong&gt;one&lt;/strong&gt; well-thought-through post:
 — “Here’s how we solved X at Y scale.”
 — “Here’s a migration that hurt, and why I’d do it differently.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quality over cadence.&lt;/p&gt;

&lt;p&gt;As even pro‑content people admit: resonant work takes time.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Network like a human, not a funnel
&lt;/h4&gt;

&lt;p&gt;When you reach out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reference something specific you actually read or used,
&lt;/li&gt;
&lt;li&gt;offer something small but real (a useful comment, a perspective, a resource),
&lt;/li&gt;
&lt;li&gt;be okay if nothing “converts” immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Long-term networking research is blunt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;real opportunities come from a handful of strong ties built on trust and vulnerability, not from hundreds of shallow interactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The most valuable developer network you’ll ever have fits into a group chat, not a follower count.&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%2Fizx25vm5gju8tgx5peub.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%2Fizx25vm5gju8tgx5peub.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Quiet Flex: Being Good at the Boring Parts
&lt;/h3&gt;

&lt;p&gt;The irony of all this is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the people shipping the most meaningful work are often too busy doing it to narrate every step;
&lt;/li&gt;
&lt;li&gt;the loudest “builders in public” are sometimes optimizing more for perception than for durable skill.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want a career that actually compounds, not just one that looks impressive on social media:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;get uncomfortably good at deep, focused engineering work;
&lt;/li&gt;
&lt;li&gt;cultivate a small, honest circle of peers with whom you can be wrong, confused, and ambitious;
&lt;/li&gt;
&lt;li&gt;share publicly when you genuinely have something to say — not because the algorithm demands a sacrifice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don’t have to become a thought leader.&lt;/p&gt;

&lt;p&gt;You don’t have to “build in public” every commit.&lt;/p&gt;

&lt;p&gt;You just have to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep learning in private,
&lt;/li&gt;
&lt;li&gt;keep shipping in reality,
&lt;/li&gt;
&lt;li&gt;and build a handful of relationships strong enough to survive even if you never post again.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The best thing you can do for your developer career is not to become more visible. It’s to become someone worth finding, even if you’re quiet.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;I’m an &lt;strong&gt;Independent Technology Partner&lt;/strong&gt; for SMEs. If you’re looking to optimize your architecture or accelerate your MVP, let’s connect at &lt;a href="https://www.karolmodelski.pl/" rel="noopener noreferrer"&gt;&lt;strong&gt;karolmodelski.pl&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>mentalhealth</category>
      <category>networking</category>
    </item>
    <item>
      <title>Angular State Management: The Never-Ending Search for the “Perfect” Architecture</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 11 Jun 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/angular-state-management-the-never-ending-search-for-the-perfect-architecture-4p98</link>
      <guid>https://dev.to/karol_modelski/angular-state-management-the-never-ending-search-for-the-perfect-architecture-4p98</guid>
      <description>&lt;p&gt;Nothing exposes developer anxiety like the words “state management” in an Angular enterprise project.&lt;/p&gt;

&lt;p&gt;You have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Signals,
&lt;/li&gt;
&lt;li&gt;SignalState,
&lt;/li&gt;
&lt;li&gt;SignalStore,
&lt;/li&gt;
&lt;li&gt;classic NgRx Store,
&lt;/li&gt;
&lt;li&gt;NGXS,
&lt;/li&gt;
&lt;li&gt;custom services as “mini-stores.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then you have a room full of mid and senior devs trying to design a system that has to survive five years of shifting requirements and team churn.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;three weeks of meetings,
&lt;/li&gt;
&lt;li&gt;fourteen architecture diagrams,
&lt;/li&gt;
&lt;li&gt;benchmarking discussions nobody will ever repeat in practice.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Modern Angular state management gives you better primitives than ever. It also gives you a hundred new ways to overthink yourself into paralysis.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  The State Management Buffet: Too Many Good Options, Not Enough Discipline
&lt;/h3&gt;

&lt;p&gt;The ecosystem in 2025–2026 is not short on tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plain Signals &lt;/strong&gt; — built-in, zero-dependency, great for local or feature-level state.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SignalState / lightweight stores&lt;/strong&gt;  — NgRx’s signal-based API for smaller, isolated state, often at component or feature level.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SignalStore &lt;/strong&gt; — structured, centralized state with Signals under the hood, meant for shared or domain-level state.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classic NgRx Store&lt;/strong&gt;  — the “enterprise classic”: actions, reducers, effects, selectors, time-travel DevTools.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NGXS and others&lt;/strong&gt;  — simpler Redux-like abstractions trying to cut boilerplate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every blog post ends the same way:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There is no single best solution. It depends on your project size, team structure, and complexity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which is true.&lt;/p&gt;

&lt;p&gt;And completely unhelpful when you have to make a call.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We keep asking “What’s the best state library?” when the better question is “How many different patterns can our team realistically keep in their heads?”&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%2Ftm3fw42h2ww58cexj5nk.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%2Ftm3fw42h2ww58cexj5nk.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Decision Paralysis: The Architecture That Exists Only in Miro
&lt;/h3&gt;

&lt;p&gt;The most realistic description of state management in large Angular apps right now looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;State in services.
&lt;/li&gt;
&lt;li&gt;State in components.
&lt;/li&gt;
&lt;li&gt;State in classic NgRx.
&lt;/li&gt;
&lt;li&gt;State in SignalStore.
&lt;/li&gt;
&lt;li&gt;A few experiments with NGXS or Akita leftover from previous phases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No single source of truth.&lt;br&gt;&lt;br&gt;
No single mental model.&lt;/p&gt;

&lt;p&gt;What you do have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a beautiful architecture diagram in Miro,
&lt;/li&gt;
&lt;li&gt;a 40-minute Loom recording titled “State Management Strategy v3.1,”
&lt;/li&gt;
&lt;li&gt;and a repo where every feature team solved state differently based on whichever conference talk they watched last.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers on Reddit and LinkedIn keep saying the same thing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Please don’t use Redux everywhere.”
&lt;/li&gt;
&lt;li&gt;“Have an explicit, consistent way of dealing with state across the application(s).”
&lt;/li&gt;
&lt;li&gt;“Pick two or three patterns and stick with them.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The over-engineering trap is not picking NgRx or Signals.&lt;/p&gt;

&lt;p&gt;The trap is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;trying to design a state architecture that covers every possible future scenario,
&lt;/li&gt;
&lt;li&gt;while your current codebase quietly rots under the weight of indecision.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Architecture diagrams don’t reduce complexity. Shipping boring, consistent patterns does.&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%2F2jvkh1e8aabbb6505csm.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%2F2jvkh1e8aabbb6505csm.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Over-Engineering Trap: Chasing the Perfect Store While Ignoring the Code
&lt;/h3&gt;

&lt;p&gt;Here’s how over-engineered state management usually happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Someone reads a “Complete Guide to NgRx SignalStore” and gets excited.
&lt;/li&gt;
&lt;li&gt;Someone else wants classic NgRx for DevTools and strict flows.
&lt;/li&gt;
&lt;li&gt;Another person says “Signals alone are enough; stores are overkill.”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So you compromise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;global NgRx Store for “core” state,
&lt;/li&gt;
&lt;li&gt;SignalStore for some features,
&lt;/li&gt;
&lt;li&gt;local Signals in some components,
&lt;/li&gt;
&lt;li&gt;a few services still holding state because nobody had time to migrate them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You spend weeks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;debating event plugins, inter-store communication, DDD boundaries,
&lt;/li&gt;
&lt;li&gt;arguing about whether shared state belongs in domain stores or feature stores.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, the things that actually kill scalability are much more boring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;services doing too many things at once,
&lt;/li&gt;
&lt;li&gt;no clear separation between server state and client state,
&lt;/li&gt;
&lt;li&gt;child components that both own and consume state,
&lt;/li&gt;
&lt;li&gt;APIs that force ugly workarounds no matter which store you use.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Most enterprise apps don’t collapse because they picked the ‘wrong’ state library. They collapse because nobody enforced simple rules on where state is allowed to live.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  What the Tools Are Actually Good At (When You Use Them Like an Adult)
&lt;/h3&gt;

&lt;p&gt;If you strip away the hype, the recent state of Angular guidance is surprisingly sane.&lt;/p&gt;

&lt;p&gt;A lot of solid resources converge on a simple mapping:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plain Signals&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — for local, primitive or small, isolated state (component or small feature).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SignalState / lightweight stores&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — for local but more complex objects or nested state, where you want structure without full-blown store ceremony.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SignalStore&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — for shared, structured, domain-level or global state that needs to outlive components and be consumed across features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Classic NgRx Store&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — when you truly need Redux-style traceability, advanced DevTools, or are maintaining an existing NgRx-heavy codebase.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Summarized nicely in one article:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local, primitive → &lt;strong&gt;plain Signals&lt;/strong&gt; ,
&lt;/li&gt;
&lt;li&gt;local, complex → &lt;strong&gt;SignalState&lt;/strong&gt; ,
&lt;/li&gt;
&lt;li&gt;global, structured → &lt;strong&gt;SignalStore&lt;/strong&gt; ,
&lt;/li&gt;
&lt;li&gt;complex orchestration / events between stores → &lt;strong&gt;SignalStore + Events plugin&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem is not that this mapping is wrong.&lt;/p&gt;

&lt;p&gt;The problem is that many teams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;treat every feature as “global, complex, mission-critical,”
&lt;/li&gt;
&lt;li&gt;default to the heaviest tool for everything,
&lt;/li&gt;
&lt;li&gt;or mix all tools with no clear boundary.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Signals didn’t make NgRx obsolete. NgRx didn’t make services obsolete. The only thing that’s obsolete is pretending one hammer is right for every nail.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  The Real Cost: State Strategy as a Drag on Scalability
&lt;/h3&gt;

&lt;p&gt;State management was supposed to create scalability.&lt;/p&gt;

&lt;p&gt;Instead, in many teams, it is &lt;strong&gt;killing&lt;/strong&gt;  it.&lt;/p&gt;

&lt;p&gt;Ways state strategy makes things worse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onboarding pain&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
New devs have to learn: “In this feature we use Signals; over here we use SignalStore; for this legacy part we use classic NgRx.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inconsistent mental models&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Some features mutate state in stores, some in services, some in components. No one can answer “Where does this value actually live?” without a search party.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Over-abstracted logic&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Simple flows are buried in generic reducers or over-generic SignalStores instead of simple functions or services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cross-store complexity&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Lightweight stores in multiple layers (UI, feature, domain, util) needing coordination, risking redundancy and cycles if you’re not careful.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Architects dealing with SignalStore are already warning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;don’t let stores talk to each other directly,
&lt;/li&gt;
&lt;li&gt;use orchestration services and events,
&lt;/li&gt;
&lt;li&gt;be deliberate about where stores live in your layered architecture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of that is fine —  &lt;strong&gt;if&lt;/strong&gt; you’re actually using those ideas to simplify.&lt;/p&gt;

&lt;p&gt;Most teams don’t reach that stage.&lt;/p&gt;

&lt;p&gt;They stall earlier, in analysis paralysis.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;State management is supposed to remove accidental complexity. When your state strategy requires a diagram and a workshop to explain, you’ve just relocated the complexity instead of reducing it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  A Simpler Way to Think: Rules Instead of Endless Debates
&lt;/h3&gt;

&lt;p&gt;You don’t need a perfect state architecture.&lt;/p&gt;

&lt;p&gt;You need &lt;strong&gt;a few clear rules that everyone can remember.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example (adapted from community guidance and modern best practices):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Default to Signals + services&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;For most feature-level state, create a service with Signals and computed values.
 — Expose readonly Signals and methods; keep mutation inside.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Use SignalStore for real shared state&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Domain-level data used across multiple features?
 — Long-lived app-wide state?
 — Use SignalStore and keep all business logic there.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Keep classic NgRx where it already works&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;If you already have NgRx and it’s doing its job, don’t “rewrite to Signals” just because it’s trendy. Introduce SignalStore gradually for new areas.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Limit yourself to 2–3 patterns app-wide&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;For example:
 — plain Signals in components for simple UI bits,
 — Signal-based services for feature state,
 — SignalStore for shared state.
 — Everything else needs a very strong justification.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Explicitly document “when to use what”&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;One short ADR or page:
 — “If your state only matters to this component → do X”
 — “If it’s shared within a feature → do Y”
 — “If it’s global or domain-wide → do Z.”&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The hardest part of state management isn’t picking a library. It’s having the courage to say ‘no’ to everything that doesn’t fit your agreed rules.&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%2F26svuhljod97rh8jnkys.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%2F26svuhljod97rh8jnkys.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Unsexy Advice: Start Simple, Then Add Structure When Reality Demands It
&lt;/h3&gt;

&lt;p&gt;If you’re architecting a big Angular project today, here’s the boring, high-leverage path most experienced people quietly recommend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with &lt;strong&gt;services + Signals&lt;/strong&gt; for most state.
&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;SignalStore&lt;/strong&gt; when:
 — state is shared across multiple features,
 — you feel the pain of duplication and inconsistency.
&lt;/li&gt;
&lt;li&gt;Keep &lt;strong&gt;classic NgRx&lt;/strong&gt; in existing apps where it’s already working; don’t rip it out proactively.
&lt;/li&gt;
&lt;li&gt;Resist the urge to “frameworkize” everything on day one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You will be wrong about some decisions.&lt;/p&gt;

&lt;p&gt;You will refactor some state flows later.&lt;/p&gt;

&lt;p&gt;But you will be wrong &lt;strong&gt;based on real usage&lt;/strong&gt; , not based on theoretical arguments in a meeting.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Scalability is not born from choosing the perfect state library. It’s born from making simple decisions consistently, and being willing to refactor when reality proves you wrong.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;I fix the Angular apps that generalists break.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m Karol Modelski, senior Angular developer and frontend architect rescuing legacy B2B SaaS frontends.&lt;/p&gt;

&lt;p&gt;If your Angular app is slowing your team down, start with a 3‑minute teardown of your current setup: &lt;a href="https://www.karol-modelski.scale-sail.io/" rel="noopener noreferrer"&gt;https://www.karol-modelski.scale-sail.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>architecture</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Stop Complaining About Boilerplate: Why Angular’s Structure Is an AI Superpower</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 04 Jun 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/stop-complaining-about-boilerplate-why-angulars-structure-is-an-ai-superpower-2p4l</link>
      <guid>https://dev.to/karol_modelski/stop-complaining-about-boilerplate-why-angulars-structure-is-an-ai-superpower-2p4l</guid>
      <description>&lt;p&gt;For years the joke has been:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React is “simple and flexible.”
&lt;/li&gt;
&lt;li&gt;Angular is “bloated” and “full of ceremony.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then AI coding tools showed up.&lt;/p&gt;

&lt;p&gt;And suddenly, the framework everyone mocked for having too many rules started to look like the one &lt;strong&gt;best aligned&lt;/strong&gt; with how LLMs actually work.&lt;/p&gt;

&lt;p&gt;Because here’s the uncomfortable truth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;LLMs don’t understand your app. They pattern‑match.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The more predictable the patterns, the better they perform.&lt;/p&gt;

&lt;p&gt;And Angular is nothing if not predictable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In an AI-assisted world, Angular’s ‘rigidity’ stops being a burden and becomes a map the model can actually follow.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Why AI Struggles More With Chaos Than With Ceremony
&lt;/h3&gt;

&lt;p&gt;Language models are not magical architects.&lt;/p&gt;

&lt;p&gt;They’re probability machines trained on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code examples,
&lt;/li&gt;
&lt;li&gt;docs,
&lt;/li&gt;
&lt;li&gt;tutorials,
&lt;/li&gt;
&lt;li&gt;open-source projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They do best when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;file locations are predictable,
&lt;/li&gt;
&lt;li&gt;naming conventions are consistent,
&lt;/li&gt;
&lt;li&gt;the framework has “one obvious way” to do something.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s exactly what &lt;strong&gt;opinionated frameworks&lt;/strong&gt; give them. Articles about AI and opinionated stacks point out: when there’s a single, well-defined way to structure routes, components, and services, AI can reproduce useful patterns far more reliably.&lt;/p&gt;

&lt;p&gt;Angular leans hard into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;components, services, DI, and modules/standalone structure,
&lt;/li&gt;
&lt;li&gt;TypeScript first,
&lt;/li&gt;
&lt;li&gt;clear, documented best practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React, by contrast, is deliberately flexible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no single enforced folder structure,
&lt;/li&gt;
&lt;li&gt;multiple competing state patterns,
&lt;/li&gt;
&lt;li&gt;dozens of meta‑framework and library combinations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s great for human experimentation.&lt;/p&gt;

&lt;p&gt;It’s not great for a model that’s trying to guess “how this project probably works” based on partial context.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI doesn’t get confused by ceremony. It gets confused by ten different patterns that all claim to be ‘the React way’.&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%2Fy1j9yx3ykdic6xt0syf6.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%2Fy1j9yx3ykdic6xt0syf6.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Angular’s Opinionated Defaults Are a Feature, Not a Bug, for LLMs
&lt;/h3&gt;

&lt;p&gt;Angular’s “heavy” structure gives AI a &lt;strong&gt;narrower search space&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;components live in obvious places,
&lt;/li&gt;
&lt;li&gt;services follow DI patterns,
&lt;/li&gt;
&lt;li&gt;routing is standardized,
&lt;/li&gt;
&lt;li&gt;forms, HTTP, and state have blessed approaches.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Angular devs working with AI are already noticing this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Organized frameworks tend to be more user‑friendly with AI. When a framework presents one well‑defined approach, AI can replicate it precisely.”
&lt;/li&gt;
&lt;li&gt;“Angular’s modules, components, services and DI create a cohesive map models can follow more easily.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On top of that, Angular now ships &lt;strong&gt;official AI guidance&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a best‑practices prompt file for LLMs that spells out how to structure components, signals, templates, services, and accessibility.
&lt;/li&gt;
&lt;li&gt;guidance like:
 — use standalone components,
 — use &lt;em&gt;signal()&lt;/em&gt;/&lt;em&gt;computed()&lt;/em&gt; for state,
 — prefer &lt;em&gt;inject()&lt;/em&gt; DI,
 — use new control flow,
 — keep components small and focused.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can literally feed this document into your AI tooling as system instructions so it &lt;strong&gt;knows&lt;/strong&gt; the rules beforehand.&lt;/p&gt;

&lt;p&gt;Contrast that with “just React”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI must first infer whether you’re using CRA, Vite, Next.js, Remix, a custom setup, or something else entirely.
&lt;/li&gt;
&lt;li&gt;Then it has to guess your state approach, routing, file layout, and styling stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Angular doesn’t just give humans conventions. It gives AI a contract: ‘If you follow these rules, you will probably generate code that fits.&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%2Fg2gmlsudwjtjvj005vxs.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%2Fg2gmlsudwjtjvj005vxs.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Why Angular’s “Boilerplate” Becomes a Turbocharger With AI
&lt;/h3&gt;

&lt;p&gt;All the things people call “boilerplate” in Angular?&lt;/p&gt;

&lt;p&gt;They’re actually &lt;strong&gt;signal beacons&lt;/strong&gt; for AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Predictable file naming and structure&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — &lt;em&gt;*.component.ts&lt;/em&gt;, &lt;em&gt;*.service.ts&lt;/em&gt;, &lt;em&gt;*.directive.ts&lt;/em&gt;, etc.&lt;br&gt;&lt;br&gt;
 — Easy for tooling and LLMs to locate and extend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TypeScript everywhere&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — models, interfaces, enums, generics.&lt;br&gt;&lt;br&gt;
 — static types give models strong hints about what goes where and how to call it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Built‑in patterns for services and DI&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — &lt;em&gt;providedIn: ‘root’&lt;/em&gt;, &lt;em&gt;inject()&lt;/em&gt; usage, clear service responsibilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standardized Angular CLI + schematics&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — Angular and Nx schematics encode best practices; AI can mimic them or call them safely.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers are already using AI like a supercharged &lt;em&gt;ng generate&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Create a component with these inputs/outputs and these services,” then let AI fill in wiring and boring glue.
&lt;/li&gt;
&lt;li&gt;let AI write form controls, validation, basic templates, while the human focuses on flows and architecture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In one LinkedIn post, a dev described Angular + AI like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;predictable structure is “a well-drawn map,”
&lt;/li&gt;
&lt;li&gt;TypeScript is “gold” for AI,
&lt;/li&gt;
&lt;li&gt;modularity helps AI focus on small pieces,
&lt;/li&gt;
&lt;li&gt;CLI &amp;amp; schematics standardize code so AI can generate consistent snippets.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The more ‘ceremonial’ the framework, the more surface area AI has to latch onto and the less creative guessing it has to do.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  React’s Flexibility vs Angular’s Rigidity in an AI World
&lt;/h3&gt;

&lt;p&gt;None of this means React is “bad” with AI.&lt;/p&gt;

&lt;p&gt;In fact:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React and Next.js currently get more AI‑optimized examples and templates, which is why many tools default to them.
&lt;/li&gt;
&lt;li&gt;There’s more open-source React training data overall.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there’s a split emerging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LLM performance at “toy” and prototype scale&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — AI tools default to Next.js/React for quick landing pages, dashboards, and demos, because the ecosystem around them is heavily tuned for that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LLM reliability at “actually complex” app scale&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — devs observe that Angular’s strict structure reduces the range of bad options the AI can pick in large codebases.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One discussion summed it up neatly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the stricter the framework, the fewer random patterns AI will invent,
&lt;/li&gt;
&lt;li&gt;the more flexible the framework, the more ways AI can accidentally make a mess unless the human is very opinionated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That maps perfectly onto what we already know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Angular’s defaults reduce accidental inefficiencies and guard rails teams into safer patterns.
&lt;/li&gt;
&lt;li&gt;React offers a higher performance and flexibility ceiling — but only if the team enforces their own conventions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now add AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in Angular, AI tends to color within well-defined lines,
&lt;/li&gt;
&lt;li&gt;in React, AI can accidentally mix styles, patterns and libraries drawn from a noisy training set.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;AI doesn’t care about your identity as a ‘framework person.’ It cares about how easy it is to predict where things go — and Angular hands it that predictability.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Angular + AI: From Vibe Coding to Agentic Workflows
&lt;/h3&gt;

&lt;p&gt;The real future isn’t “AI writes all your code.”&lt;/p&gt;

&lt;p&gt;It’s &lt;strong&gt;agentic workflows&lt;/strong&gt;  — AI assistants that understand your repo, follow your rules, and act like junior devs embedded in your architecture.&lt;/p&gt;

&lt;p&gt;Angular is already leaning into that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;official docs on “develop with AI” and prompt files tailored for Angular repos;
&lt;/li&gt;
&lt;li&gt;workshops teaching advanced Angular devs how to integrate AI in a &lt;strong&gt;traceable&lt;/strong&gt; , policy‑driven way (not just copy‑paste vibe coding);
&lt;/li&gt;
&lt;li&gt;guidance on using Angular’s strict mode, linting, Nx, and style guides as guardrails for both humans and AI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That means you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;plug in AI agents that respect your module boundaries and coding standards,
&lt;/li&gt;
&lt;li&gt;let AI propose refactors, add tests, or modernize code (standalone components, Signals, new control flow) while you review diffs,
&lt;/li&gt;
&lt;li&gt;keep a clear audit trail of what changed and why.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Angular provides the rails; AI supplies the acceleration.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without those rails, AI is just as likely to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;split logic randomly across files,
&lt;/li&gt;
&lt;li&gt;pick inconsistent state solutions,
&lt;/li&gt;
&lt;li&gt;or introduce subtle bugs under the banner of “productivity.”&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Angular’s rigidity isn’t about gatekeeping humans. It’s about giving both humans and AI a structure where their speed doesn’t devolve into chaos.&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%2Fhnvvqawgxaefayfqdbb3.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%2Fhnvvqawgxaefayfqdbb3.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Thesis: Angular Is Quietly Future‑Proof in an AI World
&lt;/h3&gt;

&lt;p&gt;If you’re an Angular dev, you’ve probably spent years defending your framework against:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“too heavy,”
&lt;/li&gt;
&lt;li&gt;“too much boilerplate,”
&lt;/li&gt;
&lt;li&gt;“too opinionated.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI flips that narrative.&lt;/p&gt;

&lt;p&gt;In a world where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tools generate huge chunks of code,
&lt;/li&gt;
&lt;li&gt;assistants refactor entire modules,
&lt;/li&gt;
&lt;li&gt;agents run in your CI and IDE,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the frameworks that win are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;strict enough&lt;/strong&gt; that AI can’t go completely off the rails,
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;structured enough&lt;/strong&gt; that teams can reason about AI‑driven changes,
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;typed and patterned enough&lt;/strong&gt; that suggestions line up with reality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That describes Angular almost perfectly.&lt;/p&gt;

&lt;p&gt;So the next time someone tells you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Angular is too rigid,”
&lt;/li&gt;
&lt;li&gt;“we should use something simpler,”
&lt;/li&gt;
&lt;li&gt;“AI works better with flexible frameworks,”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI doesn’t want freedom. It wants structure. Angular gave you that structure years before AI showed up — and now that ‘boring’ choice looks like one of the most future‑proof bets you could have made.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;I fix the Angular apps that generalists break.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m Karol Modelski, senior Angular developer and frontend architect rescuing legacy B2B SaaS frontends.&lt;/p&gt;

&lt;p&gt;If your Angular app is slowing your team down, start with a 3‑minute teardown of your current setup: &lt;a href="https://www.karol-modelski.scale-sail.io/" rel="noopener noreferrer"&gt;https://www.karol-modelski.scale-sail.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>angular</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Your AI Assistant Is a React Fanboy and You Should Be Worried</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 28 May 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/your-ai-assistant-is-a-react-fanboy-and-you-should-be-worried-2pld</link>
      <guid>https://dev.to/karol_modelski/your-ai-assistant-is-a-react-fanboy-and-you-should-be-worried-2pld</guid>
      <description>&lt;p&gt;Ask most AI coding tools to “build me a web app” and watch what happens.&lt;/p&gt;

&lt;p&gt;Nine times out of ten, you’ll get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React,
&lt;/li&gt;
&lt;li&gt;Next.js,
&lt;/li&gt;
&lt;li&gt;Tailwind,
&lt;/li&gt;
&lt;li&gt;maybe a sprinkle of popular auth and UI libraries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No context.&lt;br&gt;&lt;br&gt;
No questions about your team.&lt;br&gt;&lt;br&gt;
No questions about your constraints.&lt;/p&gt;

&lt;p&gt;Just React‑by‑default.&lt;/p&gt;

&lt;p&gt;If you listen to AI long enough, you could easily conclude:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React is obviously the “right” choice,
&lt;/li&gt;
&lt;li&gt;Next.js is obviously the framework for everything,
&lt;/li&gt;
&lt;li&gt;Angular is for… nobody, apparently.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;AI doesn’t pick stacks based on your reality. It picks stacks based on its training data — and that’s not the same thing.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Why AI Tools Keep Recommending React and Next.js
&lt;/h3&gt;

&lt;p&gt;This isn’t a conspiracy.&lt;/p&gt;

&lt;p&gt;It’s a side effect of how these models learn and how AI builders integrate frameworks.&lt;/p&gt;

&lt;p&gt;A few reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Training data dominance&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Public React and Next.js codebases, tutorials, templates, and snippets massively outnumber public Angular projects.&lt;br&gt;&lt;br&gt;
Many Angular apps live in closed enterprise repos, so models simply see less Angular.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tool vendor choices&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Firebase Studio, no‑code builders, AI prototyping tools — many officially support Next.js as their first or only framework and plan to “add others later.”&lt;br&gt;&lt;br&gt;
That means AI integrations, examples, and docs are tailored for that stack.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI optimization efforts&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Some companies are literally optimizing React/Next.js code for AI use, publishing curated “best practices” repos tuned for model consumption.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ecosystem momentum&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
AI‑friendly tutorials, AI‑generated starter kits, and vibe‑coding demos on YouTube skew heavily toward React + Next.js.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when you throw a vague prompt like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build a SaaS dashboard with user auth, billing, and admin controls&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;into an AI assistant, the model defaults to the pattern it has seen the most:&lt;/p&gt;

&lt;p&gt;React + Next.js. Not because your problem needs it — because the internet is full of it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI isn’t your architect. It’s a statistical mirror of what everyone else already did — mostly with React.&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%2Ffj4d2lpsnkeciw52pswt.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%2Ffj4d2lpsnkeciw52pswt.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  When Letting AI Choose Your Stack Actively Hurts You
&lt;/h3&gt;

&lt;p&gt;For small demos or personal projects, React/Next.js as a default is fine.&lt;/p&gt;

&lt;p&gt;For serious systems, blindly following AI’s bias can backfire hard.&lt;/p&gt;

&lt;p&gt;Examples of where this goes wrong:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Your team is mostly Angular or .NET people&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The AI happily scaffolds a React/Next.js app because it looks “modern.”&lt;br&gt;&lt;br&gt;
Now your entire team has to:&lt;br&gt;&lt;br&gt;
 — learn a new mental model,&lt;br&gt;&lt;br&gt;
 — rebuild internal patterns,&lt;br&gt;&lt;br&gt;
 — juggle two ecosystems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;You’re building a long‑lived enterprise product&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
React’s flexibility is great short‑term. Long‑term, it demands discipline, conventions, and extra libraries to get the “framework” behavior Angular gives you out of the box.&lt;br&gt;&lt;br&gt;
AI doesn’t know how disciplined your team is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;You need consistency across multiple teams and services&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Angular’s opinionated structure often makes multi‑team maintenance easier over years. React’s “assemble your own framework” dynamic amplifies inconsistency when different squads pull in different stacks and patterns.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yet AI will almost never ask you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“How many teams will work on this?”
&lt;/li&gt;
&lt;li&gt;“What’s your current stack?”
&lt;/li&gt;
&lt;li&gt;“Who will maintain this in 3–5 years?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It just picks the thing it has been trained to spit out confidently.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Letting AI choose React for your team because ‘that’s what it generated’ is like letting Google autocomplete decide your system architecture.&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%2F858x5cbc6bfjavfpihrk.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%2F858x5cbc6bfjavfpihrk.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The New Villain: AI Bias in Tech Stack Selection
&lt;/h3&gt;

&lt;p&gt;The Angular vs React fight is old.&lt;/p&gt;

&lt;p&gt;The new villain is the invisible bias sitting inside AI tools.&lt;/p&gt;

&lt;p&gt;We’re already seeing developers point out that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents tend to &lt;strong&gt;“suck with Angular” &lt;/strong&gt; — they hallucinate APIs, ignore DI, and fight the framework instead of using it correctly.
&lt;/li&gt;
&lt;li&gt;React and Next.js feel &lt;strong&gt;“more AI‑friendly”&lt;/strong&gt; because models have more examples and clearer integration paths.
&lt;/li&gt;
&lt;li&gt;People gravitate toward stacks where AI “feels better,” even if it’s not better for their project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI works better with React/Next.js →
&lt;/li&gt;
&lt;li&gt;More people choose React/Next.js because AI feels smoother →
&lt;/li&gt;
&lt;li&gt;More React/Next.js code goes into training data →
&lt;/li&gt;
&lt;li&gt;AI becomes even more biased toward React/Next.js.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Angular gets squeezed out of AI’s “comfort zone,” despite remaining incredibly strong in exactly the kinds of systems AI is bad at reasoning about: long‑lived, multi‑team, enterprise apps.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The danger isn’t that React wins. It’s that AI quietly removes Angular from the menu before the humans even sit down.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  “Most Popular” Is Not the Same as “Most Productive for You”
&lt;/h3&gt;

&lt;p&gt;Stack Overflow surveys and GitHub stars show React still leads in usage.&lt;/p&gt;

&lt;p&gt;But that does not automatically mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React is the most productive for your team,
&lt;/li&gt;
&lt;li&gt;React is the best choice for your domain,
&lt;/li&gt;
&lt;li&gt;React + Next.js is the right default for AI-assisted development in every case.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers with experience in both stacks keep reporting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Angular is often &lt;strong&gt;easier to maintain long‑term&lt;/strong&gt; when teams and requirements change, because it gives you structure and consistency.
&lt;/li&gt;
&lt;li&gt;React is often &lt;strong&gt;nicer to write in&lt;/strong&gt; for small to medium projects, especially for solo devs or startups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For AI‑heavy frontends:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React has more &lt;strong&gt;AI‑tailored component libraries and examples&lt;/strong&gt; , especially for chat UIs and dashboards.
&lt;/li&gt;
&lt;li&gt;Angular offers better &lt;strong&gt;enterprise integration&lt;/strong&gt; , type safety, and form handling for complex, bureaucratic systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key point:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI is biased toward what is most common and most explicitly optimized for it, not what fits your team and your business.&lt;/p&gt;

&lt;p&gt;If you confuse ‘most popular in the training data’ with ‘most productive for my context,’ you’re letting statistics, not strategy, run your stack.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Why I Would Still Return to Angular After AI Pushes Next.js
&lt;/h3&gt;

&lt;p&gt;AI tools love Next.js as the “structured React default.”&lt;/p&gt;

&lt;p&gt;For a lot of quick prototypes and SaaS frontends, that makes sense.&lt;/p&gt;

&lt;p&gt;But if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the project will live 5+ years,
&lt;/li&gt;
&lt;li&gt;multiple teams will touch it,
&lt;/li&gt;
&lt;li&gt;you care about strict types, form complexity, and consistency,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;there are still many cases where I would actively steer back to Angular — even if AI keeps demoing Next.js.&lt;/p&gt;

&lt;p&gt;Reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Opinionated architecture&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — less “choose your own adventure” in folders, state, routing, and DI,&lt;br&gt;&lt;br&gt;
 — easier onboarding when devs come and go.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enterprise alignment&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — Angular’s model aligns with how a lot of larger organizations actually work — modules, teams, domains, shared libraries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistency over time&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — fewer wild swings in patterns every six months,&lt;br&gt;&lt;br&gt;
 — less chance of a Frankenstack assembled from every hot React meta‑framework.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Does that mean Angular is “objectively better”?&lt;/p&gt;

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

&lt;p&gt;It means &lt;strong&gt;AI’s default suggestion is not a substitute for thinking about the lifecycle of your system.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI can scaffold your first month. It doesn’t have to live with your third year.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  How to Use AI Without Letting It Pick Your Stack for You
&lt;/h3&gt;

&lt;p&gt;You don’t need to fight AI.&lt;/p&gt;

&lt;p&gt;You just need to move stack selection back where it belongs: human judgment.&lt;/p&gt;

&lt;p&gt;Practical steps:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Decide the stack before you touch AI
&lt;/h4&gt;

&lt;p&gt;Start from constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;team skills,
&lt;/li&gt;
&lt;li&gt;existing systems,
&lt;/li&gt;
&lt;li&gt;lifespan of the project,
&lt;/li&gt;
&lt;li&gt;regulatory and scalability needs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pick a stack from that, then tell AI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We are using Angular here. Follow Angular best practices and do not switch frameworks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This company is a React shop. Use React, not Next.js, unless I explicitly ask.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  2. Be explicit about “no stack switching”
&lt;/h4&gt;

&lt;p&gt;AI assistants will happily suggest migrations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“We could move this to Next.js for better SEO.”
&lt;/li&gt;
&lt;li&gt;“Let’s use this React library; it’s more popular.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shut that down early:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Do not propose changing the main framework. Work within Angular.”
&lt;/li&gt;
&lt;li&gt;“Respect the existing tech stack; no rewrites unless explicitly requested.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Feed it your own patterns
&lt;/h4&gt;

&lt;p&gt;If you want AI to be less React‑biased:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;give it Angular examples from your codebase,
&lt;/li&gt;
&lt;li&gt;show it your module, state, and component conventions,
&lt;/li&gt;
&lt;li&gt;ask it to follow those patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’re not going to overpower global training data, but you can tilt its answers toward your reality.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Separate “AI for scaffolding” from “AI for architecture”
&lt;/h4&gt;

&lt;p&gt;Use AI for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;components,
&lt;/li&gt;
&lt;li&gt;forms,
&lt;/li&gt;
&lt;li&gt;tests,
&lt;/li&gt;
&lt;li&gt;boilerplate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do &lt;strong&gt;not&lt;/strong&gt; outsource:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;domain modeling,
&lt;/li&gt;
&lt;li&gt;system boundaries,
&lt;/li&gt;
&lt;li&gt;long‑term architecture choices.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;AI should fill in code inside a decision, not make the decision for you.&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%2F16vqjo9gc2ykxi9pamfu.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%2F16vqjo9gc2ykxi9pamfu.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Real Takeaway: AI Reflects the Crowd, Not What’s Right
&lt;/h3&gt;

&lt;p&gt;AI is not secretly on React’s payroll.&lt;/p&gt;

&lt;p&gt;It is doing exactly what it was designed to do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;approximate the most likely answer,
&lt;/li&gt;
&lt;li&gt;based on the data it has seen the most.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now, that means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React and Next.js for most “build me an app” prompts,
&lt;/li&gt;
&lt;li&gt;Angular often underrepresented despite its strength in enterprise.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you know this and act accordingly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI becomes a useful power tool inside whatever stack you intentionally choose.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you don’t:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI becomes a quiet, persuasive force pushing every problem toward the same default stack — whether it fits or not.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Your AI assistant is a React fanboy by training. Your job is to be the adult in the room who knows when that bias is helping you and when it’s quietly wrecking your architecture.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;I fix the Angular apps that generalists break.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m Karol Modelski, senior Angular developer and frontend architect rescuing legacy B2B SaaS frontends.&lt;/p&gt;

&lt;p&gt;If your Angular app is slowing your team down, start with a 3‑minute teardown of your current setup: &lt;a href="https://www.karol-modelski.scale-sail.io/" rel="noopener noreferrer"&gt;https://www.karol-modelski.scale-sail.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>react</category>
      <category>angular</category>
    </item>
    <item>
      <title>Why Prompt Engineering Is Just an Expensive Way to Be Incompetent</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 21 May 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/why-prompt-engineering-is-just-an-expensive-way-to-be-incompetent-8bm</link>
      <guid>https://dev.to/karol_modelski/why-prompt-engineering-is-just-an-expensive-way-to-be-incompetent-8bm</guid>
      <description>&lt;p&gt;Watching some people “use AI at work” has convinced me of one thing:&lt;/p&gt;

&lt;p&gt;AI is not replacing competent developers any time soon.&lt;/p&gt;

&lt;p&gt;But it is doing a fantastic job of exposing who didn’t really know what they were doing in the first place.&lt;/p&gt;

&lt;p&gt;You’ve probably seen this pattern already:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;50 prompts.
&lt;/li&gt;
&lt;li&gt;20 rewrites.
&lt;/li&gt;
&lt;li&gt;Endless “make it more robust / more scalable / more production-ready” messages.
&lt;/li&gt;
&lt;li&gt;Zero understanding of what’s actually happening.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, a real developer could have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understood the problem,
&lt;/li&gt;
&lt;li&gt;written a small, clear solution,
&lt;/li&gt;
&lt;li&gt;and finished in one or two focused passes.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prompt engineering doesn’t magically turn non-technical people into builders. It mostly turns their confusion into very expensive text.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Claude Credit Summary That Made Me Feel Weirdly Safe
&lt;/h2&gt;

&lt;p&gt;Everyone talks about AI as an existential threat.&lt;/p&gt;

&lt;p&gt;Then you open your team’s or company’s usage dashboard and see something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;thousands of credits burned on trivial tasks,
&lt;/li&gt;
&lt;li&gt;long chat sessions where the same vague question is rephrased 20 times,
&lt;/li&gt;
&lt;li&gt;reports and docs generated, then manually rewritten for hours.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You realize:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The people most excited about “prompt engineering” are often the ones who never learned how to think like engineers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Real examples companies are already sharing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;managers spending hours correcting AI-generated reports that “took 5 minutes,” creating what some call &lt;em&gt;prompt engineering debt&lt;/em&gt;—a new layer of work on top of already busy jobs; &lt;/li&gt;
&lt;li&gt;no-code builders burning hundreds of credits a day because they keep asking vague questions instead of clarifying requirements or reading basic docs; &lt;/li&gt;
&lt;li&gt;teams running complex tasks on the most expensive models when cheaper ones (or a quick human fix) would have done the job.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, controlled studies keep saying the same thing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI coding assistants give big gains in some contexts,
&lt;/li&gt;
&lt;li&gt;and outright slow developers down in others—especially when tasks are small or the codebase is well understood.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If you need 30 prompts to get what a competent dev would produce in one shot, the problem isn’t that you need ‘better prompting techniques.’ The problem is you don’t know what you’re asking for.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&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%2Frm88pplo49kguctlh2sr.png" alt=" " width="800" height="447"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  “Prompt Engineering” vs Actual Engineering
&lt;/h2&gt;

&lt;p&gt;Prompt engineering was briefly sold as a new job category:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no code,
&lt;/li&gt;
&lt;li&gt;no math,
&lt;/li&gt;
&lt;li&gt;no systems thinking,
&lt;/li&gt;
&lt;li&gt;just “talk well to the model.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Companies are already walking that back.&lt;/p&gt;

&lt;p&gt;The emerging consensus:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“prompt engineer” as a standalone role is fading;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;what’s valuable now are people who understand &lt;strong&gt;systems, data, constraints, and verification&lt;/strong&gt;—and happen to use AI well.&lt;br&gt;
In other words:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI skills are a multiplier on real expertise,  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;not a replacement for the expertise.&lt;br&gt;
The difference in practice:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A non-technical “prompt engineer” burns tokens asking the model to invent APIs, architectures, and glue code from scratch.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A real developer feeds the model context, constraints, and code, then uses it to refactor, scaffold, or check specific parts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prompt engineering without domain knowledge is just creative ways to waste money faster.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Hidden Inefficiency: Prompt Engineering Debt
&lt;/h2&gt;

&lt;p&gt;People talk about &lt;em&gt;technical debt&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;We’re now accumulating &lt;em&gt;prompt engineering debt&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-generated docs that sound authoritative but are subtly wrong,
&lt;/li&gt;
&lt;li&gt;half-baked scripts or UIs that “mostly work” but hide security or performance issues,
&lt;/li&gt;
&lt;li&gt;workflows no one can reproduce because the steps lived entirely inside chat logs.
You save 10 minutes by letting AI draft something.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You lose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hours verifying, correcting, and reformatting,
&lt;/li&gt;
&lt;li&gt;more hours when future you or someone else has to figure out “how this was made,”
&lt;/li&gt;
&lt;li&gt;trust, when stakeholders discover the tool hallucinated key details.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Managers and non-technical leaders are already reporting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI “helped” them finish something fast,
&lt;/li&gt;
&lt;li&gt;but they then spent several hours fixing it,
&lt;/li&gt;
&lt;li&gt;net result: more tired, not more productive.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the real cost nobody includes in their “AI saved me X hours!” posts.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI doesn’t just create output. It creates obligations: to verify, to correct, to own the result. Prompt debt is still debt.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Watching a Prompt Power User Struggle With a Two-Minute Bug
&lt;/h2&gt;

&lt;p&gt;The most painful demos of “AI superusers” often look like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They hit a bug or small logic issue.
&lt;/li&gt;
&lt;li&gt;Instead of reading the code or error message, they:

&lt;ul&gt;
&lt;li&gt;paste everything into Claude or another model,
&lt;/li&gt;
&lt;li&gt;ask it to “fix the problem,”
&lt;/li&gt;
&lt;li&gt;get a large diff,
&lt;/li&gt;
&lt;li&gt;apply it blindly,
&lt;/li&gt;
&lt;li&gt;break something else.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Repeat.&lt;/p&gt;

&lt;p&gt;If you’re an actual developer, you know what a normal path looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;read the error,
&lt;/li&gt;
&lt;li&gt;follow the stack trace,
&lt;/li&gt;
&lt;li&gt;inspect inputs and outputs,
&lt;/li&gt;
&lt;li&gt;change one or two lines,
&lt;/li&gt;
&lt;li&gt;add a test if needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two minutes.&lt;/p&gt;

&lt;p&gt;The “prompt engineer” route:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20+ minutes and 100+ credits,
&lt;/li&gt;
&lt;li&gt;three or four different attempts,
&lt;/li&gt;
&lt;li&gt;unsatisfying sense that “it works now but not sure why.”
This is not AI’s fault.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what happens when someone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;doesn’t understand the system,
&lt;/li&gt;
&lt;li&gt;doesn’t trust themselves to reason about it,
&lt;/li&gt;
&lt;li&gt;and thinks more prompting is always the answer.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If AI is your first reflex for every tiny issue, you’re not a power user. You’re outsourcing your thinking.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&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%2Feksnylpf6n0izbfgacc4.png" alt=" " width="800" height="447"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Being an AI Superuser Is Not the Same as Being a Developer
&lt;/h2&gt;

&lt;p&gt;There &lt;em&gt;is&lt;/em&gt; such a thing as an AI power user.&lt;/p&gt;

&lt;p&gt;They look nothing like the people throwing 400-line prompts at every problem.&lt;br&gt;
Real power users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;have solid fundamentals in at least one domain (dev, data, ops, product),
&lt;/li&gt;
&lt;li&gt;use AI to compress workflows they already understand,
&lt;/li&gt;
&lt;li&gt;treat models as tools in a chain, not as all-knowing oracles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;script repeated tasks,
&lt;/li&gt;
&lt;li&gt;integrate AI into editors, terminals, and CI pipelines,
&lt;/li&gt;
&lt;li&gt;design small, reliable loops where the model does the mechanical parts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They do &lt;em&gt;not&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;spend all day rewriting the same vague prompt,
&lt;/li&gt;
&lt;li&gt;rely on AI to invent systems they don’t understand,
&lt;/li&gt;
&lt;li&gt;brag about number of tokens used as if that were a productivity metric.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Being good with AI is not about ‘talking to it a lot.’ It’s about knowing enough to ask for the right thing once.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Ego Layer: Prompt Engineering as a Mask for Insecurity
&lt;/h2&gt;

&lt;p&gt;Here’s the uncomfortable part:&lt;/p&gt;

&lt;p&gt;For some people, “prompt engineering” is a socially acceptable way to hide insecurity.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;“I don’t understand this system,”
&lt;/li&gt;
&lt;li&gt;“I need to learn the basics,”
&lt;/li&gt;
&lt;li&gt;“I’m out of my depth,”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;they say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“I’m working on AI workflows,”
&lt;/li&gt;
&lt;li&gt;“I’m refining the prompt,”
&lt;/li&gt;
&lt;li&gt;“The model just needs better instructions.”
It sounds sophisticated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It keeps them in the conversation.&lt;br&gt;&lt;br&gt;
It lets them avoid asking the “stupid questions” they really need to ask.&lt;/p&gt;

&lt;p&gt;But underneath that layer of AI jargon, nothing changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no better mental models,
&lt;/li&gt;
&lt;li&gt;no better debugging skills,
&lt;/li&gt;
&lt;li&gt;no better understanding of trade-offs.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prompt engineering becomes a costume you wear so people don’t see that you’re scared to admit what you don’t know.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How Skilled Developers Actually Use AI (and Why That’s Threat-Proof)
&lt;/h2&gt;

&lt;p&gt;Most senior devs who integrate AI deeply share the same pattern:&lt;/p&gt;

&lt;p&gt;They use AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;accelerate things they already know how to do,
&lt;/li&gt;
&lt;li&gt;generate first drafts they fully understand and can rewrite,
&lt;/li&gt;
&lt;li&gt;explore alternatives or edge cases they might have missed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They don’t:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;let AI design the architecture of a system they don’t understand,
&lt;/li&gt;
&lt;li&gt;push AI-generated changes without reading them carefully,
&lt;/li&gt;
&lt;li&gt;use AI as a shield from having to think.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Studies and field reports show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI assistants give big boosts when engineers know their stack and use AI as an exoskeleton;
&lt;/li&gt;
&lt;li&gt;in unfamiliar systems or without clear specs, they can slow things down or create new failure modes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The job that’s safest long-term is still:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understanding systems,
&lt;/li&gt;
&lt;li&gt;making decisions under uncertainty,
&lt;/li&gt;
&lt;li&gt;reviewing and owning the output—human or AI-generated.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The thing that keeps you safe is not how many prompts you can write. It’s how many decisions you can own.&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%2Fc6x3fdzw04sbqg9qmwiy.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%2Fc6x3fdzw04sbqg9qmwiy.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  If You’re Technical: Why This Whole Trend Should Calm You Down
&lt;/h2&gt;

&lt;p&gt;If you’re a real engineer worried about AI replacing you, look carefully at how most “prompt superusers” actually work today.&lt;/p&gt;

&lt;p&gt;You’ll see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a lot of noise,
&lt;/li&gt;
&lt;li&gt;a lot of wasted tokens,
&lt;/li&gt;
&lt;li&gt;a lot of shallow output,
&lt;/li&gt;
&lt;li&gt;and a lot of work created for the people who still have to be accountable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The market is already correcting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the hype around “prompt engineer” as a standalone role is fading; &lt;/li&gt;
&lt;li&gt;companies are hiring for &lt;strong&gt;AI + X&lt;/strong&gt; (engineering, data, product, security), not for “AI whisperers”;
&lt;/li&gt;
&lt;li&gt;senior developer roles are shifting &lt;em&gt;toward&lt;/em&gt; more design, review, integration, and governance—not away from them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI will absolutely replace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a chunk of low-skill work,
&lt;/li&gt;
&lt;li&gt;some tasks that used to justify junior roles,
&lt;/li&gt;
&lt;li&gt;a lot of fake productivity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It will not replace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clear thinking,
&lt;/li&gt;
&lt;li&gt;system-level understanding,
&lt;/li&gt;
&lt;li&gt;the ability to define what “good” looks like in the first place.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Your job is not to compete with people burning credits. Your job is to be the person who knows what should happen &lt;em&gt;before&lt;/em&gt; anyone opens a chat window.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;I fix &lt;strong&gt;the Angular apps that generalists break.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m Karol Modelski, senior Angular developer and frontend architect rescuing legacy B2B SaaS frontends.&lt;/p&gt;

&lt;p&gt;If your Angular app is slowing your team down, start with a 3‑minute teardown of your current setup: &lt;a href="https://www.karol-modelski.scale-sail.io/" rel="noopener noreferrer"&gt;https://www.karol-modelski.scale-sail.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI Isn't Replacing Developers - It's Turning Us Into Underpaid Bot Babysitters</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 14 May 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/ai-isnt-replacing-developers-its-turning-us-into-underpaid-bot-babysitters-ohc</link>
      <guid>https://dev.to/karol_modelski/ai-isnt-replacing-developers-its-turning-us-into-underpaid-bot-babysitters-ohc</guid>
      <description>&lt;p&gt;The future of engineering was supposed to look like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI handles the boring stuff.
&lt;/li&gt;
&lt;li&gt;Humans focus on architecture, hard problems, and product.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What it often looks like instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;juniors (and some seniors) blasting Claude or other LLMs with vague prompts,
&lt;/li&gt;
&lt;li&gt;copy‑pasting whatever comes out into massive PRs,
&lt;/li&gt;
&lt;li&gt;you spending your week diff‑diving, untangling “AI slop,” and explaining basic trade‑offs in code review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The robots didn’t take your job.&lt;/p&gt;

&lt;p&gt;They just turned you into an underpaid bot babysitter.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI didn’t automate away my work. It automated the creation of bad work and left me responsible for all of the cleanup.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Meet the “Vibe Coder”: Shipping PRs by Feel, Powered by LLMs
&lt;/h2&gt;

&lt;p&gt;Every team now has at least one vibe coder.&lt;/p&gt;

&lt;p&gt;You know the profile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;never reads the existing codebase deeply,
&lt;/li&gt;
&lt;li&gt;never asks about architecture,
&lt;/li&gt;
&lt;li&gt;but can generate 1,000+ lines of “looks impressive” code in an afternoon.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Their workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste a ticket into Claude / another LLM.
&lt;/li&gt;
&lt;li&gt;Get a wall of code, tests, and maybe even docs.
&lt;/li&gt;
&lt;li&gt;Lightly tweak variable names.
&lt;/li&gt;
&lt;li&gt;Open a PR with a confident description: ""&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;"Implementing X feature with full test coverage."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From the outside, it looks like high output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lots of commits,
&lt;/li&gt;
&lt;li&gt;lots of lines changed,
&lt;/li&gt;
&lt;li&gt;lots of green checkmarks when basic tests pass.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the inside, you see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duplicated logic the model invented because it didn’t see existing utilities,
&lt;/li&gt;
&lt;li&gt;inconsistent patterns across modules,
&lt;/li&gt;
&lt;li&gt;subtle bugs around edge cases, error handling, security.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Vibe coding is when the code ‘feels’ right because the diff is big and the AI sounded confident, but nobody actually sat down to think.&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%2Fp9uzasz765zhmr0ufeil.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%2Fp9uzasz765zhmr0ufeil.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Sludge as a New Form of Tech Debt
&lt;/h2&gt;

&lt;p&gt;People talk about “AI slop” like it’s just ugly code.&lt;/p&gt;

&lt;p&gt;It’s bigger than that.&lt;/p&gt;

&lt;p&gt;We’re seeing patterns like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code duplication explodes&lt;/strong&gt; – analyses show AI‑assisted code can double duplication and dramatically reduce refactoring. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability drops quietly&lt;/strong&gt; – LLM‑generated code may pass tests and even have fewer obvious bugs, but hides structural issues and unnecessary complexity.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surface‑level quality looks fine&lt;/strong&gt; – style, docs, and naming look better… right up until you try to change anything non‑trivial.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open source maintainers are already burning out from a flood of low‑effort AI PRs that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;don’t solve real issues,
&lt;/li&gt;
&lt;li&gt;add generic utilities that already exist,
&lt;/li&gt;
&lt;li&gt;introduce subtle bugs for marginal gains.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inside companies, the same dynamic is happening:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;more code, more diffs, more “AI‑accelerated” changes,
&lt;/li&gt;
&lt;li&gt;without any corresponding increase in architectural thinking.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI is building a new class of tech debt: everything looks modern and well‑typed until you try to evolve it, and then the whole thing fights back.&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%2Fhchd214wdkr1r3vafuwa.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%2Fhchd214wdkr1r3vafuwa.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Senior’s New Job: AI Janitor, Therapist, and Politician
&lt;/h2&gt;

&lt;p&gt;If you’re mid/senior, you’re probably seeing your role drift:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;less time building systems,
&lt;/li&gt;
&lt;li&gt;more time reviewing, rejecting, and explaining AI‑generated changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your real job description becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI janitor&lt;/strong&gt; – identify duplicated logic, unnecessary abstractions, and hallucinated APIs; refactor or rewrite them. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code therapist&lt;/strong&gt; – explain to enthusiastic AI‑power users why their 1,200‑line PR is not a “productivity win.”
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team politician&lt;/strong&gt; – push back on leadership who only see output metrics and not the long‑term maintenance cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, company narratives sound like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“AI has doubled our feature velocity.”
&lt;/li&gt;
&lt;li&gt;“Look how many lines of code we’ve shipped this quarter.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nobody is tracking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how many critical bugs came from rushed AI‑generated changes,
&lt;/li&gt;
&lt;li&gt;how much time seniors spend auditing vs building,
&lt;/li&gt;
&lt;li&gt;how much harder future projects become because the codebase is now stitched together by vibes.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;We’re measuring AI success in story points and PR counts, and measuring human burnout in private 1:1s and late‑night Slack messages.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  AI as a Corporate Politics Weapon
&lt;/h2&gt;

&lt;p&gt;There is another uncomfortable layer to this:&lt;/p&gt;

&lt;p&gt;AI tooling doesn’t just change code.&lt;/p&gt;

&lt;p&gt;It changes &lt;strong&gt;office politics&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you know how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate polished architecture diagrams, long docs, and “vision” slides with AI,
&lt;/li&gt;
&lt;li&gt;push big, flashy PRs that look ambitious,
&lt;/li&gt;
&lt;li&gt;speak confidently about “leveraging LLM productivity,”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;you can look like a star to non‑technical leadership.&lt;/p&gt;

&lt;p&gt;Even if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your changes are hard to maintain,
&lt;/li&gt;
&lt;li&gt;your “AI‑driven refactor” quietly destabilizes core flows,
&lt;/li&gt;
&lt;li&gt;senior engineers repeatedly warn about long‑term risk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The people who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;optimize for perception,
&lt;/li&gt;
&lt;li&gt;“ship” with AI,
&lt;/li&gt;
&lt;li&gt;and keep talking about “innovation”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;get rewarded.&lt;/p&gt;

&lt;p&gt;The people who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;read the diff carefully,
&lt;/li&gt;
&lt;li&gt;ask annoying questions about edge cases,
&lt;/li&gt;
&lt;li&gt;block PRs that don’t meet standards,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;get labeled as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“slowing things down,”
&lt;/li&gt;
&lt;li&gt;“resistant to AI,”
&lt;/li&gt;
&lt;li&gt;“too negative.”&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI didn’t end office politics. It just gave the loudest people a way to generate more ‘evidence’ of their impact without doing more thinking.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Not All AI Code Is Bad — That’s What Makes This Hard
&lt;/h2&gt;

&lt;p&gt;Here’s the twist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some studies show LLM‑generated code can have &lt;em&gt;fewer&lt;/em&gt; obvious bugs and be easier to patch than human code for certain tasks.&lt;/li&gt;
&lt;li&gt;Some leads argue they prefer “boring LLM output” over wildly inconsistent human code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They’re not entirely wrong.&lt;/p&gt;

&lt;p&gt;AI can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;great at boilerplate,
&lt;/li&gt;
&lt;li&gt;consistent in style,
&lt;/li&gt;
&lt;li&gt;surprisingly solid on well‑scoped problems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem is not “AI code = bad, human code = good.”&lt;/p&gt;

&lt;p&gt;The problem is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unskilled prompting + zero context + no review discipline + wrong incentives = sludge,
&lt;/li&gt;
&lt;li&gt;and we’re throwing that into complex systems that absolutely &lt;em&gt;require&lt;/em&gt; someone to think several steps ahead.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI can absolutely write decent code. But decent code, dropped thoughtlessly into a complex system, is still a bad change.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How to Stop Being a Bot Babysitter (Without Becoming a Dinosaur)
&lt;/h2&gt;

&lt;p&gt;If you’re a senior developer, you don’t fix this by rejecting AI.&lt;/p&gt;

&lt;p&gt;You fix it by &lt;strong&gt;setting constraints&lt;/strong&gt; and &lt;strong&gt;changing the default workflow.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Make AI usage explicit, not sneaky
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Require PR descriptions to state when AI was heavily used.
&lt;/li&gt;
&lt;li&gt;Normalize saying “AI assisted” instead of pretending everything came from pure genius.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t about shame. It’s about review expectations.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Raise the bar on review for AI-heavy PRs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Smaller, focused PRs over giant “AI dump” diffs.
&lt;/li&gt;
&lt;li&gt;Require tests that demonstrate understanding, not just generated snapshots.
&lt;/li&gt;
&lt;li&gt;Explicit rationale for architectural decisions, not just “the model chose this.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Build a checklist for AI‑generated code
&lt;/h3&gt;

&lt;p&gt;Teams and maintainers are already doing this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;check for duplication (search for repeated blocks across the repo),
&lt;/li&gt;
&lt;li&gt;check for existing utilities the AI ignored,
&lt;/li&gt;
&lt;li&gt;check for security issues and edge cases,
&lt;/li&gt;
&lt;li&gt;check integration points instead of just local correctness.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Automate what you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;linting, duplication detection, basic structural checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Train people to use AI like an engineer, not a copier
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;start from the existing architecture, not from a blank prompt,
&lt;/li&gt;
&lt;li&gt;use AI to propose variations, not final answers,
&lt;/li&gt;
&lt;li&gt;require devs to explain any AI‑generated code in their own words during review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If someone can’t explain it, they don’t merge it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The goal isn’t to stop AI writing code. It’s to stop people from outsourcing their thinking and calling it productivity.&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%2Fk7neo3fzptunoyn2papq.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%2Fk7neo3fzptunoyn2papq.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  If You’re a Senior: Redefine Your Job Before Someone Else Does
&lt;/h2&gt;

&lt;p&gt;AI is not going away.&lt;/p&gt;

&lt;p&gt;Companies will keep buying tools and pushing for “higher productivity per engineer.”&lt;/p&gt;

&lt;p&gt;You have a choice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;be the burned‑out reviewer who cleans up after everyone,
&lt;/li&gt;
&lt;li&gt;or be the person who designs how AI fits into the engineering process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;owning guidelines for AI‑assisted coding,
&lt;/li&gt;
&lt;li&gt;building or choosing tooling that catches obvious AI‑slop,
&lt;/li&gt;
&lt;li&gt;mentoring your team on using models as partners, not crutches,
&lt;/li&gt;
&lt;li&gt;educating leadership on the difference between velocity and sustainable delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Long term, the people who win are not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;anti‑AI gatekeepers,
&lt;/li&gt;
&lt;li&gt;AI‑only “vibe coders.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s the ones who can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;think clearly,
&lt;/li&gt;
&lt;li&gt;architect systems,
&lt;/li&gt;
&lt;li&gt;leverage AI responsibly,
&lt;/li&gt;
&lt;li&gt;and protect the codebase from looking productive while decaying inside.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI will not replace you. But someone who understands both engineering and AI—and refuses to be a quiet janitor—absolutely can.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;I fix &lt;strong&gt;the Angular apps that generalists break.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m Karol Modelski, senior Angular developer and frontend architect rescuing legacy B2B SaaS frontends.&lt;/p&gt;

&lt;p&gt;If your Angular app is slowing your team down, start with a 3‑minute teardown of your current setup: &lt;a href="https://www.karol-modelski.scale-sail.io/" rel="noopener noreferrer"&gt;https://www.karol-modelski.scale-sail.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>career</category>
      <category>codequality</category>
    </item>
    <item>
      <title>AI Is Turning My $5,000 Freelance Projects Into $500 Tasks</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 07 May 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/ai-is-turning-my-5000-freelance-projects-into-500-tasks-11mg</link>
      <guid>https://dev.to/karol_modelski/ai-is-turning-my-5000-freelance-projects-into-500-tasks-11mg</guid>
      <description>&lt;p&gt;A few years ago, a simple CRUD app, a marketing site, or an internal dashboard could easily justify a $5,000+ freelance invoice.&lt;/p&gt;

&lt;p&gt;Scoping, architecture, implementation, testing, iteration—it took weeks.&lt;br&gt;&lt;br&gt;
Clients accepted that.&lt;/p&gt;

&lt;p&gt;Now?&lt;/p&gt;

&lt;p&gt;You open Claude Code or Cursor, describe the app in a paragraph, and in a single afternoon you can have a working MVP with authentication, CRUD, and deployment scripts.&lt;/p&gt;

&lt;p&gt;And suddenly your brain asks a brutal question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How can I charge $5,000 for something I can now build in two hours without feeling like a fraud?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;"AI didn’t just speed up my work. It detonated the mental model that my time and effort were the basis of my pricing."&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Efficiency Paradox: When Getting Faster Makes You Feel Cheaper
&lt;/h2&gt;

&lt;p&gt;On paper, AI coding tools should be amazing for freelancers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;higher productivity,
&lt;/li&gt;
&lt;li&gt;faster delivery,
&lt;/li&gt;
&lt;li&gt;more projects per month.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In reality, they create a paradox:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if you keep charging by the hour, your income gets crushed;
&lt;/li&gt;
&lt;li&gt;if you charge by the project, you &lt;em&gt;feel&lt;/em&gt; like you’re overcharging because “it only took a day with AI.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clients are reading case studies about people building full platforms with Claude in a few weeks instead of six months with agencies;
&lt;/li&gt;
&lt;li&gt;non-technical founders are using AI to do work they previously outsourced to freelancers entirely.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result?&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;middle of the freelance market&lt;/strong&gt; starts to hollow out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;low-end clients go straight to AI or to the cheapest “script kiddie” using AI badly;
&lt;/li&gt;
&lt;li&gt;high-end clients still pay well—but only for people who can handle strategy, architecture, and risk, not just raw implementation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;"AI didn’t erase the need for developers. It erased the justification for mediocre, effort-based pricing."&lt;/strong&gt;&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%2Fwfwk15kq7oornbjwcjv9.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%2Fwfwk15kq7oornbjwcjv9.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Value-Based Pricing Suddenly Feels Like a Lie
&lt;/h2&gt;

&lt;p&gt;For years, the advice was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Don’t charge by the hour. Charge based on value.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That made sense in a pre-AI world where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your expertise was the main speed multiplier,
&lt;/li&gt;
&lt;li&gt;your time and effort were visibly linked to the outcome.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the AI era:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you can build in days what used to take weeks;
&lt;/li&gt;
&lt;li&gt;you can ship in hours what used to be “two sprints.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s good for the client, but psychologically brutal for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;quoting $5,000 for something you can build in a day feels like a scam,
&lt;/li&gt;
&lt;li&gt;quoting $1,000 feels “fair” but destroys your ability to run a business,
&lt;/li&gt;
&lt;li&gt;going back to hourly rates gets you compared directly to cheaper devs and AI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real problem:&lt;/p&gt;

&lt;p&gt;You are still anchoring your price on &lt;strong&gt;effort&lt;/strong&gt; in your head, even while trying to talk about &lt;strong&gt;value&lt;/strong&gt; in your proposal.&lt;/p&gt;

&lt;p&gt;Your brain knows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“This took me 10 hours with AI, not 60.”
&lt;/li&gt;
&lt;li&gt;So it quietly marks down what you feel allowed to charge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clients, meanwhile, don’t care about your hours. They care about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how much risk you remove,
&lt;/li&gt;
&lt;li&gt;how much faster they go to market,
&lt;/li&gt;
&lt;li&gt;how much revenue or efficiency your solution actually creates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;"The fraud feeling doesn’t come from value-based pricing. It comes from secretly pricing your self-worth in hours while pretending you don’t."&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Clients Are Actually Paying For (Hint: It’s Not Code Lines)
&lt;/h2&gt;

&lt;p&gt;Look at how serious buyers pay for AI work today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;experienced AI devs charge $75–$200+ per hour because they reduce risk and move faster, not because they grind more hours;
&lt;/li&gt;
&lt;li&gt;AI agent platforms charge based on value metrics—tasks completed, SLAs hit, revenue lift—not just compute.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern is the same for freelancers who survive this shift:&lt;/p&gt;

&lt;p&gt;Clients are paying for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Risk reduction&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You stop them from wasting six months on the wrong architecture, wrong feature set, or wrong vendor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clarity and decision-making&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You turn vague ideas into actionable scopes, MVPs, and roadmaps. AI doesn’t sit in stakeholder calls and push back on bad requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integration and ownership&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You connect AI-built pieces to real systems: auth, billing, compliance, infrastructure, observability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trust and accountability&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You are there when something breaks. You maintain, adapt, and iterate. AI is a tool, not an owner.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code is becoming &lt;strong&gt;commoditized&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
The &lt;strong&gt;outcome&lt;/strong&gt; and &lt;strong&gt;risk management&lt;/strong&gt; are not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Freelancers who keep selling code as if it’s scarce will feel undercut. Those who sell outcomes and risk reduction will feel in demand."&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Script Kiddie Problem: When AI Makes Amateurs Look “Good Enough”
&lt;/h2&gt;

&lt;p&gt;Claude, Copilot, Cursor, and every other assistant just gave every beginner a temporary superpower:&lt;br&gt;
They can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;scaffold apps,
&lt;/li&gt;
&lt;li&gt;glue tutorials together,
&lt;/li&gt;
&lt;li&gt;and produce surprisingly decent demos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To non-technical clients, that looks &lt;strong&gt;“close enough”&lt;/strong&gt; to what you do—especially on small projects.&lt;/p&gt;

&lt;p&gt;Why pay $5,000 when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;someone on Upwork offers $500,
&lt;/li&gt;
&lt;li&gt;or the client can brute-force something with AI for the cost of a subscription?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where the middle gets hollowed out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if your positioning is “I build websites / CRUD apps / dashboards,” you are now interchangeable with AI‑assisted juniors;&lt;/li&gt;
&lt;li&gt;the top of the market—complex systems, serious budgets, strategic work—is still there, but requires a completely different pitch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The uncomfortable truth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI has lowered the bar for “good-enough output,” so &lt;strong&gt;only&lt;/strong&gt; being “technically competent” is no longer enough to justify mid-to-high freelance pricing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;"The script kiddie with Claude is not your direct competitor. Your real competitor is your own refusal to move up the value chain."&lt;/strong&gt;&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%2Fnfbx0w6ota0y2bhrz4zl.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%2Fnfbx0w6ota0y2bhrz4zl.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Price in the AI Era Without Feeling Like a Fraud
&lt;/h2&gt;

&lt;p&gt;If you want to keep charging real money while using AI, you need to change what’s on the invoice.&lt;/p&gt;

&lt;p&gt;You can’t just write:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Web app development – 40 hours”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and secretly know it took 8.&lt;/p&gt;

&lt;p&gt;You need offers that make sense &lt;em&gt;even when&lt;/em&gt; the work is fast.&lt;/p&gt;

&lt;p&gt;Think in terms of &lt;strong&gt;packages&lt;/strong&gt; and &lt;strong&gt;outcomes&lt;/strong&gt;, not tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discovery + design + implementation&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clarify the problem, run a strategy workshop, define success metrics, then build the MVP—with AI as your power tool.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;MVP in 2 weeks, validated with users&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are not selling screens. You are selling “a thing we can put in front of customers in two weeks and learn from.”
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Migration / modernization&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Move a legacy system to a new stack, keep data safe, minimize downtime, and document everything. AI accelerates—but the risk is still real.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;AI integration / automation&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect their existing tools, build agents or workflows, and own the reliability and monitoring.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Price for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the &lt;strong&gt;risk you’re taking on&lt;/strong&gt;,
&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;business impact&lt;/strong&gt;,
&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;speed to a meaningful outcome&lt;/strong&gt;—&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;not for the keystrokes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Value-based pricing only feels honest if the thing you’re selling is a value narrative, not a disguised time estimate."&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Concrete Levers to Survive (and Win) the AI Pricing Crisis
&lt;/h2&gt;

&lt;p&gt;Some practical shifts that move you out of the danger zone:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Rewrite your positioning&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Replace “I build X with Y framework” with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“I help [niche] achieve [business goal] with software and automation.”&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Show your thinking, not just your builds&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Share teardown threads, architecture breakdowns, “here’s why this approach works.”&lt;br&gt;&lt;br&gt;
   That’s how you signal that clients are buying your brain, not just your typing speed.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Sell productized services&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example packages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“MVP Launch Week”
&lt;/li&gt;
&lt;li&gt;“Analytics &amp;amp; Automation Audit”
&lt;/li&gt;
&lt;li&gt;“Migration Risk Assessment + Plan”
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clear scope, clear outcome, fixed price.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Lean into AI visibly, not secretly&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tell clients:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Yes, I use AI heavily—that’s how I move fast. You’re paying for knowing what to build, what to trust, and how to keep it alive.”&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Keep a floor on your pricing&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you drop to $300 projects “because AI made it easy,” you are training the market—and yourself—to believe your work is cheap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"The freelancers who survive are not the ones who hide AI. They’re the ones who can explain why using AI makes them even more worth the money."&lt;/strong&gt;&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%2F6rddy17tbutduaaaocos.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%2F6rddy17tbutduaaaocos.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Future: Fewer Freelancers, Stronger Positions
&lt;/h2&gt;

&lt;p&gt;Generative AI is absolutely reshaping the freelance market.&lt;/p&gt;

&lt;p&gt;Studies already show: some segments of digital freelancing see collapsing demand as clients use AI or in-house tools instead. At the same time, specialized AI and software freelancers at the top end are charging more because they’re tied to high-impact work.&lt;/p&gt;

&lt;p&gt;The likely outcome:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fewer freelancers doing generic implementation work,
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;more freelancers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;embedded as fractional CTOs / product leads,
&lt;/li&gt;
&lt;li&gt;owning automation and AI workflows,
&lt;/li&gt;
&lt;li&gt;selling consulting + implementation bundles.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;If you insist on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;billing by the hour,
&lt;/li&gt;
&lt;li&gt;marketing yourself as “a pair of hands,”
&lt;/li&gt;
&lt;li&gt;competing with whoever is cheapest + AI,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the AI pricing crisis will feel like a slow suffocation.&lt;/p&gt;

&lt;p&gt;If you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;move up-market,
&lt;/li&gt;
&lt;li&gt;sell outcomes and risk reduction,
&lt;/li&gt;
&lt;li&gt;and treat AI as your exoskeleton,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;you can absolutely justify $5,000 (or more) while building faster than ever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"AI is not killing value-based pricing. It’s killing lazy value stories that were secretly still about hours. The rest of us now have to grow up."&lt;/strong&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;I fix &lt;strong&gt;the Angular apps that generalists break.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m Karol Modelski, senior Angular developer and frontend architect rescuing legacy B2B SaaS frontends.&lt;/p&gt;

&lt;p&gt;If your Angular app is slowing your team down, start with a 3‑minute teardown of your current setup: &lt;a href="https://www.karol-modelski.scale-sail.io/" rel="noopener noreferrer"&gt;https://www.karol-modelski.scale-sail.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>freelance</category>
      <category>career</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Your Perfectionism Is Killing Your Career Before It Even Starts</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 30 Apr 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/your-perfectionism-is-killing-your-career-before-it-even-starts-2b1m</link>
      <guid>https://dev.to/karol_modelski/your-perfectionism-is-killing-your-career-before-it-even-starts-2b1m</guid>
      <description>&lt;p&gt;A lot of self-taught developers think perfectionism is a virtue.&lt;/p&gt;

&lt;p&gt;You obsess over:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the “right” folder structure,
&lt;/li&gt;
&lt;li&gt;the “cleanest” abstraction,
&lt;/li&gt;
&lt;li&gt;the “correct” testing strategy for a to‑do app you never ship.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Underneath that, there’s usually one thing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;a brutal, silent fear of being judged.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So you keep polishing, keep refactoring, keep “learning more” instead of showing your work to real people.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Perfectionism feels like a high standard. Most of the time, it’s just fear wearing a respectable outfit."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Self-Taught Developer’s Loop of Death
&lt;/h2&gt;

&lt;p&gt;If you’re self-taught, your path probably looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;binge tutorials,
&lt;/li&gt;
&lt;li&gt;start side projects,
&lt;/li&gt;
&lt;li&gt;never finish them,
&lt;/li&gt;
&lt;li&gt;because “they’re not good enough yet.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You tell yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“I’ll start freelancing when I’m better.”
&lt;/li&gt;
&lt;li&gt;“I’ll take clients when I’m sure I won’t embarrass myself.”
&lt;/li&gt;
&lt;li&gt;“I just need one more course before I’m ready.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your GitHub is full of half-finished repos,
&lt;/li&gt;
&lt;li&gt;your portfolio has three “coming soon” sections,
&lt;/li&gt;
&lt;li&gt;your confidence is shrinking, not growing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You are not gaining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;real feedback,
&lt;/li&gt;
&lt;li&gt;real constraints,
&lt;/li&gt;
&lt;li&gt;or real trust in your abilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You are just getting better at &lt;strong&gt;learning in the dark&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"You’re not stuck because you’re underqualified. You’re stuck because you refuse to be seen as anything less than perfect."&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%2Fr16lbzd8pry82l8gx5ye.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%2Fr16lbzd8pry82l8gx5ye.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Clients Do Not Want Perfect Code
&lt;/h2&gt;

&lt;p&gt;There is one thing you need to internalize if you ever want to freelance:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Clients do not buy code. They buy outcomes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They care about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Does this solve my problem?”
&lt;/li&gt;
&lt;li&gt;“Will this make or save me money?”
&lt;/li&gt;
&lt;li&gt;“Can I trust this person when something breaks?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They do &lt;strong&gt;not&lt;/strong&gt; care about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether your component composition is award‑winning,
&lt;/li&gt;
&lt;li&gt;whether your TypeScript generics are elegant,
&lt;/li&gt;
&lt;li&gt;whether your CSS is fully BEM‑compliant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most clients cannot even read your code. The ones who pretend to understand it are often just trying not to look ignorant.&lt;/p&gt;

&lt;p&gt;And yet, you treat every tiny imperfection like a moral failure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a missing edge case,
&lt;/li&gt;
&lt;li&gt;a messy function,
&lt;/li&gt;
&lt;li&gt;a bug that slipped through.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is reality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every serious product ships with known imperfections,
&lt;/li&gt;
&lt;li&gt;most bugs get discovered in production anyway,
&lt;/li&gt;
&lt;li&gt;what matters is how fast you respond and how reliable you are.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Clients aren’t looking for perfection. They’re looking for progress, responsiveness, and someone who takes responsibility."&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%2Ffjgadr4ygybj5c01p4zx.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%2Ffjgadr4ygybj5c01p4zx.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Your Fear of Bugs Is Not Humility. It’s Ego.
&lt;/h2&gt;

&lt;p&gt;This part hurts:&lt;/p&gt;

&lt;p&gt;Most “fear of judgment” stories are not about humility.&lt;/p&gt;

&lt;p&gt;They’re about ego.&lt;/p&gt;

&lt;p&gt;You are not actually afraid that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the app will be unusable,
&lt;/li&gt;
&lt;li&gt;the entire system will crash.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You are afraid that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;someone will think you’re not as good as you say you are,
&lt;/li&gt;
&lt;li&gt;a bug will expose that you are not “really a developer,”
&lt;/li&gt;
&lt;li&gt;your self‑image will crack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;avoid code reviews,
&lt;/li&gt;
&lt;li&gt;avoid shipping,
&lt;/li&gt;
&lt;li&gt;avoid freelancing conversations,
&lt;/li&gt;
&lt;li&gt;avoid showing your work to anyone who could say, “This isn’t perfect.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not caution. That is self‑protection at the cost of your career.&lt;/p&gt;

&lt;p&gt;Humility says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“I will ship the best I can right now, and I’ll fix what breaks.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfectionism says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“If it’s not flawless, nobody is allowed to see it.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only one of those paths leads to becoming a professional.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Refusing to ship until it’s perfect is not protecting clients from bad work. It’s protecting your ego from normal feedback."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Freelancing Is Not for Developers Who Wait for Perfection
&lt;/h2&gt;

&lt;p&gt;Freelancing is a public sport.&lt;/p&gt;

&lt;p&gt;You are constantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;making promises,
&lt;/li&gt;
&lt;li&gt;making trade‑offs,
&lt;/li&gt;
&lt;li&gt;making mistakes where people can see them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your default state is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“I will only take on clients when I’m sure nothing will go wrong,”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;you will never start.&lt;/p&gt;

&lt;p&gt;Because freelancing guarantees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unclear requirements,
&lt;/li&gt;
&lt;li&gt;last‑minute changes,
&lt;/li&gt;
&lt;li&gt;weird edge cases in production,
&lt;/li&gt;
&lt;li&gt;tech you haven’t used before.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clients don’t hire freelancers because everything is known.&lt;br&gt;&lt;br&gt;
They hire freelancers precisely when things &lt;strong&gt;are not&lt;/strong&gt; clean and predictable.&lt;/p&gt;

&lt;p&gt;Your job is not to guarantee perfection.&lt;/p&gt;

&lt;p&gt;Your job is to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;listen carefully,
&lt;/li&gt;
&lt;li&gt;ship something concrete,
&lt;/li&gt;
&lt;li&gt;fix what breaks,
&lt;/li&gt;
&lt;li&gt;communicate like an adult.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"If you need a zero‑risk environment to function, freelancing will eat you alive. Ship, learn, adjust—or get out."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How to Break the Perfectionism Cycle and Actually Start
&lt;/h2&gt;

&lt;p&gt;You do not beat perfectionism by reading more about perfectionism.&lt;/p&gt;

&lt;p&gt;You beat it by shipping in ways that are structured to feel scary but survivable.&lt;/p&gt;

&lt;p&gt;A few practical steps:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Lower the stakes on purpose
&lt;/h3&gt;

&lt;p&gt;Stop making your first “public” project a full SaaS with subscriptions and multi‑tenant RBAC.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;build a tiny tool for a friend’s business,
&lt;/li&gt;
&lt;li&gt;ship a landing page with a contact form,
&lt;/li&gt;
&lt;li&gt;create one automaton (Zapier/n8n/Make) that saves someone an hour a week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Smaller scope = smaller emotional explosion when something breaks.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Time‑box “polish loops”
&lt;/h3&gt;

&lt;p&gt;Give yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one pass for functionality,
&lt;/li&gt;
&lt;li&gt;one pass for obvious clean‑up,
&lt;/li&gt;
&lt;li&gt;then you ship.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anything beyond that goes into a “V2 improvements” list.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Force feedback earlier
&lt;/h3&gt;

&lt;p&gt;Do not disappear for weeks and then hope the client loves your “perfect” version.&lt;/p&gt;

&lt;p&gt;Show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ugly wireframes,
&lt;/li&gt;
&lt;li&gt;half‑done UIs,
&lt;/li&gt;
&lt;li&gt;basic flows that barely work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clients gain trust when they see progress, not when they see perfection after a long silence.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Define “good enough” before you start
&lt;/h3&gt;

&lt;p&gt;Write this down per project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;must‑have: cannot ship without
&lt;/li&gt;
&lt;li&gt;nice‑to‑have: can wait for later
&lt;/li&gt;
&lt;li&gt;not‑now: explicitly excluded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have not defined this, your default will be “everything must be flawless,” and you will drown.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"The antidote to perfectionism isn’t carelessness. It’s defining clearly what ‘good enough to ship’ means before your feelings get involved."&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%2Fs2mk1k6kq0uuzab1udf1.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%2Fs2mk1k6kq0uuzab1udf1.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Building a Professional Mindset: Progress Over Performance
&lt;/h2&gt;

&lt;p&gt;Professionals don’t ship perfect work.&lt;/p&gt;

&lt;p&gt;They ship work that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;solves a real problem,
&lt;/li&gt;
&lt;li&gt;is maintainable enough,
&lt;/li&gt;
&lt;li&gt;can evolve,
&lt;/li&gt;
&lt;li&gt;and improves over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They measure themselves by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how quickly they turn feedback into improvements,
&lt;/li&gt;
&lt;li&gt;how well they communicate when things go wrong,
&lt;/li&gt;
&lt;li&gt;how consistent they are over months and years.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a self‑taught dev, you have one huge advantage:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;you are already good at learning on your own.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The missing piece is &lt;strong&gt;showing your work before you feel ready&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is the muscle freelancing demands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;publish the portfolio, even if it’s not your dream aesthetic,
&lt;/li&gt;
&lt;li&gt;take a small client, even if you’re nervous,
&lt;/li&gt;
&lt;li&gt;send the invoice, even if your inner critic is screaming.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You will never fully “solve” fear of judgment.&lt;/p&gt;

&lt;p&gt;You just become someone who ships anyway.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Your career does not start the day you feel ready. It starts the day you’re willing to be seen as imperfect and still show up."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;I fix &lt;strong&gt;the Angular apps that generalists break.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m Karol Modelski, senior Angular developer and frontend architect rescuing legacy B2B SaaS frontends.&lt;/p&gt;

&lt;p&gt;If your Angular app is slowing your team down, start with a 3‑minute teardown of your current setup: &lt;a href="https://www.karol-modelski.scale-sail.io/" rel="noopener noreferrer"&gt;https://www.karol-modelski.scale-sail.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>career</category>
      <category>development</category>
    </item>
    <item>
      <title>TypeScript Complexity Has Finally Reached the Point of Total Absurdity</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 23 Apr 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/typescript-complexity-has-finally-reached-the-point-of-total-absurdity-3f9k</link>
      <guid>https://dev.to/karol_modelski/typescript-complexity-has-finally-reached-the-point-of-total-absurdity-3f9k</guid>
      <description>&lt;p&gt;At some point over the last few years, TypeScript stopped being a tool and started becoming a performance art.&lt;/p&gt;

&lt;p&gt;We went from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Let’s add types so we catch bugs earlier”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Behold my 80-line conditional type that nobody understands, including me.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The worst part?&lt;br&gt;&lt;br&gt;
This is not a niche problem anymore.&lt;/p&gt;

&lt;p&gt;If you work on modern web apps — Angular, React, Payload CMS, Nest, whatever — you have already opened a file where the types look like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a PhD thesis in category theory,
&lt;/li&gt;
&lt;li&gt;accidentally minified,
&lt;/li&gt;
&lt;li&gt;and spread across five utility types imported from different packages.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Somewhere along the way, we quietly accepted that making our code unreadable was an acceptable side effect of ‘taking type safety seriously.’&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  When Type Safety Crossed the Line
&lt;/h3&gt;

&lt;p&gt;TypeScript was supposed to do two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make JavaScript less surprising.
&lt;/li&gt;
&lt;li&gt;Make refactors less terrifying.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead, in many codebases, it now does a third thing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Makes every non-author terrified to touch the types at all.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is especially visible in libraries and frameworks that want to impress other library authors more than they want to be usable by normal humans.&lt;/p&gt;

&lt;p&gt;Think about patterns like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deeply nested &lt;strong&gt;conditional types&lt;/strong&gt; with multiple branches,
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;recursive mapped types&lt;/strong&gt; that try to model an entire CMS schema and all possible query shapes,
&lt;/li&gt;
&lt;li&gt;overly clever &lt;strong&gt;generic constraints&lt;/strong&gt; that explode into 20-line compiler errors if you look at them wrong.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Payload CMS types are a great example: extremely powerful, extremely expressive — and often borderline indecipherable unless you mentally expand half of the type tree. This is not unique to Payload; it is a pattern across many “pro” libraries in 2025.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We wanted guardrails. We ended up building a maze and calling it architecture.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  The Hidden Cost of Type Gymnastics
&lt;/h3&gt;

&lt;p&gt;Every time we ship a beautifully complex composite type, we pay a price that does not show up in the type system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cognitive overhead&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
New devs spend days decoding types instead of understanding the domain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging pain&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Compiler errors point into nested conditional types with messages that read like algebra proofs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Refactor paralysis&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Nobody wants to touch core models because one wrong tweak to a generic breaks half the app’s inferred types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Onboarding friction&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Every new hire needs a private masterclass just to understand how types are wired. Until then, they are scared to change anything.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The irony: the more we optimize type cleverness, the less likely it is that anyone will have the courage to keep those types correct over time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A type system that only one person understands is not a safety net. It’s a single point of failure.&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%2Fdgghm0eqhehg39nnw8ov.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%2Fdgghm0eqhehg39nnw8ov.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Why We Got Here: Incentives and Ego
&lt;/h3&gt;

&lt;p&gt;How did we end up with types that look like unreadable math equations?&lt;/p&gt;

&lt;p&gt;A few predictable reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Library ecosystem incentives&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Library authors want strong “DX” stories and love to showcase magical inference that “just works.” Under the hood, that often means very heavy advanced types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conference / content culture&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Talks and posts about wild TypeScript tricks perform well. Talks about “use simple types, they age better” do not.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Engineer ego&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It feels good to bend the type system to your will. It is less glamorous to say, “We could, but we shouldn’t.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lack of boundaries&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
We never collectively agreed on a red line like: “Beyond this level of complexity, we stop and fall back to simpler types and runtime checks.”&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we kept pushing.&lt;/p&gt;

&lt;p&gt;And now we have codebases where the runtime logic is straightforward, but the types around it look like an SAT puzzle.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We confuse ‘possible in TypeScript’ with ‘good idea in a real-world codebase.’ They are not the same category.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  The Core Argument: Legibility &amp;gt; Exotic Type Wizardry
&lt;/h3&gt;

&lt;p&gt;The case against high-level type gymnastics is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If your types are more complicated than the logic they protect, you are probably doing it wrong.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Strong types are valuable.&lt;br&gt;&lt;br&gt;
But they are not free.&lt;/p&gt;

&lt;p&gt;They cost:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;time to read,
&lt;/li&gt;
&lt;li&gt;time to onboard,
&lt;/li&gt;
&lt;li&gt;time to refactor,
&lt;/li&gt;
&lt;li&gt;and time to debug when the abstractions crack at the edges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This trade-off used to be obviously worth it: basic interfaces, enums, discriminated unions — huge value, small complexity.&lt;/p&gt;

&lt;p&gt;Today, for many teams, the curve has flipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;marginal safety improvements,
&lt;/li&gt;
&lt;li&gt;at the cost of major complexity increases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, you are not buying reliability.&lt;/p&gt;

&lt;p&gt;You are buying a false sense of control while quietly making your system more brittle.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The job is not to push TypeScript to its limits. The job is to make future changes less dangerous for normal humans.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Simple Rules for Saner Types
&lt;/h3&gt;

&lt;p&gt;If you are feeling called out by your own code right now — good.&lt;/p&gt;

&lt;p&gt;The way out is not “stop using TypeScript.” The way out is to use it like an adult instead of like a magician.&lt;/p&gt;

&lt;p&gt;A few rules that help:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Prefer explicit types over over-inferred magic
&lt;/h4&gt;

&lt;p&gt;It is often better to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;write an explicit interface or type alias,
&lt;/li&gt;
&lt;li&gt;accept slightly more verbosity,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;than to rely on a tower of generics that infers everything but is impossible to understand.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Cap the depth of advanced types
&lt;/h4&gt;

&lt;p&gt;Informal rule:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one level of conditional types → okay,
&lt;/li&gt;
&lt;li&gt;nested conditionals + recursion + intersected mapped types → probably not okay.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a type spans more than 10–15 lines and requires comments to explain itself, consider breaking it apart or simplifying the expressiveness.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Model the domain, not the entire universe
&lt;/h4&gt;

&lt;p&gt;Types should describe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the shapes you actually use,
&lt;/li&gt;
&lt;li&gt;the constraints the domain really has.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They do not have to model *every possible* configuration that a library theoretically supports.&lt;/p&gt;

&lt;p&gt;90% coverage with 30% of the complexity is often a better trade.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Use runtime validation when static types fall apart
&lt;/h4&gt;

&lt;p&gt;If advanced types start fighting you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;add good runtime validation (e.g., Zod, Yup, custom validators),
&lt;/li&gt;
&lt;li&gt;keep static types modest and understandable,
&lt;/li&gt;
&lt;li&gt;let the runtime layer enforce the last mile of safety.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5. Measure complexity by “who can safely edit this”
&lt;/h4&gt;

&lt;p&gt;If only the original author can modify a type without fear, it is too complex.&lt;/p&gt;

&lt;p&gt;Make it a standard that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;at least two other devs can explain and edit any core type definition,
&lt;/li&gt;
&lt;li&gt;if not, it must be simplified or documented to death.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;A slightly less clever type that everyone understands is worth more than a perfect type that everyone tiptoes around.&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%2Fe6iokokmmdz5rcardxm1.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%2Fe6iokokmmdz5rcardxm1.png" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Where This Hurts Most: API-heavy and CMS-heavy Apps
&lt;/h3&gt;

&lt;p&gt;The worst offenders for type gymnastics today are often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Strongly typed CMS and headless platforms&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Payload, Contentful, Sanity, custom internal CMSs — all trying to give you perfect type safety for content schemas and queries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API client generators&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tools that generate types for every endpoint, every param, every response shape.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Form and query builders&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Libraries that expose highly generic builder patterns and want types to follow every chain.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools genuinely solve real problems.&lt;br&gt;&lt;br&gt;
But without restraint, they create types that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amazing for autocomplete demos,
&lt;/li&gt;
&lt;li&gt;brutal for maintenance and debugging.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As an application team, you are allowed to say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“We will wrap this with simpler app-level types.”
&lt;/li&gt;
&lt;li&gt;“We are okay with losing some perfect inference in exchange for code we can reason about.”&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Enterprise-grade type safety is useless if it also creates enterprise-grade fear of touching the code.&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%2Fgoygqkqq5tfq4m4wsm9u.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%2Fgoygqkqq5tfq4m4wsm9u.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  A Healthier TypeScript Culture Going Forward
&lt;/h3&gt;

&lt;p&gt;We do not need to abandon advanced TypeScript.&lt;/p&gt;

&lt;p&gt;We need a new default stance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;simple, explicit types&lt;/strong&gt; by default.
&lt;/li&gt;
&lt;li&gt;Reach for advanced types when there is a clear, recurring pain they solve.
&lt;/li&gt;
&lt;li&gt;Stop shipping clever type tricks as proof of competence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What that looks like in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code reviews that ask “Is this readable?” before asking “Is this the most generic possible?”
&lt;/li&gt;
&lt;li&gt;Libraries that publish both &lt;strong&gt;“full magic”&lt;/strong&gt; and &lt;strong&gt;“simple mode”&lt;/strong&gt; APIs.
&lt;/li&gt;
&lt;li&gt;Teams that accept small runtime checks instead of pushing every edge-case into the type system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are a senior developer, this is on you.&lt;/p&gt;

&lt;p&gt;Your juniors and your future self will live inside the choices you make about types today.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You are not paid to impress the TypeScript compiler. You are paid to make change safer for your team.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;I fix &lt;strong&gt;the Angular apps that generalists break.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m Karol Modelski, senior Angular developer and frontend architect rescuing legacy B2B SaaS frontends.&lt;/p&gt;

&lt;p&gt;If your Angular app is slowing your team down, start with a 3‑minute teardown of your current setup: &lt;a href="https://www.karol-modelski.scale-sail.io/" rel="noopener noreferrer"&gt;https://www.karol-modelski.scale-sail.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>typescript</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Stop Treating Angular as a Second-Class Framework for UI Components</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 16 Apr 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/stop-treating-angular-as-a-second-class-framework-for-ui-components-3l8h</link>
      <guid>https://dev.to/karol_modelski/stop-treating-angular-as-a-second-class-framework-for-ui-components-3l8h</guid>
      <description>&lt;p&gt;You’ve been promised “Angular support” more times than you can count.&lt;br&gt;&lt;br&gt;
What you got instead was a React library in an Angular costume.&lt;/p&gt;

&lt;p&gt;A thin compatibility layer. A demo that technically works, but feels wrong the second you try to build something serious with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular support is not the same as Angular respect.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And the more you look at how Angular tooling is actually built, the less patience you have for ecosystems that treat Angular like an afterthought.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Lie Behind “Angular Support”
&lt;/h3&gt;

&lt;p&gt;You’ve seen it.&lt;/p&gt;

&lt;p&gt;A UI library announces Angular support.&lt;br&gt;&lt;br&gt;
You click the docs.&lt;br&gt;&lt;br&gt;
You get excited for about 15 seconds.&lt;/p&gt;

&lt;p&gt;Then you realize what “support” really means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;awkward APIs that feel imported from another ecosystem,
&lt;/li&gt;
&lt;li&gt;missing Angular ergonomics,
&lt;/li&gt;
&lt;li&gt;strange lifecycle edges,
&lt;/li&gt;
&lt;li&gt;styling and composition patterns that clearly weren’t designed for Angular first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technically, yes, it works.&lt;/p&gt;

&lt;p&gt;But if your first reaction is &lt;strong&gt;“why does this feel like React with extra steps?”&lt;/strong&gt; , then it’s not a native Angular experience.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;”A wrapper is not a first-class developer experience.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And Angular developers know the difference immediately.&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%2Faymdc5sjkztriwj15ahq.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%2Faymdc5sjkztriwj15ahq.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  React Gets Products. Angular Gets Adapters
&lt;/h3&gt;

&lt;p&gt;This is the part nobody wants to say too loudly.&lt;/p&gt;

&lt;p&gt;In a lot of modern tooling ecosystems, React gets the real product.&lt;br&gt;&lt;br&gt;
Angular gets the adaptation layer.&lt;/p&gt;

&lt;p&gt;React gets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the first-class API,
&lt;/li&gt;
&lt;li&gt;the best examples,
&lt;/li&gt;
&lt;li&gt;the cleanest DX,
&lt;/li&gt;
&lt;li&gt;the product decisions designed around its mental model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Angular gets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“integration”,
&lt;/li&gt;
&lt;li&gt;“compatibility”,
&lt;/li&gt;
&lt;li&gt;“support coming soon”,
&lt;/li&gt;
&lt;li&gt;or a wrapper that exposes just enough to close the sales objection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That doesn’t mean every React-first library is bad.&lt;br&gt;&lt;br&gt;
It means Angular is too often treated as a market checkbox instead of a platform that deserves design respect.&lt;/p&gt;

&lt;p&gt;And once you’ve felt that enough times, you stop reading “Angular support” as a positive signal.&lt;/p&gt;

&lt;p&gt;You start reading it as a warning label.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most multi-framework libraries are really one framework with export options.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Problem Isn’t Just Pride. It’s Product Quality
&lt;/h3&gt;

&lt;p&gt;This is not framework tribalism for its own sake.&lt;/p&gt;

&lt;p&gt;Wrapper-heavy ecosystems create real problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;worse developer experience,
&lt;/li&gt;
&lt;li&gt;inconsistent abstractions,
&lt;/li&gt;
&lt;li&gt;harder debugging,
&lt;/li&gt;
&lt;li&gt;awkward state integration,
&lt;/li&gt;
&lt;li&gt;weaker performance characteristics,
&lt;/li&gt;
&lt;li&gt;APIs that don’t fit Angular’s strengths.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a library is born in one ecosystem and then “ported” into Angular without fully embracing Angular’s patterns, you pay for it everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in the template layer,
&lt;/li&gt;
&lt;li&gt;in reactivity,
&lt;/li&gt;
&lt;li&gt;in change detection assumptions,
&lt;/li&gt;
&lt;li&gt;in styling APIs,
&lt;/li&gt;
&lt;li&gt;in the mental overhead of using something that never really feels native.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That cost compounds fast in real products.&lt;/p&gt;

&lt;p&gt;A bad wrapper is not just ugly.&lt;br&gt;&lt;br&gt;
It becomes &lt;strong&gt;architecture debt&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The ecosystem quality you tolerate today becomes the architecture debt you inherit tomorrow.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Angular Developers Are Not Asking for Special Treatment
&lt;/h3&gt;

&lt;p&gt;The ask is much simpler:&lt;/p&gt;

&lt;p&gt;If you say your library supports Angular, then build for Angular like it matters.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs that feel natural in Angular,
&lt;/li&gt;
&lt;li&gt;composition patterns that respect Angular architecture,
&lt;/li&gt;
&lt;li&gt;state handling that fits Angular’s reactive model,
&lt;/li&gt;
&lt;li&gt;docs written for Angular devs, not translated from another framework,
&lt;/li&gt;
&lt;li&gt;examples that look production-ready, not “we made this demo work once.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Angular is not some fringe hobby framework.&lt;br&gt;&lt;br&gt;
It powers serious enterprise apps, internal tools, fintech platforms, compliance systems, and big teams that care about long-term maintainability.&lt;/p&gt;

&lt;p&gt;So the expectation is not unreasonable.&lt;/p&gt;

&lt;p&gt;If the framework is good enough to power critical systems, it’s good enough to deserve &lt;strong&gt;native tools&lt;/strong&gt; , not compatibility leftovers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If Angular is good enough for core systems, it’s good enough to deserve first-class tools.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Why Developers Are Spending Months on Angular-First Tools
&lt;/h3&gt;

&lt;p&gt;At some point, complaining stops being interesting.&lt;/p&gt;

&lt;p&gt;You either keep using wrappers and live with the friction, or someone builds the thing they wish existed.&lt;/p&gt;

&lt;p&gt;That’s why you increasingly see stories of developers who spend months building &lt;strong&gt;Angular-first tools&lt;/strong&gt;  — including rich text editors — instead of gluing React-centric libraries into their apps.&lt;/p&gt;

&lt;p&gt;Not because the world desperately needed yet another editor.&lt;br&gt;&lt;br&gt;
And not because anyone wanted a vanity side project.&lt;/p&gt;

&lt;p&gt;They did it because they were tired of pretending Angular developers should be grateful for second-hand abstractions.&lt;/p&gt;

&lt;p&gt;They wanted things that felt native from the inside out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;designed around Angular patterns,
&lt;/li&gt;
&lt;li&gt;built with &lt;strong&gt;Signals&lt;/strong&gt; in mind,
&lt;/li&gt;
&lt;li&gt;not fighting Angular templates,
&lt;/li&gt;
&lt;li&gt;not leaking another framework’s assumptions into every integration point.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If your “Angular integration” feels like React with extra steps, it’s not Angular-native.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The deeper you look at these case studies, the clearer the pattern becomes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most “Angular ports” aren’t really ports. They’re translations with compromises.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because once someone tries to build something properly for Angular, it becomes obvious how many “multi-framework” tools are really just one framework with export options.&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%2F45n2tsaizpqrcaw0zhne.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%2F45n2tsaizpqrcaw0zhne.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Signals Changed the Standard
&lt;/h3&gt;

&lt;p&gt;Angular’s ecosystem has a chance right now to stop copying old patterns and start building better ones.&lt;/p&gt;

&lt;p&gt;Signals matter here.&lt;/p&gt;

&lt;p&gt;Because an Angular-native future should not be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;old wrapper patterns with new branding,
&lt;/li&gt;
&lt;li&gt;React mental models translated into Angular syntax,
&lt;/li&gt;
&lt;li&gt;or generic abstractions that ignore what Angular is actually good at.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;signal-first APIs,
&lt;/li&gt;
&lt;li&gt;cleaner state flows,
&lt;/li&gt;
&lt;li&gt;better template ergonomics,
&lt;/li&gt;
&lt;li&gt;components designed for Angular’s architecture instead of awkwardly tolerated by it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where Angular devs need to get more ambitious.&lt;/p&gt;

&lt;p&gt;Not “Can we get this React thing working in Angular?”&lt;br&gt;&lt;br&gt;
But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What would the best possible Angular-native version of this tool look like?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s a much better question.&lt;br&gt;&lt;br&gt;
And honestly, it’s long overdue.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Angular Community Needs More Conviction
&lt;/h3&gt;

&lt;p&gt;One of Angular’s biggest ecosystem problems is not technical.&lt;/p&gt;

&lt;p&gt;It’s psychological.&lt;/p&gt;

&lt;p&gt;Too many Angular developers have been trained to accept less:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fewer native libraries,
&lt;/li&gt;
&lt;li&gt;slower ecosystem momentum,
&lt;/li&gt;
&lt;li&gt;weaker mindshare,
&lt;/li&gt;
&lt;li&gt;and “good enough” wrapper support.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That creates a strange defeatism.&lt;/p&gt;

&lt;p&gt;People start talking like Angular is lucky just to be included.&lt;/p&gt;

&lt;p&gt;It isn’t.&lt;/p&gt;

&lt;p&gt;Angular deserves builders who act like it’s worth building for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular doesn’t need more compatibility. It needs conviction.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That means more developers creating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Angular-first component systems,
&lt;/li&gt;
&lt;li&gt;Angular-native editors, tables, charts, and design tools,
&lt;/li&gt;
&lt;li&gt;signal-based primitives,
&lt;/li&gt;
&lt;li&gt;and products that don’t apologize for not being React.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because if Angular developers keep waiting for React ecosystems to save them, they will keep getting what they’ve always gotten:&lt;/p&gt;

&lt;p&gt;Adapters.&lt;br&gt;&lt;br&gt;
Wrappers.&lt;br&gt;&lt;br&gt;
Second-class support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you keep acting like Angular is second-class, don’t be surprised when the ecosystem treats it that way.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  This Isn’t About Beating React
&lt;/h3&gt;

&lt;p&gt;React is not the villain here.&lt;/p&gt;

&lt;p&gt;React won the mindshare war for a reason:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;huge ecosystem momentum,
&lt;/li&gt;
&lt;li&gt;lower barrier to experimentation,
&lt;/li&gt;
&lt;li&gt;enormous commercial gravity around component libraries and UI tooling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fine.&lt;/p&gt;

&lt;p&gt;But Angular developers keep making the mistake of treating that as proof that Angular should just consume whatever React produces.&lt;/p&gt;

&lt;p&gt;That’s not strategy.&lt;br&gt;&lt;br&gt;
That’s dependency.&lt;/p&gt;

&lt;p&gt;The real question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we get more React libraries into Angular?&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;What tools should exist because Angular exists?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s how you build a healthier ecosystem.&lt;/p&gt;

&lt;p&gt;Not by begging for parity through wrappers, but by creating products that are unmistakably native.&lt;/p&gt;




&lt;h3&gt;
  
  
  Native Angular Tools Will Always Feel Better
&lt;/h3&gt;

&lt;p&gt;A real Angular-native tool gives you things wrappers rarely do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs that match Angular instincts,
&lt;/li&gt;
&lt;li&gt;predictable integration into Angular architecture,
&lt;/li&gt;
&lt;li&gt;cleaner mental models,
&lt;/li&gt;
&lt;li&gt;fewer translation layers,
&lt;/li&gt;
&lt;li&gt;less framework dissonance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And when the product itself is designed for Angular from day one, the quality difference shows up everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in how fast teams onboard,
&lt;/li&gt;
&lt;li&gt;in how easy it is to debug,
&lt;/li&gt;
&lt;li&gt;in how natural it feels to extend,
&lt;/li&gt;
&lt;li&gt;in how much trust there is in the tool long-term.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That trust matters.&lt;/p&gt;

&lt;p&gt;Because teams don’t just adopt components.&lt;br&gt;&lt;br&gt;
They adopt &lt;strong&gt;maintenance futures&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A wrapper always feels like borrowed infrastructure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And borrowed infrastructure is the first thing people want to rip out when things go wrong.&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%2Fl5q6tiuabqc3xyaklate.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%2Fl5q6tiuabqc3xyaklate.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Manifesto
&lt;/h3&gt;

&lt;p&gt;So here’s the position, clearly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stop calling wrappers “great Angular support.”
&lt;/li&gt;
&lt;li&gt;Stop rewarding ecosystems that treat Angular as a checkbox.
&lt;/li&gt;
&lt;li&gt;Stop acting grateful for tools that were never truly designed for Angular developers.
&lt;/li&gt;
&lt;li&gt;Stop lowering the bar for what “Angular-native” should mean.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;better Angular-first libraries,
&lt;/li&gt;
&lt;li&gt;signal-based primitives,
&lt;/li&gt;
&lt;li&gt;tooling that respects Angular architecture,
&lt;/li&gt;
&lt;li&gt;products that feel like they belong in Angular, not merely tolerate it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If Angular is good enough for the hardest problems, it’s good enough to deserve first-class tools.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are building for Angular, build with standards high enough that nobody has to ask whether it was native.&lt;/p&gt;

&lt;p&gt;They should feel it instantly.&lt;/p&gt;




&lt;h3&gt;
  
  
  Angular Deserves Better
&lt;/h3&gt;

&lt;p&gt;This is bigger than one editor, one library, or one complaint.&lt;/p&gt;

&lt;p&gt;It’s about whether Angular developers keep accepting second-class tooling in a first-class framework.&lt;/p&gt;

&lt;p&gt;You can read plenty of stories of teams who inherited Angular apps full of awkward wrapper libraries and half-baked integrations.&lt;br&gt;&lt;br&gt;
Once those abstractions land in a codebase, they stay there for years.&lt;/p&gt;

&lt;p&gt;That’s why this matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The shortcuts you accept at the library level become the nightmares you debug at the product level.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The ecosystem quality tolerated today becomes the architecture debt inherited tomorrow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Angular deserves better than wrappers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if the ecosystem is not going to hand Angular better native tools, then Angular developers will have to build them.&lt;/p&gt;

&lt;p&gt;That’s not just a technical decision.&lt;/p&gt;

&lt;p&gt;It’s a standards decision.&lt;br&gt;&lt;br&gt;
A community decision.&lt;br&gt;&lt;br&gt;
A respect decision.&lt;/p&gt;

&lt;p&gt;So yes — stop treating Angular as a second-class framework for UI components.&lt;/p&gt;

&lt;p&gt;And start building like it isn’t one.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;I fix &lt;strong&gt;the Angular apps that generalists break.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m Karol Modelski, senior Angular developer and frontend architect rescuing legacy B2B SaaS frontends.&lt;/p&gt;

&lt;p&gt;If your Angular app is slowing your team down, start with a 3‑minute teardown of your current setup: &lt;a href="https://www.karol-modelski.scale-sail.io/" rel="noopener noreferrer"&gt;https://www.karol-modelski.scale-sail.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>discuss</category>
      <category>frontend</category>
      <category>ui</category>
    </item>
    <item>
      <title>Your Tech Stack Isn’t Your Ceiling. Your Story Is</title>
      <dc:creator>Karol Modelski</dc:creator>
      <pubDate>Thu, 09 Apr 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/karol_modelski/your-tech-stack-isnt-your-ceiling-your-story-is-4mi2</link>
      <guid>https://dev.to/karol_modelski/your-tech-stack-isnt-your-ceiling-your-story-is-4mi2</guid>
      <description>&lt;p&gt;For most of my career, I treated my tech stack like a progress bar.&lt;br&gt;&lt;br&gt;
More Angular. More RxJS. More Nx. More Supabase. More AI tools.&lt;br&gt;&lt;br&gt;
If I just kept adding skills, the ceiling would move up automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I kept upgrading my stack and my career stayed exactly the same.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I hit a point where I had a &lt;strong&gt;loaded stack&lt;/strong&gt; and a surprisingly flat trajectory.&lt;br&gt;&lt;br&gt;
Freelance matches were thin. Take‑homes still got rejected. My own AI SaaS hit friction that more syntax couldn’t fix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I didn’t hit a skills ceiling. I hit a positioning ceiling.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Senior Playbook: Add Frameworks, Hope for the Best
&lt;/h3&gt;

&lt;p&gt;Watch how most senior devs “level up”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They add another frontend framework (React, Next, Svelte).
&lt;/li&gt;
&lt;li&gt;They sprinkle in a backend (Node, .NET, Java, Go).
&lt;/li&gt;
&lt;li&gt;They experiment with a new database, a cloud provider, maybe Kubernetes for good measure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The CV gets longer.&lt;br&gt;&lt;br&gt;
The LinkedIn headline becomes a tech‑stack salad.&lt;br&gt;&lt;br&gt;
The feeling is: “I’m more employable because I know more tools.”&lt;/p&gt;

&lt;p&gt;In reality, what you often get is &lt;strong&gt;horizontal growth:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You go from “Angular dev” to “Angular + React + Node dev”.
&lt;/li&gt;
&lt;li&gt;But you’re still competing in the same generic pool: “senior fullstack developer who can build features.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If your LinkedIn headline is just a list of tools, you’ve already lost the story game.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meanwhile, the market is quietly rewarding people who did something else:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They &lt;strong&gt;picked a niche&lt;/strong&gt; (“I fix broken fintech dashboards that lose users on step 3 of onboarding.”).
&lt;/li&gt;
&lt;li&gt;They &lt;strong&gt;productized their value&lt;/strong&gt; (“Performance and UX audits that lift conversion by 15% in 2 weeks.”).
&lt;/li&gt;
&lt;li&gt;They learned to &lt;strong&gt;tell a story&lt;/strong&gt; about their work, not just list the tech.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then AI arrived and quietly pushed the stack race into even stranger territory.&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%2Fezlmpxezwfz7hnsede1b.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%2Fezlmpxezwfz7hnsede1b.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  My Case Study: Maxed Out on Angular, Stuck on Story
&lt;/h3&gt;

&lt;p&gt;Here’s my situation, stripped of ego.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I’ve been in Angular for 7+ years.
&lt;/li&gt;
&lt;li&gt;I’ve done legacy migrations, zoneless modernizations, Signal‑based state, Nx monorepos, performance work.
&lt;/li&gt;
&lt;li&gt;I use Claude Code and Antigravity heavily to move faster.
&lt;/li&gt;
&lt;li&gt;I can operate as the “Legacy Rescue” person: the one who drops into a messy Angular codebase and turns chaos into something you can ship.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On paper, that looks great.&lt;/p&gt;

&lt;p&gt;In practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Most “Angular roles” now want fullstack with .NET or Java on the backend — stacks I &lt;strong&gt;don’t&lt;/strong&gt; want to go into.
&lt;/li&gt;
&lt;li&gt;Angular‑only freelance opportunities are fewer, and many still treat you like a generic pair of hands.
&lt;/li&gt;
&lt;li&gt;I started my own solo company: building &lt;strong&gt;AI‑driven SaaS&lt;/strong&gt; and offering &lt;strong&gt;automation consulting&lt;/strong&gt;. Both need web and mobile, and I can’t hide in “Angular only” anymore.
&lt;/li&gt;
&lt;li&gt;Even with AI support, I hit friction on things like Supabase, auth, RLS, and mobile — not because they’re impossible, but because my brain was still wired around “stack first.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My instinctive solution?&lt;br&gt;&lt;br&gt;
“Maybe I should add React. Or Next. Or a backend stack. Or something new…”&lt;/p&gt;

&lt;p&gt;But when I looked honestly at what was actually blocking me, it wasn’t the lack of one more framework.&lt;/p&gt;

&lt;p&gt;It was the fact that I was still thinking like &lt;strong&gt;a stack&lt;/strong&gt; , not like &lt;strong&gt;a story&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  What “Your Story” Actually Means as a Developer
&lt;/h3&gt;

&lt;p&gt;Let’s clear something up: “your story” is not a fluffy bio paragraph.&lt;/p&gt;

&lt;p&gt;In a tech context, your story is the &lt;strong&gt;through‑line&lt;/strong&gt; that answers three questions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Positioning — Who are you for?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — “I rescue legacy Angular apps for B2B SaaS founders who can’t afford downtime.”&lt;br&gt;&lt;br&gt;
 — “I build fast MVPs for non‑technical founders in fintech.”&lt;br&gt;&lt;br&gt;
 — “I design developer tooling that cuts CI times in half.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Niche — What specific problem do you own?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — “Angular performance &amp;amp; modernization for compliance platforms.”&lt;br&gt;&lt;br&gt;
 — “AI‑powered internal tools for ops teams drowning in spreadsheets.”&lt;br&gt;&lt;br&gt;
 — “Onboarding flows for SaaS with high trial drop‑off.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Product value — What outcome do you reliably create?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — “We cut your largest Angular page LCP by 40%.”&lt;br&gt;&lt;br&gt;
 — “We ship your MVP in 4 weeks so you can sell before you hire.”&lt;br&gt;&lt;br&gt;
 — “We reduce your manual ops time by 30% with automations.”&lt;/p&gt;

&lt;p&gt;Notice what’s missing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“I know Angular, React, Node, Next, Prisma, Postgres, Tailwind, Docker, AWS.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your &lt;strong&gt;tech stack is the implementation detail&lt;/strong&gt; behind that story.&lt;br&gt;&lt;br&gt;
Clients, hiring managers, and users care &lt;strong&gt;far more&lt;/strong&gt; about the story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most seniors don’t have a stack problem. They have a positioning problem disguised as a stack obsession.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  AI Changed the Stack Equation (Whether We Like It or Not)
&lt;/h3&gt;

&lt;p&gt;Before AI coding tools, being “the person who knows X” was a real edge.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You knew Angular inside out.
&lt;/li&gt;
&lt;li&gt;Or you knew React best practices before others.
&lt;/li&gt;
&lt;li&gt;Or you knew how to hand‑roll Node backends quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code can scaffold an unfamiliar stack.
&lt;/li&gt;
&lt;li&gt;AI can translate patterns between frameworks.
&lt;/li&gt;
&lt;li&gt;Antigravity can reason about codebases you haven’t even seen before.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This doesn’t make expertise useless.&lt;br&gt;&lt;br&gt;
But it &lt;strong&gt;shrinks the value&lt;/strong&gt; of “I’ve memorized every corner of this framework” as your main differentiator.&lt;/p&gt;

&lt;p&gt;AI can help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;wire up a basic Supabase schema,
&lt;/li&gt;
&lt;li&gt;draft RLS policies,
&lt;/li&gt;
&lt;li&gt;hook Next.js to Stripe,
&lt;/li&gt;
&lt;li&gt;scaffold a mobile client in React Native.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What AI &lt;strong&gt;can’t&lt;/strong&gt; do for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;choose the &lt;strong&gt;right problem&lt;/strong&gt; to solve,
&lt;/li&gt;
&lt;li&gt;pick a &lt;strong&gt;clear niche&lt;/strong&gt; with money and urgency,
&lt;/li&gt;
&lt;li&gt;design a &lt;strong&gt;valuable product&lt;/strong&gt; around that problem,
&lt;/li&gt;
&lt;li&gt;tell a compelling story about why your solution matters,
&lt;/li&gt;
&lt;li&gt;build &lt;strong&gt;trust&lt;/strong&gt; with the people who pay you.&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%2Fhh8pqxkliz0utimkg6m1.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%2Fhh8pqxkliz0utimkg6m1.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI can fake a stack. It can’t fake a story, a niche, or a value proposition.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you keep treating “leveling up” as “adding more stack”, you’re racing in a lane that AI is rapidly commoditizing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI will happily write yet another CRUD app; it won’t convince anyone they should pay you senior rates.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  How I’d Actually Choose a Stack Today (Assuming AI Support)
&lt;/h3&gt;

&lt;p&gt;So how do you decide what to build with, as a senior dev in 2026?&lt;/p&gt;

&lt;p&gt;If we assume you’re willing to lean on AI to fill gaps, the stack decision comes &lt;strong&gt;after&lt;/strong&gt; three questions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Who is this for?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — Example: B2B SaaS founders with a broken Angular app.&lt;br&gt;&lt;br&gt;
 — Or: ops teams in fintech drowning in manual workflows.&lt;br&gt;&lt;br&gt;
 — Or: solo founders who need to validate an AI product in 4 weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. What painful bottleneck am I solving?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — LCP/TBT too high, users bailing on dashboards.&lt;br&gt;&lt;br&gt;
 — Manual processes blocking growth.&lt;br&gt;&lt;br&gt;
 — No MVP, no sales conversations, just “ideas”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Where does the value live?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — In a dashboard? A small internal tool? A marketing site? A mobile touchpoint? An automation that runs in the background?&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%2Fbvmdaypjcy2e9la8mt6w.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%2Fbvmdaypjcy2e9la8mt6w.png" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Only &lt;strong&gt;after&lt;/strong&gt; that do I pick a stack, with three constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Can I reason about it?&lt;/strong&gt; (I don’t need to be an expert, but I must be able to debug it with AI help.)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can AI accelerate me in it?&lt;/strong&gt; (Good tooling, good examples.)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Will my buyer care what I used?&lt;/strong&gt; (Spoiler: usually not, as long as it’s stable and maintainable.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For my AI SaaS MVP, a pragmatic choice might be:&lt;br&gt;&lt;br&gt;
 — Next.js for the app,&lt;br&gt;&lt;br&gt;
 — Supabase for auth and data,&lt;br&gt;&lt;br&gt;
 — Stripe for billing,&lt;br&gt;&lt;br&gt;
 — plus AI tools to patch my non‑Next gaps.&lt;br&gt;&lt;br&gt;
The buyer doesn’t care that it’s not Angular. They care that it works, loads fast, and makes them money.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For my consulting, the opposite is true:&lt;br&gt;&lt;br&gt;
 — I &lt;strong&gt;should&lt;/strong&gt; double‑down on Angular as a stack,&lt;br&gt;&lt;br&gt;
 — but package it as &lt;strong&gt;Angular audits, detoxes, and modernization sprints,&lt;/strong&gt; not “hours of Angular.”&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your stack is &lt;strong&gt;a cost function and a delivery detail&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Your story is &lt;strong&gt;the value proposition&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Real Ceiling: Over‑Indexing on Stack, Under‑Indexing on Story
&lt;/h3&gt;

&lt;p&gt;Here’s the pattern I see (in myself and other seniors):&lt;/p&gt;

&lt;p&gt;We pour energy into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;learning new frameworks,
&lt;/li&gt;
&lt;li&gt;adding more tools to the CV,
&lt;/li&gt;
&lt;li&gt;chasing the “hottest” stack on Twitter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We under‑invest in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clarifying who we actually serve,
&lt;/li&gt;
&lt;li&gt;narrowing to a problem we can own,
&lt;/li&gt;
&lt;li&gt;collecting and telling stories of outcomes, not features,
&lt;/li&gt;
&lt;li&gt;packaging our skills into offers that are easy to buy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then we quietly wonder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;why our applications look like everyone else’s,
&lt;/li&gt;
&lt;li&gt;why we feel “replaceable” in interviews,
&lt;/li&gt;
&lt;li&gt;why our freelancing rates stall,
&lt;/li&gt;
&lt;li&gt;why our own products struggle to gain traction.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Your biggest bottleneck probably isn’t your stack. It’s how forgettable your story is.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The ceiling isn’t that you “only know Angular” or “only know React”.&lt;br&gt;&lt;br&gt;
The ceiling is that your work is indistinguishable from every other “senior dev” who learned the same stack and never turned it into a story.&lt;/p&gt;




&lt;h3&gt;
  
  
  What “Leveling Up” Looks Like in Practice Now
&lt;/h3&gt;

&lt;p&gt;If I rewired my own senior‑dev leveling plan around this, it would look less like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Add React, then Go, then AWS cert 1, then AWS cert 2.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And more like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sharpen positioning&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — “I fix the Angular apps that generalists break for B2B SaaS and fintech.”&lt;br&gt;&lt;br&gt;
 — or “I build AI‑powered internal tools that cut ops time by 30%.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Define 1–2 niches&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — Angular modernization for compliance platforms.&lt;br&gt;&lt;br&gt;
 — AI‑powered automation for data‑heavy teams.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Productize my work&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — Fixed‑scope Angular audit.&lt;br&gt;&lt;br&gt;
 — 2‑week performance sprint.&lt;br&gt;&lt;br&gt;
 — AI automation pilot with one clear success metric.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use AI to bridge stack gaps on demand&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — Need a tiny Next.js marketing site? Let AI bootstrap it and I reason check it.&lt;br&gt;&lt;br&gt;
 — Need to wire Supabase RLS safely? Draft with AI, then review as an architect.&lt;br&gt;&lt;br&gt;
 — Need a mobile companion? Use AI to scaffold React Native or Flutter and validate quickly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tell the story publicly&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 — Medium articles that walk through legacy rescues, performance wins, and AI‑assisted builds — not just “here’s how to use X API”.&lt;br&gt;&lt;br&gt;
 — LinkedIn posts that show before/after metrics and decisions, not just tools.&lt;br&gt;&lt;br&gt;
 — Case studies on my site framed as narratives, not portfolios.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The stack is now a &lt;strong&gt;servant&lt;/strong&gt; of the story, not the star of the show.&lt;/p&gt;




&lt;h3&gt;
  
  
  Your Tech Stack Isn’t Your Ceiling
&lt;/h3&gt;

&lt;p&gt;I’m not against learning new frameworks.&lt;br&gt;&lt;br&gt;
I’m still improving my web fundamentals. I’m still expanding beyond Angular where it makes sense. I still enjoy the craft.&lt;/p&gt;

&lt;p&gt;But I no longer believe my next breakthrough will come from adding yet another logo to my profile.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your tech stack gets you into the room. Your story decides what happens once you’re there.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your story is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;who you serve,
&lt;/li&gt;
&lt;li&gt;what bottleneck you remove,
&lt;/li&gt;
&lt;li&gt;what outcomes you can point to,
&lt;/li&gt;
&lt;li&gt;how clearly you can explain it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI will keep eroding the advantage of “I know this stack slightly better than the next person.”&lt;br&gt;&lt;br&gt;
The advantage it can’t touch is “I know who I’m for, what I solve for them, and I can ship value fast — with whatever stack makes sense.”&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Before you learn another framework, try writing a better story about the ones you already know.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So before you commit to the next framework on your roadmap, try this:&lt;/p&gt;

&lt;p&gt;Write one paragraph that starts with:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;“I help [who] go from [pain] to [result] by [what you actually do].”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If that feels harder than learning a new tool, that’s a sign.&lt;/p&gt;

&lt;p&gt;It’s not your stack that’s holding you back.&lt;br&gt;&lt;br&gt;
It’s the story you haven’t written yet.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;I fix &lt;strong&gt;the Angular apps that generalists break.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Karol Modelski is a senior Angular developer and frontend architect rescuing legacy B2B SaaS frontends.&lt;br&gt;&lt;br&gt;
If your Angular app is slowing your team down, start here: &lt;a href="https://www.karol-modelski.scale-sail.io/" rel="noopener noreferrer"&gt;https://www.karol-modelski.scale-sail.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>discuss</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
