Manufacturing Software Development: Custom ERP, MES & IoT in 2026
Your production line stops because a barcode won't scan, and the MES screen freezes while twelve operators wait. I've spent three years building software for manufacturers, and the pattern is brutal: off-the-shelf ERP fails 73% of shops within eighteen months. Not because SAP or Epicor lack features -- they're incredibly powerful -- but because an aluminum extrusion plant in Ohio and a contract electronics manufacturer in Guadalajara might both call it "ERP," yet they share almost nothing on the floor. Custom manufacturing software in 2026 demands a different stack, a different deployment cadence, and a ruthlessly specific understanding of which data flows actually stop production. Most dev teams get two of those wrong and ship systems operators route around within a week.
Table of Contents
- Why Manufacturers Are Going Custom in 2026
- The Manufacturing Software Stack: What You Actually Need
- Custom ERP: Stop Trying to Build SAP
- MES Systems: Where the Real Value Lives
- Quality Management Systems That People Actually Use
- Production Scheduling: The Hardest Problem
- Industrial IoT Dashboards on a Modern Stack
- Technology Choices: Framework and Infrastructure Decisions
- Real Implementation: Timeline, Cost, and Pitfalls
- FAQ

Why Manufacturers Are Going Custom in 2026
The shift has been building for years, but 2026 is the inflection point. According to Deloitte's 2025 Manufacturing Outlook, 67% of mid-market manufacturers ($50M–$500M revenue) reported that their existing ERP systems couldn't support their digital transformation goals. Gartner's latest data puts the average cost of a mid-market SAP S/4HANA implementation at $2.1M–$4.8M, with a 18-24 month timeline.
Here's what's actually pushing companies toward custom builds:
- Legacy system lock-in: Many manufacturers are running on-prem systems from the 2000s (Infor Visual, MAPICS, older Epicor versions) that can't integrate with modern IoT devices or cloud services without painful middleware.
- The "80% fit" problem: Enterprise ERP covers 80% of what you need, but the remaining 20% -- your competitive advantage -- requires expensive customization that often breaks during upgrades.
- Workforce expectations: Operators on the floor in 2026 expect mobile-first interfaces, not green-screen terminals. Recruiting younger workers into manufacturing is already hard enough without making them use software from 2003.
- Data ownership: Manufacturers are increasingly unwilling to have their production data locked inside vendor ecosystems, especially with the rise of AI-driven analytics they want to run on their own terms.
This doesn't mean every manufacturer should build everything from scratch. But there's a growing sweet spot: companies that build targeted custom systems for their core differentiators while using off-the-shelf tools for commodity functions like payroll and general accounting.
The Manufacturing Software Stack: What You Actually Need
Manufacturing software isn't one thing. It's an ecosystem. Here's a breakdown of the major components and how they interact:
| System | Purpose | Data Flow | Typical Users |
|---|---|---|---|
| ERP | Financial planning, procurement, order management | Bi-directional with MES, one-way to accounting | Management, purchasing, sales |
| MES | Shop floor execution, work orders, labor tracking | Real-time from IoT, bi-directional with ERP | Operators, supervisors, production managers |
| QMS | Inspection, NCRs, CAPA, document control | Feeds from MES, triggers in ERP | Quality engineers, inspectors |
| APS/Scheduling | Production scheduling, capacity planning | Reads from ERP/MES, writes to MES | Planners, schedulers |
| IIoT Platform | Machine data collection, monitoring, OEE | Ingests from PLCs/sensors, feeds MES and dashboards | Maintenance, engineering, management |
| BI/Dashboards | Reporting, KPIs, real-time visibility | Reads from everything | Everyone |
The critical insight: data flow architecture matters more than any individual system. I've seen companies with best-in-class individual tools that can't answer basic questions like "what's the actual cost of this job?" because data doesn't flow between systems.
Custom ERP: Stop Trying to Build SAP
The single biggest mistake I see in manufacturing software projects is scope creep in ERP. Someone says "let's build a custom ERP" and suddenly the requirements document is 300 pages long, covering everything from AP/AR to fixed asset depreciation.
Don't do this.
What you actually want is a custom manufacturing operations platform that integrates with a solid financial system. QuickBooks Enterprise, Xero, or even NetSuite for the financial backbone -- and custom software for the manufacturing-specific stuff that off-the-shelf tools botch.
Here's what's worth building custom:
Bill of Materials (BOM) Management
Every manufacturer has BOM structures that don't fit neatly into standard ERP models. Multi-level BOMs with phantom assemblies, configurable products with rules-based component selection, revision control tied to customer-specific specs -- this is where custom software shines.
// Example: Configurable BOM with revision tracking
interface BOMItem {
partNumber: string;
revision: string;
quantity: number;
unitOfMeasure: string;
isPhantom: boolean;
alternates: AlternatePart[];
effectiveDate: Date;
obsoleteDate?: Date;
customerSpecific?: string; // customer code if this is a customer-specific variant
children: BOMItem[];
}
interface AlternatePart {
partNumber: string;
priority: number; // 1 = preferred, 2 = first alternate, etc.
conversionFactor: number; // if alternate has different UoM
approvalRequired: boolean;
}
Work Order Management
This is the bridge between your ERP and MES. Custom work order systems can encode your actual routing logic -- including the weird edge cases that make your business unique. One client I worked with had a routing system where certain heat treat operations could be batched across multiple work orders, but only if the alloy groups were compatible. Try configuring that in standard SAP.
Costing
Job costing in manufacturing is where generic ERPs fall apart hardest. You need actual vs. estimated costs rolling up in real-time: material, labor (by operation), overhead absorption, scrap, and rework. When this is custom-built and tied directly to your MES, you get cost visibility that's impossible with disconnected systems.

MES Systems: Where the Real Value Lives
If I had to pick one system to build custom, it's the MES. This is where the rubber meets the road -- literally, if you're a tire manufacturer.
A Manufacturing Execution System tracks what's happening on the shop floor in real-time: which jobs are running on which machines, who's working on what, how many parts have been produced, what the scrap rate is, and whether you're on schedule.
What a Modern MES Looks Like
Forget the thick-client MES applications of the past. A modern MES in 2026 is:
- Web-based with responsive layouts for shop floor tablets and kiosks
- Real-time via WebSocket connections (we use Socket.io or native WebSocket APIs)
- Offline-capable because WiFi on a shop floor is never as reliable as IT thinks it is
- Touch-optimized because operators have greasy gloves, not keyboards
// Real-time production event handling
import { Server } from 'socket.io';
interface ProductionEvent {
machineId: string;
workOrderId: string;
eventType: 'cycle_complete' | 'scrap' | 'downtime_start' | 'downtime_end' | 'setup_start' | 'setup_end';
timestamp: Date;
operatorId: string;
partCount?: number;
scrapReason?: string;
downtimeReason?: string;
}
io.on('connection', (socket) => {
socket.on('production_event', async (event: ProductionEvent) => {
// Persist to time-series database
await timescaleDB.insert('production_events', event);
// Update real-time OEE calculation
const oee = await calculateOEE(event.machineId, 'current_shift');
// Broadcast to dashboard clients
io.to(`dashboard_${event.machineId}`).emit('oee_update', oee);
// Check against thresholds and trigger alerts
if (oee.availability < 0.85) {
await alertService.notify('low_availability', event.machineId, oee);
}
});
});
Operator Experience Matters
I can't stress this enough: if operators hate the MES, they'll find ways around it. We build operator interfaces with massive touch targets (minimum 48px, often 64px+), minimal required inputs, and barcode/QR scanning for everything possible. The goal is that a station login and job start should take under 10 seconds.
One pattern that works really well: progressive disclosure. Show operators only what they need for their current step. The "everything on one screen" approach that traditional MES vendors love is overwhelming and leads to errors.
Quality Management Systems That People Actually Use
Quality systems in manufacturing are often the most hated software in the building. They're either overkill (full Veeva-style document management when you have 50 employees) or completely disconnected from the production process (standalone QMS that nobody updates until audit time).
Building Quality Into the Production Flow
The trick is embedding quality checkpoints directly into the MES workflow. When an operator finishes a machining operation, the system should automatically prompt for the required inspection measurements -- right there on the same interface, not in a separate application.
// Quality checkpoint integrated with MES routing
interface QualityCheckpoint {
operationId: string;
inspectionType: 'first_article' | 'in_process' | 'final' | 'receiving';
characteristics: Characteristic[];
samplingPlan: SamplingPlan;
triggerCondition: 'every_part' | 'first_off' | 'frequency' | 'spc_rule';
frequency?: number; // check every N parts
}
interface Characteristic {
name: string;
nominal: number;
upperTolerance: number;
lowerTolerance: number;
measurementUnit: string;
gageId?: string; // link to calibrated measurement device
isCritical: boolean; // CTQ characteristic
}
For companies in regulated industries (aerospace with AS9100, medical devices with ISO 13485, automotive with IATF 16949), the QMS needs to handle:
- Nonconformance Reports (NCRs) with workflow routing for disposition (scrap, rework, use-as-is, return to vendor)
- Corrective/Preventive Action (CAPA) tracking with root cause analysis
- Document control with revision management and electronic signatures (21 CFR Part 11 if you're in FDA-regulated space)
- SPC charts calculated from actual production measurements in real-time
Production Scheduling: The Hardest Problem
I'm going to be honest: production scheduling is the hardest problem in manufacturing software. It's an NP-hard optimization problem with dozens of constraints, and no off-the-shelf tool handles it perfectly.
Most manufacturers I work with use a hybrid approach:
- Rough-cut capacity planning done in the ERP based on standard hours and available capacity
- Finite scheduling handled by specialized tools (PlanetTogether, Preactor/Siemens Opcenter APS, or custom algorithms)
- Real-time adjustments made through the MES as reality deviates from the plan
When to Build Custom Scheduling
Build custom scheduling when your constraints are unique. I built a scheduler for a company that runs a job shop with shared CNC machines across three product families, where changeover times depend on which product family was running previously (not just which machine), and certain operators are only certified on certain setups. No off-the-shelf APS handled this without extensive customization.
For simpler scenarios -- single product flow lines, repetitive manufacturing -- use PlanetTogether ($500–$2,000/user/month in 2026) or similar tools. Don't reinvent this wheel unless you have to.
The Scheduling Algorithm Approach
When we do build custom, we typically use a constraint-based approach with priority dispatching rules rather than trying to find globally optimal solutions:
# Simplified priority-based scheduling heuristic
def schedule_jobs(jobs, machines, constraints):
unscheduled = sorted(jobs, key=lambda j: (
-j.priority, # Higher priority first
j.due_date, # Earlier due date first
-j.setup_similarity, # Minimize changeovers
))
schedule = {}
for job in unscheduled:
eligible_machines = [
m for m in machines
if m.can_run(job) and m.has_tooling(job)
]
best_slot = None
best_score = float('inf')
for machine in eligible_machines:
slot = machine.find_earliest_slot(
duration=job.estimated_hours,
setup_time=calculate_setup(machine.last_job, job),
constraints=constraints
)
score = evaluate_slot(slot, job, machine)
if score < best_score:
best_slot = slot
best_score = score
if best_slot:
schedule[job.id] = best_slot
best_slot.machine.commit(best_slot)
return schedule
This won't win any operations research awards, but it produces schedules that are good enough in seconds rather than taking minutes for an optimal solution. And in manufacturing, a good schedule generated instantly is worth more than a perfect schedule generated in 30 minutes.
Industrial IoT Dashboards on a Modern Stack
This is where things get fun. Connecting machines to the internet and visualizing their data in real-time is genuinely exciting work, and the modern web stack makes it significantly easier than it was even two years ago.
Data Collection Architecture
The typical IIoT data pipeline for manufacturing:
- Edge layer: PLCs and sensors → OPC-UA server or MQTT broker at the machine level
- Gateway layer: Edge computing device (we like Advantech or OnLogic hardware) running Node.js or Python that normalizes and buffers data
- Transport: MQTT to cloud broker (AWS IoT Core, Azure IoT Hub, or self-hosted EMQX)
- Storage: TimescaleDB or InfluxDB for time-series data, PostgreSQL for relational data
- Presentation: Real-time dashboards built with Next.js + WebSockets
Building the Dashboard
For the frontend, we've had excellent results with Next.js App Router paired with a charting library that can handle real-time updates. Recharts is fine for static reports; for real-time streaming data, we prefer uPlot for its performance with large datasets (it can handle 100K+ points without breaking a sweat).
// Real-time OEE dashboard component
'use client';
import { useEffect, useState } from 'react';
import { io } from 'socket.io-client';
interface MachineStatus {
machineId: string;
machineName: string;
status: 'running' | 'idle' | 'down' | 'setup';
currentJob: string | null;
oee: { availability: number; performance: number; quality: number; overall: number };
partsProduced: number;
partsTarget: number;
cycleTime: number;
idealCycleTime: number;
}
export function ShopFloorDashboard() {
const [machines, setMachines] = useState<Map<string, MachineStatus>>(new Map());
useEffect(() => {
const socket = io(process.env.NEXT_PUBLIC_WS_URL!);
socket.on('machine_update', (data: MachineStatus) => {
setMachines(prev => new Map(prev).set(data.machineId, data));
});
return () => { socket.disconnect(); };
}, []);
return (
<div className="grid grid-cols-4 gap-4 p-6">
{Array.from(machines.values()).map(machine => (
<MachineCard key={machine.machineId} machine={machine} />
))}
</div>
);
}
We build these dashboards as part of our Next.js development practice, and they're deployed on Vercel or self-hosted on the manufacturer's infrastructure depending on their IT policies. Some manufacturers absolutely will not have production data leaving their network, and that's a valid requirement.
For manufacturers who prefer static-first dashboards with near-real-time data (polling every 30 seconds rather than true WebSocket streaming), Astro is a great choice. It produces lighter pages that work better on the aging hardware you often find on shop floors.
OEE: The Manufacturing KPI Everyone Gets Wrong
Overall Equipment Effectiveness (OEE) is the single most important metric in manufacturing, and almost everyone calculates it wrong. It's three components multiplied together:
- Availability = Run Time / Planned Production Time
- Performance = (Ideal Cycle Time × Total Parts) / Run Time
- Quality = Good Parts / Total Parts
- OEE = Availability × Performance × Quality
World-class OEE is 85%. Most manufacturers are between 40% and 60%. The key insight: you need accurate, automated data collection to calculate meaningful OEE. If operators are manually entering downtime reasons at the end of their shift, your OEE data is garbage.
Technology Choices: Framework and Infrastructure Decisions
Here's our current recommended stack for manufacturing software in 2026:
| Layer | Technology | Why |
|---|---|---|
| Frontend | Next.js 15+ (App Router) | SSR for dashboards, excellent DX, React ecosystem |
| UI Components | Tailwind CSS + shadcn/ui | Fast to build, easy to customize for industrial UIs |
| API | tRPC or GraphQL (Pothos) | Type-safe, great for complex relational data |
| Database | PostgreSQL 17 + TimescaleDB | Relational + time-series in one engine |
| Real-time | Socket.io or Ably | WebSocket for live production data |
| Auth | Clerk or custom with lucia-auth | Role-based access is critical in manufacturing |
| Edge/IoT | Node.js + MQTT.js | JavaScript on the edge for data normalization |
| Hosting | Vercel, AWS, or on-prem Docker | Depends on manufacturer's IT policy |
| CMS (for docs/training) | Sanity or Payload CMS | Operators need SOP docs at their workstations |
We've done deep work with headless CMS integration for the documentation and training content side of manufacturing -- things like Standard Operating Procedures, work instructions with embedded videos, and quality specs that need to be version-controlled and displayed at operator workstations.
Why Not Low-Code?
I get asked this a lot. Tools like OutSystems, Mendix, and Microsoft Power Platform are heavily marketed to manufacturers. They work for simple use cases -- a basic data collection form, a simple approval workflow. But when you need real-time IoT data processing, complex BOM structures, SPC calculations, or scheduling algorithms, you hit the walls fast. And then you're stuck with a platform that's harder to extend than just writing code would have been.
Real Implementation: Timeline, Cost, and Pitfalls
Let's talk real numbers. Here's what custom manufacturing software projects actually look like:
| Project Scope | Timeline | Budget Range (2026) | Team Size |
|---|---|---|---|
| MES only (10-20 machines) | 4-6 months | $150K–$300K | 2-3 devs + 1 domain expert |
| MES + Quality | 6-9 months | $250K–$450K | 3-4 devs + 1 domain expert |
| MES + Quality + Custom ERP modules | 9-14 months | $400K–$800K | 4-6 devs + 1-2 domain experts |
| Full platform with IIoT | 12-18 months | $600K–$1.2M | 5-8 devs + 2 domain experts |
These are fully loaded costs including design, development, testing, deployment, and training. If someone quotes you significantly less, either the scope is much smaller than you think, or the team has never built manufacturing software before.
The Biggest Pitfalls
1. No manufacturing domain expert on the team. This is the #1 cause of project failure. You need someone who has actually worked in a manufacturing environment -- not someone who read about it. At minimum, you need a client-side champion who's available 10+ hours per week.
2. Trying to replace everything at once. Start with the MES. Get production data flowing accurately. Then layer on quality. Then scheduling. Then ERP modules. Big-bang manufacturing software implementations fail at a rate that should scare anyone.
3. Ignoring the shop floor. If you build the entire system in a conference room without spending time on the actual shop floor, you'll build the wrong thing. Noise, grease, gloves, reading glasses, lighting -- these all affect UI design decisions.
4. Underestimating data migration. Every manufacturer has decades of part data, BOM structures, customer specs, and routing information in their old system. Migrating this data is usually 15-20% of the total project effort.
If you're exploring a project like this, our pricing page has details on how we structure engagements, and we're always happy to do a no-BS scoping call -- reach out here.
FAQ
How much does custom manufacturing software cost compared to off-the-shelf ERP?
A mid-market ERP like Epicor Kinetic or Infor CloudSuite runs $200K–$600K for implementation plus $50K–$150K annually in licensing. SAP Business One starts around $100K for small manufacturers but scales quickly. Custom manufacturing software has higher upfront development costs ($150K–$1.2M depending on scope) but typically lower ongoing costs since you own the code. The break-even point is usually 3-5 years, but the real value is in having software that actually fits your processes instead of forcing your processes to fit the software.
Can a custom MES integrate with our existing ERP system?
Absolutely, and this is actually our recommended approach for most manufacturers. Rather than replacing your ERP entirely, we build a custom MES that integrates with it via API. Most modern ERPs (SAP, Oracle, Epicor, NetSuite) have REST APIs. Older systems might require database-level integration or middleware like MuleSoft. The MES handles shop floor execution while the ERP continues handling financials, purchasing, and sales orders.
What's the best tech stack for manufacturing software in 2026?
For web-based manufacturing applications, we recommend Next.js with TypeScript on the frontend, PostgreSQL with TimescaleDB extension for the database (handles both relational and time-series data), and MQTT for IoT data transport. The key consideration is real-time capability -- manufacturing software needs to reflect what's happening on the shop floor within seconds, not minutes. WebSocket connections are essential for this.
How do you handle offline capability for shop floor applications?
Shop floor WiFi is notoriously unreliable. We use service workers and IndexedDB to cache critical data locally on shop floor tablets. Operators can continue logging production, scrap, and downtime events even when connectivity drops. When the connection is restored, the system syncs automatically with conflict resolution logic. Progressive Web App (PWA) architecture is ideal for this -- no app store deployment needed, which matters when you have dozens of shop floor kiosks to manage.
What OPC-UA or MQTT solutions work best for connecting CNC machines and PLCs?
For PLC connectivity, Kepware (now PTC's ThingWorx Kepware Server) remains the industry standard at roughly $5K–$15K per server license depending on drivers needed. For a more open-source approach, Node-OPCUA is mature and production-ready. For MQTT brokers, EMQX is excellent for on-prem deployments, and AWS IoT Core works well if you're cloud-native. The biggest challenge isn't usually the software -- it's that many older machines don't have network interfaces and need retrofit hardware to make their data accessible.
Is it worth building custom production scheduling software?
Only if your scheduling constraints are truly unique. For most discrete manufacturers with standard routing structures, tools like PlanetTogether, Siemens Opcenter APS, or even Optessa handle the job well for $500–$2,000 per user per month. Build custom when you have unusual constraints: shared resources across product families with sequence-dependent setups, complex batch processing rules, or multi-site scheduling with inter-facility transfers. The algorithm development and testing alone can take 2-4 months.
How do you ensure FDA or AS9100 compliance in custom quality management systems?
Compliance is about two things: process enforcement and audit trail. The software must enforce the process (e.g., you can't ship a lot without completed inspection records), and every action must be logged with immutable audit trails including who, what, when, and electronic signatures where required. For FDA 21 CFR Part 11 compliance, electronic signatures need to include meaning of signature, printed name, date/time, and be linked to the specific record. We build this into the data model from day one -- it's extremely painful to retrofit.
How long does it take to see ROI from custom manufacturing software?
Most of our clients see measurable ROI within 6-12 months after go-live, primarily from three sources: reduced scrap (5-15% improvement from real-time SPC and quality integration), improved on-time delivery (10-20% improvement from better scheduling and visibility), and labor efficiency gains (operators spend less time on data entry and hunting for information). One client reduced their quality-related costs by $340K annually within the first year, on a $280K software investment. The data visibility alone -- knowing your actual job costs in real-time -- often pays for the project by exposing margin leaks that were invisible before.