name: meeting-optimization-audit-runner description: > Runs the monthly meeting optimization audit — inventories all recurring meetings, flags drift and scope creep, builds structured agendas for any session that lacks one, and commits to at least one concrete calendar change. End of first week each month. metadata: author: "Kathryn Brown, Practice Builders" version: "1.0.0" date: "2026-04-28" sop: "Meeting Optimization Audit" category: "Operations & Admin" frequency: "Monthly" estimated-time: "30 min" trigger: "End of first week each month"
Meeting Optimization Audit — Runner
You are executing the Meeting Optimization Audit SOP for an independent consultant. Meetings are the largest single consumer of billable capacity in a solo practice, and the least audited. Without a monthly review, recurring calls that outlived their purpose stay on the calendar indefinitely, sessions drift longer than they should, and you lose hours per week to conversations that produce no documented decisions.
Do not skip steps. Do not ask questions across multiple turns — collect everything upfront.
What you'll have when this is done: A current meeting inventory with total weekly hours calculated, structured agendas ready for any upcoming meetings that lacked them, and at least one concrete change to your recurring meeting schedule — a cancellation, a shortening, or a restructure to async.
Step 1: Collect All Inputs
Ask the user for the following in a single prompt. Accept whatever detail level they provide — flag gaps but keep moving.
Recurring Meeting Inventory — for each recurring meeting currently on the calendar:
- Client name or internal purpose
- Duration (scheduled length)
- Cadence (weekly, biweekly, monthly)
- Whether the meeting has a standing agenda (yes / no)
Prior Month Session Notes:
- For each client meeting held in the prior month: did it run over its scheduled slot? If so, by how many minutes?
- Any meetings where no decisions were documented afterward
Meeting Hours Summary:
- Total weekly hours spent in meetings (all types — client, internal, admin)
- Total working hours per week (the denominator)
- Rough split: billable meeting hours vs. non-billable meeting hours
Upcoming Meetings Needing Agendas:
- For any upcoming meeting that lacks a standing agenda, provide:
- Client name
- Meeting type (kickoff, status, strategy, review, ad hoc)
- Intended outcome (what "done" looks like for that session)
- Key topics or decisions needed
- Attendees (names and roles)
- Session length (in minutes)
- Date and time (if known)
If the user doesn't have exact numbers for meeting hours, accept estimates and note where precision would improve the analysis.
Step 2: Build the Meeting Inventory
Using the recurring meeting data from Step 1, produce a complete inventory table.
2A. Recurring Meeting Table
| Meeting / Client | Duration | Cadence | Weekly Hours | Has Agenda? |
|---|---|---|---|---|
| [Name] | [X min] | [Weekly/Biweekly/Monthly] | [X hrs] | [Yes/No] |
| Total | [X hrs] |
Weekly Hours calculation: Convert each meeting to its weekly equivalent. A 60-minute biweekly call = 0.5 hrs/week. A 30-minute weekly call = 0.5 hrs/week. A 60-minute monthly call = 0.25 hrs/week. Show exact math, don't round.
2B. The Necessity Test
For each recurring meeting, apply the core test: If this meeting didn't exist, would the engagement suffer?
| Meeting / Client | Verdict | Rationale |
|---|---|---|
| [Name] | Keep / Restructure / Cancel | [1 sentence — why] |
Rules for the test:
- If the answer is "no" — flag for restructuring or cancellation.
- If the answer requires more than 10 seconds to construct — flag for restructuring. Meetings that need a paragraph to justify their existence are meetings that have drifted.
- If the answer is an immediate, clear "yes" — keep, but still check duration and cadence in the next step.
Step 3: Flag Scope Creep Signals
Review the session notes from the prior month. Flag any meeting that ran more than 15 minutes over its scheduled slot.
3A. Overrun Table
| Meeting / Client | Scheduled | Actual | Overrun | Frequency (times in past month) |
|---|---|---|---|---|
| [Name] | [X min] | [X min] | [+X min] | [X of Y sessions] |
For each overrun, provide a brief diagnosis:
- Missing endpoint: No defined outcome — the meeting runs until someone stops talking
- Scope creep: Topics outside the meeting's purpose are filling the time
- Understated duration: The meeting genuinely needs more time — the slot is too short
- No agenda: Without a structure, the meeting expands to fill whatever time is available
3B. No-Decision Meetings
List any meeting from the prior month where no decisions were documented afterward. These are the most expensive meetings in a solo practice — they consumed time, produced no forward motion, and will likely repeat next month.
| Meeting / Client | Date | Topics Covered | Decisions Made |
|---|---|---|---|
| [Name] | [Date] | [Topics] | None documented |
Rule: A meeting with no decisions is a status update. Status updates don't need meetings — they need a shared document or a 3-sentence email.
Step 4: Build Agendas for Unstructured Meetings (Meeting Agenda Builder — Condensed)
For each upcoming meeting identified in Step 1 as lacking a standing agenda, build a structured agenda using the following framework.
4A. Item Categorization
Review the user's topic list for each meeting and categorize:
- Decision items — something must be decided. State as a question: "Do we [specific choice]?" Priority and more time.
- Update items — someone shares information. Strict time boxes (2-5 min max).
- Discussion items — open-ended exploration, no required decision. Only include if time permits after decisions and updates.
- Parking lot candidates — topics that don't belong in this meeting. Flag with a reason.
| Item | Category | Owner | Proposed Time |
|---|---|---|---|
| [Topic] | Decision / Update / Discussion / Parking Lot | [Name] | [X min] |
4B. Agenda Structure
Build in this order:
- Opening (1-2 min) — State purpose, confirm agenda.
- Decision items (first half) — highest priority first. Each gets: question, context (1-2 sentences), time allocation, owner, decider.
- Update items (middle) — strict time boxes. Each gets: coverage, owner, time box.
- Discussion items (if time permits) — time-boxed with framing question and hard stop.
- Closing (3-5 min) — always protected. Recap decisions, assign actions, confirm deadlines.
Sequencing rules:
- Decisions in the first half — people are sharpest at the start.
- No single item consumes more than 40% of total meeting time. If it needs more, it needs its own meeting.
- Build in 2-3 minutes of buffer.
- If total required time exceeds available time: cut discussion items first, then reduce update time boxes. Never cut closing time.
- If a meeting has zero decision items, flag it: "This meeting may not need to be a meeting. Consider converting to an async update."
4C. Decision Framework
For each decision item:
- The question — yes/no or A/B where possible. Not "what should we do about marketing?" but "do we invest in LinkedIn ads this quarter or hold the budget?"
- Context — 1-2 sentences max. If more context is needed, send a pre-read.
- Options on the table — name 2-3 options explicitly.
- Who decides — the person with final authority.
4D. Closing Template
**Decisions made:**
- [Decision 1]: [Outcome]
- [Decision 2]: [Outcome]
**Action items:**
- [Action] — Owner: [Name] — Due: [Date]
- [Action] — Owner: [Name] — Due: [Date]
**Parked for next meeting:**
- [Topic] — Reason: [Why deferred]
**Next meeting:** [Date/time if recurring]
4E. Output Format per Agenda
# Meeting Agenda: [Meeting Name]
**Date:** [Date] | **Time:** [Start - End] | **Duration:** [X min] | **Location:** [Room/Link]
## Purpose
[One sentence: why this meeting exists and what "done" looks like.]
## Attendees
- [Name] — [Role/reason for being here]
---
## Agenda
**1. Opening** [2 min] — [Facilitator]
Confirm agenda, note any additions.
**2. [Decision: Question to decide]** [X min] — [Owner]
Context: [1-2 sentences]
Options: [A] / [B] / [C]
Decider: [Name]
**3. [Update: Topic]** [X min] — [Owner]
Covers: [What this update includes]
**4. [Discussion: Topic]** [X min] — [Owner]
Framing question: [The specific question to explore]
**5. Closing** [3 min] — [Facilitator]
---
## Decisions Made
- [ ] [Decision 1]: ___
## Action Items
| Action | Owner | Due |
|--------|-------|-----|
| [Action] | [Name] | [Date] |
## Parked
- [Topic deferred and why]
Agenda quality checks (run internally, never shown):
| Check | Question |
|---|---|
| Time math | Do time allocations add up to total meeting length (with 2-3 min buffer)? |
| Decision-first | Are all decision items in the first half? |
| Owners assigned | Does every item have a named owner? |
| Closing protected | Is closing allocated at least 3 minutes? |
| No orphan discussions | Are discussion items included only after all decision and update items fit? |
Fix the weakest section before presenting.
Delivery rule: Send each agenda to the client at least 24 hours before the session. An agenda that exists but isn't shared before the meeting doesn't change behavior.
Step 5: Calculate Meeting Load and Commit to a Change
5A. Meeting Load Summary
| Metric | Value |
|---|---|
| Total weekly meeting hours | [X] hrs |
| Total working hours per week | [X] hrs |
| Meeting load percentage | [X]% |
| Billable meeting hours | [X] hrs |
| Non-billable meeting hours | [X] hrs |
Threshold: If meetings account for more than a third (33%) of working hours, a change is mandatory — not optional.
5B. Concrete Change Commitment
Based on the inventory (Step 2), necessity test (Step 2B), overrun analysis (Step 3), and meeting load (Step 5A), commit to at least one concrete change before next month's audit:
| Change Type | Meeting / Client | Current State | New State | Effective Date |
|---|---|---|---|---|
| Cancel | [Name] | [X min, cadence] | Removed from calendar | [Date] |
| Shorten | [Name] | [X min] | [Y min] | [Date] |
| Reduce cadence | [Name] | [Weekly] | [Biweekly] | [Date] |
| Convert to async | [Name] | [X min meeting] | [Email/shared doc update] | [Date] |
Rule: Every audit produces at least one decision. Identifying that a recurring call could be shortened and then leaving it unchanged is not a completed audit — it's a note to yourself that you'll ignore.
5C. Projected Impact
Show the math:
- Current weekly meeting hours: [X] hrs
- After committed change(s): [Y] hrs
- Hours reclaimed per week: [X - Y] hrs
- Hours reclaimed per month: [(X - Y) x 4] hrs
- New meeting load percentage: [Y / total working hours]%
Step 6: Assemble the Monthly Meeting Optimization Audit
Present one unified document containing:
# Meeting Optimization Audit
## [Month, Year]
### Meeting Inventory
[Table from Step 2A]
### Necessity Test Results
[Table from Step 2B — Keep / Restructure / Cancel for each meeting]
### Scope Creep Signals
[Overrun table from Step 3A with diagnoses]
[No-decision meeting list from Step 3B]
### Meeting Load
[Summary table from Step 5A]
[Threshold assessment — above or below 33%]
### Agendas Built This Month
[List each agenda created in Step 4, or "All recurring meetings have standing agendas"]
### Committed Changes
[Change commitment table from Step 5B]
[Projected impact from Step 5C]
### SOPs to Trigger
- [ ] Meeting Agenda Builder — [for any future meetings identified without agendas]
Quality Check
| Check | Pass? |
|---|---|
| Every recurring meeting from the input appears in the inventory table | |
| Weekly hours calculated correctly (duration x frequency converted to weekly equivalent) | |
| Necessity test applied to every recurring meeting, not just the ones that feel excessive | |
| Overrun analysis uses the 15-minute threshold — not 10, not 20 | |
| No-decision meetings flagged explicitly with conversion recommendation | |
| Meeting load percentage calculated against total working hours, not billable hours | |
| 33% threshold applied — if above, change commitment is mandatory | |
| At least one concrete change committed (cancel, shorten, reduce cadence, or convert to async) | |
| Every agenda built follows decision-first sequencing | |
| Every agenda item has an owner, a time box, and a verb | |
| Closing section allocated at least 3 minutes in every agenda | |
| Time allocations in each agenda add up to meeting length (with 2-3 min buffer) | |
| Agendas include delivery instruction: send 24 hours before the session | |
| Projected impact shows exact hours reclaimed, not vague "some time saved" | |
| Dollar signs escaped as \$ for Notion compatibility |
Identify the weakest section. Rewrite it. Verify the rewrite before presenting.
Rules
- Every audit produces at least one decision. Auditing the calendar but not making any changes is not a completed SOP. Cancel, shorten, reduce cadence, or convert to async — pick one and commit.
- Collect all inputs in one pass. Do not scatter prompts across multiple turns. Ask once, flag gaps, keep moving.
- Apply the necessity test to every meeting, not just the ones that feel excessive. The meetings you assume are fine are the ones most likely to have drifted.
- 15 minutes over is the scope creep threshold. A meeting that consistently runs 15+ minutes over its scheduled slot lacks a defined endpoint or outcome.
- A meeting with no decisions is a status update. Status updates don't need meetings — they need a shared document or a short email. Flag and recommend conversion.
- Agendas that aren't shared don't count. Creating an agenda template but not sending it in advance doesn't change behavior. Send it 24 hours before the session.
- Decisions go first in every agenda. Updates second, discussions last. No exceptions. People are sharpest at the start.
- Every agenda item needs three things: an owner, a time box, and a verb. Decide, update, discuss. Missing any one and the item will drift.
- Never allow a single agenda item to consume more than 40% of total meeting time. If it needs more, it needs its own meeting.
- Never cut closing time. If the agenda is too long, cut discussion items first, then reduce update time boxes. Closing — decisions, actions, deadlines — is always protected.
- If a meeting has zero decision items, question whether it needs to be a meeting at all. A meeting with no decisions is a presentation — send a document.
- Watch for recurring update items with no decisions attached. That's a status update masquerading as a meeting. Convert to async.
- Escape dollar signs as \$ for Notion compatibility.
- If data is incomplete, work with what's available and note assumptions. Never fabricate meeting counts or hours.
Copyright (c) 2026 Kathryn Brown, Practice Builders Licensed under the Practice Builders Skill License v1.0 See https://practicebuilders.ai/license for terms.
This skill is part of the Consulting Practice SOP Manual, a Practice Builders product. Redistribution, resale, or derivative use without written permission is prohibited.