The challenge
Three locations, three incompatible record systems (one Excel, one Access DB, one paper). Lab tech turnover meant tribal knowledge walked out the door every six months, and regulators were starting to ask for audit trails the team didn't have.Our solution
We built a multi-tenant Laboratory Information System on Laravel + Vue, deployed to a managed Kubernetes cluster with daily backups and a regulatory-grade audit log. Migration ran in parallel for 60 days before cutover — both systems live, reconciled nightly, so the team could fall back if anything broke.The results
Report turnaround time dropped 68% across the three locations, measured over 90 days post-launch. Audit log satisfied the next external inspection without findings. Lab tech onboarding time dropped from 3 weeks to 4 days.The 90-day arc
Weeks 1–2. Discovery on-site at all three locations. Time-and-motion studies on the existing flow. Output: a written scope doc with a fixed-price proposal.
Weeks 3–8. Build. Two engineers + one designer in two-week iterations. The lab director was in every sprint review — no proxies, no project manager filter. By week 6 the core LIS was running on a staging cluster the lab team was using daily for new records (old records still in the legacy systems).
Weeks 9–12. Migration. Wrote idempotent importers per source system. Reconciled nightly against the legacy data for 60 days. When we cut over in week 12, zero records were lost and the team didn’t notice the switch.
What we’d do differently
The migration phase could have been compressed to 30 days if we had insisted earlier on consolidating the three legacy systems into one staging database first. The parallel-running approach worked but the dual-entry burden on the lab team was real. On the next engagement like this we’d skip straight to a unified staging dataset and run a one-week shadow cutover instead.