Rewrite or Refactor? How to Safely Move Legacy Apps to Modern Frameworks

This ad is not shown to multipass and full ticket holders
React Advanced
React Advanced 2026
October 23 - 26, 2026
London, UK & Online
Upcoming event
React Advanced 2026
React Advanced 2026
October 23 - 26, 2026. London, UK & Online
Bookmark
Rate this content
Sentry
Promoted
Code breaks, fix it faster

Crashes, slowdowns, regressions in prod. Seer by Sentry unifies traces, replays, errors, profiles to find root causes fast.

Get started

Sooner or later, every team faces the same question: how do we migrate from legacy code to a modern framework? Should we take the “big bang” approach and rewrite everything from scratch, or should we migrate progressively, piece by piece? In this talk, I’ll share real-world stories from large-scale frontend migrations and highlight the trade-offs of both strategies. We’ll explore the risks of freezing development for months, the complexity of running two worlds in parallel, and the decision-making criteria that help teams pick the right path

This talk has been presented at Web Engineering Summit 2026, check out the latest edition of this Tech Conference.

Sylwia Laskowska
Sylwia Laskowska
21 min
15 Jun, 2026

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Sylwia Laskowska discusses challenges of frontend legacy migration, importance of legacy system migration for security and performance, considerations for big bang migration strategy, success story of Angular migration, incremental migration with strangler pattern, real-life migration story using feature flags, pitfalls in migration like prolonged timeline, and migration planning and execution strategies likened to renovating an old house.

1. Challenges of Frontend Legacy Migration

Short description:

Sylwia Laskowska, software developer at EITOS, discusses the challenges of frontend legacy and migration. She shares experiences from migrating various technologies and highlights the inevitability of legacy in tech. The evolution of web development from old to modern frameworks is showcased through personal experiences and the necessity of migration despite reluctance.

Hi everyone. Rewrite or refactor? Today I'm going to talk about something many teams face, but few prepare for. What to do when your frontend becomes legacy and how to migrate it safely. I'm Sylwia Laskowska, senior software developer at EITOS. I'm currently working on a large distributed project for the European Commission. I'm from Gdańsk, Poland. You can visit my blog where you can read more about frontend migrations and many, many more things.

And this won't be a tutorial talk. During my career, I had plenty of opportunities to see some, let's say, historically interesting code bases and give them a second life. I migrated apps from Backbone to Vue, from Old Angular to Modern Angular, from ASP.NPC.NET to Modern Frameworks. And honestly, after some time, you can start seeing the same migration patterns everywhere. And by the way, I have a lot of experience with legacy.

I created my first website in 1999. It looks somehow like this. HTML 4.1, a guest book, visits counter, frame sets, which were back then the greatest achievement of web design. No CSS, but who needs CSS when you can have falling JS snow in winter? So this one was perfect, and I would never migrate it. And back then, I thought this is the peak of software engineering. But then we had BackboneJS, KnockoutJS, and it was like, wow, finally, interactive UI, client-side form validation.

It felt like the future of the web. And then we had ECMAScript 6, TypeScript, Modern Frameworks, and suddenly, this future became legacy, again. Because the truth is, we will all end up with legacy just sooner or later. This is because tech ages faster than the business needs. And legacy doesn't always mean ancient or exotic. It can be perfectly normal tech, just old enough to stop scaling. For example, old versions of popular libraries. And of course, no one plans for legacy.

Maybe the project was paused for six years. Maybe no one has time or budget for upgrades. Or maybe the only single developer left the company in 2020. So whatever happens, we will all end up here, which leads us to the question, why migrate at all? Because sometimes, product owners ask me, if it works, why migrate? Dev just want some shiny stuff on their CVs.

2. Importance of Legacy System Migration

Short description:

The importance of migrating legacy systems for security, performance, and sustainability. Two migration strategies - big bang and incremental - determine the approach based on project constraints and the ability to halt feature delivery.

I always answer, you know that I'm not a fanboy of any particular framework. For me, they're tools like hammers. But when I work, I want to use a good, reliable hammer, not the rusty one with missing parts. But migration is not only about developer experience. First of all, security. When the tech is outdated, the security patches stop and vulnerability reports start turning red. And enterprise projects are especially vulnerable to this because these apps often live much longer than originally planned. And no product owner ever said, okay, let's sacrifice security because we need more features at least I hope so.

Also tooling. So modern tooling, smaller bundles, white bills mean a faster app. And a faster app means a happy client. Libraries and integrations. If you have a third-party library in your project, which wasn't updated for five years, it seems even an author forgot about it and it doesn't compile or know it on an old 18. That's not working code. This is a time bomb. And my favorite point, tech debt has interest. And the longer you wait, the higher the cost of migration. That's why migration, it's not about hype. It's about the survival of your product.

How to migrate? We basically have two strategies of migration. First one is the big bang strategy. You rewrite the app from scratch or more often nowadays make a giant upgrade from an older version of the library to the latest one. For example, from React with classes to modern React with hooks and suspense. We also have the incremental strategy where you rewrite piece by piece while shipping features in between. And the one you choose should depend on reality, not preference. Because developers often treat migration strategy like a philosophical debate. But usually your project constraints make the decision for you anyway. If you remember just one slide from this presentation, let it be this one. How do we decide which migration strategy we should use? First question should be, can you stop delivering features for weeks or even months? If yes, you can try the big bang strategy. If no, you're already in the incremental approach.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Scaling Up with Remix and Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Scaling Up with Remix and Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Understanding React’s Fiber Architecture
React Advanced 2022React Advanced 2022
29 min
Understanding React’s Fiber Architecture
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
Thinking Like an Architect
Node Congress 2025Node Congress 2025
31 min
Thinking Like an Architect
Top Content
In modern software development, architecture is more than just selecting the right tech stack; it involves decision-making, trade-offs, and considering the context of the business and organization. Understanding the problem space and focusing on users' needs are essential. Architectural flexibility is key, adapting the level of granularity and choosing between different approaches. Holistic thinking, long-term vision, and domain understanding are crucial for making better decisions. Effective communication, inclusion, and documentation are core skills for architects. Democratizing communication, prioritizing value, and embracing adaptive architectures are key to success.
Full Stack Components
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Full Stack Components
Top Content
RemixConf EU discussed full stack components and their benefits, such as marrying the backend and UI in the same file. The talk demonstrated the implementation of a combo box with search functionality using Remix and the Downshift library. It also highlighted the ease of creating resource routes in Remix and the importance of code organization and maintainability in full stack components. The speaker expressed gratitude towards the audience and discussed the future of Remix, including its acquisition by Shopify and the potential for collaboration with Hydrogen.
The Dark Side of Micro-Frontends
React Advanced 2025React Advanced 2025
29 min
The Dark Side of Micro-Frontends
In the Talk, various key points were discussed regarding micro-front-end architecture. These included challenges with micro-intents, common mistakes in system design, the differences between micro-intents and components, granularity in software architecture, optimizing micro-front-end architecture, efficient routing and deployment strategies, edge computing strategies, global state and data sharing optimization, managing data context, governance and fitness functions, architectural testing, adaptive growth, value of micro-frontends, repository selection, repo structures, and web component usage.
The Eternal Sunshine of the Zero Build Pipeline
React Finland 2021React Finland 2021
36 min
The Eternal Sunshine of the Zero Build Pipeline
For many years, we have migrated all our devtools to Node.js for the sake of simplicity: a common language (JS/TS), a large ecosystem (NPM), and a powerful engine. In the meantime, we moved a lot of computation tasks to the client-side thanks to PWA and JavaScript Hegemony.
So we made Webapps for years, developing with awesome reactive frameworks and bundling a lot of dependencies. We progressively moved from our simplicity to complex apps toolchains. We've become the new Java-like ecosystem. It sucks.
It's 2021, we've got a lot of new technologies to sustain our Users eXperience. It's time to have a break and rethink our tools rather than going faster and faster in the same direction. It's time to redesign the Developer eXperience. It's time for a bundle-free dev environment. It's time to embrace a new frontend building philosophy, still with our lovely JavaScript.
Introducing Snowpack, Vite, Astro, and other Bare Modules tools concepts!

Workshops on related topic

AI on Demand: Serverless AI
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
AI on Demand: Serverless AI
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
In this workshop, we discuss the merits of serverless architecture and how it can be applied to the AI space. We'll explore options around building serverless RAG applications for a more lambda-esque approach to AI. Next, we'll get hands on and build a sample CRUD app that allows you to store information and query it using an LLM with Workers AI, Vectorize, D1, and Cloudflare Workers.
High-performance Next.js
React Summit 2022React Summit 2022
50 min
High-performance Next.js
Workshop
Michele Riva
Michele Riva
Next.js is a compelling framework that makes many tasks effortless by providing many out-of-the-box solutions. But as soon as our app needs to scale, it is essential to maintain high performance without compromising maintenance and server costs. In this workshop, we will see how to analyze Next.js performances, resources usage, how to scale it, and how to make the right decisions while writing the application architecture.
Model Context Protocol (MCP) Deep Dive: 2-Hour Interactive Workshop
AI Coding Summit 2025AI Coding Summit 2025
86 min
Model Context Protocol (MCP) Deep Dive: 2-Hour Interactive Workshop
Workshop
Stepan Suvorov
Stepan Suvorov
Join a focused 2-hour session covering MCP's purpose, architecture, hands-on server implementation, and future directions. Designed for developers and system architects aiming to integrate contextual data with ML models effectively. Agenda:- Introduction & Why MCP? Key challenges MCP solves and core benefits.- Architecture Deep Dive: components, interactions, scalability principles. - Building Your Own MCP Server: guided walkthrough with code snippets and best practices; live demo or code review.- Future of MCP Developments: potential enhancements, emerging trends, real-world scenarios.
Key Takeaways:- Clear understanding of MCP's rationale.- Insight into design patterns and scaling considerations.- Practical steps to implement a prototype server.- Awareness of upcoming trends and how to apply MCP in projects. 
From Async Chaos to Deterministic React: Hands-On State Machine Architecture for Real-Time Systems
React Summit 2026React Summit 2026
86 min
From Async Chaos to Deterministic React: Hands-On State Machine Architecture for Real-Time Systems
Workshop
Rajni Gediya
Rajni Gediya
Mentorship available
As React apps move into real-time systems — streaming data, AI workflows, hardware devices — async complexity grows quickly. Reducers and scattered async handlers often work at first, but once concurrency and lifecycle interruptions enter the picture, things start to break in subtle ways.
In this hands-on workshop, we’ll take a fragile async React setup and redesign it into a deterministic, state-machine-driven architecture. The goal isn’t to teach a specific library, but to show how explicit state modeling makes complex systems easier to reason about and more reliable in production.
Node's Concurrency With the Strength of a Bull With BullMQ
Node Congress 2026Node Congress 2026
95 min
Node's Concurrency With the Strength of a Bull With BullMQ
Workshop
Edy Silva
Douglas Marques
2 authors
Node's concurrent nature is powerful already, but often we need to push work out of the main server for several reasons. In this work, we will explore a few scenarios in which work is cleverly pushed to another Node process to resolve.
Once we use a queue to distribute workloads, we need to identify the nature of the work to be done. For either I/O- or CPU-intensive work, the first is already perfectly covered by a single Node.js process; we will need to tweak the worker setup to match the available resources and throughput.