How an onboarding finishes
A flag lands in Sam’s Slack at 9:04am. Priya is stuck on the “invite a teammate” step, five days in. There are buttons on the flag. What happens when he taps one? The honest answer is “it depends on what’s actually going on.” This post walks through the three ways a sequence ends — finish, pause, hand off — and how the onboarding list, the step state, and the audit trail all stay in sync.
Key takeaways
- Three ways a sequence ends: finish (all steps done, send a wrap-up), pause (hold without dropping), hand off (a human takes over).
- Each action updates the onboarding sheet via the Sheets API and writes an audit row.
- A finish archives the journey to a separate sheet for history.
- Pause is open-ended but visible — paused customers show up in the weekly digest so none are forgotten.
- The flag buttons are a Slack interactive message backed by a Function URL.
Three ways a sequence ends
Action 1: finish (the goal)
The happy path. Priya works through every step in her plan — she connects her data, invites a teammate, books the check-in — clicking the one-click done link on each as she goes. When the daily tick sees that the last step in her plan is done, it lands her at finish. Or, if a human knows she’s set even though a step is technically unmarked, the owner can tap Done on the flag to finish her manually.
Either way, the finish runs through a Function URL Lambda. Three things happen, in order. First, the Sheets API updates her row in the onboarding sheet: the finished flag is set and the finished_date is stamped with today and the user who acted. Second, her step rows in og-sends are copied to og-sends-archive with a journey id, and the live state is cleared. Third, a action: finished row is written to og-audit with the user, timestamp, and how long the whole onboarding took. One warm wrap-up email goes out — “you’re all set, here’s where to go next” — and then the guide goes quiet for her.
Tomorrow’s tick reads the list, sees she’s finished, and lands at on track with nothing to do. She won’t hear from the guide again unless someone re-enrolls her for a new plan.
Action 2: pause (the hold)
Some onboardings need to stop without the customer being done. The customer asked to be left alone for a few weeks while they finish a migration. They’re a team of one and the “invite a teammate” step will never apply. A deal is being renegotiated and nobody wants automated mail going out in the middle of it. Sam isn’t finishing Priya and isn’t handing her off — he just needs the guide to be quiet for now.
Pause opens a small modal with an optional note (“team of one, revisit after Q3”). On save, the paused flag is set on her row and a row is written to og-state. The next day’s tick reads that flag in the “paused or finished?” check from Part 3 and treats her as on track — sends nothing. Pause is open-ended; there’s no timer. But it’s not a black hole: every paused customer appears in the weekly digest with their note and how long they’ve been paused, so nobody is quietly forgotten. Resuming is one click in the sheet (clear the flag) or a button in the digest, and the guide picks the sequence back up where it left off.
Action 3: hand off (the human)
Sometimes another automated email is exactly the wrong answer and a real person is the right one. The customer is clearly confused and needs a call. They’re a big account that deserves a dedicated contact. They replied to a step email with a question the guide can’t answer. Whatever the reason, it’s time for a human to take the wheel.
Hand off assigns the customer to a named human owner — picked from a short list in the modal — and writes a row to og-state with (customer_id, handed_off_to). The guide stops sending automated messages for that customer entirely; from here the human owns the relationship. The assigned person gets a Slack ping with the full journey so far so they’re not starting cold. If the human later decides the guide should resume (the call went well, the customer just needs the rest of the sequence), they can clear the hand-off and the guide picks back up.
Hand off is the escape hatch that keeps the whole system honest: the guide is for the common path, and the moment a customer needs more than the common path, a person steps in cleanly instead of the customer getting more of the same.
Every action is logged, every action is reversible
The og-audit table records every finish, pause, and hand-off with the user who took the action, the timestamp, and a snapshot of the row before and after. If a customer gets paused by mistake, or finished a week early, a rep can run an “undo last action” through a small admin command that reads the previous-state snapshot and restores the row. The undo is itself an audit row, so the trail of edits stays clean.
This reversibility matters because onboarding is the first impression. The next time anyone looks at how a customer’s first week went — a support rep picking up a ticket, an account manager prepping a renewal — the audit trail is the memory of exactly what the customer saw and when.
Next post: the cost breakdown. The whole pipeline above runs in coffee-money territory at SMB volume; Part 6 explains exactly where the dollars go and why it’s so cheap.
All posts