Multi-Site CAM Automation
Killing a hand-copying step between the planning system and CAM — and getting it onto a server that could not run modern tooling.
Role
Sole engineer
Context
750+ person PCB manufacturer
Status
In production
Verified by
Offline harness, 101/101 assertions · 6 real jobs
Results
Harness assertions · Offline validation
Real jobs validated · Checked end to end
Scope grew from one
The problem
Planners were copying stackup and scaling values out of the planning system and into CAM by hand. It was slow, it happened many times a day, and hand-copying numbers between two systems is a reliable way to introduce typos into manufacturing data.
The values already existed in a system with an API. They were simply not connected to the place they were needed.
Constraints
- Deployment target was a legacy RHEL 6 server whose Python was old enough that modern GUI toolkits would not run on it.
- The existing form-filler was already in daily use, so the change had to fit the workflow people already had.
How I built it
The core change was small and high-leverage: rewire the form-filler to pull stackup and scaling values live from the planning system REST API instead of a spreadsheet someone maintained by hand. The data becomes current by construction, and an entire category of transcription error disappears.
The deployment constraint turned into a second piece of work. The interface was PyQt, which the legacy server could not support, so it was ported to tkinter — unfashionable, but it runs on what is actually there. Shipping onto the hardware the customer has is worth more than shipping onto the hardware you would prefer.
Validation was offline and mechanical: 101 of 101 harness assertions passing, then six real jobs checked end to end. What started as a single-site request finished as a rollout across four.
What I’d do differently
I would negotiate the multi-site scope up front rather than discovering it mid-build. The work was right; the sequencing meant re-testing things that could have been designed for once.
Stack
Python · REST APIs · tkinter · PyQt · legacy RHEL