# Google Forms Reflection Design — Workshop 2026 v2

**Purpose**: After **Theory (Step 3)**, trainees submit a quick quiz (~2–3 min, mostly multiple choice, auto-scored).  
**End of workshop**: one **final survey** (module ratings + overall + open feedback).

**Format (v2.0)**: **Multiple choice + checkboxes + linear scales** — minimal typing (name only).  
**Source of truth for questions**: [google-forms-manifest.yaml](google-forms-manifest.yaml)  
**Trainer grading**: [google-forms-reflection-answer-key.md](google-forms-reflection-answer-key.md) (best options + why)

**Based on**: [reflection-prompts.md](../reflection-prompts.md) · [module-delivery-pattern.md](../module-delivery-pattern.md)

---

## Why multiple choice first

| Benefit | Detail |
|---------|--------|
| Faster for trainees | ~2–3 min per form vs 5+ min for paragraphs |
| Easier in Sheets | Filter/count wrong answers; spot class misconceptions |
| Still sparks discussion | Wrong options are deliberate distractors — debrief in pairs |

**Trade-off**: Less nuance than open text. Keep **whiteboard** for 3–5 bullets; Form checks understanding.

---

## Question type mix (per module)

| Type | Use for |
|------|---------|
| **Multiple choice** | Single best answer |
| **Checkboxes** | Select all that apply / pick two; may include `other_option: true` for free-text |
| **Multiple choice grid** | Module 7 tool comparison |
| **Short answer** | Name only (global G1) |

No LINEAR_SCALE or paragraph questions in per-module reflections. **Exception**: final survey uses LINEAR_SCALE + one optional open-text field.

---

## Final workshop survey (`module: final`)

**When**: Last session or closing (after Mod 7, or after optional Mod 8–9 if delivered).  
**Time**: ~5 minutes · **Not** tied to Think & Discuss.

| ID | Type | Content |
|----|------|---------|
| G1 | Short answer | Name (global) |
| F.1 | Grid 1–5 | Rate Mod 0–9 (skip 8–9 if not attended) |
| F.2 | Scale 1–5 | Overall workshop rating |
| F.3 | Scale 1–5 | How much you took away |
| F.4 | Multiple choice | Would you recommend to a colleague? |
| F.5 | Multiple choice | Workshop pace (too fast / about right / too slow) |
| F.6 | Paragraph | Open suggestions (optional) |

**Facilitator**: Say once — *"Skip optional module rows if you didn't attend that track."* Link to Sheets for cohort averages.

```powershell
node create-forms.mjs --module final
```

---

## Deployment

| Option | Description |
|--------|-------------|
| **A — One form per module (recommended)** | QR after each section; ~2–3 min each |
| **B — Single journey form** | Page break per module |
| **C — Module 7 only** | Decision matrix only |
| **Final survey** | One form at end (`module: final` in manifest) |

### Automation (create-forms.mjs)

| Feature | Detail |
|---------|--------|
| **Quiz mode** | Mod 0–9: `quiz_mode: true` + [google-forms-grading.yaml](google-forms-grading.yaml) |
| **Final survey** | Normal form — no auto-score |
| **Banner** | Disabled (no header image); set `banner_image` in manifest to re-enable |
| **Drive folder** | `drive_folder` → `driveFolder.folderUrl` in `forms-output.json` |
| **Trainer answer key** | [google-forms-reflection-answer-key.md](google-forms-reflection-answer-key.md) via `node sync-grading-artifacts.mjs` |

Google Forms UI: **Settings → Quizzes** → release grades **Immediately after each submission**.

**Manual UI steps** (not available via Forms API v1):
- **Settings → Presentation** → enable **Show progress bar**
- **Settings → Responses** → enable **View results summary** (respondents can see aggregated results after submit)

> **API change (2026-06-30)**: Forms created via API default to unpublished. `create-forms.mjs` now calls `forms.setPublishSettings()` after creation to publish the form.

| Command | Purpose |
|---------|---------|
| `node create-forms.mjs --replace` | Delete old forms from output JSON, recreate |
| `node create-forms.mjs --organize-folder` | Move existing forms into `drive_folder` only |
| `node sync-grading-artifacts.mjs` | Refresh answer-key.md after grading YAML edits |

---

## Questions per module (summary)

| Mod | Form title (Google Form) | Questions | Mostly |
|-----|--------------------------|-----------|--------|
| 0 | Welcome & Setup | 7 + name | MC + pick-two checkbox |
| 1 | Data Engineering Fundamentals | 7 | MC |
| 2 | Databricks Pipeline | 6 | MC + checkbox |
| 3 | Snowflake Pipeline | 6 | MC |
| 4 | dbt Pipeline | 7 | MC + checkbox |
| 5 | Production Patterns | 7 | MC + checkbox |
| 6 | AI Features | 7 | MC + checkbox |
| 7 | Power BI Payoff & Tool Discussion | 10 + grids | MC + checkbox + 3 grids |
| 8 | Streaming Data Processing (optional) | 6 | MC |
| 9 | Machine Learning (optional) | 7 | MC + checkbox |
| **Final** | 6 + name + grid | Per-module grid + overall + takeaway + recommend + pace + open text |

Full wording and options: **[google-forms-manifest.yaml](google-forms-manifest.yaml)**

---

## API, GCP, manual build

See [google-forms-gcp-setup-guide.md](google-forms-gcp-setup-guide.md) and [README.md](README.md).

```powershell
cd workshop-2026-v2/trainer/google-forms
npm install
node create-forms.mjs --dry-run
node create-forms.mjs --replace
```

**Note**: A plain `node create-forms.mjs` creates **duplicate** forms. Prefer **`--replace`** after manifest or grading changes. **`--delete-only`** removes forms in `forms-output.json` without recreating.

---

## Document history

| Date | Change |
|------|--------|
| 2026-05-31 | Initial design (mixed paragraph + MC) |
| 2026-05-31 | **v2.0** — multiple-choice first; manifest is source of truth |
| 2026-05-31 | **Final survey** — module grid + overall + takeaway + open suggestions |
| 2026-05-31 | **Quiz mode** + google-forms-grading.yaml + auto-score via create-forms.mjs |
| 2026-05-31 | Docs: Drive folder, script commands, organize-folder |
