<?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: Kalavathi Bathula</title>
    <description>The latest articles on DEV Community by Kalavathi Bathula (@kalavathibathula).</description>
    <link>https://dev.to/kalavathibathula</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%2F4112602%2F6563bbe9-7edd-4791-995e-9ed6c147b88e.png</url>
      <title>DEV Community: Kalavathi Bathula</title>
      <link>https://dev.to/kalavathibathula</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kalavathibathula"/>
    <language>en</language>
    <item>
      <title>The concepts that trip up senior engineers when they switch stacks</title>
      <dc:creator>Kalavathi Bathula</dc:creator>
      <pubDate>Sun, 06 Sep 2026 16:49:58 +0000</pubDate>
      <link>https://dev.to/kalavathibathula/the-concepts-that-trip-up-senior-engineers-when-they-switch-stacks-5ddi</link>
      <guid>https://dev.to/kalavathibathula/the-concepts-that-trip-up-senior-engineers-when-they-switch-stacks-5ddi</guid>
      <description>&lt;p&gt;I have spent the last two years mapping how engineering concepts move between technology stacks. Not writing tutorials — mapping. Taking one stack and another and going concept by concept, asking a narrow question each time: does this transfer, and if it doesn't, why not.&lt;/p&gt;

&lt;p&gt;Twelve stack pairs so far. Angular to React, Angular to Vue, Node to Spring Boot, SQL to MongoDB, REST to GraphQL, Docker to Kubernetes, AWS to Azure, and a few others. Seventeen core concepts in each.&lt;/p&gt;

&lt;p&gt;The thing I did not expect: the hard part is not what engineers don't know. It's what they think they already know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four ways a concept travels
&lt;/h2&gt;

&lt;p&gt;Once you look at enough pairs, every concept falls into one of four buckets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direct.&lt;/strong&gt; Same idea, different spelling. Angular's &lt;code&gt;*ngIf&lt;/code&gt; and React's &lt;code&gt;{condition &amp;amp;&amp;amp; &amp;lt;div/&amp;gt;}&lt;/code&gt; are the same thought. An engineer reads it once and moves on. These make up a large chunk of any transition, and they're why senior engineers get frustrated with beginner courses — you're being taught to walk when your legs work fine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Partial.&lt;/strong&gt; The idea survives the crossing but the rules change. Component lifecycle exists in Angular and in React, and it means the same thing conceptually — a defined sequence of creation, update and destruction where side effects can run safely. But the shape is completely different. Angular gives you named hooks. React gives you one effect primitive and a dependency array, and expects you to express the same intent through it. You get there, but you can't get there by translating line by line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New.&lt;/strong&gt; No equivalent in the stack you came from. Server components. Kubernetes control loops. Aggregation pipelines, if you've only ever written joins. These are honest work. You know you don't know them, so you go and learn them, and the learning is uneventful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And then the fourth one.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  False friends
&lt;/h2&gt;

&lt;p&gt;Linguists have a name for this. A false friend is a word that looks like a word in your language and means something else. Spanish &lt;em&gt;embarazada&lt;/em&gt; looks like &lt;em&gt;embarrassed&lt;/em&gt;. It means pregnant. People make this mistake once and then never forget it.&lt;/p&gt;

&lt;p&gt;Technology stacks are full of these, and they are where experienced engineers write their worst code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency injection to custom hooks.&lt;/strong&gt; Both solve the same underlying problem: extract cross-cutting logic so consumers depend on a stable interface instead of reimplementing it. An Angular engineer moving to React sees custom hooks and thinks: this is DI with different syntax. Then they write a hook that behaves like a singleton service and cannot understand why each component has its own copy of the state. Angular services are instances managed by an injector with a defined scope. Hooks are functions that run on every render. The purposes rhyme; the mechanics have nothing in common.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RxJS to React Query.&lt;/strong&gt; Both orchestrate asynchronous data into something the UI can render. An Angular engineer reaches for React Query expecting a stream primitive they can compose, and finds a cache with a fetch strategy attached. The mental model that produced elegant RxJS pipelines produces awkward React Query code, because the abstraction is not the same abstraction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL joins to MongoDB aggregation.&lt;/strong&gt; &lt;code&gt;$lookup&lt;/code&gt; looks like a join. It is not a join. Engineers who treat it as one write pipelines that work perfectly on a thousand documents and fall over at a million, because they never internalised that the data model was supposed to change too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node's event loop to Spring Boot's thread pool.&lt;/strong&gt; Both handle concurrency. An engineer who learned concurrency through threads carries a mental model of parallel execution into a runtime that has exactly one thread doing the work, and writes something that blocks it.&lt;/p&gt;

&lt;p&gt;The pattern is always the same. The concept is familiar enough that you skip the part where you check your assumptions. The failure shows up later, in production, in a form that doesn't obviously trace back to the assumption you made.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for how we teach experienced engineers
&lt;/h2&gt;

&lt;p&gt;Almost every learning resource is organised around the destination. Learn React. Learn Kubernetes. Learn Go. They assume you arrive empty.&lt;/p&gt;

&lt;p&gt;But nobody with seven years of experience arrives empty. You arrive with a full mental model of how software works, most of which transfers, some of which transfers with modification, and a small dangerous fraction of which will actively mislead you.&lt;/p&gt;

&lt;p&gt;The useful question is not "what does React do?" It is: &lt;strong&gt;given what I already know, what actually changes?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is a different question, and it has a different answer for every pair of stacks. An Angular engineer moving to React has a completely different learning path from a Vue engineer moving to React, even though the destination is identical. Nobody teaches it that way, because teaching it that way means doing the mapping work for every pair, and the mapping work is slow and manual.&lt;/p&gt;

&lt;p&gt;I have been doing that work anyway. It is why I built &lt;a href="https://switchbyskill.prepnq.com" rel="noopener noreferrer"&gt;SwitchBySkill&lt;/a&gt; — a platform that starts from the stack you know and shows you only the delta, with the false friends flagged explicitly rather than left for you to discover in a code review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would ask you
&lt;/h2&gt;

&lt;p&gt;If you have switched stacks recently, I would like to know your false friend. The concept you were sure you understood, that turned out to work differently, that cost you a day or a sprint or an incident.&lt;/p&gt;

&lt;p&gt;I am collecting these. Every one I hear about makes the mapping better.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>career</category>
      <category>react</category>
      <category>angular</category>
    </item>
  </channel>
</rss>
