AngularJS migration cost: what drives it and how to estimate it
Nobody can price a migration without reading the code. This guide explains the factors that decide the cost and the steps that turn them into an estimate you can defend.
Why nobody can quote a price from the outside
Two AngularJS apps with the same number of screens can need very different amounts of work. One has clean components and a test suite. The other has business rules inside templates and a grid plugin nobody maintains. A price given before someone has read the code is a guess, and the guess is usually padded to protect whoever made it.
This guide contains no price figures, because any figure that ignores your codebase would mislead you. It gives you the list of drivers and a method to reach your own number.
The drivers
Screens and their complexity
The screen is the natural unit of work. Count the screens, then classify them. A read-only list is cheap. A multi-step form with conditional validation, autosave and role-based fields is expensive. Three sizes (small, medium, large) are enough for a first estimate.
Check usage too. Screens nobody opens are deleted, and deleted screens cost nothing to migrate. Analytics or server logs usually answer this quickly.
Third-party widgets
Grids, date pickers, rich text editors, charts and file uploaders are a frequent source of surprises. Each one needs a decision: replace it with a modern equivalent, wrap it for a while, or rebuild it. A data grid with custom cell editors, saved column layouts and export can cost more than several ordinary screens together. The library migration index lists common AngularJS libraries and their usual replacements.
Tests
End-to-end tests for the critical flows lower the cost, because they check each migrated screen automatically. Without them, someone has to write those tests first or verify parity by hand on every release. Both take time. Budget for it explicitly.
Code shape
- Components written in the AngularJS 1.5 style migrate almost mechanically.
- Controllers with heavy
$scopeuse,$rootScopeevents and logic inside templates need untangling first. - Direct jQuery DOM manipulation has to be isolated before it can be replaced.
Shared plumbing
Authentication, session handling, the HTTP layer, routing and the build chain are paid for once, at the start. This fixed part is similar for a small app and a large one. That is why small migrations look expensive per screen.
Team availability
The people who know the business rules are usually the same people shipping features. If they can give the migration only a few hours a week, questions wait and work stalls. If answers arrive within a day, the same scope finishes much sooner. Availability changes the cost as much as any technical factor.
How to get to a number
- Inventory. List every route and screen, every service and every third-party library. Mark what is unused.
- Classify. Give each screen a size. Give each widget a decision: replace, wrap or rebuild.
- Run a pilot. Migrate one real screen of medium size, including the shared plumbing it needs. Record the actual effort.
- Calibrate. Use the pilot effort as the reference for the medium size. Adjust small and large relative to it.
- Add the fixed items. Plumbing, test setup, final cleanup, and the hours your own team spends answering questions and reviewing.
- Group into phases. Price each phase separately so you can approve them one at a time.
Why a short assessment comes first
A short assessment produces the inventory, the classification and the pilot choice. It is small next to the migration itself, and it replaces a padded guess with an estimate per phase that both sides can check against the code.
An assessment also shows what you can skip. Part of the app may be ready for deletion. One module may be better left alone until it is retired. A single widget may decide a large share of the budget. The phased roadmap describes what follows the assessment.
Fixed price or time and materials
Fixed price per phase works when the inventory exists and the scope of each phase is written down. Time and materials fits the assessment and the pilot, where the goal is to learn. A fixed price for the whole migration before any assessment forces the vendor to add a large margin or to cut corners later.
Costs people forget
- Running both frameworks during the hybrid period, including build time and bundle size.
- Regression testing by your QA or product people.
- Training for developers who have not used modern Angular.
- The cleanup phase that removes AngularJS and the compatibility layer.
- The cost of waiting. Each quarter the legacy code grows and the people who understand it may leave. The business case guide shows how to put that into the comparison.
More in this section
- How long does an AngularJS migration take?
- AngularJS security and compliance risk
- AngularJS extended support: a bridge and its limits
- How to build the business case for frontend modernization
Planning a migration or a micro-frontend platform?
In a 20-minute call you describe your situation and I tell you how I'd approach it. If it isn't worth doing yet, I'll say so.
Message me on LinkedIn