AI

Renovating While Open for Business: How AI Helps Us Keep a Mission-Critical App Modern

For the past two and a half years I've been the senior UI developer on FIDx's Insurance Overlay (IO), the platform financial advisors use to research, propose, and purchase annuities inside the tools they already work in. It's a large, form-heavy application, it's live to hundreds of advisors, and it never gets to close for maintenance.

It's also built on Angular, one of the major modern frameworks for building web applications. Angular has a habit that is both a blessing and a headache: it releases a major new version roughly every six months.

Why upgrades keep getting harder

Think of a framework as the foundation, plumbing, and wiring of a building. You never see it, but everything you do see sits on top of it. When the framework releases a new version, it's as if the building code changed: some things that were fine last year are no longer allowed, some new materials are required, and a few walls need to move.

Now imagine doing that renovation while the building stays open, with hundreds of people working inside it every day. That's a framework upgrade on an enterprise application.

Ignoring these updates isn't an option; if we fall too far behind, the platform becomes vulnerable to security risks and incompatible with modern web standards. Keeping pace ensures the application remains secure and performant, while preventing an inevitable future upgrade from becoming a massive, costly overhaul.

Since I joined IO we've moved from Angular version 18 to 19, then 20, then 21, and we're preparing for 22 now. Each one has been bigger than the last, partly because the app keeps growing, and partly because Angular itself is going through a generational shift in how it works under the hood (more on that below). What used to be a day or two of work has become weeks of careful, methodical change.

There's a second layer, too. Like most enterprise apps, IO doesn't build every button, dropdown, and data table from scratch. We use a library of pre-built, accessible UI components called PrimeNG. PrimeNG has to stay in lockstep with Angular: when Angular moves, PrimeNG moves, and we have to move with both. Over the last few releases PrimeNG overhauled its entire theming system and renamed or retired dozens of components. On top of that, the company behind it has been shifting toward a commercial model under the PrimeUI banner, which changes how we license, plan, and budget for the library. Two moving targets, tightly coupled, both mandatory.

From chat window to teammate

We embraced AI on this project early. At first it was ChatGPT in a browser tab: paste in a chunk of code, ask a question, paste the answer back. Helpful, but the AI could only see whatever I remembered to show it. It was like asking a brilliant consultant for advice over the phone when they've never set foot in the building.

Late last year we moved to GitHub Copilot inside VS Code, our code editor, running on the latest Opus reasoning models (and, for the most complex planning work, the Fable models, with the investment supported by FIDx). That changed everything, for one simple reason: the AI can now see the whole building. It reads our codebase, runs our build, checks our code-quality rules, and reads our team's own documentation. Instead of a phone call, we have a colleague sitting next to us.

Three things have made that colleague genuinely effective.

  1. We wrote it an onboarding manual. Every developer who joins a team has to learn the house rules: how we name things, which patterns we use, what "done" means. We did the same for the AI. In a .github folder in our workspace we keep a set of plain-English instruction files covering our TypeScript and Angular standards, our accessibility requirements (every screen must meet WCAG AA), how we use PrimeNG, how the front end talks to the .NET back end, and how our folders are organized. VS Code loads the right ones automatically based on the file I'm working in. The AI stops guessing at our conventions and starts following them.
  2. We gave it repeatable skills and specialist agents. Beyond the rules, we captured our recurring procedures (creating a new page, creating a new component, wiring up a new API client, migrating a component to the newer Angular patterns) as step-by-step "skills" the AI can pick up and execute consistently. We also built two agents: a PR Reviewer that checks my work against our team's Definition of Done before a human ever sees it, and a PR Prepper that drafts pull-request descriptions and self-review checklists. Neither one edits code; they advise. That boundary is deliberate.
  3. We connected it to the rest of our tools. Using an emerging standard called MCP (think of it as a universal adapter), we plugged Copilot into Atlassian, so it can read the Jira ticket it's implementing, check its work against the actual spec, post progress comments, and publish Confluence pages documenting architectural decisions. We plugged it into Azure DevOps so it can review pull requests, generate PR descriptions, and raise PRs. We've started experimenting with Figma integration, so design files can be read directly. The AI isn't just in the code anymore; it's in the conversation.

What an upgrade looks like now

With that foundation in place, a major Angular and PrimeNG upgrade is a very different experience.

The AI reads the release notes and migration guides alongside our codebase and produces a plan: what will break, where, and in what order to fix it. It runs the official automated migration tools where they help and, just as importantly, tells us honestly when they don't. It sweeps the codebase for renamed PrimeNG components and retired APIs, updates them, and explains why each change matters. After every change it runs our build and code-quality checks as a gate, and fixes what fails before moving on.

Upgrades haven't become effortless - the change is still significant. What changed is that the mechanical part, the hundreds of small, tedious, easy-to-get-wrong edits, is now fast and consistent. That frees me to spend my time on the judgment part: testing the flows advisors actually use, catching subtle behavior changes, and deciding how to sequence risk. Fewer bugs reach QA, and the ones that do are more interesting.

The current chapter: getting ready for version 22

Right now, before we touch v22, we're doing something even bigger than an upgrade. We're modernizing how the app thinks about change.

Here's the plain-language version: historically, Angular kept the screen up to date by periodically re-checking everything, a bit like a restaurant manager walking past every table every few minutes asking "anything change?" It works, but it's wasteful, and on big apps it gets slow. The modern approach uses something called signals: each piece of data knows exactly which parts of the screen depend on it and tells them when it changes. It's like a spreadsheet, where editing one cell instantly recalculates only the formulas that reference it. It's faster, more predictable, and it's clearly where Angular is heading, so we want to arrive at v22 already speaking its language.

For an app of our size (133 components and 120 view models) that's a huge undertaking, and this is where the advanced reasoning models have earned their keep. A few moments from the past couple of weeks that stuck with me:

  • We started with a pilot instead of committing blindly. The model helped us convert one representative slice first, measuring the real cost, and then writing our migration playbook from patterns that had actually been proven. That pilot overturned four assumptions in the original plan, including the discovery that Angular's official automated conversion tools work on exactly 0% of our codebase because of how it's structured. Learning that on day one instead of week six saved us an enormous amount of time.
  • It pushed back on its own plan. Partway through, the reasoning output stopped and flagged: "Implementing this surfaced a finding that contradicts my earlier plan. I want to stop and flag it before going further." That’s the kind of sanity check you rarely get from a standard script.
  • It triaged a red herring. When a feature appeared to break after a change, instead of hallucinating code fixes, it traced the issue to a local debugging flag I had left on weeks earlier and asked me to check it. Nothing was broken.
  • It translated the technical debt for the team. The reviewers on one of these PRs were a full-stack architect and a back-end developer: sharp people who don't live in Angular all day. The AI rewrote the PR description so it explained what changed and why it's safe in terms that made sense to them, while keeping the deep technical detail available for the record.

The human part

At Nimbl we talk a lot about Technology, Humanized: making tech more accessible, more friendly, more human. I'll admit that "AI-assisted framework upgrades" doesn't sound like the most humanistic topic in the world.

But here's what it has actually felt like from the inside:

The work got more human, not less. The parts of my job that were most draining, the repetitive, error-prone, "did I miss one?" edits, are now shared with a tireless collaborator. The parts that require experience, taste, and judgment are still mine, and I have more energy for them.

The work got more accessible to the rest of the team. Because the AI writes clear explanations, keeps our documentation current in Confluence, and translates technical change into plain language, teammates who aren't front-end specialists can follow along, review with confidence, and contribute.

And the relationship works the way good working relationships do: with clear expectations (our instruction files), honest communication (it tells me what it doesn't know), and trust earned through verification. Every change still goes through our build, our human reviews, and real hands-on testing before it ships, and we're adding an automated test suite so that safety net grows with us.

At the end of the day, AI didn't automate away the engineering on Insurance Overlays. It absorbed the repetitive maintenance churn so I could spend my time where it actually counts: building stable, performant tools that advisors can rely on.

Browse our related insights

Work with us

Ready to build what's next?

Let's bring your next product to life with clarity, speed, and results that last.