Web Engineering

Next 15 made upgrades feel like product work

2 min read

Next.js 15 was one of those releases that made a framework upgrade feel like a product decision.

The diff looked like dependency maintenance. The impact was bigger. When request APIs become async, caching defaults change, or route behavior shifts, the thing that changes is not just build output. Users feel it as freshness, loading, metadata, or a page that used to behave one way and now behaves another.

what I checked first

  • dynamic route params still resolved the right page
  • query strings still reached the component that needed them
  • metadata still matched the page
  • auth-gated routes still blocked the right users
  • cached pages were still cached on purpose
  • live pages were still live on purpose

The async request API change was the one that exposed hidden assumptions fastest. params, searchParams, cookies(), and headers() no longer belonged in the same mental bucket as plain synchronous props. That pushed route code to admit that request data is dynamic and should be treated that way.

type Params = Promise<{ slug: string }>

export default async function Page({ params }: { params: Params }) {
  const { slug } = await params
  return <Article slug={slug} />
}

The caching change was similar. “Fetch” no longer implied the same default everywhere, which is inconvenient and useful at the same time. A dashboard should not behave like a blog post. A pricing page should not behave like a private workspace. The upgrade forced those decisions into view.

I do not think framework upgrades need ceremony for their own sake. I do think they need route-level smoke tests, a small preview rollout, and a rollback path that does not require guessing which behavior changed. The real test is whether the product still tells the truth after the framework moves underneath it.

Jeremy London

About Jeremy London

Engineering leader and builder in Denver. I write about AI platforms, agents, security, reliability, homelab infrastructure, and the parts of engineering work that have to survive production.