./{MA}
10 Frontend Mistakes I Made in My First 3 Years — And How You Can Avoid Them
07 Dec 2025
MMounir Ahmed

Mounir Ahmed

Frontend Engineer

10 Frontend Mistakes I Made in My First 3 Years — And How You Can Avoid Them

 As frontend developers, we all grow through trial and error. After three years of building real-world projects, breaking things, fixing things, and wondering “why does this bug only happen on production?”, I realized that many mistakes were avoidable — if only I had known earlier.


In this article, I’ll share the 10 biggest mistakes I made early in my frontend journey, and how you can avoid them starting today.


1. Relying Too Much on Tutorials Instead of Building

For a long time, I jumped from one tutorial to another. The problem? Tutorials give you instructions, not thinking skills.


How to avoid it:

Build small real projects. Break things. Fix things. That’s where the learning happens.


2. Ignoring Code Structure

I used to throw components anywhere, mix logic with UI, and store API functions randomly. The project always became spaghetti after a few weeks.


How to avoid it:

components/
hooks/
services/
pages/
utils/


You can check this article to know multiple ways of how to structure your project: (Frontend File Architecture)

Your future self will thank you.


3. Overusing useEffect

Every problem? useEffect. API? useEffect. Any update? useEffect. This often caused unnecessary re-renders and bugs.


How to avoid it:

  • Use React Query for API calls
  • Use derived state instead of syncing values
  • Learn the new React 19 use() pattern


4. Not Writing Reusable Components

I used to copy-paste a Button component 7 times instead of reusing it. This creates a maintenance nightmare.


How to avoid it: Before writing a component, ask yourself: “Will I reuse this again?” If yes → create a shared component.


5. Building Features Without Thinking About UX

Early on, I built features for developers, not users. Missing loading states, confusing validation, no empty placeholders.


How to avoid it: Good UX = fewer support messages, fewer bugs, happier users.


6. Not Using a Proper State Management Tool

Before learning React Query and Zustand, I managed everything with React’s internal state. It worked… until it didn’t.


How to avoid it:

  • React Query → server state
  • Zustand / Redux → global client state
  • Context → light global data only


7. Ignoring Performance

I didn’t think about performance until users complained. Slow pages, large bundles, no caching.


How to avoid it:

  • Lazy-load pages
  • Memoize expensive operations
  • Compress images
  • Use code splitting


8. Missing Error Handling

Early projects had no error boundaries, no toast errors, no fallbacks. One API failure = broken UI.


How to avoid it: Always handle loading, error, empty, and success states.


9. Avoiding TypeScript Because It “Looked Hard”

This was one of my biggest regrets. TypeScript saves you from most runtime bugs.


How to avoid it: Start small: add TS to one or two files, then expand gradually.


10. Underestimating the Importance of Testing

For years, I didn’t write a single test. This made refactoring dangerous.


How to avoid it:

  • Component tests (React Testing Library)
  • Basic unit tests (Jest)


Even minimal coverage improves confidence.


Conclusion

Mistakes are part of the journey — what matters is learning from them. By avoiding the pitfalls above, you’ll save months of frustration and build cleaner, scalable, and more professional frontend applications.

Read More
Read More
Read More