The Problem
ProgressTeaching’s education platform was choking on its own data. Dashboards took 8 seconds to load. Teachers were abandoning the appraisal workflow because it was too slow. The SQL database couldn’t handle the query complexity of trust-level reporting.
The platform wasn’t broken—it just couldn’t keep up with the schools that relied on it.
The Stakes
Schools don’t switch platforms easily. If ProgressTeaching couldn’t improve performance, districts would start looking for alternatives. The churn risk was real.
Our Approach
We chose a zero-downtime migration strategy. Schools couldn’t afford interruption—the platform was in active use across multiple trusts.
Hasura gave us instant GraphQL APIs with real-time subscriptions. Next.js provided server-side rendering for dashboard-heavy workflows. Postgres gave us a cleaner data model for educational relationships.
The migration ran in parallel: old system stayed live while we validated the new one. Three weeks of dual operation, then a clean cutover.
What We Built
- Hasura GraphQL layer for real-time API access
- Next.js frontend with optimized SSR/CSR transitions
- Postgres migration from legacy SQL schema
- Real-time analytics for school-wide and trust-level insights
- Role-based access control for teachers, leaders, and administrators
The Results
- 1M+ records migrated with zero downtime
- Dashboard load times reduced 40% (from 8s to under 5s)
- Real-time feedback updates via GraphQL subscriptions
- Component-based UI system for faster feature development
What We Learned
The migration was the easy part. The hard part was getting teachers to trust the new system. We ran training sessions, created video guides, and had support staff on standby for the first week.
The lesson: technical migrations aren’t complete until the humans using the system trust it again.

