Problem
PrecisionParts Manufacturing is a 120-person company that produces custom metal parts for the aerospace and automotive industries. They were managing their entire production process with Excel spreadsheets and a legacy system that hadn’t been updated in 8 years.
The consequences were severe:
- Inventory accuracy was at 72%, leading to stockouts and emergency purchases
- Production lead times were unpredictable, causing missed delivery deadlines
- No real-time visibility into production status or machine utilization
- Manual purchasing consumed 10+ hours per week of the operations manager’s time
- Quality control was paper-based, making traceability nearly impossible
The company knew they needed an ERP, but previous attempts to implement off-the-shelf solutions had failed because none of them matched their unique multi-stage manufacturing process.
Solution
I implemented Odoo 17 with three custom modules designed specifically for their manufacturing workflow.
Custom Manufacturing Module
The standard Odoo manufacturing module didn’t support their multi-stage quality control process. I built a custom module that:
- Defines manufacturing orders with custom routing through 5 production stages
- Requires quality control sign-off at each stage before the order can proceed
- Tracks machine time and operator time at each stage
- Generates a complete production history for each part, including who worked on it and when
Automated Procurement Module
The company’s purchasing process was entirely manual — the operations manager would check inventory levels every week and place orders. I built a custom module that:
- Monitors real-time inventory levels across two warehouses
- Triggers purchase orders automatically when stock falls below reorder points
- Calculates reorder points dynamically based on lead times and seasonal demand patterns
- Routes purchase orders for approval based on amount thresholds
- Integrates with their top 15 suppliers via email automation
Production Dashboard
I built a real-time dashboard that shows:
- Current status of all active manufacturing orders
- Machine utilization rates across the factory floor
- Bottleneck alerts when orders are stuck at a stage too long
- Daily and weekly production targets vs. actuals
Architecture
Odoo 17 (Docker) → Custom Modules
↓
PostgreSQL ← Inventory & Production Data
↓
Production Dashboard (Real-time)
↓
Automated Procurement → Supplier Emails
↓
Quality Control → Digital Sign-off
The entire system runs on a single server with Docker containers, backed up nightly to offsite storage. Grafana provides additional monitoring of system health.
Technologies
- Odoo 17: Core ERP platform
- Python: Custom module development
- PostgreSQL: Database
- Docker: Containerization for easy deployment and scaling
- Nginx: Reverse proxy and SSL termination
- Grafana: System monitoring and alerting
Results
After 6 months of implementation and optimization:
- 40% reduction in production lead times
- 95% inventory accuracy (up from 72%)
- 10 hours per week saved on purchasing
- On-time delivery rate improved from 85% to 97%
- Full traceability of every part through the production process
Lessons Learned
- Customization should be a last resort, not a first resort: We started with standard Odoo modules and only customized where the business process truly required it. This kept the implementation maintainable and upgrade-safe.
- Data migration is the hardest part: Cleaning 8 years of legacy data took longer than building the custom modules. We should have allocated more time for this.
- Train early and often: We started training the production team 2 weeks before go-live. That wasn’t enough. Training should start during the design phase so users feel ownership of the new system.
- Phased rollout beats big bang: We rolled out module by module — inventory first, then manufacturing, then procurement. This let users adapt gradually and caught issues early.
- Real-time dashboards change behavior: Just having visibility into production status changed how the team worked. Managers started addressing bottlenecks proactively instead of reactively.