Fast at 700,000 work orders — by design, not hardware
Most enterprise systems get slower every year as data piles up. This one didn't. The trick wasn't bigger servers or heroic index tuning — it was recognizing that yesterday's data and today's data have completely different jobs.
Success creates data. Data creates slowness.
In the early years, every work order stayed in the operational tables forever — and it worked fine, because volumes were small. Then the business grew. Repairs accumulated year over year: orders, quotes, QC records, photos, timeline events. The system was heading toward the classic enterprise fate — a platform that gets slower with every success it processes.
The insight: operational users care about today's repairs. Historical data serves audits, customer history, and analytics. Serving both workloads from the same tables means optimizing for neither.
Four options. Three rejected.
Everyone reaches for hardware first. We evaluated the standard playbook before choosing the architectural answer.
Bigger hardware
Scale the infrastructure, keep the schema.
Heavy index optimization
Continuously redesign indexes as tables grow.
Table partitioning
Let the database engine split tables internally.
Working vs. history tables
Two logical data areas: a small hot set for open work, an unlimited archive for closed work — connected by background jobs.
Data with a lifecycle, like the business it models
A work order is born, lives through its repair, closes — and then changes jobs: from operational record to business memory. The database mirrors exactly that.
Asynchronous everything
Archival, sync processing, report preparation, maintenance — anything not needed in the user's click path runs as a background job. Interactive workflows never wait for housekeeping.
Full history, zero deletion
Every closed order keeps its complete timeline, QC evidence, and approvals in the history schema. Audits and customer-history questions get instant, complete answers.
No big-bang migration, ever
The split was introduced into a live production system — incrementally, without downtime, without a rewrite. The platform never stopped taking orders while its foundations were rebuilt.
Growth stopped being a performance problem
Optimize for the workload users actually perform — not for the total amount of data you store.The principle that outperformed every hardware upgrade
More from this engagement
The platform its acquirer couldn't replace
The full eight-year story: 700k+ work orders, 2,000+ users, portals, contracts, BI — and the migration that never happened.
Read the story → Solution storyDon't replace the ERP — surround it
System of record vs. system of engagement: the boundary that held for a decade.
Read the story → Solution storyReporting as a platform
Self-service BI, dashboards, and PowerPoint presentations generated from live operational data.
Read the story →Is your system getting slower every quarter?
Performance problems are usually lifecycle problems in disguise. We find the real cause before recommending hardware.
Book a Strategy Call