CMMS
Why the maintenance module in your ERP keeps getting abandoned
July 20, 2026 · 6 minute read
Almost every company running SAP, Oracle, Infor or Dynamics has a maintenance module included. Almost none of the maintenance teams use it properly. This is not a training gap. The module was designed to feed the general ledger, and the technician is an inconvenient data-entry step in that design.
What the ERP module is genuinely good at
- Putting maintenance cost against a cost centre without anybody rekeying it
- Turning a parts request into a purchase order under the usual approval rules
- Holding the asset value that finance already reports on
- Keeping one supplier list instead of two
These are real advantages. If your problem is that maintenance spend is invisible to finance, the ERP module solves it and a separate CMMS makes it worse.
What it is usually bad at
The failure is always at the edge where a person meets the software, standing up, in a plant room, with gloves on.
- Screens designed for a desk, opened on a phone
- Required fields that exist for accounting and mean nothing to a technician
- No useful behaviour when there is no signal, which is where the work is
- Photographs treated as attachments to be uploaded later, so they never are
- A schedule that cannot express "every 500 running hours or six months, whichever comes first"
The pattern that works
Run the work where the work happens and send the money where the money lives. The maintenance system owns jobs, schedules, evidence and history. It sends cost, parts usage and completed-work signals to the ERP on a schedule finance agrees to.
This is a smaller integration than it sounds. Finance needs cost by asset and cost centre, and it needs it monthly. It does not need every photograph of a leaking valve.
How to make the case internally
Do not argue about features. Argue about the record. Ask whoever owns the ERP to produce the last twelve months of completed preventive work for one building, with evidence. If it takes a week, or comes back empty because the work was closed in a batch from memory, the argument is over and nobody had to win it.
