Maximo Mobile Offline Sync in 2026: From Two-Week Config to One-Hour Deploy
Offline sync used to be a two-week configuration project. With MAS 9.1 and the new Mobile Config Studio, the same deployment takes an hour. Here is the 2026 playbook, with conflict-resolution patterns for the field.
Maximo Mobile offline sync has historically been the boogeyman of Maximo deployments. The "two-week" estimate was not a joke — it was the actual time required to figure out which data needed to sync, which conflicts needed to be handled, which objects needed custom handlers, and which XML files needed to be hand-edited in the Mobile Application Framework. The estimate was conservative. I have seen deployments take six weeks.
MAS 9.1 changed the game. The combination of the new Mobile Config Studio (introduced in MAS 9.0, stabilized in 9.1.2) and the declarative conflict resolution in the Mobile Sync Framework has cut the deployment time for a typical offline-enabled field service deployment from weeks to hours. This article is the playbook for the 2026 deployment model.
What changed
Three things changed in MAS 9.0 and 9.1:
- The Mobile Config Studio replaced the XML-based
app.xmlandapp-config.xmlediting with a GUI. You can now define objects, queries, and conflict policies in a visual editor and deploy the result with one click. - The conflict resolution engine moved from custom JavaScript handlers to a declarative policy framework. You can now say "the server wins on these fields, the client wins on those, the merge is a max() on this one" without writing a single line of code.
- The Mobile Sync Framework is now a first-class MAS service, not a sidecar. It runs in the MAS core namespace, scales with the AppPoints model, and supports rolling deploys without taking the mobile fleet offline.
The net effect: a standard "field technician with offline work orders, assets, and inspections" deployment that took 10-15 days of effort in MAS 8.7 takes 4-6 hours in MAS 9.1.
The 2026 deployment flow
The modern flow has six steps, and they are roughly equal in time:
Step 1: Define the mobile personas (15 min)
A persona is a role-scoped data view. Examples:
- Field Technician — assigned work orders, the related assets, the related PMs, the related failure codes, the inventory in their truck
- Reliability Engineer — all assets, all PMs, all work order history, all failure lists
- Supervisor — the work orders of their crew, the time entries, the labor transactions
In Mobile Config Studio, you create a persona by giving it a name, assigning it a security group, and selecting the data objects. This replaces the multi-day security-group-and-domain-filter choreography that was the first week of every deployment.
Step 2: Define the data objects (30 min)
For each persona, you select the data objects that should sync to the device. The default set for a Field Technician persona is:
WORKORDER(filtered by assignee, status not in CAN/CLO)ASSET(filtered by the location hierarchy the technician is responsible for)PM(filtered by frequency and next-due date)INVENTORY(filtered by the technician's storeroom)ITEM(all items, but read-only)FAILURELIST(all failures, read-only)WORKLOG(no filter, write-back on save)LABTRANS(filtered by date range)ATTACHMENT(filtered by the related record)
The "filtered by" is the critical part. Mobile Config Studio exposes a visual query builder that uses the standard Maximo query language. You can preview the row count, the size, and the sync time before you commit.
Step 3: Define the conflict policies (30 min)
This is the step that used to require a custom JavaScript handler. In MAS 9.1, it is a table:
| Object | Field | Policy | Notes |
|---|---|---|---|
| WORKORDER | STATUS | server-wins | Status changes are centrally orchestrated |
| WORKORDER | ACTUALS | client-wins | The technician is the source of truth for actuals |
| WORKORDER | LONGDESCRIPTION | merge | Append client to server with timestamp |
| WORKORDER | WORKLOG | append | New rows on client are appended to server |
| ASSET | LOCATION | server-wins | Location is the master |
| ASSET | CONDITION | client-wins | The technician's observation is the truth |
| INVENTORY | CURRENTQTY | max | Take the higher of the two values |
The policies are stored in the Mobile Sync Configuration table in the database. They can be changed at deploy time and hot-reloaded into the sync engine. No more edit-and-redeploy cycles.
Step 4: Configure the sync window (15 min)
The sync engine has three modes:
- Real-time — every save on the device syncs to the server within 5 seconds, requires connectivity
- Periodic — every N minutes, requires connectivity at sync time
- Manual — only when the user taps "Sync Now"
The default for a field technician persona is real-time when connected, periodic when on WiFi only, manual otherwise. This balances the need for fresh data on the server with the need to preserve bandwidth on cellular.
Step 5: Test the sync in the simulator (30 min)
The Mobile Config Studio includes a simulator that runs the same sync engine as the real device. You can:
- Load a test database
- Put the simulator in "offline" mode
- Make changes, simulate the conflict with a server-side change
- Verify that the conflict policy fires correctly
The simulator catches 80% of sync bugs before you touch a real device. Use it.
Step 6: Deploy to the field (15 min)
The deployment is a single push from the Mobile Config Studio. The Mobile Sync Framework is updated, the new policy is hot-reloaded into the running pods, and the next time a device syncs, the new config is downloaded. No app update required (unless you changed the data model itself, in which case an app update is needed).
The conflict-resolution deep dive
The conflict policy table is the heart of the offline sync. Get it wrong and your field data corrupts. Get it right and your field data is more reliable than your server data. Here is the playbook:
Work order status: The most common conflict. The technician closes the work order offline. The supervisor approves the work order online at the same time. The server has STATUS=APPR, the client has STATUS=CLOSE. The policy must be server-wins for status, because the workflow is orchestrated by the server. The client should re-fetch the work order and re-do the close if it is still valid.
Work order actuals: The technician enters actual labor, actual materials, actual duration. The server has nothing. Client-wins is the obvious policy. The catch: the actuals reference the labor code, the craft, the skill, and the inventory item. If the server has been updated in the meantime to deprecate a labor code, the client-side labor transaction will fail. The policy must include a "validate on sync, fall back to user correction" action.
Work order long description: The technician adds observations. The supervisor adds narrative. The right answer is append with timestamp. The default behavior in MAS 9.1 is MERGE with a configurable separator ("\n[Field " + technicianName + " " + isoTimestamp + "]: ").
Asset condition: The technician inspects the asset and rates the condition. The server has the old condition. Client-wins, but with a historical log — every condition change is recorded, not just the latest. The Mobile Sync Framework handles this automatically for fields with the auditable flag.
Inventory quantity: The technician uses 3 widgets. Another technician uses 2 widgets. Both are offline. Both sync. The server should be at the start minus 5. The policy is max() of the client value and the server value, because the client value reflects an intermediate state. The post-sync reconciliation runs the inventory transaction and produces a true max-minus-actual. This is the only way to avoid a "negative inventory" surprise.
Common failure modes
The 2026 deployment model is fast, but it is not immune to mistakes. The most common failure modes are:
- Forgetting to mark an object as read-only on the device. The user can change a field that should be server-controlled. The fix is the
readOnlyflag in the object definition. - A query that returns too much data. The sync window blows out, the device OOMs, the field technician is offline with a broken app. The fix is to always preview the row count and the data size in the Mobile Config Studio before deploying.
- A conflict policy that is too aggressive. The server-wins policy on actuals erases a technician's hours. The fix is to test every policy in the simulator with realistic data before deploying.
- Not validating the offline app starts cleanly. A user downloads the new config, goes offline, the app crashes on the first WO. The fix is a smoke test in the Mobile Config Studio's "offline boot" simulator.
- Not notifying the field. A deploy goes out, the technicians are confused. The fix is a release note in the Mobile Config Studio's announcement system.
The ROI
A two-week deployment at $150/hour fully loaded is $12,000. A one-hour deployment is $150. The savings are 98%. The bigger savings are the time-to-value — a two-week deployment means two weeks of field users waiting for the system. A one-hour deployment means the field users have the new capabilities at the end of the morning.
That is the 2026 story. Faster, cheaper, more reliable. The boogeyman is dead.