[PS]
All musings
Architecture

Stop picking one rendering strategy for the whole app

Most teams pick a rendering strategy once, at the start of a project, and never revisit it. That's backwards. A marketing page, a live dashboard, and an authenticated settings screen have almost nothing in common in terms of what they need from rendering, and treating them the same is how you end up either shipping a slow SSR waterfall for a page that didn't need it, or a blank-screen CSR flash for content that should have been there on first paint.

My actual heuristic: if a route needs to be indexed or needs to feel instant on first load, it gets SSR or static generation. If it's behind auth and mostly interactive, CSR is fine and often faster to ship. If a route is doing something expensive server-side that the user doesn't need all at once, streaming with Suspense boundaries lets the shell paint immediately while the slow part fills in.

React Server Components change this calculus again — they're not a fourth option so much as a way to keep more of the page server-rendered by default while still shipping interactive islands where you actually need them. The mistake is treating RSC as an all-or-nothing migration. Adopt it where the boundary is obvious — a static product page with one interactive widget — before touching anything ambiguous.

Open channel

Need a sharper frontend path?

Architecture, AI workflows, design systems, and interfaces that need to hold up after launch.