Lender Price PPE
Speeding up a mortgage pricing engine used by major lenders and banks, including JPMorgan Chase.
The Challenge & Context
Lender Price helps mortgage lenders calculate loan pricing, eligibility rules, and rate lock margins in real time.
We hit a major bottleneck on our pricing calculation query. A single search could return up to 13,000 rates, taking 9 minutes to respond and dumping a 240MB payload on the browser. The page would freeze, and loan officers couldn't do their work.
Key Metrics
- Response Latency:9m → ~1m (89% speedup)
- Payload Size:240MB → ~3MB (99% cut)
- Bundle Size:-48% peak reduction
- Workflow Responsive:+35% render efficiency
Core Architecture Redesign (STAR)
Solving data payload bottlenecks without breaking user query UX
We couldn't just add standard page numbers because loan officers needed to sort and compare rates across the entire dataset at once. But rendering 13,000 table rows crashed browser tabs.
Fix the data pipeline across our Angular frontend and Kotlin backend so searches returned in seconds without losing global filtering.
I worked with the backend team to design a **Server-Side Grouping contract**. Instead of sending 13,000 individual rate rows, the backend grouped rates into ~250 summary buckets. Detailed rows only load when a user clicks to expand a specific group.
Response times dropped from 9 minutes to ~1 minute (an 89% speedup), and the payload shrank from 240MB down to ~3MB. The frontend table renders instantly with zero browser lag.
Technical Optimization Details
O(1) Fractional Indexing
Reordering rules previously required updating index numbers on every subsequent row in the database, causing locks during heavy use. We switched to fractional indexing (calculating midpoints between items), turning drag-and-drop reorders into a single O(1) database write.
Webpack Bundle Optimization
Ran Webpack Bundle Analyzer to identify bloated dependencies. We removed unused packages, switched to tree-shakeable imports, and added lazy loading for sub-routes, cutting total bundle size by 48%.
Change Detection & Memoization
Fixed UI stuttering by switching pricing table components to Angular OnPush change detection. Added trackBy functions to all loops to stop Angular from re-rendering unchanged DOM rows.
Cross-Stack Debugging
Dove into the Kotlin and Spring Boot backend to debug query bottlenecks and integration issues directly. Maintained SonarQube quality gates with >80% test coverage on critical calculation math.
Live Platform
Note: Lender Price is a secure enterprise mortgage system. The link below navigates to the corporate gateway; access is restricted behind active business credentials.