Strategic Planning Canvases¶
Visual canvas frameworks for strategic planning and opportunity assessment. Each canvas type provides a structured approach to problem-solving and decision-making.
Canvas Types¶
Core Canvases¶
| Canvas | Framework | Use Case |
|---|---|---|
| Business Model Canvas | Osterwalder | Business model visualization (9-block) |
| Opportunity Solution Tree | Torres | Outcome-driven product discovery |
| Opportunity Canvas | Patton | Opportunity assessment (grid & flow views) |
| Opportunity Assessment | Cagan (SVPG) | 10-question go/no-go evaluation |
| OpportunitySpec | Patton + Cagan | Merged 12-box discovery + business case |
| Feature Canvas | Efimov | Feature definition and validation |
| Lean UX Canvas | Gothelf | Hypothesis-driven product design |
Shape Up (Basecamp)¶
| Canvas | Use Case |
|---|---|
| ShapeUp Pitch | Problem framing and appetite setting |
| ShapeUp Bet | Decision to commit resources |
| ShapeUp Scope | Scope hammering during build |
Continuous Discovery (Torres)¶
| Canvas | Use Case |
|---|---|
| Discovery Snapshot | Weekly discovery progress |
| Assumption Map | Risk/evidence tracking |
| Experience Map | Customer journey analysis |
Product Methodologies¶
| Canvas | Framework | Use Case |
|---|---|---|
| Lean Startup | Ries | Build-Measure-Learn experiments |
| Design Thinking | Stanford d.school | Empathize-Define-Ideate-Prototype-Test |
| Jobs-to-be-Done | Christensen/Ulwick | Job statements, outcomes, forces analysis |
Output Formats¶
Each canvas supports multiple rendering formats:
| Format | Extension | Description |
|---|---|---|
| D2 | .d2 | D2 diagram language text |
| SVG | .svg | Rendered vector graphics (via D2 CLI) |
| Mermaid | .mmd | Mermaid diagram syntax |
| Lit JSON | .lit.json | Structured data for Lit web components |
| HTML | .html | Interactive HTML viewer |
Quick Example¶
import (
"github.com/grokify/prism-roadmap/canvas"
"github.com/grokify/prism-roadmap/canvas/render"
)
// Create an Opportunity Solution Tree
ost := canvas.NewOpportunitySolutionTree("ost-1", "User Onboarding")
ost.Outcome = canvas.OSTOutcome{
ID: "O1",
Description: "Increase activation to 60%",
Metric: "% users completing onboarding",
Target: "60%",
}
// Wrap in Canvas container
c := canvas.NewOST(ost)
// Render to D2
d2Output, err := render.Render(c, render.FormatD2, render.OSTOptions())
// Render to Mermaid
mermaidOutput, err := render.Render(c, render.FormatMermaid, nil)
Rendering Options¶
Each canvas type has optimized default options:
// Core canvases
render.BMCOptions() // 9-block grid layout
render.OSTOptions() // Tree layout (top-down)
render.OpportunityOptions() // Flow view with arrows
render.OpportunityGridOptions() // BMC-style grid (no arrows)
render.FeatureOptions() // Grid layout
render.LeanUXOptions() // Grid layout
// Shape Up
render.ShapeUpPitchOptions() // Pitch sections layout
render.ShapeUpBetOptions() // Betting table layout
render.ShapeUpScopeOptions() // Hill chart + scopes
// Continuous Discovery
render.DiscoverySnapshotOptions() // Weekly snapshot layout
render.AssumptionMapOptions() // Risk/evidence quadrant
render.ExperienceMapOptions() // Timeline journey layout
// Product Methodologies
render.LeanStartupOptions() // Build-Measure-Learn cycle
render.DesignThinkingOptions() // 5-phase diamond layout
render.JTBDOptions() // Job map + forces layout
Architecture¶
graph TD
subgraph Core Canvases
BMC[Business Model Canvas]
OST[Opportunity Solution Tree]
OPP[Opportunity Canvas]
FEAT[Feature Canvas]
LUX[Lean UX Canvas]
end
subgraph Shape Up
PITCH[ShapeUp Pitch]
BET[ShapeUp Bet]
SCOPE[ShapeUp Scope]
end
subgraph Continuous Discovery
SNAP[Discovery Snapshot]
AMAP[Assumption Map]
EMAP[Experience Map]
end
subgraph Product Methodologies
LEAN[Lean Startup]
DT[Design Thinking]
JTBD[Jobs-to-be-Done]
end
subgraph Renderers
D2[D2 Renderer]
MMD[Mermaid Renderer]
MD[Markdown Renderer]
LIT[Lit Renderer]
SVG[D2-SVG Renderer]
end
subgraph Output
D2F[.d2 file]
SVGF[.svg file]
MMDF[.mmd file]
MDF[.md file]
JSONF[.lit.json]
end
BMC --> D2 --> D2F
OST --> D2
OPP --> D2
FEAT --> D2
LUX --> D2
PITCH --> D2
BET --> D2
SCOPE --> D2
SNAP --> D2
AMAP --> D2
EMAP --> D2
LEAN --> D2
DT --> D2
JTBD --> D2
D2F --> SVG --> SVGF
BMC --> MMD --> MMDF
OST --> MMD
JTBD --> MMD
BMC --> MD --> MDF
JTBD --> MD
BMC --> LIT --> JSONF
OST --> LIT Methodology Selection Guide¶
Choose the right framework based on your context:
When to Use Each Framework¶
| Framework | Best For | Key Strength | Team Size |
|---|---|---|---|
| Shape Up | Mature products, fixed teams | Time-boxed delivery (6 weeks) | Small (2-3) |
| Continuous Discovery | Ongoing products, dedicated PM | Weekly cadence, assumption testing | Any |
| Lean Startup | New ventures, high uncertainty | Build-Measure-Learn speed | Small |
| Design Thinking | Complex problems, user empathy | Divergent-convergent process | Cross-functional |
| Jobs-to-be-Done | Market research, positioning | Deep customer understanding | Research-focused |
| Opportunity Solution Tree | Feature prioritization | Outcome alignment | PM + team |
| Business Model Canvas | Business strategy | Holistic view | Leadership |
Decision Flowchart¶
Start
│
├─ Is this a new product/venture?
│ ├─ Yes → Lean Startup + JTBD
│ └─ No → Continue
│
├─ Do you have dedicated discovery time?
│ ├─ Yes (≥4 hrs/week) → Continuous Discovery
│ └─ No → Shape Up (pitches contain discovery)
│
├─ Is the problem space unclear?
│ ├─ Yes → Design Thinking + Experience Map
│ └─ No → Continue
│
├─ Do you need to prioritize opportunities?
│ ├─ Yes → OST + Opportunity Canvas
│ └─ No → Continue
│
└─ Ready to build?
├─ Shape Up → Pitch → Bet → Build (Scope)
└─ Traditional → Feature Canvas → PRD
Framework Combinations¶
Frameworks are designed to work together. Common combinations:
| Combination | Flow | Use Case |
|---|---|---|
| JTBD → OST → Shape Up | Research → Prioritize → Deliver | Full product cycle |
| Design Thinking → Lean Startup | Problem → Solution validation | New product discovery |
| Continuous Discovery + Shape Up | Parallel | Ongoing discovery + delivery |
| BMC + Opportunity Assessment | Strategy → Go/No-Go | Investment decisions |
| Experience Map → Feature Canvas | Journey → Feature spec | UX-driven development |
Integration Points¶
Each methodology connects through shared concepts:
graph LR
subgraph Discovery
JTBD[JTBD Jobs] --> OPP[Opportunities]
EXP[Experience Map] --> OPP
end
subgraph Prioritization
OPP --> OST[OST]
OST --> FEAT[Features]
end
subgraph Validation
FEAT --> LEAN[Experiments]
LEAN --> ASSUM[Assumptions]
end
subgraph Delivery
FEAT --> PITCH[Shape Up Pitch]
PITCH --> SCOPE[Scopes]
end PRD Integration¶
Canvases can link back to PRD elements:
opp := canvas.NewOpportunityCanvas("opp-1", "Mobile App")
opp.PRDRef = &canvas.PRDReference{
PRDID: "prd-mobile-app",
FeatureIDs: []string{"f-mobile-auth", "f-mobile-dashboard"},
RequirementIDs: []string{"FR-001", "FR-002"},
PersonaIDs: []string{"persona-manager", "persona-exec"},
}
Examples¶
See examples/canvas/ for complete examples:
examples/canvas/
├── bmc/
│ ├── bmc_example.json
│ ├── bmc_example.d2
│ ├── bmc_example.svg
│ └── bmc_example.html
├── ost/
├── opportunity/
│ ├── opportunity_example.json
│ ├── opportunity_grid_example.d2 # BMC-style grid
│ ├── opportunity_flow_example.d2 # Arrow-based flow
│ └── ...
├── feature/
├── leanux/
├── shapeup/
│ ├── pitch_example.json
│ ├── bet_example.json
│ └── scope_example.json
├── discovery/
│ ├── snapshot_example.json
│ ├── assumption_map_example.json
│ └── experience_map_example.json
├── leanstartup/
│ └── leanstartup_example.json
├── designthinking/
│ └── designthinking_example.json
└── jtbd/
└── jtbd_example.json