<?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>Forem: Aleksandr Ryzhikov</title>
    <description>The latest articles on Forem by Aleksandr Ryzhikov (@meetaryzhikov).</description>
    <link>https://forem.com/meetaryzhikov</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3474739%2Fb3bf43cd-a466-4b17-8215-2e380d9311ab.jpg</url>
      <title>Forem: Aleksandr Ryzhikov</title>
      <link>https://forem.com/meetaryzhikov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/meetaryzhikov"/>
    <language>en</language>
    <item>
      <title>How I Approach Building Component Systems</title>
      <dc:creator>Aleksandr Ryzhikov</dc:creator>
      <pubDate>Mon, 10 Nov 2025 06:11:48 +0000</pubDate>
      <link>https://forem.com/meetaryzhikov/how-i-approach-building-component-systems-g9m</link>
      <guid>https://forem.com/meetaryzhikov/how-i-approach-building-component-systems-g9m</guid>
      <description>&lt;h1&gt;
  
  
  How I Approach Building Component Systems
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;“A component library is not about buttons. It’s about language—a shared grammar between design and engineering.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every frontend team eventually runs into the same problem: inconsistency. Two modals that open and close in slightly different ways. A button with five visual variants but no clear reason for any of them. A codebase where every new feature feels like reinventing the wheel.&lt;/p&gt;

&lt;p&gt;Building a component system isn’t about “standardizing the UI.” It’s about creating a shared mental model that lets design decisions flow naturally into code.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Principles
&lt;/h2&gt;

&lt;p&gt;I start small—atoms, molecules, organisms. Each layer exists only to make the next one simpler. When the foundation is solid, scaling feels effortless instead of painful.&lt;/p&gt;

&lt;p&gt;Rules break; constraints guide. I set boundaries that leave room for creativity without letting the system fall apart.&lt;/p&gt;

&lt;p&gt;Documentation is a contract, not an afterthought. It binds design, engineering, and whoever inherits the code—including future me.&lt;/p&gt;

&lt;p&gt;Every component must be neutral, reusable, and composable. A &lt;code&gt;Button&lt;/code&gt; shouldn’t assume where it lives; it should adapt.&lt;/p&gt;

&lt;p&gt;Accessibility isn’t a checkbox you tick later. It’s part of the core grammar, right alongside typography and spacing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture in Practice
&lt;/h2&gt;

&lt;p&gt;I treat the repository like a small ecosystem. Every piece is responsible for its own health.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;packages/
├── component-library/
│   ├── src/
│   │   ├── components/
│   │   │   └── Button/
│   │   │       ├── Button.tsx
│   │   │       ├── Button.stories.tsx
│   │   │       └── Button.test.tsx
│   │   └── hooks/
│   │       └── useDebounce.ts
│   └── index.ts
├── utils/
│   ├── format/
│   └── validation/
└── docs/
    └── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clear folders, purposeful files. If something doesn’t have an obvious job, it doesn’t belong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow and Culture
&lt;/h2&gt;

&lt;p&gt;Every component is a public API: predictable, documented, versioned.&lt;/p&gt;

&lt;p&gt;That means PR templates with quality checklists, automated accessibility tests, Storybook MDX as the single source of truth, and disciplined semantic versioning with changelogs.&lt;/p&gt;

&lt;p&gt;Vite, Storybook, TypeScript—these aren’t just tools; they’re instruments of clarity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Dance Between Design and Engineering
&lt;/h2&gt;

&lt;p&gt;Great systems disappear into the background. They don’t dictate form; they create rhythm.&lt;/p&gt;

&lt;p&gt;Design tokens are the DNA. Typography sets hierarchy. Even prop names carry tone—concise, deliberate, minimal.&lt;/p&gt;

&lt;p&gt;Engineering is design with structure. Design is engineering with empathy. When the two align, you get flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;The smaller the component, the harder it is to name well.
&lt;/li&gt;
&lt;li&gt;Consistency comes from shared philosophy, not from policing.
&lt;/li&gt;
&lt;li&gt;The best systems are opinionated yet kind.
&lt;/li&gt;
&lt;li&gt;Your future self is the primary user.
&lt;/li&gt;
&lt;li&gt;A system without documentation is just another codebase.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Systems are mirrors. A messy library reflects messy thinking. Build yours with clarity, and everyone who touches it will feel the difference.&lt;/p&gt;

&lt;p&gt;I’m currently putting these ideas into an open-source &lt;strong&gt;Frontend Toolkit&lt;/strong&gt;—a growing collection of utilities, patterns, and design foundations. If any of this resonates, come join, fork, or just follow along. The strongest systems are built together.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#frontend&lt;/code&gt; &lt;code&gt;#architecture&lt;/code&gt; &lt;code&gt;#designsystems&lt;/code&gt; &lt;code&gt;#react&lt;/code&gt; &lt;code&gt;#engineeringculture&lt;/code&gt;&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>design</category>
      <category>frontend</category>
      <category>ui</category>
    </item>
    <item>
      <title>Building Scalable Frontend Teams: Lessons Learned</title>
      <dc:creator>Aleksandr Ryzhikov</dc:creator>
      <pubDate>Sat, 20 Sep 2025 09:05:31 +0000</pubDate>
      <link>https://forem.com/meetaryzhikov/building-scalable-frontend-teams-lessons-learned-124i</link>
      <guid>https://forem.com/meetaryzhikov/building-scalable-frontend-teams-lessons-learned-124i</guid>
      <description>&lt;p&gt;Scaling a frontend team is not just about adding more engineers. It’s about creating the right structure, processes, and culture so the team can grow without breaking down. Over the years, I’ve learned a few lessons — sometimes the hard way — on what actually works.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Start With Clear Ownership
&lt;/h2&gt;

&lt;p&gt;When teams are small, everyone touches everything. That works at first, but it quickly becomes a bottleneck.&lt;br&gt;
What helped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define &lt;strong&gt;ownership boundaries&lt;/strong&gt; (features, domains, libraries).&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;code ownership&lt;/strong&gt; in the repo to make responsibilities explicit.&lt;/li&gt;
&lt;li&gt;Encourage &lt;strong&gt;shared context&lt;/strong&gt; through reviews, but make one person ultimately accountable.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Balance Autonomy and Alignment
&lt;/h2&gt;

&lt;p&gt;Too much freedom = chaos. Too much control = slow motion.&lt;br&gt;
What helped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agree on &lt;strong&gt;tech stack guardrails&lt;/strong&gt; (framework, state management, testing tools).&lt;/li&gt;
&lt;li&gt;Define &lt;strong&gt;shared patterns&lt;/strong&gt; (component architecture, naming conventions).&lt;/li&gt;
&lt;li&gt;Leave room for experimentation — but within a &lt;strong&gt;sandbox&lt;/strong&gt; repo or feature flag.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Invest in Documentation Early
&lt;/h2&gt;

&lt;p&gt;The best time to write docs is before you feel you need them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep a lightweight &lt;strong&gt;frontend playbook&lt;/strong&gt;: setup instructions, coding guidelines, common pitfalls.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;living documentation&lt;/strong&gt; — update READMEs and Storybook as code evolves.&lt;/li&gt;
&lt;li&gt;Make documentation part of &lt;strong&gt;definition of done&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Make Onboarding a Team Sport
&lt;/h2&gt;

&lt;p&gt;Every new engineer is a stress test for your team’s processes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pair newcomers with a &lt;strong&gt;buddy&lt;/strong&gt; for the first 2 weeks.&lt;/li&gt;
&lt;li&gt;Give them a &lt;strong&gt;first issue that ships&lt;/strong&gt; within a few days — momentum matters.&lt;/li&gt;
&lt;li&gt;Ask for feedback on the onboarding docs — if something is unclear, it needs fixing.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Optimize Communication
&lt;/h2&gt;

&lt;p&gt;As teams scale, communication overhead becomes real.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep &lt;strong&gt;standups short and focused&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;async updates&lt;/strong&gt; (Slack, Notion) to reduce meeting load.&lt;/li&gt;
&lt;li&gt;Regularly sync on &lt;strong&gt;cross-cutting concerns&lt;/strong&gt; (performance, accessibility, design systems).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Don’t Neglect Developer Experience
&lt;/h2&gt;

&lt;p&gt;Happy engineers build better products.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Invest in &lt;strong&gt;fast builds, hot reload, stable CI/CD&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Automate the boring parts (linting, formatting, type checks).&lt;/li&gt;
&lt;li&gt;Treat your &lt;strong&gt;design system and tooling&lt;/strong&gt; as a product.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Leadership Is About Multiplying Impact
&lt;/h2&gt;

&lt;p&gt;At some point, your job as a lead isn’t to write the most code — it’s to create conditions where others thrive.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give &lt;strong&gt;clear goals and context&lt;/strong&gt;, not micromanagement.&lt;/li&gt;
&lt;li&gt;Recognize contributions both big and small.&lt;/li&gt;
&lt;li&gt;Protect focus time and fight unnecessary complexity.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Scaling frontend teams is less about fancy architectures and more about &lt;strong&gt;discipline, clarity, and empathy&lt;/strong&gt;. The biggest lesson? Teams don’t scale by accident — they scale by design.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>leadership</category>
      <category>management</category>
    </item>
    <item>
      <title>Frontend Architecture for Small Teams: A Guide for Managers and Startup Founders</title>
      <dc:creator>Aleksandr Ryzhikov</dc:creator>
      <pubDate>Mon, 15 Sep 2025 01:02:51 +0000</pubDate>
      <link>https://forem.com/meetaryzhikov/frontend-architecture-for-small-teams-a-guide-for-managers-and-startup-founders-1924</link>
      <guid>https://forem.com/meetaryzhikov/frontend-architecture-for-small-teams-a-guide-for-managers-and-startup-founders-1924</guid>
      <description>&lt;p&gt;As a startup founder or team lead, you're juggling a million things: product-market fit, funding rounds, user acquisition, and somehow building a scalable product with a tiny team. The frontend—the user-facing part of your app—can make or break your early success. But with limited developers (maybe just 2-5 people), how do you architect it without overcomplicating things or setting yourself up for tech debt down the road?&lt;/p&gt;

&lt;p&gt;In this article, we'll break down frontend architecture tailored for small teams. I'll focus on practical strategies that boost productivity, reduce bugs, and allow quick iterations—key for startups racing against the clock. No deep code dives here; instead, we'll cover high-level decisions, tools, and pitfalls from a leadership perspective. By the end, you'll have a roadmap to discuss with your devs or even pitch to investors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Frontend Architecture Matters in Small Teams
&lt;/h2&gt;

&lt;p&gt;In a small team, every hour counts. Poor architecture leads to spaghetti code, where one change breaks everything else, slowing down releases and frustrating your users (and team). Good architecture, on the other hand, acts like a well-oiled machine: modular, easy to maintain, and scalable as you grow.&lt;/p&gt;

&lt;p&gt;For managers and founders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed to Market&lt;/strong&gt;: A solid setup lets your team ship features faster, validating ideas without months of rework.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Efficiency&lt;/strong&gt;: Fewer bugs mean less time debugging, and easier onboarding for future hires.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Investor Appeal&lt;/strong&gt;: Clean architecture signals professionalism—it's easier to demo a polished product and explain your tech stack during pitches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Morale&lt;/strong&gt;: Developers hate wrestling with messy code. Good structure keeps them productive and happy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Common pitfalls for small teams? Over-engineering (e.g., adopting micro-frontends too early) or under-planning (e.g., hacking together a MVP that becomes unmaintainable). Aim for the sweet spot: simple yet future-proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Principles for Small-Team Frontend Architecture
&lt;/h2&gt;

&lt;p&gt;Start with these foundational ideas. They're framework-agnostic but apply to popular ones like React, Vue, or Svelte.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modularity and Reusability&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Break your app into reusable components (e.g., buttons, forms, headers). This lets devs build like Lego blocks—fast and consistent.&lt;/li&gt;
&lt;li&gt;Benefit for you: Reduces duplication, speeds up development by 20-30%, and makes UI consistent across your product.&lt;/li&gt;
&lt;li&gt;Tip: Enforce a component library early. Tools like Storybook allow non-devs (like you) to preview components without code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Simplicity Over Complexity&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoid fancy patterns unless needed. For example, start with a monolithic frontend repo instead of splitting into services.&lt;/li&gt;
&lt;li&gt;Why? Small teams can't afford the overhead of managing multiple repos or complex deployments.&lt;/li&gt;
&lt;li&gt;Metric to watch: Aim for code that's understandable by a new hire in days, not weeks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;State Management&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"State" is your app's data (e.g., user login status, cart items). Mismanaged state causes bugs like inconsistent UIs.&lt;/li&gt;
&lt;li&gt;For small teams: Use built-in tools like React's Context or Vue's Pinia. Only add heavyweights like Redux if your app grows complex.&lt;/li&gt;
&lt;li&gt;Leadership angle: Poor state handling leads to user complaints. Track it via error monitoring tools like Sentry to quantify issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance and Scalability&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Optimize for mobile-first (most users are on phones) and lazy-load features to keep load times under 3 seconds.&lt;/li&gt;
&lt;li&gt;As a founder, tie this to business: Faster apps improve retention—Google says a 1-second delay can drop conversions by 20%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Testing and Automation&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mandate unit tests for components and end-to-end tests for flows. Tools like Jest or Cypress are lightweight.&lt;/li&gt;
&lt;li&gt;ROI: Catches bugs early, saving 5-10x the time in fixes later. For small teams, automate deployments with CI/CD (e.g., GitHub Actions) to ship daily.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choosing the Right Tools and Stack
&lt;/h2&gt;

&lt;p&gt;Your stack should be battle-tested, with a large community for quick answers (Stack Overflow is your devs' best friend).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Framework&lt;/strong&gt;: React is king for small teams—flexible, huge ecosystem, and easy to hire for. Alternatives: Vue for simpler syntax or Svelte for performance without bloat.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why React? Facebook backs it, and it's used by startups like Airbnb. But if your team prefers something else, prioritize their expertise.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build Tools&lt;/strong&gt;: Use Create React App or Vite for quick setup. They handle bundling, so your team focuses on features, not config.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI Libraries&lt;/strong&gt;: Bootstrap or Tailwind CSS for rapid styling. Tailwind is modern and promotes consistency without custom CSS hell.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backend Integration&lt;/strong&gt;: If your frontend talks to a backend (e.g., via APIs), use REST or GraphQL. Start with REST—it's simpler for small teams.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Budget tip: Stick to free/open-source tools. Cloud hosting like Vercel or Netlify offers free tiers for deploys, scaling as you grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices for Implementation
&lt;/h2&gt;

&lt;p&gt;Here's a step-by-step playbook:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan the Structure&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Folder organization: Group by feature (e.g., /auth, /dashboard) not type (avoids scrolling through massive folders).&lt;/li&gt;
&lt;li&gt;Version control: Use Git with branches for features. Enforce pull requests for reviews—even in a team of 3.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Iterate with MVPs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build a minimum viable architecture: Core components + basic state + one key feature.&lt;/li&gt;
&lt;li&gt;Test with users early. Tools like Figma for prototypes bridge design to code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Handle Growth&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As your team hits 5-10 devs, introduce linting (ESLint) and type safety (TypeScript) to prevent errors.&lt;/li&gt;
&lt;li&gt;Monitor tech debt: Schedule quarterly refactors, but only if they deliver business value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Security Basics&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Even small teams face threats. Use HTTPS, sanitize inputs, and avoid storing sensitive data client-side.&lt;/li&gt;
&lt;li&gt;For founders: Data breaches kill trust—invest in basics to avoid PR nightmares.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Case Studies: Real-World Wins (and Fails)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Success&lt;/strong&gt;: A fintech startup with 4 devs used React + Tailwind to launch their MVP in 2 months. Modular components let them pivot features based on user feedback without full rewrites. Result: Secured seed funding by demoing a snappy app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fail&lt;/strong&gt;: An e-commerce team skipped architecture planning, leading to a tangled mess. Scaling to Black Friday traffic crashed the site, losing sales. Lesson: Early investment pays off.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Track your own metrics: Use Google Analytics for performance and tools like Linear or Jira for dev velocity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Empower Your Team, Scale Your Startup
&lt;/h2&gt;

&lt;p&gt;Frontend architecture isn't just tech—it's a strategic lever for your startup's success. For small teams, prioritize simplicity, reusability, and tools that amplify productivity. As a manager or founder, your role is to align this with business goals: faster iterations mean quicker learning and growth.&lt;/p&gt;

&lt;p&gt;Discuss this with your devs today. If you're bootstrapping, start small—prototype one feature with these principles. And remember, the best architecture evolves; review it every 3-6 months as your team and product mature.&lt;/p&gt;

&lt;p&gt;If you're building something cool, share in the comments! What challenges have you faced with frontend in small teams?&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>leadership</category>
      <category>frontend</category>
      <category>startup</category>
    </item>
    <item>
      <title>How do I Structure Projects for Scalability</title>
      <dc:creator>Aleksandr Ryzhikov</dc:creator>
      <pubDate>Thu, 11 Sep 2025 00:38:35 +0000</pubDate>
      <link>https://forem.com/meetaryzhikov/how-do-i-structure-projects-for-scalability-4ppo</link>
      <guid>https://forem.com/meetaryzhikov/how-do-i-structure-projects-for-scalability-4ppo</guid>
      <description>&lt;p&gt;When the project is small, we can easily "dump everything into one folder" and work. But as the application grows, the chaos in the structure begins to slow down development, complicate support, and hinder new team members.&lt;/p&gt;

&lt;p&gt;In this article, I'll show you how I structure frontend projects to be scalable, predictable, and convenient for teamwork.&lt;/p&gt;




&lt;h2&gt;
  
  
  Principles
&lt;/h2&gt;

&lt;p&gt;Before moving on to the structure, I always adhere to three rules::&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Explicit is better than implicit&lt;/strong&gt; — one additional folder is better than magic with obscure imports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Features are more important than layers&lt;/strong&gt; — instead of "/components", "/services", I try to highlight functional modules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability from day one&lt;/strong&gt; — even if the project is small, the structure should allow for growth without restructuring.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Basic project structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;src/
├── app/                    &lt;span class="c"&gt;# Application Level configuration&lt;/span&gt;
│   ├── providers/          &lt;span class="c"&gt;# Context providers, themes, routers&lt;/span&gt;
│   ├── store/              &lt;span class="c"&gt;# Global status&lt;/span&gt;
│   └── config/             &lt;span class="c"&gt;# Constants, settings&lt;/span&gt;
├── entities/               &lt;span class="c"&gt;# Entities (User, Product, Todo, etc.)&lt;/span&gt;
├── features/               &lt;span class="c"&gt;# Business features (Login, Search, Cart, etc.)&lt;/span&gt;
├── pages/                  &lt;span class="c"&gt;# Pages (UI level routing)&lt;/span&gt;
├── shared/                 &lt;span class="c"&gt;# Reusable utilities, UI components, helpers&lt;/span&gt;
└── index.TSX &lt;span class="c"&gt;# Entry Point&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Example: entities
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;entities/&lt;/code&gt; stores models, APIs, and minimal components. For example, &lt;code&gt;entities/todo/&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;entities/
└── todo/
    ├── api/
    │ └── todoApi.ts &lt;span class="c"&gt;# CRUD operations&lt;/span&gt;
    ├── model/
    │   ├── types.ts &lt;span class="c"&gt;# Entity Types&lt;/span&gt;
    │   └── store.ts &lt;span class="c"&gt;# Zustand/Redux status&lt;/span&gt;
    └── ui/
        └── TodoItem.tsx &lt;span class="c"&gt;# Basic UI Component&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// entities/todo/api/todoApi.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchTodos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/todos&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Example: feature
&lt;/h2&gt;

&lt;p&gt;A feature combines several entities to solve a problem. For example, &lt;code&gt;features/TodoList/&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;features/
└── todoList/
    ├── ui/
    │   └── TodoList.tsx
    └── model/
        └── hooks.ts &lt;span class="c"&gt;# Local Hooks&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// features/todoList/ui/TodoList.tsx&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;fetchTodos&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/entities/todo/api/todoApi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;TodoItem&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/entities/todo/ui/TodoItem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;TodoList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;fetchTodos&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;TodoItem&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Example: a Page
&lt;/h2&gt;

&lt;p&gt;Pages collect features and entities into a ready-made screen.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pages/
└── home/
    └── HomePage.tsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// pages/home/HomePage.tsx&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;TodoList&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/features/todoList/ui/TodoList&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;HomePage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;My tasks&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;TodoList&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Shared — always at hand
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;shared/&lt;/code&gt; contains everything that does not depend on a specific entity or feature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;shared/
├── ui/   &lt;span class="c"&gt;# Buttons, inputs, mods&lt;/span&gt;
├── lib/  &lt;span class="c"&gt;# Utilities, helpers&lt;/span&gt;
├── api/  &lt;span class="c"&gt;# Basic HTTP client&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// shared/api/http.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;http&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;RequestInit&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Network error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why it works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It's easy for a new developer to navigate:
&lt;em&gt;Essentials → Features → Page&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;The code can be scaled: new features are added without revising the entire architecture.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;shared/&lt;/code&gt; remains compact and predictable, without leaking business logic.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This structure has grown from real projects, from small pet projects to applications with dozens of developers. It's not the only correct one, but it avoids the "spaghetti code" and makes it easier to maintain.&lt;/p&gt;

&lt;p&gt;And how do you structure projects? Share your experience in the comments.👇&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>react</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>3 Errors in the Front-End Architecture that Slow Down Your Projects</title>
      <dc:creator>Aleksandr Ryzhikov</dc:creator>
      <pubDate>Sat, 06 Sep 2025 12:20:24 +0000</pubDate>
      <link>https://forem.com/meetaryzhikov/3-errors-in-the-front-end-architecture-that-slow-down-your-projects-2edl</link>
      <guid>https://forem.com/meetaryzhikov/3-errors-in-the-front-end-architecture-that-slow-down-your-projects-2edl</guid>
      <description>&lt;p&gt;Frontend development has become much more complex in recent years: frameworks are multiplying, and performance, UX, and scalability requirements are increasing. In such circumstances, the architecture of the project ceases to be a "secondary issue" — it determines how quickly you can develop the product.&lt;/p&gt;

&lt;p&gt;Below are the three most common mistakes that I have encountered in projects, and what can be done about them.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. A "monolithic" frontend without modularity
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Error:&lt;/strong&gt; the entire application lives in the same code pile: the components access the store directly, the same imports are everywhere, and the business logic is scattered in random places.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consequences:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is not possible to modify or test a separate module locally;&lt;/li&gt;
&lt;li&gt;New developers spend weeks "moving in";&lt;/li&gt;
&lt;li&gt;Bugs are "floating" all over the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What to do:&lt;/strong&gt;&lt;br&gt;
Implement modularity. Even if you don't use micro-frontends, divide the project into features and layers (feature-sliced design, domain-driven design, vertical slices). Let each feature store its components, styles, tests, and storages separately.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. Mixing business logic and UI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Error:&lt;/strong&gt; business rules (for example, access checks, calculations, validation) are written directly in the components.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// example of an anti-pattern&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;CheckoutButton&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cart&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Buy&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Effects:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The component code grows and becomes difficult to maintain;&lt;/li&gt;
&lt;li&gt;Business rules cannot be reused (for example, on the server);&lt;/li&gt;
&lt;li&gt;It's difficult to test — you have to race the rendering.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What to do:&lt;/strong&gt;&lt;br&gt;
Put business logic in separate layers (services, hooks, use-cases). The component should be responsible only for the display, not for the rules of the product.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Ignoring State strategies
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Error:&lt;/strong&gt; "we throw everything into the global store" (Redux, Zustand, Vuex, etc.) or vice versa — we drag the state through props from parent to child until the tree turns into spaghetti.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consequences:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A store that is too large becomes a bottleneck;&lt;/li&gt;
&lt;li&gt;Performance drops due to unnecessary re-renderers;&lt;/li&gt;
&lt;li&gt;Changes are difficult to track and debug.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What to do:&lt;/strong&gt;&lt;br&gt;
Divide the state into levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local (UI details, modals, checkboxes);&lt;/li&gt;
&lt;li&gt;Contextual (the state of a group of components);&lt;/li&gt;
&lt;li&gt;Global (authentication, user settings).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use the tools for their intended purpose, not "out of habit."&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;A good frontend architecture is not about the "right framework", but about clear boundaries between layers. The sooner you eliminate these three errors, the faster and more stable you will develop the product.&lt;/p&gt;




&lt;p&gt;👉 What architectural pitfalls have you encountered in your projects? Share it in the comments — it will help others avoid the same problems.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My Path in the Frontend</title>
      <dc:creator>Aleksandr Ryzhikov</dc:creator>
      <pubDate>Thu, 04 Sep 2025 10:49:48 +0000</pubDate>
      <link>https://forem.com/meetaryzhikov/my-path-in-the-frontend-39fn</link>
      <guid>https://forem.com/meetaryzhikov/my-path-in-the-frontend-39fn</guid>
      <description>&lt;p&gt;It seems that in the world of the frontend, everything is developing at the speed of light: new frameworks, tools and approaches are emerging every day. But behind all these technologies, the most important thing always remains — the personal story that we go through. I want to share my path in the frontend: from the first steps to the present moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first steps
&lt;/h2&gt;

&lt;p&gt;Like many people, it all started with curiosity. I wanted to understand how websites work, why the button is clicked and the picture appears exactly where it is needed. My first "programming" was simple HTML and CSS editing: change the color of the text, shift the picture, add something of my own. These small changes gave me a huge sense of control—and that's what pulled me deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  First projects
&lt;/h2&gt;

&lt;p&gt;Over time, I got to JavaScript. Then the magic began: the pages came to life, interactive elements appeared, and for the first time I felt that I could control logic. My first projects were small pet projects - calculators, to—do lists, simple games. They were far from perfect, but each new step opened up new horizons.&lt;/p&gt;

&lt;h2&gt;
  
  
  Joining the community
&lt;/h2&gt;

&lt;p&gt;The community has played a huge role in my development. Articles, forums, Discord and Telegram chats — all this helped me find answers, ask questions and feel that I was not alone on this path. Inspiration came from other people's projects, and motivation came from the support of people who were the same beginners or already experienced developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working with frameworks
&lt;/h2&gt;

&lt;p&gt;Sooner or later, every frontender meets React, Vue or Angular. It was a real discovery for me: the structure of the code, the component approach and the ability to assemble large projects from small parts. At first it was scary, but later it became my favorite tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;For me, the frontend is not just about code. It's about design, about working with users, about creating an experience that is comfortable and beautiful. My journey is far from over, and I am confident that there will be new tools, new challenges, and new opportunities ahead.&lt;/p&gt;

&lt;p&gt;I want to share my experiences, mistakes, and discoveries. Perhaps someone is just starting their journey now and will find in my story a little inspiration or confidence that "I can do it too."&lt;/p&gt;

&lt;p&gt;I want to add a question to the readers at the end.:&lt;/p&gt;

&lt;p&gt;👉 How did your journey in the frontend begin?&lt;/p&gt;

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