Question presented to candidate: "Walk me through what the browser receives with client-side rendering versus server-side rendering, and what that changes."
What a strong answer should cover:
- CSR: the response is an almost-empty HTML shell — a
<div id="root">and a script tag. Nothing is visible until the bundle downloads, parses, executes, and renders. - SSR: the response already contains the finished markup, so the browser paints content on the first parse, before any JavaScript runs.
- The difference is when content appears, not how it looks once loaded. Both end in exactly the same DOM.
- Map it to metrics: SSR improves FCP/LCP and gives crawlers real content; TTI is not automatically better, because hydration still has to run.
- CSR's costs land on the client (bundle download, parse, execute); SSR's land on the server (CPU per request) plus deployment complexity.
- CSR is genuinely better for repeat in-app navigation — subsequent routes need data, not a whole document round trip.
- The honest answer is that this is rarely an app-wide binary any more: frameworks mix static generation, per-request SSR, streaming, and client islands per route.
Clarifying questions expected:
- "Is this a first visit or in-app navigation?" — the answer reverses between them.
- "Public and crawlable, or behind a login?"
Code / implementation expected: No. This is a comparison question; a timeline and the metric names carry it.