DEV Community

Cover image for Taming Codebases: Feature-Sliced Design (FSD) in React 🏗️
Prajapati Paresh
Prajapati Paresh

Posted on • Originally published at smarttechdevs.in

Taming Codebases: Feature-Sliced Design (FSD) in React 🏗️

The "Folder Soup" Problem

When starting a React or Next.js project, teams usually group files by technical layers: putting all UI elements in a components/ folder, and all hooks in a hooks/ folder. Organizing by technical type works early on, but as applications grow: Business logic becomes scattered across unrelated folders. When you need to update the "User Authentication" feature, you end up hunting through half a dozen directories to find the relevant pieces.

At Smart Tech Devs, we architect our frontend systems for long-term maintainability. Feature-Sliced Design introduces a structured way to organize code based on business domains and responsibilities, not implementation details.

Architecting by Domain

In Feature-Sliced Design (FSD), the codebase is divided into vertical slices based on actual user value. The architecture relies on clear boundaries.

Step 1: The Entry Points

In FSD, Routes act as entry points into your application. Their only job is to declare the URL path and map it to a top-level Page component. They do not hold complex logic.

Step 2: Composing the UI

Once a route is hit, it renders a Page. Pages orchestrate UI and assemble widgets. Features handle user interactions and workflows. This prevents generic UI buttons from knowing too much about your specific API payloads.


// ✅ THE ENTERPRISE PATTERN: Feature-Sliced Directory Structure
src/
  app/                     # Routing layer (Next.js App Router)
    (auth)/login/page.tsx  # Very thin route entry point
  
  pages/                   # Page composition
    Login/
      ui/LoginPage.tsx     # Assembles the layout and widgets
  
  features/                # Business logic and user interactions
    Auth/
      ui/LoginForm.tsx     # The actual form interaction logic
      model/authStore.ts   # State management specific to auth
  
  entities/                # Core business models
    User/
      api/fetchUser.ts     # Data fetching specific to the user entity
      types.ts
      
  shared/                  # Highly reusable, domain-agnostic UI
    ui/Button.tsx
    lib/apiClient.ts

The Engineering ROI

By adopting Feature-Sliced Design, onboarding new developers becomes drastically faster. If a developer needs to fix a bug in the Shopping Cart, they navigate directly to the features/Cart/ slice, confident that the components, state, and API logic they need are tightly co-located, without fear of accidentally breaking the core User profile.

Top comments (0)