Work snippetSwitch + parallel run
Jobber to ServiceM8 switch, with a two-week parallel run
How I would approach switching a 14-tech HVAC business from Jobber and QuickBooks Online to ServiceM8 and Xero without a week of lost invoicing: a one-way mirror, a daily comparison, signed gates and a switch date with a rollback.
Work snippet with example figures.
- Area
- Switch + parallel run
- Tools
- Jobber · ServiceM8 · QuickBooks Online · Xero
- Typical scope
- US$2,500–4,200
- Timeline
- About 6 weeks · 4 fixed milestones
Context and systems map
A 14-tech HVAC and refrigeration business with one branch, an office manager, an owner and a bookkeeper. Quotes, jobs and invoices run in Jobber with QuickBooks Online as the ledger. The owner wants ServiceM8 for dispatch and mobile forms, with Xero replacing QuickBooks at the same time.
The systems in play
In the example the business cannot stop invoicing for a week. The plan is a parallel run: Jobber stays the system of record while ServiceM8 mirrors it, then the record moves job by job on a fixed date, with a written test at each step.
| System | What it does for the business |
|---|---|
| Jobber | Current system of record for clients, properties, quotes, jobs, visits and invoices until the switch date. |
| ServiceM8 | New system for dispatch, forms and job cards. Shadow copy first, then live. |
| QuickBooks Online | Current ledger. Closed at the switch date and kept for reference. |
| Xero | New ledger. Opening balances and open items loaded at the switch date. |
| Mirror flow | A scheduled flow that copies new and changed Jobber clients, jobs and visits into ServiceM8 as shadow records. |
| Office manager and bookkeeper | Run the daily comparison and sign each gate. |
How the data moves
- Jobber (live)
- Mirror flow
- ServiceM8 (shadow)
- Daily comparison
- Gate sign-off
- Switch date
- ServiceM8 (live)
- Jobber read-only
Problem
What the owner sees
- A switch that stops the business for a week
- Staff using two systems with no idea which is right
- Jobs created twice, or in neither system
- Customers who get two reminders or two invoices
The risk in a job system switch is not the data load. It is the weeks in which two systems are both partly true. A parallel run turns that overlap into something planned: one system owns each record at any moment, and every difference is listed and cleared.
| Everyday situation | What goes wrong |
|---|---|
| New job booked during the move | It exists in one system only and the technician never sees it |
| Client edited in both systems | Two versions of an address or phone number, no way to say which wins |
| Invoice created in Jobber after the switch | It is not in Xero and the customer is billed twice |
| Recurring visits duplicated | Customers are scheduled twice in the same week |
| Customer messages from both systems | Reminders go out from Jobber and ServiceM8 for the same visit |
| Open quotes | Accepted in Jobber after the switch date and never converted |
Approach
Four steps, in this order. Each one ends with a result that is checked.
- LookReview of Jobber and QuickBooks Online: record counts, open items, recurring work and the messages that go to customers.
- Agree the rulesWhich system owns each record at each stage, the gates, the switch date and the rollback conditions are written down.
- Run in parallelTwo weeks of mirrored data with a daily comparison. Technicians use ServiceM8 for a pilot group first.
- Switch and checkOwnership moves on the switch date. Jobber becomes read-only, and a seven-day watch confirms nothing is lost.
| Item | Example setting |
|---|---|
| Owner of each record | Jobber until the switch date. ServiceM8 afterwards. Never both. |
| Mirror schedule | Every 15 minutes, one way, Jobber to ServiceM8 |
| Pilot group | Three technicians use ServiceM8 live from day 8 for jobs created in ServiceM8 only |
| Daily comparison | Counts and a list of differences at 17:30, reviewed by the office manager |
| Customer messages | Reminders and review requests off in ServiceM8 until the switch date |
| Switch date | The first Monday after the last gate is signed |
| Ledger | QuickBooks Online closed at the switch date, Xero opened with open items and balances |
| Jobber after the switch | Read-only for 90 days, then exported and cancelled |
Flow and data mapping
The mirror flow is deliberately one-way and boring. The tables show what is copied, when, and how each field is mapped.
| Stage | Jobber | ServiceM8 | Rule |
|---|---|---|---|
| Initial load | Clients, properties, contacts | Clients, job addresses, contacts | Run once, then compared |
| Mirror | New and changed jobs, visits | Shadow jobs, marked as mirrored | Every 15 minutes, one way |
| Pilot | Not used for pilot jobs | Live jobs created by pilot staff | Pilot jobs never mirrored back |
| Daily comparison | Count and list | Count and list | Differences listed, owner named |
| Switch | Read-only | Becomes owner | Final mirror, then freeze |
| After switch | Archive | Live | Daily watch for seven days |
| Jobber | ServiceM8 | Rule |
|---|---|---|
| Client | Company | Individual clients kept as a company with the person as the contact |
| Property | Job address | One address per property |
| Job and visit | Job and scheduled activity | Assigned user mapped, visit window kept |
| Line item | Job material | Matched on item name; new items listed |
| Request or quote | Quote | Open quotes only, with the Jobber number in the reference |
| Tag | Label | Mapped by a signed list |
| Invoice | Not mirrored | Invoices stay in Jobber until the switch; open items go to Xero |
| Custom field | Job note or form field | Mapped where there is a use, listed otherwise |
Edge cases handled
Agreed in advance with the finance lead and the operations manager, and tested before go-live.
| Situation | How it is handled |
|---|---|
| Job booked in Jobber on the switch day | Final mirror is run after the freeze, then checked against the freeze list |
| Job completed in Jobber, invoice not yet raised | Invoiced in Jobber before the switch, or loaded to ServiceM8 as complete awaiting invoice, never both |
| Client edited in ServiceM8 during the pilot | Pilot clients are marked; edits are listed and carried across by hand at the switch |
| Recurring job schedule | Created once in ServiceM8 at the switch, switched off in Jobber the same day |
| Customer paid a deposit in Jobber | Held as a customer credit in Xero at the opening balance, with the Jobber reference |
| Quote accepted after the switch | Converted in ServiceM8, with the Jobber quote closed with a note |
| Mirror flow fails overnight | Alert in the morning; the next run catches up from the last good time |
| Staff create a job in the wrong system | Daily comparison finds it; the record is moved by the office manager |
Worked example
The tables below show a two-week parallel run for one example business. They show the shape of the checks, not a client result.
| Gate | Day | Needs to pass |
|---|---|---|
| G1 Initial load | Day 1 | Counts equal; ten clients checked by hand |
| G2 Mirror stable | Day 5 | Five days with no unexplained difference |
| G3 Pilot | Day 12 | Pilot group completes 25 jobs with forms and photos |
| G4 Ledger | Day 13 | Xero opening balances tie to QuickBooks Online |
| G5 Switch | Day 15 | All gates signed; owner approves |
| Day | Jobs in Jobber | Shadow jobs in ServiceM8 | Differences | Cleared same day |
|---|---|---|---|---|
| Mon | 46 | 46 | 0 | 0 |
| Tue | 51 | 50 | 1 | 1 |
| Wed | 49 | 49 | 0 | 0 |
| Thu | 53 | 51 | 2 | 2 |
| Fri | 44 | 44 | 0 | 0 |
| Item | QuickBooks Online | Xero | Difference |
|---|---|---|---|
| Accounts receivable | 62,410.80 | 62,410.80 | 0.00 |
| Accounts payable | 28,115.25 | 28,115.25 | 0.00 |
| Customer deposits held | 9,200.00 | 9,200.00 | 0.00 |
| Bank, reconciled balance | 147,882.14 | 147,882.14 | 0.00 |
Monitoring and alerting
The parallel run only works if differences are seen the same day. The comparison is automatic, and the alerts are written for an office manager, not for a technician.
| Signal | Threshold | Alert goes to | First action |
|---|---|---|---|
| Mirror flow did not run | No run for 45 minutes | Office manager by email and Slack | Flow restarted, missed changes replayed |
| Count difference | Any difference in jobs or visits at 17:30 | Office manager | Listed with both records, fixed by owner of the record |
| Customer message from ServiceM8 before the switch | Any message sent | Owner and Manaz Afzal | Message setting reviewed, customer contacted if needed |
| Invoice in Jobber after the switch | Any new invoice | Bookkeeper | Invoice moved to Xero, Jobber entry voided |
| Open quote not converted | Quote older than 3 days after switch | Office manager | Quote converted or closed |
Test plan
Every check has a written pass condition and a written fail condition before it is run. A FAIL stops the next step until it is cleared and re-run.
| ID | Check | Method | PASS when | FAIL when |
|---|---|---|---|---|
| T1 | Initial load counts | Clients, properties and open jobs compared | Equal, or differences on the list | Unexplained difference |
| T2 | Mirror one-way | Edit a mirrored job in ServiceM8 | Jobber record unchanged | Jobber record changed |
| T3 | Mirror timing | Create and edit ten Jobber jobs | All appear in ServiceM8 within 20 minutes | Any missing after 20 minutes |
| T4 | Pilot isolation | Pilot jobs checked in Jobber | None appear in Jobber | Any pilot job in Jobber |
| T5 | Customer messages | Test visit with message on and off | Exactly one message after switch | Zero or two |
| T6 | Opening balances | Receivables by customer compared | Equal to the cent | Any difference |
| T7 | Switch dry run | Rehearsal on a copy | Runbook finishes inside the window | Over time or any step fails |
| T8 | Seven-day watch | Daily comparison after switch | Zero unexplained differences | Any unexplained difference |
Switch and rollback
Ownership moves on one date. Until the first day of live use ends, a rollback means returning ownership to Jobber without data loss.
| Step | Owner | Gate to continue | Rollback trigger |
|---|---|---|---|
| Final mirror and freeze | Manaz Afzal | Differences zero or explained | Any unexplained difference |
| Open items loaded to Xero | Bookkeeper | T6 passes | Balances do not tie |
| Recurring schedules created in ServiceM8 | Office manager | Next 14 days checked against Jobber | Missing or doubled visits |
| Customer messages switched on | Office manager | T5 passes | Duplicate message sent |
| Jobber set to read-only | Owner | Go decision signed | Not applicable |
| Rollback | Owner | Jobber reopened, ServiceM8 jobs created since the switch re-entered by hand | Decision recorded with the reason |
| Seven-day watch complete | Office manager | T8 passes | Any unexplained difference |
Scope and milestones
A fixed scope agreed in writing before anything starts. Each milestone is paid when you sign off its deliverable.
| Area | Included |
|---|---|
| Systems Audit | Read-only review of Jobber and QuickBooks Online, recurring work and customer messages, a 45-minute call, written findings and a fixed quote |
| Parallel run rules | Ownership by stage, gates and the switch date in writing |
| Mirror flow | One-way scheduled copy with a daily comparison and alerts |
| Initial load | Clients, addresses, contacts, open quotes and open jobs |
| Ledger move | Opening balances and open items into Xero, tied to QuickBooks Online |
| Pilot support | A pilot group live from day 8 with a feedback list |
| Switch and watch | Runbook, switch day support and a seven-day watch |
| Handover | Written SOPs, a recorded handover video and files you own, plus 14 days of fixes after go-live |
| Not included | Tax filing and statutory returns. |
| Also outside the scope | Training every technician beyond the pilot group. Rebuilding forms from scratch. Hardware and phones. Software subscriptions (billed to you by the vendors). |
| Milestone | Deliverable | Timing | Share |
|---|---|---|---|
| M1 Audit and rules | Findings, fixed quote, ownership rules and gates in writing | Week 1 | 20% |
| M2 Mirror and load | Initial load done, mirror running with the daily comparison | Weeks 2 to 3 | 30% |
| M3 Pilot and ledger | Pilot live, Xero opening balances tied | Week 4 | 30% |
| M4 Switch and handover | Switch day, seven-day watch, SOPs, handover video, 14 days of fixes | Weeks 5 to 6 | 20% |
Typical scope for this kind of project: US$2,500–4,200
About 6 weeks across 4 fixed milestones. The Systems Audit (US$300, fixed) comes first and confirms the scope.
Describe what is going wrong between your job system and your books, and I will say where I would look first.
Send a short note through the form on the home page. I will reply with where I would start, and whether the US$300 Systems Audit is the right first step.