dev blockhacks.io npmscan.com
I’ve been using Next.js for a long time. Long enough to have shipped real products with it, migrated between major versions, rewritten parts that were “best practice” just a year earlier, and defended it in arguments like it was part of my identity.
Years ago, I remember calling a former classmate back in Kazakhstan. I asked him what he was working on. He said it was some large corporate project built on Java Spring Boot.
I laughed.
I literally said something like: “Bro, that’s ancient. That’s boring. Why would you build anything new on that? Why not Next.js?”
At the time, it felt obvious. Spring Boot sounded slow, verbose, old-fashioned. Next.js felt modern, fast, elegant. Everyone online was building with it. The ecosystem was exploding. The DX was addictive.
But over the years, after building, breaking, migrating, and maintaining real systems, that memory started to bother me.
Not because Spring Boot suddenly became cool. But because I slowly understood why those companies chose it.
After enough back-and-forth, enough upgrades, enough rewrites that weren’t supposed to be rewrites, something clicked:
They weren’t optimizing for excitement. They were optimizing for survival.
That’s when I realized something uncomfortable: I wasn’t laughing because Spring Boot was bad. I was laughing because I didn’t yet understand what “long term” actually means in software.
This article isn’t written by someone who hates Next.js. It’s written by someone who used it, trusted it, and then zoomed out far enough to see the trade-offs clearly.
And once you see them, you can’t unsee them.
This project is an enhanced reader for Ycombinator Hacker News: https://news.ycombinator.com/.
The interface also allow to comment, post and interact with the original HN platform. Credentials are stored locally and are never sent to any server, you can check the source code here: https://github.com/GabrielePicco/hacker-news-rich.
For suggestions and features requests you can write me here: gabrielepicco.github.io