Automating Without Overwhelming Yourself 5 of 6 · 3:20–4:05
5 · 3:20–4:05 · 45 min, in teams

Build your smallest useful unit

Your project, on dummy data. Low stakes. Nothing real touches it.

The goal

45 min

Build the smallest useful unit for your project, on dummy data.

Leave with something that runs. Or a clear spec of what would.

  1. 5min1 · Form
  2. 5min2 · Dummies
  3. 10min3 · IDEA pass
  4. 20min4 · AI writes the script. You read it, run it.
  5. 5min5 · Traps
  • Dummy data only. Every sandbox file is fake.
  • Client data goes only in tools approved for it, like U-M GPT and Maizey. Today, none of it.
  • Your project's smallest useful unit is a starting point to argue with, not an assignment.
Speaker notes

Circulate by shape. Intake → triage has six teams (Zell, MTA, Dining, OVPR, Oakland FOIA, CAI), so start there. Then pile → catalog (Ginsberg, FJA), then many sheets → one table (Marsal, Basketball, Michigan Medicine).

NDA teams use dummy data only. Client NDA: Oakland County and CAI. UMSI NDA: Zell, OVPR, and the MTA project (with IP). Nothing from a client goes into any tool today.

Start the timer once every team has picked a file.

Run it on your laptop: build your own

step by step

Tell it where your copy of the repo is, your tool and your project. It writes your terminal commands and a starting prompt you can edit.

Pick your sandbox file

Step 0

Find your project. Start with its file. All fake, made for today.

Your projectShapeStart with
Zell Entrepreneurship ClinicIntake to triageform_zell_application_responses.csv
Innovation Partnerships MTAIntake to triageform_mta_screening_responses.csv
Michigan Dining sustainabilityIntake to triageform_dining_sustainability_responses.csv
OVPR limited submissionsIntake to triagerequests_inbox.csv, or build your own InfoReady-style form
Oakland County FOIAIntake to triagerequests_inbox.csv
CAI AI EnablementIntake to triagerequests_inbox.csv
Ginsberg Center archivePile to catalogshared_drive_dump.csv
FJA staff AI portalPile to catalogterrible_notes.txt
Marsal gift fundsMany sheets to one tablefunds_development.csv + funds_finance.csv
Women's BasketballMany sheets to one tableGenerate two sheets keyed on player (the funds pair is the pattern)
Michigan Medicine Faculty DevelopmentMany sheets to one tableform_faculty_interest_responses.csv

Also in the folder: team_members.csv (a roster, one document or email per row) and yelp_sample_20.csv (reviews: rating, main issue, needs a reply?, draft reply).

Every file has a few planted problems. Finding them is part of the exercise.
Speaker notes

Tie each intake team back to demo 1. MTA: the eligibility rule. Dining: the next step is an AI memo draft for review. OVPR: the rubric comes first. Oakland FOIA: exact duplicates. CAI: this is your intake form.

Answer keys for the planted problems are in the instructor folder. Don't give them away; let teams find them.

Step by step

5 steps · 45 min
  1. Build the Google Form 5 min

    • New Google Form. Question titles = the CSV header. The header is the form.
    • Pick short answer, checkbox or dropdown to match the data.
    • Link a responses Sheet: Responses tab → Sheets icon.
    • Submit two or three responses by hand. Watch one land.
  2. Fill it with dummies 5 min

    • Fast: import the ready-made CSV. On the responses Sheet: File → Import → Append to current sheet.
    • Or make your own with U-M GPT. Paste this, then paste your CSV header row after it.
    U-M GPT: generate dummy responses
    I am building a test copy of an intake form so I can develop an automation without touching real data. Here are the form's questions, as a CSV header. Generate 15 realistic fake responses as CSV rows with the same columns. Use fake names and @example.edu addresses. Make them varied and messy the way real submissions are: include one duplicate submission from the same person, one response with a required field left blank, one that answers two questions in one box, and one that is clearly outside what the form is for. Do not use any real person or organisation.

    Imported rows don't fire the form-submit trigger. That's fine. Step 4 handles it.

  3. IDEA pass on your sandbox 10 min

    Identify

    What does "done" look like for one submission?

    Document

    Source: the responses Sheet. Transformation: which fields become which output. Output: a doc, an email, a status column, a row in another sheet. What's fixed? What varies?

    Experiment

    The smallest version.

    Adjust

    What breaks?

  4. Have AI write the Apps Script 20 min

    Ask for two shapes

    Trigger on submit

    onFormSubmit: one new response, one output.

    Test it: submit a response by hand.

    Process the backlog

    Walks every row with an empty Status. Does the work. Writes "done" and a timestamp.

    You need this one: imported rows never fire the trigger.

    The prompt shape

    • Describe the columns.
    • Paste three sample rows.
    • Say what output you want.
    • Ask for the code and a plain-English explanation of each section.
    Prompt skeleton: fill in the brackets
    I have a Google Sheet of form responses (fake test data).
    The columns are: [list each column and what it holds].
    
    Here are three sample rows:
    [paste three rows]
    
    For each row I want: [the output: a status column, a doc, an email draft, a row in another sheet].
    
    Write a Google Apps Script with two functions:
    1. One that runs on form submit and handles the new response.
    2. One that processes the backlog: every row whose Status column is empty. It does the work, then writes "done" and a timestamp.
    
    Give me the code and a plain-English explanation of each section.

    Before you run it, three checks

    1. What is the loop?
    2. Where would a new field go?
    3. What tools and permissions does it need?
    Then run it. Paste it into Extensions → Apps Script and run. Authorize when asked. That screen is the permissions lesson, live. Read it: it lists every key you hand over.
    Speaker notes

    The authorization prompt is the payoff of the permissions talk at 2:30. "It acts as you." Ask a team to read their consent screen aloud.

  5. Hit the planted problems 5 min

    The duplicate The blank field Two answers in one box

    For each one, decide: a rule, or manual review?

    Add a needs review status, with a reason, rather than guessing.

No form in your project?

Skip the form. Paste the dummy file into U-M GPT: the requests inbox, the drive listing, or the two sheets. Add a short spec of what you want for each item. Ask for a table back.

Then the same IDEA pass, and the same traps check.

Two tracks

Pick one

Track A No install

  • Google Form + Sheet + Apps Script.
  • U-M GPT writes the script.
  • You read it, check it, run it.

Everyone can do this one.

Track B Agent on your laptop

  • Claude Code, Claude Cowork or Codex, only if your team already has one.
  • Work in a folder that holds only dummy data.
  • Give that folder a house-rules file: CLAUDE.md for Claude Code, AGENTS.md for Codex.
  • Keep it on ask-before-acting.

House rules and tool choice: 3 · Tools of the trade

The house rules I used for the demos
CLAUDE.md / AGENTS.md
# House rules for this folder

Everything in this folder is dummy data made for a workshop. Treat it as if it were real.

- Work only inside this folder. Don't read or write anywhere else.
- The CSV files you were given are originals. Never edit them; write new files next to them.
- Before you run any code, explain in plain English what it will do.
- Put exact checks (duplicates, blanks, formats, dates) in code. Use your own judgment only where I ask
  for it, and say which is which.
- When a row doesn't fit the rules, mark it "needs review" with a reason. Don't guess.
- Never send email, post, or upload anything.
Speaker notes

CAI said they want Claude Code and Codex experience. If they have it, point them at Track B. Everyone else: Track A.

Timer

45:00
Ready
45:00

NowPick your file. Build the form from the header.
  1. 45Pick your file. Build the form from the header.
  2. 40Form built. Fill it with dummies.
  3. 35Dummies in. Do the IDEA pass.
  4. 25IDEA done. Prompt the AI. Read the script. Three checks.
  5. 10Run it. Authorize. Hit the traps.
  6. 5Rule or manual review? Pick what you'll share.
  7. 0Time. Share-out is next.
Speaker notes

The timer keeps running if you click to another page and back. A small clock stays in the corner while it runs. Use −1 / +1 if we start late.

Stuck?

Three moves

Shrink the unit

One row. One field. One status. Get that to run first.

Paste the error back

Give the AI the exact error. Ask it to explain in plain English, then fix it.

Mark it and move on

Can't decide a row? Mark it needs review and keep going.

Speaker notes

At 4:05 call time and move to share-outs: three or four teams, two minutes each. What did you automate? What did it hit? What stays manual?

Our build log

saves as you type

Type as you go. It saves in this browser. The My notes button (bottom right) downloads everything from every page as one file.