For a large e-commerce site in Next.js, how would you choose the rendering and caching strategy for the home page, product pages, cart and account pages?
What the interviewer wants to hear
- Static or cached rendering for pages shared by all users
- Revalidation by time or on-demand tags when products change
- Dynamic, personalized parts streamed or rendered separately
- Cart and account are user-specific and never cached publicly
- Trade-offs between freshness, cost, SEO and Core Web Vitals
Model answer
I would decide per route based on how personal and how fresh the data must be. The home page and category pages are mostly the same for everyone, so I prerender them and cache them at the CDN, with revalidation by time or on-demand by cache tags when the catalog changes. Product pages matter most for SEO, so I prerender popular ones and render the rest on first request and cache them; when a price or description changes, the admin action invalidates that product tag. Fast-changing parts like live stock or personalized recommendations I render dynamically inside a Suspense boundary, so the static shell streams instantly, which is what partial prerendering is designed for. Cart, checkout and account pages are per user, so they are rendered dynamically and marked private, never stored in a shared cache. I would watch Core Web Vitals and cache hit rates to tune this.
Can you answer it under time pressure?
Take a timed hard round and get scored on every answer.
More hard Full Stack Developer questions
- You are building a multi-tenant B2B SaaS app. How would you design data isolation between tenants, and what are the trade-offs?
- Your app works well for 1,000 users. Traffic is expected to grow to 1 million users. How would you prepare the system, and in what order?
- An order flow touches your database, a payment provider and an email service. How do you keep the system consistent when any step can fail?
- You need to split a large users table column "name" into "first_name" and "last_name" on a table with 50 million rows, with no downtime. Walk through your plan.
- Design an e-commerce checkout end to end: cart, payment with a provider like Stripe, inventory and order confirmation. What can go wrong and how do you make it reliable?
- Your startup’s Next.js monolith is growing and some engineers want to split it into microservices. How do you decide, and what would you do?
- Ten minutes after a deploy, 500 errors jump from 0.1% to 8% on the main API. Walk through how you handle the incident.
- Customers need to import CSV files with up to two million rows into your app. Design the feature end to end.
- You are opening your product’s API to outside partners. How do you design authentication, authorization, rate limiting and change management for it?