<?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: Charlie</title>
    <description>The latest articles on DEV Community by Charlie (@jessaa_dzn).</description>
    <link>https://dev.to/jessaa_dzn</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%2F3943312%2F494c2a46-e44d-4ba2-96d2-5e91bae3e1fc.png</url>
      <title>DEV Community: Charlie</title>
      <link>https://dev.to/jessaa_dzn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jessaa_dzn"/>
    <language>en</language>
    <item>
      <title>Stop Asking "React or Angular?" Until You Can Answer This First</title>
      <dc:creator>Charlie</dc:creator>
      <pubDate>Thu, 02 Jul 2026 08:43:12 +0000</pubDate>
      <link>https://dev.to/jessaa_dzn/stop-asking-react-or-angular-until-you-can-answer-this-first-o76</link>
      <guid>https://dev.to/jessaa_dzn/stop-asking-react-or-angular-until-you-can-answer-this-first-o76</guid>
      <description>&lt;p&gt;Choosing a frontend framework is one of the most common conversations in web development.&lt;/p&gt;

&lt;p&gt;React or Angular?&lt;/p&gt;

&lt;p&gt;Next.js or plain React?&lt;/p&gt;

&lt;p&gt;Should we use TypeScript?&lt;/p&gt;

&lt;p&gt;Those discussions are important, but after working on production projects, I've noticed they often happen too early.&lt;/p&gt;

&lt;p&gt;The framework is rarely the first decision that determines whether a project succeeds.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Wrong Conversation
&lt;/h2&gt;

&lt;p&gt;I've seen projects spend days debating technology choices before anyone could answer simple questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who will use this application?&lt;/li&gt;
&lt;li&gt;What problem are we solving?&lt;/li&gt;
&lt;li&gt;What happens after launch?&lt;/li&gt;
&lt;li&gt;How will we know if the project is successful?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When those questions don't have clear answers, the technology choice usually doesn't matter as much as people think.&lt;/p&gt;

&lt;p&gt;A well-planned Laravel application with a straightforward frontend often delivers more value than a technically impressive stack built around unclear requirements.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technology Should Follow Requirements
&lt;/h2&gt;

&lt;p&gt;This sounds obvious, but it's surprisingly easy to forget.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;A marketing website doesn't necessarily need the same architecture as a SaaS platform.&lt;/p&gt;

&lt;p&gt;An internal dashboard has different priorities than a public-facing e-commerce website.&lt;/p&gt;

&lt;p&gt;A startup validating an idea shouldn't optimize for problems they may never have.&lt;/p&gt;

&lt;p&gt;Every project has different constraints.&lt;/p&gt;

&lt;p&gt;That's why experienced teams usually spend more time understanding requirements than comparing frameworks.&lt;/p&gt;




&lt;h2&gt;
  
  
  React Is Only One Piece of the Puzzle
&lt;/h2&gt;

&lt;p&gt;This isn't an argument against React.&lt;/p&gt;

&lt;p&gt;I use React regularly because it's flexible, has an excellent ecosystem, and works well for modern web applications.&lt;/p&gt;

&lt;p&gt;The important part is understanding &lt;strong&gt;why&lt;/strong&gt; React is the right choice for a particular project.&lt;/p&gt;

&lt;p&gt;If you're evaluating React for a business website, I recommend reading &lt;strong&gt;&lt;a href="https://spice-factory.ph/news/web-development-with-react" rel="noopener noreferrer"&gt;how React supports modern web development projects for businesses&lt;/a&gt;&lt;/strong&gt;. It explains why choosing a framework should come after understanding the business goals, not before.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Questions I Ask Before Writing Code
&lt;/h2&gt;

&lt;p&gt;Whenever I'm involved in a new project, I try to answer these questions first.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What business problem are we solving?&lt;/li&gt;
&lt;li&gt;Who are the primary users?&lt;/li&gt;
&lt;li&gt;What does success look like six months after launch?&lt;/li&gt;
&lt;li&gt;What integrations will this application need later?&lt;/li&gt;
&lt;li&gt;Can we simplify the first release?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those answers influence almost every technical decision that follows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Good Software Usually Looks Boring
&lt;/h2&gt;

&lt;p&gt;One lesson I've learned is that successful software is often less exciting than people expect.&lt;/p&gt;

&lt;p&gt;It loads quickly.&lt;/p&gt;

&lt;p&gt;It solves the right problem.&lt;/p&gt;

&lt;p&gt;It's easy to maintain.&lt;/p&gt;

&lt;p&gt;Users understand how to use it.&lt;/p&gt;

&lt;p&gt;Developers can extend it without rewriting everything.&lt;/p&gt;

&lt;p&gt;That's usually a better outcome than choosing the newest framework simply because it's popular.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build for the Next Few Years, Not Just the First Release
&lt;/h2&gt;

&lt;p&gt;A framework decision is only one part of building software that lasts.&lt;/p&gt;

&lt;p&gt;Scalability, maintainability, security, and user experience all matter just as much.&lt;/p&gt;

&lt;p&gt;That's why I think it's valuable to work with a team that offers &lt;strong&gt;&lt;a href="https://spice-factory.ph/services" rel="noopener noreferrer"&gt;custom web development and software development services for growing businesses&lt;/a&gt;&lt;/strong&gt;. The conversation shifts from "Which framework should we use?" to "What's the best solution for this business problem?"&lt;/p&gt;




&lt;h2&gt;
  
  
  One Takeaway
&lt;/h2&gt;

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

&lt;p&gt;Libraries evolve.&lt;/p&gt;

&lt;p&gt;New tools appear every year.&lt;/p&gt;

&lt;p&gt;Understanding the problem you're solving is the part that stays valuable.&lt;/p&gt;

&lt;p&gt;Once that's clear, choosing between React, Angular, Vue, or any other framework becomes much easier.&lt;/p&gt;

&lt;p&gt;I'd rather spend an extra day understanding the requirements than a week arguing about the technology stack.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>softwareengineering</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Mistakes Junior Developers Keep Making (That Senior Devs Stopped Talking About)</title>
      <dc:creator>Charlie</dc:creator>
      <pubDate>Thu, 25 Jun 2026 04:01:02 +0000</pubDate>
      <link>https://dev.to/jessaa_dzn/the-mistakes-junior-developers-keep-making-that-senior-devs-stopped-talking-about-2pe6</link>
      <guid>https://dev.to/jessaa_dzn/the-mistakes-junior-developers-keep-making-that-senior-devs-stopped-talking-about-2pe6</guid>
      <description>&lt;p&gt;I reviewed a pull request last year that took me 45 minutes to understand. The logic was technically correct. The tests passed. But the code was written as if the author was the only person who would ever read it. Which, clearly, they assumed they would be.&lt;/p&gt;

&lt;p&gt;When I finally left my feedback, the developer pushed back: "But it works." And they were right. It did work. That's exactly the problem.&lt;/p&gt;

&lt;p&gt;Most articles about junior developer mistakes focus on the obvious stuff: not writing tests, ignoring error handling, pushing to &lt;code&gt;main&lt;/code&gt;. Those are real, but most juniors already know about them. The habits I'm talking about are subtler. They're the ones that don't cause immediate failures. They just make everything quietly harder over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Treating "It Works" as the Finish Line
&lt;/h2&gt;

&lt;p&gt;This is the one I see most often, and it comes from a genuinely good place: juniors are proud when something works. They should be. But shipping working code is the baseline, not the goal.&lt;/p&gt;

&lt;p&gt;Code gets read far more often than it gets written. A function you write today might be touched by three different developers over the next two years, including a future version of yourself who has completely forgotten why you made that decision.&lt;/p&gt;

&lt;p&gt;When you stop at "it works," you leave behind a trail of questions: Why is this variable named &lt;code&gt;temp2&lt;/code&gt;? Why is this condition inverted? Why does this function do two completely unrelated things?&lt;/p&gt;

&lt;p&gt;The discipline to go back and ask &lt;em&gt;"would a stranger understand this in 30 seconds?"&lt;/em&gt; is what separates code that works from code that &lt;em&gt;lasts&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Copying Stack Overflow Without Understanding It
&lt;/h2&gt;

&lt;p&gt;There's nothing wrong with Stack Overflow. I still use it constantly. The problem is copy-pasting a solution without understanding what it actually does.&lt;/p&gt;

&lt;p&gt;I once watched a junior developer copy a regex pattern for email validation that had a known catastrophic backtracking bug. It worked fine in development. It silently caused timeouts in production for three months before anyone connected the dots.&lt;/p&gt;

&lt;p&gt;When you paste code you don't understand, you create a black box in your own codebase. You can't debug it when it breaks. You can't adapt it when requirements change. You can't explain it in a code review.&lt;/p&gt;

&lt;p&gt;The fix isn't to stop using Stack Overflow. The fix is to add one extra step: before you paste anything, read it line by line and convince yourself you could rewrite it from scratch if you had to. If you can't, you don't understand it yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Over-Engineering Because It Feels More "Professional"
&lt;/h2&gt;

&lt;p&gt;Junior developers often equate complexity with skill. They've heard about design patterns, SOLID principles, and microservices, so they apply them everywhere, whether the problem warrants it or not.&lt;/p&gt;

&lt;p&gt;I've seen a simple CRUD feature arrive in a PR with a factory pattern, a strategy pattern, an abstract base class, and three levels of inheritance. For a form that creates blog posts.&lt;/p&gt;

&lt;p&gt;Here's the uncomfortable truth: unnecessary abstraction is just as harmful as no abstraction at all. It makes the codebase harder to onboard, harder to debug, and harder to change. The original problem wasn't complex. The solution made it complex.&lt;/p&gt;

&lt;p&gt;The right time to add abstraction is when you feel &lt;em&gt;pain&lt;/em&gt; from its absence: when you catch yourself duplicating logic in three places, or when a single change ripples across the codebase. Let the pain guide you. Don't preemptively solve problems you don't have yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Not Reading Error Messages
&lt;/h2&gt;

&lt;p&gt;This one sounds ridiculous until you watch someone spend 40 minutes debugging an issue while their terminal is displaying the exact file and line number of the problem.&lt;/p&gt;

&lt;p&gt;Error messages aren't punishment. They're free documentation. A good error message tells you what broke, where it broke, and sometimes even why. But I've watched junior devs read the first three words of a stack trace, declare "I don't understand this," and immediately jump to Google.&lt;/p&gt;

&lt;p&gt;Get into the habit of reading the &lt;em&gt;entire&lt;/em&gt; error message before doing anything else. Then read the stack trace from top to bottom. Nine times out of ten, the answer is right there.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;TypeError: Cannot &lt;span class="nb"&gt;read &lt;/span&gt;properties of undefined &lt;span class="o"&gt;(&lt;/span&gt;reading &lt;span class="s1"&gt;'map'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    at UserList &lt;span class="o"&gt;(&lt;/span&gt;/src/components/UserList.jsx:14:22&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's not cryptic. That's line 14, column 22. Something is &lt;code&gt;undefined&lt;/code&gt; when you expected an array. Start there.&lt;/p&gt;




&lt;h2&gt;
  
  
  Asking for Help Too Late (or Too Early)
&lt;/h2&gt;

&lt;p&gt;There's a balance here that most juniors take a long time to find.&lt;/p&gt;

&lt;p&gt;On one end: spending three hours stuck on something you could have resolved in 10 minutes with a single question. Nobody respects that kind of silent suffering. It doesn't make you look independent, it makes you look inefficient.&lt;/p&gt;

&lt;p&gt;On the other end: asking for help before you've thought about the problem at all. Pinging a senior with "this isn't working" and a screenshot is a quick way to erode goodwill.&lt;/p&gt;

&lt;p&gt;A useful rule of thumb: spend 20–30 minutes genuinely trying to solve the problem yourself. Document what you tried and why it didn't work. Then ask, and lead with that documentation. "I've tried X, Y, and Z. X failed because of this, Y because of that. I'm stuck on Z for this reason. What am I missing?"&lt;/p&gt;

&lt;p&gt;That question gets answered fast, every time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ignoring the Existing Codebase
&lt;/h2&gt;

&lt;p&gt;Juniors often write code as if they're starting from scratch. They build a custom date formatter when the project already has &lt;code&gt;date-fns&lt;/code&gt; installed. They write a new API helper when there's already one in &lt;code&gt;/utils/api.js&lt;/code&gt;. They introduce a third state management pattern into an app that already has two.&lt;/p&gt;

&lt;p&gt;Before you write anything, search the codebase. Your team has already solved a lot of problems. You just haven't found the solutions yet.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Before writing a new utility, search what already exists&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"formatDate"&lt;/span&gt; ./src
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"fetchWithAuth"&lt;/span&gt; ./src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reading the existing code isn't just about avoiding duplication. It tells you how the team thinks, what patterns they prefer, and what decisions they've already made. That context is invaluable, and you'll absorb it faster by reading than by any other method.&lt;/p&gt;




&lt;h2&gt;
  
  
  Treating Git as a Save Button
&lt;/h2&gt;

&lt;p&gt;Commit messages like &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;wip&lt;/code&gt;, &lt;code&gt;stuff&lt;/code&gt;, &lt;code&gt;asdfgh&lt;/code&gt; are more common than they should be. Git history is documentation. It is often the only way to understand &lt;em&gt;why&lt;/em&gt; a change was made, not just what changed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# This tells your future team nothing:&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"fix bug"&lt;/span&gt;

&lt;span class="c"&gt;# This tells your future team everything:&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Fix null reference in cart total when discount code is removed

When a discount code was removed from the cart, the discount amount wasn't
being reset to zero before recalculating the total. This caused the total
to appear negative in some edge cases.

Fixes #482"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don't need to write an essay for every commit. But a one-line summary that explains the &lt;em&gt;what&lt;/em&gt; and &lt;em&gt;why&lt;/em&gt; takes 30 extra seconds and saves hours of archaeology later.&lt;/p&gt;




&lt;h2&gt;
  
  
  Assuming the Requirement Is Right
&lt;/h2&gt;

&lt;p&gt;Junior developers tend to take requirements as law and implement them exactly as written. Senior developers push back, politely but consistently.&lt;/p&gt;

&lt;p&gt;Requirements come from people who aren't thinking about edge cases, technical constraints, or second-order effects. "Add a button that deletes all user data" sounds straightforward. But what about confirmation dialogs? What about soft delete vs. hard delete? What about cascade effects on related records? What about the legal implications under GDPR?&lt;/p&gt;

&lt;p&gt;Implementing exactly what's asked without thinking it through doesn't make you a team player. It makes you a liability.&lt;/p&gt;

&lt;p&gt;When you get a requirement, spend five minutes asking: What happens at the edges? What happens when this goes wrong? Is this actually what the user needs, or just what someone &lt;em&gt;thinks&lt;/em&gt; the user needs? Ask those questions before you write a single line of code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Not Owning Their Work End-to-End
&lt;/h2&gt;

&lt;p&gt;This is the most common growth blocker I've seen. A junior submits a PR and considers their job done. The feature gets merged, goes to QA, bugs get filed, and a senior ends up fixing them, sometimes without even looping the original author back in.&lt;/p&gt;

&lt;p&gt;Ownership doesn't end at "PR merged." It means following your feature into QA. It means being available when bugs come in. It means reading the error reports from production. It means caring what happens after you ship.&lt;/p&gt;

&lt;p&gt;The developers who grow fastest are the ones who treat their work as theirs until it's clearly someone else's. They watch their features in production. They read user feedback. They close the feedback loop themselves.&lt;/p&gt;

&lt;p&gt;That habit, more than any technical skill, is what makes someone worth promoting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Patterns Worth Knowing
&lt;/h2&gt;

&lt;p&gt;If you're seeing yourself in any of this, here's the rough order to tackle it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with readability&lt;/strong&gt;: write code your teammates can understand without asking you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then own your bugs&lt;/strong&gt;: follow your work all the way to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then sharpen your questions&lt;/strong&gt;: get better at asking the right thing at the right time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then push back on requirements&lt;/strong&gt;: once you have credibility, use it to improve the product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finally, simplify&lt;/strong&gt;: strip complexity you added before you needed it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of these are about learning a new technology. They're about changing how you think about your work.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;"It works" is the starting point, not the ending point.&lt;/li&gt;
&lt;li&gt;Copy code only after you fully understand it.&lt;/li&gt;
&lt;li&gt;Complexity doesn't signal seniority. Clarity does.&lt;/li&gt;
&lt;li&gt;Error messages are your first debugger.&lt;/li&gt;
&lt;li&gt;The 20-minute rule: try first, ask with context.&lt;/li&gt;
&lt;li&gt;Read the existing codebase before writing anything new.&lt;/li&gt;
&lt;li&gt;Git history is documentation. Treat it that way.&lt;/li&gt;
&lt;li&gt;Requirements are suggestions; your job is to improve them.&lt;/li&gt;
&lt;li&gt;Ownership doesn't end at the PR.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Real Gap Between Junior and Senior
&lt;/h2&gt;

&lt;p&gt;It's not syntax. It's not knowing more frameworks. It's not even system design.&lt;/p&gt;

&lt;p&gt;The biggest gap is &lt;em&gt;accountability&lt;/em&gt;: the quality, clarity, and longevity of your work. Senior developers have internalized that their job isn't to write code; it's to solve problems in a way that doesn't create new ones.&lt;/p&gt;

&lt;p&gt;Every mistake on this list comes down to the same root cause: optimizing for "done" instead of optimizing for "good." The shift from one to the other is uncomfortable, slower in the short term, and absolutely worth it.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What's the mistake you made as a junior that you wish someone had called out sooner? Drop it in the comments. Chances are someone reading this is making it right now.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>career</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
