Back to case studies

A facilities company that stopped losing work orders in vans

Odoo for the back office, an offline-first field app for 140 technicians, and a paper trail that finally survives the drive back.

140
Technicians on the app
12 wks
To first store release
31%
Drop in re-visits

The situation

Work orders were printed in the morning, carried out on a clipboard, and typed back into the system in the evening — by whoever was still in the office. Roughly one in twelve never made it back. Those jobs got billed late, billed wrong, or not at all.

The technicians weren't the problem. Asking a person who has been on roofs since six in the morning to transcribe forty lines of handwriting at seven in the evening is the problem.

What we did

Back office on Odoo 17. Maintenance, field service, timesheets and invoicing, configured against their existing contract structure. Multi-company, because two of their entities bill separately.

A React Native app for the field. Offline-first, because half their sites are in basements and plant rooms with no signal. Jobs sync down in the morning, the technician works entirely locally, and everything syncs back when the phone finds a network — often in the van on the way to the next site.

The app does four things and nothing else: show today's jobs, capture what was done, take photos, get a signature. Every feature request beyond those four we deferred to a second release, and most of them turned out not to matter.

A sync queue with real error handling. The hard part of offline-first isn't storing data locally, it's what happens when a technician edits a job that the office also edited. We resolve on the server with a conflict log that a supervisor reviews — about three conflicts a week, all of them real.

What went wrong

We shipped signature capture that worked beautifully on the test devices and terribly on the five-year-old Androids half the crew actually carried. That cost a release cycle and taught us to ask for the real device list before writing anything.

Apple rejected the first submission over a location-permission description. Predictable, and it still cost nine days.

Where they are now

Work orders close on site. Invoicing runs from the app's data, not from evening transcription. Re-visits — where a technician returns because the first job wasn't recorded properly — dropped by about a third in the first quarter.

Sound like your situation?

Tell us what you run today and we’ll come back with a scope and a price.