Ho migrato un progetto reale da Pages Router ad App Router durante l'estate. La prima settimana è stata dura: il modello mentale cambia in modo radicale, non si tratta solo di rinominare cartelle.
La cosa che mi ha sorpreso di più: i Server Components eliminano tonnellate di `useEffect` che usavo solo per fetchare dati. Meno codice, meno stato, meno bug. Ma richiedono di pensare diversamente a dove vive la logica.
Il problema più comune che ho incontrato: l'hydration mismatch. Ogni componente che legge locale, tema o dati dal browser deve essere protetto con un guard `mounted`. Ho imparato a mettere questo pattern da subito, non come fix a posteriori.
La raccomandazione pratica: se stai partendo da zero, usa App Router. Se hai un progetto esistente, migra per feature, non tutto insieme — altrimenti passi due settimane a debuggare invece di aggiungere valore.