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_progressStep 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_reviewStep 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
→ launchStep 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_launchStep 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