At First Resonance, we built ION, an MES for manufacturers in aerospace, energy, and defense. Andrew led the backend team and later one of its domain teams; Orion led the other and ran infrastructure. Between us, that's about eight years on MES software.
We sat with technicians on the floor, chased down performance problems in production, and learned how much a factory depends on its MES being right and fast. Somewhere along the way, we got hooked on the problem.
The hard problems are the same everywhere
Every company building complex hardware runs into the same handful of problems, and they don't get easier with a bigger team.
- Changing work that's already on the floor. A procedure changes while a dozen units are halfway through it. What happens to them, and can you prove it later?
- Inventory that splits and merges. A lot is divided for inspection, half goes into a subassembly, and the rest is recombined. Traceability has to survive all of it.
- History at scale. Every install, consumption, and status change has to be recorded and stay easy to search years and millions of records later.
- Staying fast on real data. A system that feels fine in a demo can slow to a crawl after a factory has run on it for a year.
We've worked through each of these, some of them more than once.
How we built it
Five choices shape everything in Factorial.
- The data model and API first. We designed the shape of the data and the API before the features on top of them, so we aren't bound to contracts we regret.
- Live by default. Every screen updates as work happens, without a refresh. We wrote about why that matters.
- Fast from day one. We target p95 response times of 100 milliseconds and test with tens of millions of inventory items and tasks. Speed is much easier to keep than to win back.
- Simple to run. A self-hosted deployment is one application binary, a PostgreSQL database, and file storage.
- Correctness that's checked, not hoped for. Core manufacturing rules are verified with property-based tests that throw unexpected sequences of work at them.
Why now
Coding agents change what it means to customize an MES. Most systems were designed long before them, and it shows in how hard they are to extend. Factorial's plugins, CLI, and documentation are built so an agent can write a customization and test it before anyone turns it on. We go deeper in An MES your coding agents can program.
The same tools let a small team like ours build a complete system without cutting corners on testing or documentation. A few years ago, that wasn't realistic.
What hasn't changed
We still want to be on the floor. The best features we've built came from watching someone work around the software. As an early customer, you work directly with the two people who wrote the code, from the first conversation through rollout.
If you're weighing your options, start with Building vs. buying an MES. And if you've lived through an MES rollout and have opinions about what went wrong, we'd love to hear them.