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.

Systems map: who uses what
SystemWhat it does for the business
JobberCurrent system of record for clients, properties, quotes, jobs, visits and invoices until the switch date.
ServiceM8New system for dispatch, forms and job cards. Shadow copy first, then live.
QuickBooks OnlineCurrent ledger. Closed at the switch date and kept for reference.
XeroNew ledger. Opening balances and open items loaded at the switch date.
Mirror flowA scheduled flow that copies new and changed Jobber clients, jobs and visits into ServiceM8 as shadow records.
Office manager and bookkeeperRun the daily comparison and sign each gate.

How the data moves

  1. Jobber (live)
  2. Mirror flow
  3. ServiceM8 (shadow)
  4. Daily comparison
  5. Gate sign-off
  6. Switch date
  7. ServiceM8 (live)
  8. Jobber read-only

Problem

What the owner sees

  1. A switch that stops the business for a week
  2. Staff using two systems with no idea which is right
  3. Jobs created twice, or in neither system
  4. 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.

Where the drift starts
Everyday situationWhat goes wrong
New job booked during the moveIt exists in one system only and the technician never sees it
Client edited in both systemsTwo versions of an address or phone number, no way to say which wins
Invoice created in Jobber after the switchIt is not in Xero and the customer is billed twice
Recurring visits duplicatedCustomers are scheduled twice in the same week
Customer messages from both systemsReminders go out from Jobber and ServiceM8 for the same visit
Open quotesAccepted in Jobber after the switch date and never converted

Approach

Four steps, in this order. Each one ends with a result that is checked.

  1. LookReview of Jobber and QuickBooks Online: record counts, open items, recurring work and the messages that go to customers.
  2. Agree the rulesWhich system owns each record at each stage, the gates, the switch date and the rollback conditions are written down.
  3. Run in parallelTwo weeks of mirrored data with a daily comparison. Technicians use ServiceM8 for a pilot group first.
  4. Switch and checkOwnership moves on the switch date. Jobber becomes read-only, and a seven-day watch confirms nothing is lost.
Rules agreed in writing (example settings)
ItemExample setting
Owner of each recordJobber until the switch date. ServiceM8 afterwards. Never both.
Mirror scheduleEvery 15 minutes, one way, Jobber to ServiceM8
Pilot groupThree technicians use ServiceM8 live from day 8 for jobs created in ServiceM8 only
Daily comparisonCounts and a list of differences at 17:30, reviewed by the office manager
Customer messagesReminders and review requests off in ServiceM8 until the switch date
Switch dateThe first Monday after the last gate is signed
LedgerQuickBooks Online closed at the switch date, Xero opened with open items and balances
Jobber after the switchRead-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.

Parallel run flow
StageJobberServiceM8Rule
Initial loadClients, properties, contactsClients, job addresses, contactsRun once, then compared
MirrorNew and changed jobs, visitsShadow jobs, marked as mirroredEvery 15 minutes, one way
PilotNot used for pilot jobsLive jobs created by pilot staffPilot jobs never mirrored back
Daily comparisonCount and listCount and listDifferences listed, owner named
SwitchRead-onlyBecomes ownerFinal mirror, then freeze
After switchArchiveLiveDaily watch for seven days
Field mapping, Jobber to ServiceM8 (example settings)
JobberServiceM8Rule
ClientCompanyIndividual clients kept as a company with the person as the contact
PropertyJob addressOne address per property
Job and visitJob and scheduled activityAssigned user mapped, visit window kept
Line itemJob materialMatched on item name; new items listed
Request or quoteQuoteOpen quotes only, with the Jobber number in the reference
TagLabelMapped by a signed list
InvoiceNot mirroredInvoices stay in Jobber until the switch; open items go to Xero
Custom fieldJob note or form fieldMapped 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.

Edge cases and how each is handled
SituationHow it is handled
Job booked in Jobber on the switch dayFinal mirror is run after the freeze, then checked against the freeze list
Job completed in Jobber, invoice not yet raisedInvoiced in Jobber before the switch, or loaded to ServiceM8 as complete awaiting invoice, never both
Client edited in ServiceM8 during the pilotPilot clients are marked; edits are listed and carried across by hand at the switch
Recurring job scheduleCreated once in ServiceM8 at the switch, switched off in Jobber the same day
Customer paid a deposit in JobberHeld as a customer credit in Xero at the opening balance, with the Jobber reference
Quote accepted after the switchConverted in ServiceM8, with the Jobber quote closed with a note
Mirror flow fails overnightAlert in the morning; the next run catches up from the last good time
Staff create a job in the wrong systemDaily 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.

Gates and what each one needs (example settings)
GateDayNeeds to pass
G1 Initial loadDay 1Counts equal; ten clients checked by hand
G2 Mirror stableDay 5Five days with no unexplained difference
G3 PilotDay 12Pilot group completes 25 jobs with forms and photos
G4 LedgerDay 13Xero opening balances tie to QuickBooks Online
G5 SwitchDay 15All gates signed; owner approves
Daily comparison, week 1 (example figures)
DayJobs in JobberShadow jobs in ServiceM8DifferencesCleared same day
Mon464600
Tue515011
Wed494900
Thu535122
Fri444400
Opening balances at the switch date (example figures, US$)
ItemQuickBooks OnlineXeroDifference
Accounts receivable62,410.8062,410.800.00
Accounts payable28,115.2528,115.250.00
Customer deposits held9,200.009,200.000.00
Bank, reconciled balance147,882.14147,882.140.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.

What is watched, and who hears about it
SignalThresholdAlert goes toFirst action
Mirror flow did not runNo run for 45 minutesOffice manager by email and SlackFlow restarted, missed changes replayed
Count differenceAny difference in jobs or visits at 17:30Office managerListed with both records, fixed by owner of the record
Customer message from ServiceM8 before the switchAny message sentOwner and Manaz AfzalMessage setting reviewed, customer contacted if needed
Invoice in Jobber after the switchAny new invoiceBookkeeperInvoice moved to Xero, Jobber entry voided
Open quote not convertedQuote older than 3 days after switchOffice managerQuote 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.

Test plan with PASS and FAIL conditions
IDCheckMethodPASS whenFAIL when
T1Initial load countsClients, properties and open jobs comparedEqual, or differences on the listUnexplained difference
T2Mirror one-wayEdit a mirrored job in ServiceM8Jobber record unchangedJobber record changed
T3Mirror timingCreate and edit ten Jobber jobsAll appear in ServiceM8 within 20 minutesAny missing after 20 minutes
T4Pilot isolationPilot jobs checked in JobberNone appear in JobberAny pilot job in Jobber
T5Customer messagesTest visit with message on and offExactly one message after switchZero or two
T6Opening balancesReceivables by customer comparedEqual to the centAny difference
T7Switch dry runRehearsal on a copyRunbook finishes inside the windowOver time or any step fails
T8Seven-day watchDaily comparison after switchZero unexplained differencesAny 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.

Switch runbook and rollback triggers
StepOwnerGate to continueRollback trigger
Final mirror and freezeManaz AfzalDifferences zero or explainedAny unexplained difference
Open items loaded to XeroBookkeeperT6 passesBalances do not tie
Recurring schedules created in ServiceM8Office managerNext 14 days checked against JobberMissing or doubled visits
Customer messages switched onOffice managerT5 passesDuplicate message sent
Jobber set to read-onlyOwnerGo decision signedNot applicable
RollbackOwnerJobber reopened, ServiceM8 jobs created since the switch re-entered by handDecision recorded with the reason
Seven-day watch completeOffice managerT8 passesAny unexplained difference

Scope and milestones

A fixed scope agreed in writing before anything starts. Each milestone is paid when you sign off its deliverable.

Scope: what a project like this covers
AreaIncluded
Systems AuditRead-only review of Jobber and QuickBooks Online, recurring work and customer messages, a 45-minute call, written findings and a fixed quote
Parallel run rulesOwnership by stage, gates and the switch date in writing
Mirror flowOne-way scheduled copy with a daily comparison and alerts
Initial loadClients, addresses, contacts, open quotes and open jobs
Ledger moveOpening balances and open items into Xero, tied to QuickBooks Online
Pilot supportA pilot group live from day 8 with a feedback list
Switch and watchRunbook, switch day support and a seven-day watch
HandoverWritten SOPs, a recorded handover video and files you own, plus 14 days of fixes after go-live
Not includedTax filing and statutory returns.
Also outside the scopeTraining every technician beyond the pilot group. Rebuilding forms from scratch. Hardware and phones. Software subscriptions (billed to you by the vendors).
Fixed milestones
MilestoneDeliverableTimingShare
M1 Audit and rulesFindings, fixed quote, ownership rules and gates in writingWeek 120%
M2 Mirror and loadInitial load done, mirror running with the daily comparisonWeeks 2 to 330%
M3 Pilot and ledgerPilot live, Xero opening balances tiedWeek 430%
M4 Switch and handoverSwitch day, seven-day watch, SOPs, handover video, 14 days of fixesWeeks 5 to 620%

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.

Hire me on Upwork (opens in a new tab)Hire me on Freelancer (opens in a new tab)