AI ENGINEERING · Dec 2025–Present
Using agentic workflows to unblock a legacy migration
Migrated the first repository from react-scripts to Vite in one day using Copilot, reusable agent skills, tests, and parallel execution of independent tasks after an earlier migration attempt had stalled.
EPAM client
Lead Software Engineer
for the first repository’s Vite migration
My role and the problem
As a Lead Software Engineer at EPAM, I proposed revisiting a migration from react-scripts to Vite for a customer’s legacy React interfaces. A previous attempt had been unsuccessful, and the migration had been put aside.
I explored whether an agentic workflow could make the work practical. I designed the workflow, built reusable migration skills, reviewed the generated changes, and decided which tasks could run in parallel.
Choose models to match the task
I used GitHub Copilot with different models according to task complexity. For complex migration tasks, I used a more capable Claude model. For routine changes, such as updating CSS class names, I used a lighter model for faster execution.
Model selection was part of how I organized the work, alongside dependency analysis, reusable instructions, tests, and review of the generated changes.
Map the codebase and establish safeguards
I first set up an agent to explore and map the codebase. I identified dependencies before assigning migration tasks so that work requiring a prerequisite would not be treated as independent.
Before changing application code, I ensured the codebase had tests to help catch regressions. Those tests provided a safeguard for evaluating migration changes; generated code still required review.
Refine the skills before expanding the work
I built reusable skills to guide the migration, then tried them on a small portion of the codebase. I reviewed the quality of the result and adjusted the skills until the output met my expectations.
This initial pass let me refine the instructions before applying them more broadly. The skills captured the migration approach so subsequent tasks could follow the same guidance.
Parallelize where dependencies allow
Once the initial migration quality was satisfactory, I used multiple agents to perform tasks in parallel where there were no blocking dependencies. The dependency analysis guided which pieces could proceed independently.
My role combined hands-on review with coordinating the work: preparing the instructions, assessing the output, and choosing where parallel execution was appropriate.
The result and its scope
I completed the first repository’s migration from react-scripts to Vite in one day, bringing forward work that had previously been put aside after an unsuccessful attempt. A subsequent migration addressed Material UI and TypeScript; the one-day result applies specifically to the initial Vite migration.
The reusable part of the work was the process: map the codebase, establish tests, refine skills on a small migration, and expand execution according to dependencies.
Interested in working together?
Start a conversation