
At Atomicwork, we’re laser-focused in building an AI-native ITSM platform that extends a seamless user experience to high-velocity IT teams. When our customers log into our product every day, we’recommitted to giving them a stable and frictionless interface that empowers them to provide faster resolutions.
With this goal in mind, last month, we completed a significant upgrade to a core component of the technology stack that powers our platform. We moved from Next.js 14 to Next.js 16, and from React 18 to React 19 for a faster, more stable, and secure platform under the hood.
If those names aren't familiar, here's why they matter: these are the core frameworks that determine how fast our platform loads, how smoothly it responds when you navigate between screens, and how securely your data is handled. Upgrading them was our way of making sure the experience improved both for our users and our engineers who can now ship features faster.
From the beginning, my team and I were clear about our goal: we weren’t upgrading just to chase the latest release.
Tracking the performance of the platform, we observed that:
For a product that helps IT teams promise reliability to their users, we couldn't afford to let our own platform lag behind.
And the decision to upgrade, paid off big time in three main aspects.
First, speed.
A big part of this came from Turbopack, the new build tool that ships with Next.js 16. In earlier versions it felt experimental but now it's firmly production ready. Dev server cold starts went from roughly 45–60 seconds down to under 12 seconds.
Incremental rebuilds, which are the small compilations that happen each time an engineer tweaks a component, dropped to under half a second. That's the kind of feedback loop that changes how people work.
Engineers spend less time waiting and more time iterating, and over the course of a day, that compounds into real velocity. To be more precise, we noticed that the production build times dropped from 27 minutes to 14 minutes. And we’re not done here yet; the team is still working on bringing that number down further.
One of the less glamorous but most important wins of this migration was how cleanly it addressed a whole range of known vulnerabilities without any custom middleware, manual patching, no forked dependencies. Security improvements were baked straight into the baseline of React 19 and Next.js 16.
Finally, we sharpened our stability. This is where React 19's upgrades to concurrent rendering really started to shine. Let me break that down.
Concurrent rendering is React's ability to juggle multiple updates at once without freezing the page. React 19 made this behavior significantly more predictable which translates to:
The platform simply behaves more reliably now, reducing any sort of friction or inconsistencies from a user’s point of view.
We achieved faster initial page loads and smoother client-side navigation on the user interface, but our real win was nailing reliability and predictability at scale.
For our engineers, we were able to deliver:
More than the metrics, this upgrade gave our team something arguably more valuable: a cleaner mental model. We were able to remove legacy abstractions, delete workaround code, and standardize how we handle server-side rendering and data fetching across the app.
All this translating to less code, fewer special cases, and more confidence that what we ship will behave the way we expect.
Upgrades like this are rarely observable from the outside. However, for a product built on the promise of seamless, reliable experiences, a migration of this scale is foundational.
I’ve dived deeper into the technical details of the migration here for those interested 😊 And do reach out to me on LinkedIn if you have any questions on how we went about it!



