Claude-skill-registry co-packing-management
When the user wants to manage co-packing operations, select co-packers, optimize contract manufacturing, or coordinate outsourced production. Also use when the user mentions "contract manufacturing," "third-party manufacturing," "co-man," "toll manufacturing," "private label," "contract packaging," or "outsourced production." For capacity planning, see capacity-planning. For supplier selection, see supplier-selection.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/co-packing-management" ~/.claude/skills/majiayu000-claude-skill-registry-co-packing-management && rm -rf "$T"
skills/data/co-packing-management/SKILL.mdCo-Packing Management
You are an expert in co-packing (contract packaging/manufacturing) operations and supply chain management. Your goal is to help optimize co-packer selection, manage co-packer relationships, and ensure seamless integration of contract manufacturing into the supply chain.
Initial Assessment
Before managing co-packing operations, understand:
-
Business Context
- Why use co-packing? (capacity, seasonal surge, new products, geographic expansion)
- What products for co-packing? (volume, SKU complexity)
- Current manufacturing footprint? (own plants, co-packers)
- What percentage outsourced vs. internal? (target mix)
-
Product Characteristics
- Product types? (beverages, snacks, personal care, etc.)
- Packaging complexity? (pouches, bottles, cans, multi-pack)
- Shelf stability? (ambient, refrigerated, frozen)
- Quality requirements and specifications?
- Regulatory compliance? (FDA, USDA, organic, kosher, etc.)
-
Volume and Capacity
- Annual volume requirements?
- Seasonality patterns?
- Minimum order quantities (MOQs)?
- Lead times needed?
- Growth projections?
-
Current State
- Existing co-packer relationships?
- Current performance issues?
- Quality metrics and defect rates?
- Cost structure and competitiveness?
Co-Packing Strategy Framework
Make vs. Buy Decision
When to Use Co-Packers:
-
Capacity Constraints
- Own plants at capacity
- Seasonal peaks exceed internal capacity
- Faster time-to-market than building plant
-
Geographic Expansion
- Enter new markets without capital investment
- Reduce freight costs with regional production
- Meet local content requirements
-
Product Specialization
- Specialized equipment/processes (aseptic, HPP, freeze-dry)
- Small volumes don't justify investment
- Test market new products
-
Cost Optimization
- Lower cost than internal production
- Variable cost structure (vs. fixed plant costs)
- Avoid capital expenditure
-
Risk Mitigation
- Backup capacity for supply resilience
- Diversify supplier base
- Flexibility for demand uncertainty
When to Keep Internal:
- Core products with high volume
- Proprietary processes or trade secrets
- Quality-critical products
- High-margin products
- Strategic capabilities
Co-Packer Selection Process
Selection Criteria Matrix
import pandas as pd import numpy as np def score_copacker_candidates(candidates_df, weights): """ Score and rank co-packer candidates using weighted criteria Parameters: - candidates_df: DataFrame with candidate scores on each criterion - weights: dict with importance weights for each criterion Returns: - ranked candidates with total scores """ criteria = [ 'quality_capability', 'capacity_availability', 'cost_competitiveness', 'technical_expertise', 'geographic_location', 'financial_stability', 'certifications', 'equipment_technology', 'flexibility', 'customer_service', 'lead_times', 'track_record' ] # Calculate weighted scores candidates_df['total_score'] = 0 for criterion in criteria: weight = weights.get(criterion, 1.0) candidates_df['total_score'] += ( candidates_df[criterion] * weight ) # Normalize to 100 candidates_df['total_score'] = ( candidates_df['total_score'] / candidates_df['total_score'].max() * 100 ) # Rank candidates_df['rank'] = candidates_df['total_score'].rank( ascending=False, method='dense' ) return candidates_df.sort_values('rank') # Example usage candidates = pd.DataFrame({ 'copacker_name': ['CoPackA', 'CoPackB', 'CoPackC'], 'quality_capability': [9, 8, 7], 'capacity_availability': [7, 9, 8], 'cost_competitiveness': [6, 8, 9], 'technical_expertise': [9, 7, 6], 'geographic_location': [8, 6, 9], 'financial_stability': [9, 8, 7], 'certifications': [9, 8, 8], 'equipment_technology': [8, 9, 7], 'flexibility': [7, 8, 9], 'customer_service': [8, 7, 9], 'lead_times': [7, 9, 8], 'track_record': [9, 8, 8] }) weights = { 'quality_capability': 2.0, # Double weight for quality 'cost_competitiveness': 1.5, # 1.5x for cost 'capacity_availability': 1.5, # 1.5x for capacity 'certifications': 1.5, # 1.5x for compliance # All others: 1.0 (default) } ranked = score_copacker_candidates(candidates, weights) print(ranked[['copacker_name', 'rank', 'total_score']].head())
Due Diligence Checklist
Phase 1: Initial Qualification
- Financial stability (D&B rating, financial statements)
- Certifications (SQF, BRC, GMP, organic, kosher, halal)
- Capacity and availability
- Equipment and technology match
- Geographic location
- References from current customers
Phase 2: Detailed Assessment
- Plant audit and quality assessment
- Production trials and sample approval
- Cost model and pricing structure
- Lead times and MOQs
- Service level agreements
- IT systems and integration capabilities
Phase 3: Contract Negotiation
- Pricing terms and escalation
- Volume commitments and flexibility
- Quality standards and specifications
- Liability and insurance
- IP protection and confidentiality
- Exit terms and transition plan
Co-Packer Relationship Management
Contract Structure
class CoPackerContract: """ Model co-packer contract terms and economics """ def __init__(self, contract_terms): self.copacker = contract_terms['copacker_name'] self.start_date = contract_terms['start_date'] self.term_length = contract_terms['term_months'] self.pricing = contract_terms['pricing'] self.volumes = contract_terms['volume_commitments'] self.quality_terms = contract_terms['quality_sla'] def calculate_total_cost(self, actual_volume): """ Calculate total cost including all fees Components: - Base manufacturing cost (per unit or per case) - Material cost (if co-packer sources) - Packaging cost - Storage fees - Setup/changeover fees - Quality testing fees - Other fees (expedite, special handling) """ # Base cost (typically tiered by volume) base_cost = self._calculate_base_cost(actual_volume) # Materials (if applicable) material_cost = actual_volume * self.pricing.get('material_cost_per_unit', 0) # Packaging packaging_cost = actual_volume * self.pricing.get('packaging_cost_per_unit', 0) # Fixed fees setup_fees = self.pricing.get('setup_fee_per_run', 0) * \ self._calculate_production_runs(actual_volume) storage_fees = self.pricing.get('storage_fee_per_month', 0) * \ self._estimate_storage_months(actual_volume) testing_fees = self.pricing.get('testing_fee_per_lot', 0) * \ self._calculate_lots(actual_volume) total_cost = ( base_cost + material_cost + packaging_cost + setup_fees + storage_fees + testing_fees ) return { 'total_cost': total_cost, 'cost_per_unit': total_cost / actual_volume, 'breakdown': { 'base_cost': base_cost, 'material_cost': material_cost, 'packaging_cost': packaging_cost, 'setup_fees': setup_fees, 'storage_fees': storage_fees, 'testing_fees': testing_fees } } def _calculate_base_cost(self, volume): """Calculate base manufacturing cost with volume tiers""" pricing_tiers = self.pricing['base_cost_tiers'] for tier in sorted(pricing_tiers, key=lambda x: x['min_volume'], reverse=True): if volume >= tier['min_volume']: return volume * tier['cost_per_unit'] # If below all tiers, use highest cost return volume * pricing_tiers[0]['cost_per_unit'] def _calculate_production_runs(self, volume): """Estimate number of production runs""" lot_size = self.pricing.get('typical_lot_size', 10000) return int(np.ceil(volume / lot_size)) def _calculate_lots(self, volume): """Calculate number of QC lots""" lot_size = self.pricing.get('qc_lot_size', 5000) return int(np.ceil(volume / lot_size)) def _estimate_storage_months(self, volume): """Estimate storage duration""" # Simplified: assume storage for 1 month return 1 def check_minimum_commitment(self, actual_volume): """Check if minimum volume commitment met""" min_annual = self.volumes.get('minimum_annual', 0) shortfall = max(0, min_annual - actual_volume) if shortfall > 0: penalty = shortfall * self.pricing.get('shortfall_penalty_per_unit', 0) return { 'commitment_met': False, 'shortfall': shortfall, 'penalty': penalty } return {'commitment_met': True, 'shortfall': 0, 'penalty': 0} # Example contract contract_terms = { 'copacker_name': 'ABC Co-Packing', 'start_date': '2025-01-01', 'term_months': 12, 'pricing': { 'base_cost_tiers': [ {'min_volume': 100000, 'cost_per_unit': 2.50}, {'min_volume': 50000, 'cost_per_unit': 2.75}, {'min_volume': 0, 'cost_per_unit': 3.00} ], 'material_cost_per_unit': 1.50, 'packaging_cost_per_unit': 0.75, 'setup_fee_per_run': 2500, 'storage_fee_per_month': 1000, 'testing_fee_per_lot': 500, 'typical_lot_size': 10000, 'qc_lot_size': 10000, 'shortfall_penalty_per_unit': 0.50 }, 'volume_commitments': { 'minimum_annual': 75000 }, 'quality_sla': { 'max_defect_rate': 0.005, 'on_time_delivery': 0.95 } } contract = CoPackerContract(contract_terms) cost_analysis = contract.calculate_total_cost(actual_volume=80000) print(f"Total Cost: ${cost_analysis['total_cost']:,.0f}") print(f"Cost per Unit: ${cost_analysis['cost_per_unit']:.2f}")
Supply Chain Coordination
Demand Planning and Forecasting
def plan_copacker_orders(demand_forecast, lead_time_weeks, safety_stock_weeks, moq, lot_size): """ Plan co-packer orders based on demand forecast Parameters: - demand_forecast: weekly demand forecast - lead_time_weeks: co-packer lead time - safety_stock_weeks: weeks of safety stock - moq: minimum order quantity - lot_size: production lot size (for rounding) Returns: - order plan with timing and quantities """ order_plan = [] for week, demand in enumerate(demand_forecast): # Calculate order point lead_time_demand = sum(demand_forecast[week:week+lead_time_weeks]) safety_stock = demand * safety_stock_weeks order_point = lead_time_demand + safety_stock # Current inventory current_inventory = calculate_current_inventory(week) # Order if below order point if current_inventory < order_point: order_qty = order_point - current_inventory # Round up to MOQ if order_qty < moq: order_qty = moq # Round up to lot size order_qty = int(np.ceil(order_qty / lot_size) * lot_size) order_plan.append({ 'order_week': week, 'order_qty': order_qty, 'delivery_week': week + lead_time_weeks, 'demand': demand, 'inventory_before': current_inventory, 'inventory_after': current_inventory + order_qty }) return order_plan
Quality Management
class CoPackerQualityManager: """ Manage quality metrics and SLA compliance for co-packers """ def __init__(self, quality_sla): self.sla = quality_sla self.quality_data = [] def record_lot_inspection(self, lot_data): """Record quality inspection results for a production lot""" inspection = { 'lot_number': lot_data['lot_number'], 'date': lot_data['date'], 'quantity': lot_data['quantity'], 'defects_found': lot_data['defects'], 'defect_rate': lot_data['defects'] / lot_data['quantity'], 'accepted': lot_data['defects'] / lot_data['quantity'] <= self.sla['max_defect_rate'] } self.quality_data.append(inspection) return inspection def calculate_performance_metrics(self): """Calculate quality performance metrics""" if not self.quality_data: return None df = pd.DataFrame(self.quality_data) metrics = { 'total_lots': len(df), 'accepted_lots': df['accepted'].sum(), 'rejected_lots': (~df['accepted']).sum(), 'acceptance_rate': df['accepted'].mean() * 100, 'avg_defect_rate': df['defect_rate'].mean() * 100, 'total_defects': df['defects_found'].sum(), 'total_units_inspected': df['quantity'].sum() } # SLA compliance metrics['meets_quality_sla'] = ( metrics['avg_defect_rate'] <= self.sla['max_defect_rate'] * 100 ) return metrics def generate_quality_report(self): """Generate quality scorecard""" metrics = self.calculate_performance_metrics() if metrics is None: return "No quality data available" report = f""" Co-Packer Quality Performance Report Total Lots Inspected: {metrics['total_lots']} Accepted: {metrics['accepted_lots']} ({metrics['acceptance_rate']:.1f}%) Rejected: {metrics['rejected_lots']} Average Defect Rate: {metrics['avg_defect_rate']:.2f}% SLA Target: {self.sla['max_defect_rate']*100:.2f}% SLA Status: {'✓ PASS' if metrics['meets_quality_sla'] else '✗ FAIL'} Total Units Inspected: {metrics['total_units_inspected']:,} Total Defects: {metrics['total_defects']} """ return report # Example usage quality_sla = {'max_defect_rate': 0.005} # 0.5% max defects qm = CoPackerQualityManager(quality_sla) # Record inspections qm.record_lot_inspection({ 'lot_number': 'LOT001', 'date': '2025-01-15', 'quantity': 10000, 'defects': 45 }) qm.record_lot_inspection({ 'lot_number': 'LOT002', 'date': '2025-01-22', 'quantity': 10000, 'defects': 52 }) print(qm.generate_quality_report())
Cost Optimization
Make vs. Buy Economic Analysis
def make_vs_buy_analysis(internal_costs, copacker_costs, annual_volume): """ Analyze economics of internal production vs. co-packing Parameters: - internal_costs: dict with internal cost structure - copacker_costs: dict with co-packer pricing - annual_volume: expected annual volume Returns: - cost comparison and recommendation """ # Internal production costs internal_fixed = internal_costs.get('fixed_costs_annual', 0) internal_variable = internal_costs.get('variable_cost_per_unit', 0) internal_total = internal_fixed + (internal_variable * annual_volume) # Co-packer costs copacker_variable = copacker_costs.get('cost_per_unit', 0) copacker_fixed = copacker_costs.get('annual_fees', 0) copacker_total = copacker_fixed + (copacker_variable * annual_volume) # Comparison savings = internal_total - copacker_total savings_pct = savings / internal_total * 100 if internal_total > 0 else 0 # Break-even volume if internal_variable < copacker_variable: # Internal has lower variable cost breakeven = internal_fixed / (copacker_variable - internal_variable) else: # Co-packer has lower variable cost breakeven = (copacker_fixed - internal_fixed) / (internal_variable - copacker_variable) recommendation = 'Make Internal' if internal_total < copacker_total else 'Use Co-Packer' return { 'internal_cost': internal_total, 'copacker_cost': copacker_total, 'savings_with_copacker': savings, 'savings_pct': savings_pct, 'breakeven_volume': max(0, breakeven), 'recommendation': recommendation, 'cost_per_unit_internal': internal_total / annual_volume, 'cost_per_unit_copacker': copacker_total / annual_volume } # Example analysis = make_vs_buy_analysis( internal_costs={ 'fixed_costs_annual': 500000, # Plant overhead, equipment, staff 'variable_cost_per_unit': 3.50 # Materials, labor, utilities }, copacker_costs={ 'cost_per_unit': 4.25, 'annual_fees': 50000 # Setup, tooling, etc. }, annual_volume=100000 ) print(f"Internal Cost: ${analysis['internal_cost']:,.0f}") print(f"Co-Packer Cost: ${analysis['copacker_cost']:,.0f}") print(f"Savings: ${analysis['savings_with_copacker']:,.0f} ({analysis['savings_pct']:.1f}%)") print(f"Recommendation: {analysis['recommendation']}") print(f"Break-even Volume: {analysis['breakeven_volume']:,.0f} units")
Multi-Sourcing Optimization
from pulp import * def optimize_copacker_allocation(demand, copackers, constraints): """ Optimize allocation of production across multiple co-packers Parameters: - demand: total demand to fulfill - copackers: list of co-packers with costs and capacities - constraints: business rules Returns: - optimal allocation """ # Create problem prob = LpProblem("CoPacker_Allocation", LpMinimize) # Decision variables: volume allocated to each co-packer allocation = LpVariable.dicts( "Allocation", [cp['name'] for cp in copackers], lowBound=0, cat='Continuous' ) # Binary variables: is co-packer used? used = LpVariable.dicts( "Used", [cp['name'] for cp in copackers], cat='Binary' ) # Objective: minimize total cost total_cost = 0 for cp in copackers: name = cp['name'] # Variable cost total_cost += allocation[name] * cp['cost_per_unit'] # Fixed cost (if used) total_cost += used[name] * cp['fixed_cost'] prob += total_cost # Constraints # 1. Meet demand prob += lpSum([allocation[cp['name']] for cp in copackers]) >= demand # 2. Capacity constraints for cp in copackers: name = cp['name'] prob += allocation[name] <= cp['capacity'] # 3. MOQ constraints for cp in copackers: name = cp['name'] moq = cp.get('moq', 0) # If used, must meet MOQ prob += allocation[name] >= moq * used[name] # If not used, allocation = 0 prob += allocation[name] <= cp['capacity'] * used[name] # 4. Single sourcing preference (optional) if constraints.get('prefer_single_source', False): prob += lpSum([used[cp['name']] for cp in copackers]) <= 2 # 5. Minimum allocation for preferred suppliers preferred = constraints.get('preferred_suppliers', []) for pref in preferred: min_pct = pref.get('min_allocation_pct', 0) prob += allocation[pref['name']] >= demand * min_pct # Solve prob.solve(PULP_CBC_CMD(msg=0)) # Extract results results = { 'status': LpStatus[prob.status], 'total_cost': value(prob.objective), 'allocations': [] } for cp in copackers: name = cp['name'] if allocation[name].varValue > 0: results['allocations'].append({ 'copacker': name, 'volume': allocation[name].varValue, 'pct_of_demand': allocation[name].varValue / demand * 100, 'cost': allocation[name].varValue * cp['cost_per_unit'] + used[name].varValue * cp['fixed_cost'] }) return results # Example copackers = [ { 'name': 'CoPacker_A', 'capacity': 50000, 'cost_per_unit': 4.20, 'fixed_cost': 10000, 'moq': 5000 }, { 'name': 'CoPacker_B', 'capacity': 75000, 'cost_per_unit': 4.00, 'fixed_cost': 15000, 'moq': 10000 }, { 'name': 'CoPacker_C', 'capacity': 40000, 'cost_per_unit': 4.50, 'fixed_cost': 5000, 'moq': 2000 } ] result = optimize_copacker_allocation( demand=60000, copackers=copackers, constraints={'prefer_single_source': False} ) print(f"Total Cost: ${result['total_cost']:,.0f}") for alloc in result['allocations']: print(f"{alloc['copacker']}: {alloc['volume']:,.0f} units ({alloc['pct_of_demand']:.1f}%)")
Performance Management
Co-Packer Scorecard
class CoPackerScorecard: """ Comprehensive co-packer performance tracking """ def __init__(self, copacker_name, sla_targets): self.copacker = copacker_name self.sla = sla_targets self.performance_data = [] def record_performance(self, period_data): """Record performance for a period""" self.performance_data.append(period_data) def calculate_scorecard(self): """Calculate overall performance scorecard""" if not self.performance_data: return None df = pd.DataFrame(self.performance_data) scorecard = {} # Quality metrics scorecard['quality_score'] = self._score_quality(df) # Delivery metrics scorecard['delivery_score'] = self._score_delivery(df) # Cost metrics scorecard['cost_score'] = self._score_cost(df) # Service metrics scorecard['service_score'] = self._score_service(df) # Overall score (weighted average) weights = { 'quality_score': 0.35, 'delivery_score': 0.25, 'cost_score': 0.25, 'service_score': 0.15 } scorecard['overall_score'] = sum( scorecard[metric] * weight for metric, weight in weights.items() ) scorecard['grade'] = self._assign_grade(scorecard['overall_score']) return scorecard def _score_quality(self, df): """Score quality performance (0-100)""" avg_defect_rate = df['defect_rate'].mean() target_defect_rate = self.sla.get('max_defect_rate', 0.005) if avg_defect_rate <= target_defect_rate: return 100 elif avg_defect_rate <= target_defect_rate * 2: return 80 elif avg_defect_rate <= target_defect_rate * 3: return 60 else: return 40 def _score_delivery(self, df): """Score delivery performance (0-100)""" on_time_pct = df['on_time'].mean() target = self.sla.get('on_time_delivery', 0.95) if on_time_pct >= target: return 100 elif on_time_pct >= target - 0.05: return 80 elif on_time_pct >= target - 0.10: return 60 else: return 40 def _score_cost(self, df): """Score cost competitiveness (0-100)""" avg_cost = df['cost_per_unit'].mean() target_cost = self.sla.get('target_cost', avg_cost) variance = (avg_cost - target_cost) / target_cost if variance <= 0: # Under target return 100 elif variance <= 0.05: return 90 elif variance <= 0.10: return 70 else: return 50 def _score_service(self, df): """Score service and responsiveness (0-100)""" # Composite of various service metrics service_score = ( df.get('responsiveness', 80).mean() * 0.4 + df.get('flexibility', 80).mean() * 0.3 + df.get('communication', 80).mean() * 0.3 ) return min(100, service_score) def _assign_grade(self, score): """Assign letter grade""" if score >= 90: return 'A' elif score >= 80: return 'B' elif score >= 70: return 'C' elif score >= 60: return 'D' else: return 'F'
Tools & Technologies
Co-Packer Management Software
Vendor Management:
- SAP Ariba: Supplier management and collaboration
- Coupa: Supplier management and procurement
- Jaggaer: Supplier relationship management
- Ivalua: Procurement and supplier management
Quality Management:
- TraceGains: Supplier compliance and quality
- MasterControl: Quality management system
- Sparta Systems: Quality and compliance (TrackWise)
- ETQ Reliance: Quality management
Contract Manufacturing Platforms:
- SQFI: Safe Quality Food Institute certification
- Selerant: Recipe and formulation management
- Blue Yonder: Manufacturing planning and collaboration
- E2open: Supply chain collaboration platform
Python Libraries
# Contract and supplier management import pandas as pd import numpy as np # Optimization from pulp import * import scipy.optimize as opt # Data visualization import matplotlib.pyplot as plt import seaborn as sns import plotly.graph_objects as go # Financial analysis from scipy import stats import statsmodels.api as sm
Common Challenges & Solutions
Challenge: Quality Inconsistency
Problem:
- Batch-to-batch variation
- Higher defect rates than internal
- Quality disputes
Solutions:
- Detailed specifications and approved samples
- First article inspection for new runs
- In-process quality checks
- Statistical process control (SPC)
- Regular audits and process reviews
- Invest in co-packer training
Challenge: Long Lead Times
Problem:
- 8-12 week lead times
- Slow response to demand changes
- Inventory challenges
Solutions:
- Commit to longer-term forecasts
- Build safety stock
- Negotiate priority/expedite options
- Multi-source for flexibility
- Consider vendor-managed inventory (VMI)
Challenge: High MOQs
Problem:
- MOQs larger than needed
- Excess inventory
- Cash flow impact
Solutions:
- Negotiate lower MOQs (pay premium)
- Combine SKUs in single run
- Find smaller/flexible co-packers
- Use tolling (bring your materials)
- Build to stock during off-peak
Challenge: IP Protection
Problem:
- Risk of formula theft
- Proprietary process exposure
- Competing products
Solutions:
- Strong NDAs and contracts
- Separate ingredients/pre-mix
- Split production (multi co-packers)
- Regular audits
- Exclusive agreements
- Patent protection
Challenge: Cost Creep
Problem:
- Prices increase over time
- Hidden fees and surcharges
- Less competitive
Solutions:
- Lock in multi-year pricing
- Index to commodities (transparent)
- Benchmark against alternatives
- RFQ every 2-3 years
- Volume commitments for discounts
- Monitor total landed cost
Output Format
Co-Packer Evaluation Report
Executive Summary:
- Co-Packer: ABC Co-Packing Inc.
- Location: Memphis, TN
- Products: Snack bars, granola
- Evaluation Date: January 2025
- Overall Score: 85/100 (Grade: B)
- Recommendation: Approved for partnership
Scoring Detail:
| Category | Score | Weight | Weighted | Target | Status |
|---|---|---|---|---|---|
| Quality | 90 | 35% | 31.5 | >85 | ✓ |
| Delivery | 85 | 25% | 21.25 | >90 | ⚠ |
| Cost | 80 | 25% | 20.0 | >80 | ✓ |
| Service | 82 | 15% | 12.3 | >80 | ✓ |
| Total | 85 | 100% | 85 | >80 | ✓ |
Strengths:
- Excellent quality track record (0.3% defect rate)
- SQF Level 3 certified
- Modern equipment and technology
- Competitive pricing
- Strong technical expertise
Weaknesses:
- Delivery performance below target (85% vs. 90%)
- Limited surge capacity
- Higher MOQs than desired
Recommendations:
- Negotiate improved lead times and on-time delivery
- Request MOQ reduction for initial SKUs
- Establish expedite process for urgent orders
- Proceed with pilot production (10,000 units)
Questions to Ask
If you need more context:
- What products do you want to co-pack? What volume?
- Why co-packing vs. internal production?
- Do you have existing co-packer relationships?
- What are your quality requirements and certifications needed?
- What lead times and MOQs can you accept?
- What's your budget and target cost per unit?
- Any geographic preferences?
- IP protection concerns?
Related Skills
- capacity-planning: For production capacity analysis
- supplier-selection: For vendor evaluation frameworks
- supplier-risk-management: For co-packer risk assessment
- quality-management: For quality systems and SPC
- procurement-optimization: For contract negotiation
- inventory-optimization: For co-packer inventory planning
- master-production-scheduling: For production scheduling
- network-design: For co-packer network strategy
- compliance-management: For regulatory compliance