Deep relative imports are a maintainability tax. Once a project grows, ../../../ becomes noise and refactors get painful. I define a small set of path aliases (like @/* for app code) and keep them consistent across TypeScript, Jest/Vitest, and the bundler. The important detail is making runtime resolution match compile-time resolution; otherwise everything builds but fails in production. When aliases are wired correctly, imports become readable and moving files around is much less scary. I also keep the alias list short—too many aliases turn into their own abstraction. One or two well-chosen roots are usually enough.