RSCs changed how we think about rendering. Here is what I learned after shipping three production apps with the new paradigm.
The boundary is the whole design
Most of the work in a server-component app is deciding where server rendering stops and interactivity begins. Get that line right and data fetching stays simple; get it wrong and state ends up threaded through places it does not belong.
The pattern that holds up: fetch on the server, pass plain data down, and keep client components focused on interaction. A page becomes a thin data layer wrapping a presentational tree.
// Note
Anything crossing into a client component has to be serialisable. Functions, class instances, and dates-as-objects will stop the build.
What actually got easier
Loading states largely disappear for initial render, and the client bundle shrinks because data-fetching code never ships. The trade is a mental model that takes a few projects to internalise.

