Production case films
Five production problems, shown as engineering decisions
Five incidents and redesigns from manufacturing systems. Each film keeps the sequence short: context, failure, decision, change, and the recorded result.
Transaction boundary
Case 01 · Don't let ERP roll back the factory
MES↔ERP integration - transactional-outbox redesign at SK AX
“An external system's failure must not roll back my system's core state.”
→ cut the transaction boundary in two
Final production step: the product is physically completed and discharged. MES records the event; ERP posts the cost.
Change surface
Case 02 · The middleware that knew too much
46 endpoints → 1 reflection-based gateway — mobile WMS at SK AX
“The middleware should forward requests — not know the business.”
→ one common API · dispatch by reflection at runtime
Mobile WMS at an EV battery factory: PDA screens → Tomcat middleware → legacy C# services. Three engineers for all of it.
Payload and freshness
Case 03 · Send the key, not the truck
HTTP 413 on mobile scans → PK-only payloads - batch 30 → 80
just raise the shared server's payload limit
“Send identifiers, not state — the DB is the source of truth.”
don't push your risk onto a shared server
Operators scan LOTs on PDAs and save in batches. The save travels through middleware to a legacy C# server — SHARED with other services.
Concurrency
Case 04 · Two servers, one number
Duplicate LOT IDs across instances → Oracle FOR UPDATE, scoped and shrunk
“Serialize at the row, and hold the lock for a statement — not a conversation.”
FOR UPDATE on one row → refined to atomic UPDATE … RETURNING
Multiple MES instances generate date-based LOT IDs from ONE shared counter row in the database.
Delivery flow
Case 05 · Rebuilding trust, then the query
Costing project: single-intake anchor + 7.7K-line PL/SQL → per-process CTEs
“The bottleneck isn't the code — it's that nobody anchors the two sides.”
listen first → single intake → context with every assignment → then fix the code
Six months into a costing project, trust is broken: delivery arguments, a replaced lead. I join as tech lead — and listen to both sides first.