Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Course / Program Launch

Launching a new course, certification, or workshop involves product, content, engineering, and marketing — all needing to coordinate over weeks. This procedure replaces a project manager by creating the project plan, tracking progress with weekly check-ins, running a go/no-go review, and monitoring post-launch metrics.

Use it when: You're launching a new learning product — a course, certification, workshop, or learning path — and need cross-functional coordination without a dedicated PM.

What makes it interesting: It creates a full Linear project broken down by function (content, engineering, marketing), posts automated weekly progress updates, runs a formal go/no-go review that can loop back if there are blockers, and follows up a week after launch with enrollment metrics.


Walkthrough

Header

id: course-launch
version: 1
trigger: manual
category: Operations
 
# Course / Program Launch
 
Coordinate a new course or learning program from concept through launch. Involves
product, content, engineering, marketing, and sometimes external instructors.

Input

The inputs capture the course details and who's driving it. The has_external_instructor flag triggers extra steps for instructor agreements and content review.

## Input
 
| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| name | string | yes | | Course or program name |
| type | string | yes | | course / certification / workshop / learning-path |
| owner | string | yes | | Product/content owner driving this |
| target_launch | date | yes | | Target launch date |
| audience | string | yes | | Who this is for |
| description | string | yes | | What learners will get out of it |
| has_external_instructor | boolean | no | false | External instructor involved? |
| channel | string | no | #product | Slack channel for updates |

State

## State
 
| Field | Storage | Description |
|-------|---------|-------------|
| launch_record | Notion DB row | Row in Product Launches database |
| checklist | Notion DB | Launch checklist tasks |
| linear_project | invocation | Linear project URL |
| current_step | invocation | Where we are |

Steps

Step 1 — Kickoff. Create the launch record, spin up a Linear project, and populate it with issues grouped by function. If there's an external instructor, additional tasks are added.

### kickoff
 
Create a row in **Product Launches** database with name, type, owner, target
date, audience, and status "Planning".
 
Create a Linear project: "{input.name} Launch"
 
Create Linear issues grouped by function:
 
**Content:**
- Write course outline / syllabus
- Create lesson content (modules, exercises, assessments)
- Review content for accuracy and pedagogy
- Create supplementary materials
 
**Engineering:**
- Set up course in LMS / platform
- Configure enrollment flow
- Test end-to-end learner experience
- Set up analytics / tracking
 
**Marketing:**
- Write landing page copy
- Create promotional assets
- Set up launch email sequence
- Prep launch announcement
 
**If external instructor:**
- Finalize instructor agreement
- Record / review instructor content
- Set up instructor payment
 
Post in {input.channel}:
> 🚀 Kicking off: **{input.name}** ({input.type})
> Owner: {input.owner} | Target: {input.target_launch}
> Linear project: [link] | Checklist: [link]
 
→ track_progress

Step 2 — Track progress. Every Monday, the procedure checks Linear and the checklist, then posts an automated status update. It DMs the owner about anything blocked or overdue.

### track_progress
 
**Wait until**: {input.target_launch} - 14d
 
Weekly check-in every Monday:
- Query Linear project for issue status
- Query launch checklist for completion %
- Post in {input.channel}:
  > **{input.name} launch update** — X% complete
  > ✅ Done: [items] · 🔄 In progress: [items] · ⚠️ Blocked: [items]
  > N days until launch.
 
DM {input.owner} about blocked or overdue items.
 
**On event** `ready_for_review` → pre_launch_review
 
→ pre_launch_review

Step 3 — Pre-launch review. A formal go/no-go. If the team flags blockers, it loops back to tracking.

### pre_launch_review
 
Update status to "In Review".
 
Post in {input.channel}:
> 🔍 **Pre-launch review for {input.name}**
> Content: X/Y · Engineering: X/Y · Marketing: X/Y
> **Go / No-go?** React 🟢 for go, 🔴 for blockers.
 
**Wait**: 3d
- **On event** `go` → launch
- **On event** `no_go`: Flag blockers, DM owner, → track_progress
 
→ launch

Step 4 — Launch. Go live, announce to the company, trigger email sequences.

### launch
 
Update status to "Launched". Set Launch Date to today.
 
Post in #general:
> 🎉 **{input.name}** is live! {input.description}
 
Trigger launch email sequence. Draft social posts for approval.
 
DM {input.owner}: "Congrats! Monitor enrollment and feedback this week."
 
→ post_launch

Step 5 — Post-launch monitoring. Wait a week, then gather and report metrics.

### post_launch
 
**Wait**: 7d after launch
 
Gather and post metrics:
> 📊 **{input.name} — Week 1 Report**
> Enrollments: X | Feedback: [highlights] | Issues: X (Y resolved)
 
DM {input.owner} with recommendations.
 
→ done ✓

Output

## Output
 
| Field | Type | Description |
|-------|------|-------------|
| launch_date | date | Actual launch date |
| linear_project_url | string | Linear project URL |
| enrollments_week_1 | number | First week enrollments |
| checklist_completion | object | { completed, total } |
| days_to_launch | number | Days from kickoff to launch |

Key Patterns

This procedure demonstrates patterns you can reuse:

  • Cross-functional coordination — content, engineering, and marketing tracked in one project
  • Weekly progress tracking — automated Slack updates every Monday
  • Go/no-go review — formal checkpoint that can loop back if blockers exist
  • Post-launch monitoring — metrics collection a week after launch
  • Conditional steps — extra tasks when an external instructor is involved
View full procedure file →