Next.js App Router: Where We Use It, Where We Don't
The App Router is genuinely good. It is also genuinely inappropriate for certain use cases. After building three production applications with it, here is our unhedged take on when it earns its complexity.
The Next.js App Router has been production-stable long enough to have opinions about. We have shipped three applications with it: a content-heavy marketing site, an internal operations dashboard, and a customer-facing SaaS product. The experience was different in each case.
Where It Earns Its Complexity
Content-heavy sites with mixed static and dynamic data are where the App Router shines. Server Components eliminate the waterfall problem — no more client-side fetches that render a spinner, then fetch again inside the result. The page arrives with data. For a site where most data is known at build or request time, this is the right model.
ISR (Incremental Static Regeneration) with the `revalidate` export is also significantly more ergonomic than the Pages Router equivalent. Streaming with Suspense boundaries genuinely improves perceived performance on slower connections when used with intent.
Where It Adds Pain Without Payoff
Highly interactive dashboards — the kind where every component reacts to shared client state — fight the App Router's mental model. You end up marking large subtrees as `'use client'`, which gives you Pages Router behaviour with App Router overhead.
If more than 60% of your components need 'use client', ask seriously whether the App Router is serving you or whether you are serving it.
The context and state management story is also more complex. Sharing state between a Server Component and a deeply nested Client Component requires patterns (passing serialisable props, using URL state, or lifting to a client boundary) that add cognitive overhead the Pages Router never imposed.
Our Practical Decision Rule
Marketing sites, blogs, documentation, content platforms → App Router, every time
SaaS products with a clear data-fetching boundary (public pages + authenticated app) → App Router for public, evaluate per product for the app shell
Dense, real-time, collaborative dashboards → Pages Router or consider a non-Next.js frontend
The App Router is a genuinely good default for new Next.js projects. It is not a universal upgrade from the Pages Router. Understand the model before you commit.