5 Patterns That Changed How I Structure React Projects
1. Colocation Over Separation
Stop organizing by file type (components/, hooks/, utils/). Start organizing by feature. A PostCard component, its test, its Storybook story, and its CSS module should all live in the same directory. When you need to understand or modify a feature, everything is in one place.
2. Server Components by Default
In Next.js 15 with the App Router, every component is a server component unless you explicitly add the use client directive. This is not just a performance optimization — it is a fundamentally different mental model. Data fetching happens where the component is, not in a separate layer. Each component is self-contained: it knows what data it needs, fetches it, and renders it.
3. Feature Flags Over Premature Abstraction
Instead of building a complex plugin system for optional features, use simple boolean flags in a typed configuration file. Does this blog need comments? Check the flag. Dark mode? Check the flag. This is dramatically simpler than dependency injection, and TypeScript ensures you never check a flag that does not exist.
4. Designed Types, Not Generated Types
Define your TypeScript interfaces based on what your components need, not what your API returns. Then write a thin mapping layer between the API response shape and your designed types. This insulates your components from API changes and gives you a clear contract to test against.
5. Config Validation at Build Time
If your application has a configuration file, validate it before building. Do not discover that the newsletter provider is misconfigured when a user clicks Subscribe. A constraint system that checks feature dependencies, component compatibility, and integration requirements at build time catches entire categories of bugs before they reach production.
Senior Developer & Technical Writer
Full-stack developer and writer. I build things with Next.js, WordPress, and too much coffee. Currently exploring headless CMS architectures and AI-assisted development.