Case study

Batch

*Renamed for this portfolio — it was an internal tool.

The story

An automation tool that rolled five event support sources into one reviewable queue and was given authority slowly, after each single step was tested and stable.

This tool turned roughly 20 hours a week of manual coordination into about an hour of review and kept a lean team efficient in a fast-growing start-up environment.

The Problem

Our team’s event coordination lived in five places: AV’s ticket queue, Workplace event tickets, Slack, Gmail, and Google Calendar. Keeping them in sync took about four hours a day and required constant monitoring in order to successfully stay on top of the work. Even then, small misses would still happen occasionally: a rescheduled event nobody flagged, a mistitled ticket lost in the queue, an SLA going overdue before anyone noticed. We needed a centralized solution that accounted for everything.

The Solution

Create a reliable automation tool that makes it easier for my team’s event coordination efforts to match increasing org demand. This tool would pull from all five systems to create a single source of truth. The harder question became how much authority to give a tool that can make calendar and Jira changes. I slowly gave it more, after each single step was tested and stable.

How It Works

An automated sweep started at the top of the work day, scanning all sources of truth for any new event information. Once that information was gathered, changes were proposed and awaited my approval. The whole system had one hard rule: every write stops at the gate until I approve it. Click below for more information about the seven stages of the automation and what a sweep looked for.

  1. Trigger

    A webhook kicks off the run before the workday starts and prepares the queue.

  2. Sweep

    Batch reads all five systems: the AV ticket queue, Workplace tickets, Gmail, Slack, and the AV Events Calendar. Read-only, no changes.

  3. Reconcile

    It compares all five against each other — finding what’s new, changed, missing, orphaned or off-format — and writes up a proposal: a list of every change it thinks should happen.

  4. Batch

    The proposal splits into two batches.

    Batch 1 is the Jira changes: retitle tickets to the standard format, send the SLA first response, flag tickets at risk of missing SLA, and flag quiet cancellations.

    Batch 2 is the calendar changes: add the standard event header, the support detail and ticket link, and a last-synced stamp, and flag any event that was moved or deleted.

  5. Gate

    I approve Batch 1, then Batch 2. Nothing moves past this line without me.

  6. Write

    Only approved items get written. Calendar edits never delete anything.

  7. Report

    Every change gets posted to Slack in a summary, so the team can see what moved.

  1. New

    Incoming tickets in either queue that nobody had triaged yet.

  2. Changed

    New comments or event changes on tickets we were already supporting.

  3. Off-Channel

    Slack messages carrying event updates that never made it into a ticket.

  4. Uncalendared

    Tickets with no matching calendar event.

  5. Untracked

    Calendar events with no ticket behind them — either queue counted, both was preferred.

  6. Hand-Made

    Events a human on the team created directly on the calendar, outside the process.

[ Fig. 1 ] The runInteractive

AV ticket queue
Workplace tickets
Gmail
Slack
AV Events Calendar
ReconcileCompares all five against each other:
  • New
  • Changed
  • Off-Channel
  • Uncalendared
  • Untracked
  • Hand-Made
Batch 1: Jira
  • Retitle to standard format
  • Send SLA first response
  • Flag SLA at risk
  • Flag quiet cancellations
Batch 2: Calendar
  • Standard event header
  • Support detail + ticket link
  • Last-synced stamp
  • Flag moved or deleted
Writes to Jiraonly approved items
Writes to Calendarnever deletes
Run summaryposted to Slack

The Outcome

Our lean team stayed ahead of rising event demand, and coordination stopped being a second job for me. Roughly 20 hours a week of manual triaging turned into about an hour of review per week, saving an estimated 247 hours of coordination time per quarter, allowing me to give more focus to infrastructure and team building.

Appendix

I did it by hand Batch proposed, I approved, Batch executed Never automated

Each version got more authority once the last step earned it: reading, then writing, then starting its own runs.

The bottom rows stayed manual in every version.

The regression: In early testing, V1 deleted events and overwrote human input. Every version since is gated against both.

What went wrongThe rule it produced

Data Loss

Early in testing, Batch deleted calendar events and overwrote details we had typed in by hand. We had to rebuild the events and re-enter everything.

Human-entered data became read-mostly. Batch can check it, flag mismatches, and fix formatting, but it changes content only when I approve it. And no version since has been able to delete anything, in any system.

Double-Booking

Two events landed on the same engineer in the same slot.

Assignment never went into the automation. Batch surfaces the conflict and a person makes the call.

Queue Rot

Ticket titles were all over the place, the queue was unscannable, and work got lost in it.

Title standardization became part of Batch 1, applied on every sweep.

Silent Change

Events got cancelled or rescheduled and we found out late.

Batch flags every cancellation, every reschedule, and any calendar event that moved or disappeared.

SLA Drift

Response clocks ran out while we were busy elsewhere.

Tickets near or past SLA go to the top of every run.

Repetition

I was re-explaining the same context and corrections on every sweep.

I wrote a runbook Batch follows on each run. The sweeps got consistent and the system stopped depending on me.