Case Study · Enterprise CRM/ERP

Jobscope — six surgical fixes that turned a fragile legacy ERP into a stable platform.

Cookie-bloat fixed. Integration auth split (ROPC). AI-assisted VB.NET → .NET 8 migration. Single-script WiX installer. DB-change tracking. JWT migration. Each shipped independently.

The situation

A long-running enterprise CRM/ERP shipped to clients as a Windows installer. Each release required a multi-step manual install plus an on-site DBA to run schema migrations. Integration partners accessed APIs by reusing a logged-in user's browser cookie — a practice the team had never been comfortable with. Power users were starting to hit request-size errors because their session cookies, carrying every permission, had bloated past what the framework could handle.

The diagnosis

Six independent failure classes, each compounding the others:

  1. Integration partners accessed APIs by reusing a user's session cookie
  2. Cookies carried every permission for every user — bloat broke requests under heavy permission load
  3. The React UI was slow because it consumed coarse-grained .NET payloads and re-rendered everything on every change
  4. Every install required an on-site config-file copy from old to new system
  5. DB schema changes weren't documented; every release required a DBA who knew them
  6. The legacy VB.NET → .NET 4 → .NET 8 migration had no clear methodology and was stalling

The decision

Decision Treat each as a discrete fix. Don't bundle. Each ships independently — the team wins six separate releases instead of one giant scary one.

The delivery — six fixes, each ships standalone

1. Auth split for integration partners (ROPC)

2. AI-driven legacy → modern code migration

3. React app performance fix

4. Single-script installer + auto-config restore

5. Database-change tracking & release notes automation

6. JWT migration to fix cookie-bloat

The outcome

Numbers Integration onboarding: weeks → days.
Cookie-bloat outages: monthly → zero.
Install time: hours → 1 click.
Release notes for DB changes: written by humans → auto-generated.
Migration confidence: high enough to do a module-per-week cadence.

What I'd do differently

The "Code Gini" agent was useful but produced too much output to review in one sitting. A smaller-batch handoff (one screen + one API per day) would have given the team better review loops and less reviewer fatigue. The lesson generalises: AI-generated migration code is a productivity multiplier on the producer side, but a productivity divider on the reviewer side — keep the batch sizes small.


Stuck with a legacy stack you can't easily replace?