An ERP whose screens froze while crunching large datasets. Pagination, caching and web workers took load time from 70 seconds to 2 — without a rewrite.
The problem
Sorting, aggregating and transforming thousands of rows ran on the main thread, so every filter change locked the UI and users assumed the app had crashed.
What I built
- Profiled the slow paths and isolated pure data transforms.
- Paginated the data instead of loading everything at once, and cached results.
- Moved them into web workers with a small promise-based messaging layer.
- Replaced long single-page forms with guided stepper flows.
Outcome
- Load time cut from 70 seconds to 2 seconds (~97% faster).
- UI stays responsive while work happens in the background.