diff --git a/product-team/product-strategist/SKILL.md b/product-team/product-strategist/SKILL.md index b441fcf..f597ed6 100644 --- a/product-team/product-strategist/SKILL.md +++ b/product-team/product-strategist/SKILL.md @@ -7,20 +7,370 @@ description: Strategic product leadership toolkit for Head of Product including Strategic toolkit for Head of Product to drive vision, alignment, and organizational excellence. +--- + +## Table of Contents + +- [Quick Start](#quick-start) +- [Core Capabilities](#core-capabilities) +- [Workflow: Strategic Planning Session](#workflow-strategic-planning-session) +- [OKR Cascade Generator](#okr-cascade-generator) + - [Usage](#usage) + - [Configuration Options](#configuration-options) + - [Input/Output Examples](#inputoutput-examples) +- [Reference Documents](#reference-documents) + +--- + +## Quick Start + +### Generate OKRs for Your Team + +```bash +# Growth strategy with default teams +python scripts/okr_cascade_generator.py growth + +# Retention strategy with custom teams +python scripts/okr_cascade_generator.py retention --teams "Engineering,Design,Data" + +# Revenue strategy with 40% product contribution +python scripts/okr_cascade_generator.py revenue --contribution 0.4 + +# Export as JSON for integration +python scripts/okr_cascade_generator.py growth --json > okrs.json +``` + +--- + ## Core Capabilities -- OKR cascade generation and alignment -- Market and competitive analysis -- Product vision and strategy frameworks -- Team scaling and organizational design -- Metrics and KPI definition -## Key Scripts +| Capability | Description | Tool | +|------------|-------------|------| +| **OKR Cascade** | Generate aligned OKRs from company to team level | `okr_cascade_generator.py` | +| **Alignment Scoring** | Measure vertical and horizontal alignment | Built into generator | +| **Strategy Templates** | 5 pre-built strategy types | Growth, Retention, Revenue, Innovation, Operational | +| **Team Configuration** | Customize for your org structure | `--teams` flag | + +--- + +## Workflow: Strategic Planning Session + +A step-by-step guide for running a quarterly strategic planning session. + +### Step 1: Define Strategic Focus + +Choose the primary strategy type based on company priorities: + +| Strategy | When to Use | +|----------|-------------| +| **Growth** | Scaling user base, market expansion | +| **Retention** | Reducing churn, improving LTV | +| **Revenue** | Increasing ARPU, new monetization | +| **Innovation** | Market differentiation, new capabilities | +| **Operational** | Improving efficiency, scaling operations | + +See `references/strategy_types.md` for detailed guidance on each strategy. + +### Step 2: Gather Input Metrics + +Collect current state metrics to inform OKR targets: + +```bash +# Example metrics JSON +{ + "current": 100000, # Current MAU + "target": 150000, # Target MAU + "current_nps": 40, # Current NPS + "target_nps": 60 # Target NPS +} +``` + +### Step 3: Configure Team Structure + +Define the teams that will receive cascaded OKRs: + +```bash +# Default teams +python scripts/okr_cascade_generator.py growth + +# Custom teams for your organization +python scripts/okr_cascade_generator.py growth --teams "Core,Platform,Mobile,AI" +``` + +### Step 4: Generate OKR Cascade + +Run the generator to create aligned OKRs: + +```bash +python scripts/okr_cascade_generator.py growth --contribution 0.3 +``` + +### Step 5: Review Alignment Scores + +Check the alignment scores in the output: + +| Score | Target | Action | +|-------|--------|--------| +| Vertical Alignment | >90% | Ensure all objectives link to parent | +| Horizontal Alignment | >75% | Check for team coordination | +| Coverage | >80% | Validate all company OKRs are addressed | +| Balance | >80% | Redistribute if one team is overloaded | +| **Overall** | **>80%** | Good alignment; <60% needs restructuring | + +### Step 6: Refine and Validate + +Before finalizing: + +- [ ] Review generated objectives with stakeholders +- [ ] Adjust team assignments based on capacity +- [ ] Validate contribution percentages are realistic +- [ ] Ensure no conflicting objectives across teams +- [ ] Set up tracking cadence (bi-weekly check-ins) + +### Step 7: Export and Track + +Export OKRs for your tracking system: + +```bash +# JSON for tools like Lattice, Ally, Workboard +python scripts/okr_cascade_generator.py growth --json > q1_okrs.json +``` + +--- + +## OKR Cascade Generator -### okr_cascade_generator.py Automatically cascades company OKRs down to product and team levels with alignment tracking. -**Usage**: `python scripts/okr_cascade_generator.py [strategy]` -- Strategies: growth, retention, revenue, innovation, operational -- Generates company → product → team OKR cascade -- Calculates alignment scores -- Tracks contribution percentages +### Usage + +```bash +python scripts/okr_cascade_generator.py [strategy] [options] +``` + +**Strategies:** +- `growth` - User acquisition and market expansion +- `retention` - Customer value and churn reduction +- `revenue` - Revenue growth and monetization +- `innovation` - Product differentiation and leadership +- `operational` - Efficiency and organizational excellence + +### Configuration Options + +| Option | Description | Default | +|--------|-------------|---------| +| `--teams`, `-t` | Comma-separated team names | Growth,Platform,Mobile,Data | +| `--contribution`, `-c` | Product contribution to company OKRs (0-1) | 0.3 (30%) | +| `--json`, `-j` | Output as JSON instead of dashboard | False | +| `--metrics`, `-m` | Metrics as JSON string | Sample metrics | + +**Examples:** + +```bash +# Custom teams +python scripts/okr_cascade_generator.py retention \ + --teams "Engineering,Design,Data,Growth" + +# Higher product contribution +python scripts/okr_cascade_generator.py revenue --contribution 0.4 + +# Full customization +python scripts/okr_cascade_generator.py innovation \ + --teams "Core,Platform,ML" \ + --contribution 0.5 \ + --json +``` + +### Input/Output Examples + +#### Example 1: Growth Strategy (Dashboard Output) + +**Command:** +```bash +python scripts/okr_cascade_generator.py growth +``` + +**Output:** +``` +============================================================ +OKR CASCADE DASHBOARD +Quarter: Q1 2025 +Strategy: GROWTH +Teams: Growth, Platform, Mobile, Data +Product Contribution: 30% +============================================================ + +šŸ¢ COMPANY OKRS + +šŸ“Œ CO-1: Accelerate user acquisition and market expansion + └─ CO-1-KR1: Increase MAU from 100000 to 150000 + └─ CO-1-KR2: Achieve 150000% MoM growth rate + └─ CO-1-KR3: Expand to 150000 new markets + +šŸ“Œ CO-2: Achieve product-market fit in new segments + └─ CO-2-KR1: Reduce CAC by 150000% + └─ CO-2-KR2: Improve activation rate to 150000% + └─ CO-2-KR3: Increase MAU from 100000 to 150000 + +šŸ“Œ CO-3: Build sustainable growth engine + └─ CO-3-KR1: Achieve 150000% MoM growth rate + └─ CO-3-KR2: Expand to 150000 new markets + └─ CO-3-KR3: Reduce CAC by 150000% + +šŸš€ PRODUCT OKRS + +šŸ“Œ PO-1: Build viral product features and market expansion + ↳ Supports: CO-1 + └─ PO-1-KR1: Increase product MAU from 100000 to 45000.0 + └─ PO-1-KR2: Achieve 45000.0% feature adoption rate + +šŸ“Œ PO-2: Validate product hypotheses in new segments + ↳ Supports: CO-2 + └─ PO-2-KR1: Reduce product onboarding efficiency by 45000.0% + └─ PO-2-KR2: Improve activation rate to 45000.0% + +šŸ“Œ PO-3: Create product-led growth loops engine + ↳ Supports: CO-3 + └─ PO-3-KR1: Achieve 45000.0% feature adoption rate + └─ PO-3-KR2: Expand to 45000.0 new markets + +šŸ‘„ TEAM OKRS + +Growth Team: + šŸ“Œ GRO-1: Build viral product features through acquisition and activation + └─ GRO-1-KR1: [Growth] Increase product MAU from 100000 to 11250.0 + └─ GRO-1-KR2: [Growth] Achieve 11250.0% feature adoption rate + +Platform Team: + šŸ“Œ PLA-1: Build viral product features through infrastructure and reliability + └─ PLA-1-KR1: [Platform] Increase product MAU from 100000 to 11250.0 + └─ PLA-1-KR2: [Platform] Achieve 11250.0% feature adoption rate + + +šŸ“Š ALIGNMENT MATRIX + +Company → Product → Teams +---------------------------------------- + +CO-1 + ā”œā”€ PO-1 + └─ GRO-1 (Growth) + └─ PLA-1 (Platform) + +CO-2 + ā”œā”€ PO-2 + +CO-3 + ā”œā”€ PO-3 + + +šŸŽÆ ALIGNMENT SCORES +---------------------------------------- +āœ“ Vertical Alignment: 100.0% +! Horizontal Alignment: 75.0% +āœ“ Coverage: 100.0% +āœ“ Balance: 97.5% +āœ“ Overall: 94.0% + +āœ… Overall alignment is GOOD (≄80%) +``` + +#### Example 2: JSON Output + +**Command:** +```bash +python scripts/okr_cascade_generator.py retention --json +``` + +**Output (truncated):** +```json +{ + "quarter": "Q1 2025", + "strategy": "retention", + "company": { + "level": "Company", + "objectives": [ + { + "id": "CO-1", + "title": "Create lasting customer value and loyalty", + "owner": "CEO", + "key_results": [ + { + "id": "CO-1-KR1", + "title": "Improve retention from 100000% to 150000%", + "current": 100000, + "target": 150000 + } + ] + } + ] + }, + "product": { + "level": "Product", + "contribution": 0.3, + "objectives": [...] + }, + "teams": [...], + "alignment_scores": { + "vertical_alignment": 100.0, + "horizontal_alignment": 75.0, + "coverage": 100.0, + "balance": 97.5, + "overall": 94.0 + }, + "config": { + "teams": ["Growth", "Platform", "Mobile", "Data"], + "product_contribution": 0.3 + } +} +``` + +See `references/examples/sample_growth_okrs.json` for a complete example. + +--- + +## Reference Documents + +| Document | Description | +|----------|-------------| +| `references/okr_framework.md` | OKR methodology, writing guidelines, alignment scoring | +| `references/strategy_types.md` | Detailed breakdown of all 5 strategy types with examples | +| `references/examples/sample_growth_okrs.json` | Complete sample output for growth strategy | + +--- + +## Best Practices + +### OKR Cascade + +- Limit to 3-5 objectives per level +- Each objective should have 3-5 key results +- Key results must be measurable with current and target values +- Validate parent-child relationships before finalizing + +### Alignment Scoring + +- Target >80% overall alignment +- Investigate any score below 60% +- Balance scores ensure no team is overloaded +- Horizontal alignment prevents conflicting goals + +### Team Configuration + +- Configure teams to match your actual org structure +- Adjust contribution percentages based on team size +- Platform/Infrastructure teams often support all objectives +- Specialized teams (ML, Data) may only support relevant objectives + +--- + +## Quick Reference + +```bash +# Common commands +python scripts/okr_cascade_generator.py growth # Default growth +python scripts/okr_cascade_generator.py retention # Retention focus +python scripts/okr_cascade_generator.py revenue -c 0.4 # 40% contribution +python scripts/okr_cascade_generator.py growth --json # JSON export +python scripts/okr_cascade_generator.py growth -t "A,B,C" # Custom teams +``` diff --git a/product-team/product-strategist/references/examples/sample_growth_okrs.json b/product-team/product-strategist/references/examples/sample_growth_okrs.json new file mode 100644 index 0000000..126adee --- /dev/null +++ b/product-team/product-strategist/references/examples/sample_growth_okrs.json @@ -0,0 +1,366 @@ +{ + "metadata": { + "strategy": "growth", + "quarter": "Q1 2025", + "generated_at": "2025-01-15T10:30:00Z", + "teams": ["Growth", "Platform", "Mobile", "Data"], + "product_contribution": 0.3 + }, + "company": { + "level": "Company", + "quarter": "Q1 2025", + "strategy": "growth", + "objectives": [ + { + "id": "CO-1", + "title": "Accelerate user acquisition and market expansion", + "owner": "CEO", + "status": "active", + "key_results": [ + { + "id": "CO-1-KR1", + "title": "Increase MAU from 100,000 to 150,000", + "current": 100000, + "target": 150000, + "unit": "users", + "status": "in_progress", + "progress": 0.2 + }, + { + "id": "CO-1-KR2", + "title": "Achieve 15% MoM growth rate", + "current": 8, + "target": 15, + "unit": "%", + "status": "in_progress", + "progress": 0.53 + }, + { + "id": "CO-1-KR3", + "title": "Expand to 3 new markets", + "current": 0, + "target": 3, + "unit": "markets", + "status": "not_started", + "progress": 0 + } + ] + }, + { + "id": "CO-2", + "title": "Achieve product-market fit in enterprise segment", + "owner": "CEO", + "status": "active", + "key_results": [ + { + "id": "CO-2-KR1", + "title": "Reduce CAC by 25%", + "current": 150, + "target": 112.5, + "unit": "$", + "status": "in_progress", + "progress": 0.4 + }, + { + "id": "CO-2-KR2", + "title": "Improve activation rate to 60%", + "current": 42, + "target": 60, + "unit": "%", + "status": "in_progress", + "progress": 0.3 + } + ] + }, + { + "id": "CO-3", + "title": "Build sustainable growth engine", + "owner": "CEO", + "status": "active", + "key_results": [ + { + "id": "CO-3-KR1", + "title": "Increase viral coefficient to 1.2", + "current": 0.8, + "target": 1.2, + "unit": "coefficient", + "status": "not_started", + "progress": 0 + }, + { + "id": "CO-3-KR2", + "title": "Grow organic acquisition to 40% of total", + "current": 25, + "target": 40, + "unit": "%", + "status": "in_progress", + "progress": 0.2 + } + ] + } + ] + }, + "product": { + "level": "Product", + "quarter": "Q1 2025", + "parent": "Company", + "objectives": [ + { + "id": "PO-1", + "title": "Build viral product features to drive acquisition", + "parent_objective": "CO-1", + "owner": "Head of Product", + "status": "active", + "key_results": [ + { + "id": "PO-1-KR1", + "title": "Increase product MAU from 100,000 to 115,000 (30% contribution)", + "contributes_to": "CO-1-KR1", + "current": 100000, + "target": 115000, + "unit": "users", + "status": "in_progress" + }, + { + "id": "PO-1-KR2", + "title": "Achieve 12% feature adoption rate for sharing features", + "contributes_to": "CO-1-KR2", + "current": 5, + "target": 12, + "unit": "%", + "status": "in_progress" + } + ] + }, + { + "id": "PO-2", + "title": "Validate product hypotheses for enterprise segment", + "parent_objective": "CO-2", + "owner": "Head of Product", + "status": "active", + "key_results": [ + { + "id": "PO-2-KR1", + "title": "Improve product onboarding efficiency by 30%", + "contributes_to": "CO-2-KR1", + "current": 0, + "target": 30, + "unit": "%", + "status": "not_started" + }, + { + "id": "PO-2-KR2", + "title": "Increase product activation rate to 55%", + "contributes_to": "CO-2-KR2", + "current": 42, + "target": 55, + "unit": "%", + "status": "in_progress" + } + ] + }, + { + "id": "PO-3", + "title": "Create product-led growth loops", + "parent_objective": "CO-3", + "owner": "Head of Product", + "status": "active", + "key_results": [ + { + "id": "PO-3-KR1", + "title": "Launch referral program with 0.3 viral coefficient contribution", + "contributes_to": "CO-3-KR1", + "current": 0, + "target": 0.3, + "unit": "coefficient", + "status": "not_started" + }, + { + "id": "PO-3-KR2", + "title": "Increase product-driven organic signups to 35%", + "contributes_to": "CO-3-KR2", + "current": 20, + "target": 35, + "unit": "%", + "status": "in_progress" + } + ] + } + ] + }, + "teams": [ + { + "level": "Team", + "team": "Growth", + "quarter": "Q1 2025", + "parent": "Product", + "objectives": [ + { + "id": "GRO-1", + "title": "Build viral product features through acquisition and activation", + "parent_objective": "PO-1", + "owner": "Growth PM", + "status": "active", + "key_results": [ + { + "id": "GRO-1-KR1", + "title": "[Growth] Increase product MAU contribution by 5,000 users", + "contributes_to": "PO-1-KR1", + "current": 0, + "target": 5000, + "unit": "users", + "status": "in_progress" + }, + { + "id": "GRO-1-KR2", + "title": "[Growth] Launch 3 viral feature experiments", + "contributes_to": "PO-1-KR2", + "current": 0, + "target": 3, + "unit": "experiments", + "status": "not_started" + } + ] + } + ] + }, + { + "level": "Team", + "team": "Platform", + "quarter": "Q1 2025", + "parent": "Product", + "objectives": [ + { + "id": "PLA-1", + "title": "Support growth through infrastructure and reliability", + "parent_objective": "PO-1", + "owner": "Platform PM", + "status": "active", + "key_results": [ + { + "id": "PLA-1-KR1", + "title": "[Platform] Scale infrastructure to support 200K MAU", + "contributes_to": "PO-1-KR1", + "current": 100000, + "target": 200000, + "unit": "users", + "status": "in_progress" + }, + { + "id": "PLA-1-KR2", + "title": "[Platform] Maintain 99.9% uptime during growth", + "contributes_to": "PO-1-KR2", + "current": 99.5, + "target": 99.9, + "unit": "%", + "status": "in_progress" + } + ] + }, + { + "id": "PLA-2", + "title": "Improve onboarding infrastructure efficiency", + "parent_objective": "PO-2", + "owner": "Platform PM", + "status": "active", + "key_results": [ + { + "id": "PLA-2-KR1", + "title": "[Platform] Reduce onboarding API latency by 40%", + "contributes_to": "PO-2-KR1", + "current": 0, + "target": 40, + "unit": "%", + "status": "not_started" + } + ] + } + ] + }, + { + "level": "Team", + "team": "Mobile", + "quarter": "Q1 2025", + "parent": "Product", + "objectives": [ + { + "id": "MOB-1", + "title": "Build viral features through mobile experience", + "parent_objective": "PO-1", + "owner": "Mobile PM", + "status": "active", + "key_results": [ + { + "id": "MOB-1-KR1", + "title": "[Mobile] Increase mobile MAU by 3,000 users", + "contributes_to": "PO-1-KR1", + "current": 0, + "target": 3000, + "unit": "users", + "status": "not_started" + }, + { + "id": "MOB-1-KR2", + "title": "[Mobile] Launch native share feature with 15% adoption", + "contributes_to": "PO-1-KR2", + "current": 0, + "target": 15, + "unit": "%", + "status": "not_started" + } + ] + } + ] + }, + { + "level": "Team", + "team": "Data", + "quarter": "Q1 2025", + "parent": "Product", + "objectives": [ + { + "id": "DAT-1", + "title": "Enable growth through analytics and insights", + "parent_objective": "PO-1", + "owner": "Data PM", + "status": "active", + "key_results": [ + { + "id": "DAT-1-KR1", + "title": "[Data] Build growth dashboard tracking all acquisition metrics", + "contributes_to": "PO-1-KR1", + "current": 0, + "target": 1, + "unit": "dashboard", + "status": "not_started" + }, + { + "id": "DAT-1-KR2", + "title": "[Data] Implement experimentation platform for A/B testing", + "contributes_to": "PO-1-KR2", + "current": 0, + "target": 1, + "unit": "platform", + "status": "not_started" + } + ] + } + ] + } + ], + "alignment_scores": { + "vertical_alignment": 100.0, + "horizontal_alignment": 75.0, + "coverage": 100.0, + "balance": 85.0, + "overall": 92.0 + }, + "summary": { + "total_objectives": 11, + "total_key_results": 22, + "company_objectives": 3, + "product_objectives": 3, + "team_objectives": 5, + "teams_involved": 4 + } +} diff --git a/product-team/product-strategist/references/okr_framework.md b/product-team/product-strategist/references/okr_framework.md new file mode 100644 index 0000000..8bf1bc3 --- /dev/null +++ b/product-team/product-strategist/references/okr_framework.md @@ -0,0 +1,328 @@ +# OKR Cascade Framework + +A practical guide to Objectives and Key Results (OKRs) and how to cascade them across organizational levels. + +--- + +## Table of Contents + +- [What Are OKRs](#what-are-okrs) +- [The Cascade Model](#the-cascade-model) +- [Writing Effective Objectives](#writing-effective-objectives) +- [Defining Key Results](#defining-key-results) +- [Alignment Scoring](#alignment-scoring) +- [Common Pitfalls](#common-pitfalls) +- [OKR Cadence](#okr-cadence) + +--- + +## What Are OKRs + +**Objectives and Key Results (OKRs)** are a goal-setting framework that connects organizational strategy to measurable outcomes. + +### Components + +| Component | Definition | Characteristics | +|-----------|------------|-----------------| +| **Objective** | What you want to achieve | Qualitative, inspirational, time-bound | +| **Key Result** | How you measure progress | Quantitative, specific, measurable | + +### OKR Formula + +``` +Objective: [Inspirational goal statement] +ā”œā”€ā”€ KR1: [Metric] from [current] to [target] by [date] +ā”œā”€ā”€ KR2: [Metric] from [current] to [target] by [date] +└── KR3: [Metric] from [current] to [target] by [date] +``` + +### Example + +``` +Objective: Become the go-to solution for enterprise customers + +KR1: Increase enterprise ARR from $5M to $8M +KR2: Improve enterprise NPS from 35 to 50 +KR3: Reduce enterprise onboarding time from 30 days to 14 days +``` + +--- + +## The Cascade Model + +OKRs cascade from company strategy down to individual teams, ensuring alignment at every level. + +### Cascade Structure + +``` +ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” +│ COMPANY LEVEL │ +│ Strategic objectives set by leadership │ +│ Owned by: CEO, Executive Team │ +ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ + │ + ā–¼ +ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” +│ PRODUCT LEVEL │ +│ How product org contributes to company │ +│ Owned by: Head of Product, CPO │ +ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ + │ + ā–¼ +ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” +│ TEAM LEVEL │ +│ Specific initiatives and deliverables │ +│ Owned by: Product Managers, Tech Leads │ +ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ +``` + +### Contribution Model + +Each level contributes a percentage to the level above: + +| Level | Typical Contribution | Range | +|-------|---------------------|-------| +| Product → Company | 30% | 20-50% | +| Team → Product | 25% per team | 15-35% | + +**Note:** Contribution percentages should be calibrated based on: +- Number of teams +- Relative team size +- Strategic importance of initiatives + +### Alignment Types + +| Alignment | Description | Goal | +|-----------|-------------|------| +| **Vertical** | Each level supports the level above | >90% of objectives linked | +| **Horizontal** | Teams coordinate on shared objectives | No conflicting goals | +| **Temporal** | Quarterly OKRs support annual goals | Clear progression | + +--- + +## Writing Effective Objectives + +### The 3 Cs of Objectives + +| Criterion | Description | Example | +|-----------|-------------|---------| +| **Clear** | Unambiguous intent | "Improve customer onboarding" not "Make things better" | +| **Compelling** | Inspires action | "Delight enterprise customers" not "Serve enterprise" | +| **Challenging** | Stretches capabilities | Achievable but requires effort | + +### Objective Templates by Strategy + +**Growth Strategy:** +``` +- Accelerate user acquisition in [segment] +- Expand market presence in [region/vertical] +- Build sustainable acquisition channels +``` + +**Retention Strategy:** +``` +- Create lasting value for [user segment] +- Improve product experience for [use case] +- Maximize customer lifetime value +``` + +**Revenue Strategy:** +``` +- Drive revenue growth through [mechanism] +- Optimize monetization for [segment] +- Expand revenue per customer +``` + +**Innovation Strategy:** +``` +- Pioneer [capability] in the market +- Establish leadership through [innovation area] +- Build competitive differentiation +``` + +**Operational Strategy:** +``` +- Improve delivery efficiency by [mechanism] +- Scale operations to support [target] +- Reduce operational friction in [area] +``` + +### Objective Anti-Patterns + +| Anti-Pattern | Problem | Better Alternative | +|--------------|---------|-------------------| +| "Increase revenue" | Too vague | "Grow enterprise ARR to $10M" | +| "Be the best" | Not measurable | "Achieve #1 NPS in category" | +| "Fix bugs" | Too tactical | "Improve platform reliability" | +| "Launch feature X" | Output, not outcome | "Improve [metric] through [capability]" | + +--- + +## Defining Key Results + +### Key Result Anatomy + +``` +[Verb] [metric] from [current baseline] to [target] by [deadline] +``` + +### Key Result Types + +| Type | Characteristics | When to Use | +|------|-----------------|-------------| +| **Metric-based** | Track a number | Most common, highly measurable | +| **Milestone-based** | Track completion | For binary deliverables | +| **Health-based** | Track stability | For maintenance objectives | + +### Metric Categories + +| Category | Examples | +|----------|----------| +| **Acquisition** | Signups, trials started, leads generated | +| **Activation** | Onboarding completion, first value moment | +| **Retention** | D7/D30 retention, churn rate, repeat usage | +| **Revenue** | ARR, ARPU, conversion rate, LTV | +| **Engagement** | DAU/MAU, session duration, actions per session | +| **Satisfaction** | NPS, CSAT, support tickets | +| **Efficiency** | Cycle time, automation rate, cost per unit | + +### Key Result Scoring + +| Score | Status | Description | +|-------|--------|-------------| +| 0.0-0.3 | Red | Significant gap, needs intervention | +| 0.4-0.6 | Yellow | Partial progress, on watch | +| 0.7-0.9 | Green | Strong progress, on track | +| 1.0 | Complete | Target achieved | + +**Note:** Hitting 0.7 is considered success for stretch goals. Consistently hitting 1.0 suggests targets aren't ambitious enough. + +--- + +## Alignment Scoring + +The OKR cascade generator calculates alignment scores across four dimensions: + +### Scoring Dimensions + +| Dimension | Weight | What It Measures | +|-----------|--------|------------------| +| **Vertical Alignment** | 40% | % of objectives with parent links | +| **Horizontal Alignment** | 20% | Cross-team coordination on shared goals | +| **Coverage** | 20% | % of company KRs addressed by product | +| **Balance** | 20% | Even distribution of work across teams | + +### Alignment Score Interpretation + +| Score | Grade | Interpretation | +|-------|-------|----------------| +| 90-100% | A | Excellent alignment, well-cascaded | +| 80-89% | B | Good alignment, minor gaps | +| 70-79% | C | Adequate, needs attention | +| 60-69% | D | Poor alignment, significant gaps | +| <60% | F | Misaligned, requires restructuring | + +### Target Benchmarks + +| Metric | Target | Red Flag | +|--------|--------|----------| +| Vertical alignment | >90% | <70% | +| Horizontal alignment | >75% | <50% | +| Coverage | >80% | <60% | +| Balance | >80% | <60% | +| Overall | >80% | <65% | + +--- + +## Common Pitfalls + +### OKR Anti-Patterns + +| Pitfall | Symptom | Fix | +|---------|---------|-----| +| **Too many OKRs** | 10+ objectives per level | Limit to 3-5 objectives | +| **Sandbagging** | Always hit 100% | Set stretch targets (0.7 = success) | +| **Task lists** | KRs are tasks, not outcomes | Focus on measurable impact | +| **Set and forget** | No mid-quarter reviews | Check-ins every 2 weeks | +| **Cascade disconnect** | Team OKRs don't link up | Validate parent relationships | +| **Metric gaming** | Optimizing for KR, not intent | Balance with health metrics | + +### Warning Signs + +- All teams have identical objectives (lack of specialization) +- No team owns a critical company objective (gap in coverage) +- One team owns everything (unrealistic load) +- Objectives change weekly (lack of commitment) +- KRs are activities, not outcomes (wrong focus) + +--- + +## OKR Cadence + +### Quarterly Rhythm + +| Week | Activity | +|------|----------| +| **Week -2** | Leadership sets company OKRs draft | +| **Week -1** | Product and team OKR drafting | +| **Week 0** | OKR finalization and alignment review | +| **Week 2** | First check-in, adjust if needed | +| **Week 6** | Mid-quarter review | +| **Week 10** | Pre-quarter reflection | +| **Week 12** | Quarter close, scoring, learnings | + +### Check-in Format + +``` +Weekly/Bi-weekly Status Update: + +1. Confidence level: [Red/Yellow/Green] +2. Progress since last check-in: [specific updates] +3. Blockers: [what's in the way] +4. Asks: [what help is needed] +5. Forecast: [expected end-of-quarter score] +``` + +### Annual Alignment + +Quarterly OKRs should ladder up to annual goals: + +``` +Annual Goal: Become a $100M ARR business + +Q1: Build enterprise sales motion (ARR: $25M → $32M) +Q2: Expand into APAC region (ARR: $32M → $45M) +Q3: Launch self-serve enterprise tier (ARR: $45M → $65M) +Q4: Scale and optimize (ARR: $65M → $100M) +``` + +--- + +## Quick Reference + +### OKR Checklist + +**Before finalizing OKRs:** +- [ ] 3-5 objectives per level (not more) +- [ ] 3-5 key results per objective +- [ ] Each KR has a current baseline and target +- [ ] Vertical alignment validated (parent links) +- [ ] No conflicting objectives across teams +- [ ] Owners assigned to every objective +- [ ] Check-in cadence defined + +**During the quarter:** +- [ ] Bi-weekly progress updates +- [ ] Mid-quarter formal review +- [ ] Adjust forecasts based on learnings +- [ ] Escalate blockers early + +**End of quarter:** +- [ ] Score all key results (0.0-1.0) +- [ ] Document learnings +- [ ] Celebrate wins +- [ ] Carry forward or close incomplete items + +--- + +*See also: `strategy_types.md` for strategy-specific OKR templates* diff --git a/product-team/product-strategist/references/strategy_types.md b/product-team/product-strategist/references/strategy_types.md new file mode 100644 index 0000000..4f39e96 --- /dev/null +++ b/product-team/product-strategist/references/strategy_types.md @@ -0,0 +1,320 @@ +# Strategy Types for OKR Generation + +Comprehensive breakdown of the five core strategy types with objectives, key results, and when to use each. + +--- + +## Table of Contents + +- [Strategy Selection Guide](#strategy-selection-guide) +- [Growth Strategy](#growth-strategy) +- [Retention Strategy](#retention-strategy) +- [Revenue Strategy](#revenue-strategy) +- [Innovation Strategy](#innovation-strategy) +- [Operational Strategy](#operational-strategy) +- [Multi-Strategy Combinations](#multi-strategy-combinations) + +--- + +## Strategy Selection Guide + +### Decision Matrix + +| If your priority is... | Primary Strategy | Secondary Strategy | +|------------------------|------------------|-------------------| +| Scaling user base | Growth | Retention | +| Reducing churn | Retention | Revenue | +| Increasing ARPU | Revenue | Retention | +| Market differentiation | Innovation | Growth | +| Improving efficiency | Operational | Revenue | +| New market entry | Growth | Innovation | + +### Strategy by Company Stage + +| Stage | Typical Priority | Rationale | +|-------|------------------|-----------| +| **Pre-PMF** | Innovation | Finding product-market fit | +| **Early Growth** | Growth | Scaling acquisition | +| **Growth** | Growth + Retention | Balancing acquisition with value | +| **Scale** | Revenue + Retention | Optimizing unit economics | +| **Mature** | Operational + Revenue | Efficiency and margins | + +--- + +## Growth Strategy + +**Focus:** Accelerating user acquisition and market expansion + +### When to Use + +- User growth is primary company objective +- Product-market fit is validated +- Acquisition channels are scaling +- Ready to invest in growth loops + +### Company-Level Objectives + +| Objective | Key Results Template | +|-----------|---------------------| +| Accelerate user acquisition and market expansion | - Increase MAU from X to Y
- Achieve Z% MoM growth rate
- Expand to N new markets | +| Achieve product-market fit in new segments | - Reach X users in [segment]
- Achieve Y% activation rate
- Validate Z use cases | +| Build sustainable growth engine | - Reduce CAC by X%
- Improve viral coefficient to Y
- Increase organic share to Z% | + +### Product-Level Cascade + +| Product Objective | Supports | Key Results | +|-------------------|----------|-------------| +| Build viral product features | User acquisition | - Launch referral program (target: X referrals/user)
- Increase shareability by Y% | +| Optimize onboarding experience | Activation | - Improve activation rate from X% to Y%
- Reduce time-to-value by Z% | +| Create product-led growth loops | Sustainable growth | - Increase product-qualified leads by X%
- Improve trial-to-paid by Y% | + +### Team-Level Examples + +| Team | Focus Area | Sample KRs | +|------|------------|------------| +| Growth Team | Acquisition & activation | - Improve signup conversion by X%
- Launch Y experiments/week | +| Platform Team | Scale & reliability | - Support X concurrent users
- Maintain Y% uptime | +| Mobile Team | Mobile acquisition | - Increase mobile signups by X%
- Improve mobile activation by Y% | + +### Key Metrics to Track + +- Monthly Active Users (MAU) +- Growth rate (MoM, YoY) +- Customer Acquisition Cost (CAC) +- Activation rate +- Viral coefficient +- Channel efficiency + +--- + +## Retention Strategy + +**Focus:** Creating lasting customer value and reducing churn + +### When to Use + +- Churn is above industry benchmark +- LTV/CAC needs improvement +- Product stickiness is low +- Expansion revenue is a priority + +### Company-Level Objectives + +| Objective | Key Results Template | +|-----------|---------------------| +| Create lasting customer value and loyalty | - Improve retention from X% to Y%
- Increase NPS from X to Y
- Reduce churn to below Z% | +| Deliver a superior user experience | - Achieve X% product stickiness
- Improve satisfaction to Y/10
- Reduce support tickets by Z% | +| Maximize customer lifetime value | - Increase LTV by X%
- Improve LTV/CAC ratio to Y
- Grow expansion revenue by Z% | + +### Product-Level Cascade + +| Product Objective | Supports | Key Results | +|-------------------|----------|-------------| +| Design sticky user experiences | Customer retention | - Increase DAU/MAU ratio from X to Y
- Improve weekly return rate by Z% | +| Build habit-forming features | Product stickiness | - Achieve X% feature adoption
- Increase sessions/user by Y | +| Create expansion opportunities | Lifetime value | - Launch N upsell touchpoints
- Improve upgrade rate by X% | + +### Team-Level Examples + +| Team | Focus Area | Sample KRs | +|------|------------|------------| +| Growth Team | Retention loops | - Improve D7 retention by X%
- Reduce first-week churn by Y% | +| Data Team | Churn prediction | - Build churn model (accuracy >X%)
- Identify Y at-risk signals | +| Platform Team | Reliability | - Reduce error rates by X%
- Improve load times by Y% | + +### Key Metrics to Track + +- Retention rates (D1, D7, D30, D90) +- Churn rate +- Net Promoter Score (NPS) +- Customer Satisfaction (CSAT) +- Feature stickiness +- Session frequency + +--- + +## Revenue Strategy + +**Focus:** Driving sustainable revenue growth and monetization + +### When to Use + +- Company is focused on profitability +- Monetization needs optimization +- Pricing strategy is being revised +- Expansion revenue is priority + +### Company-Level Objectives + +| Objective | Key Results Template | +|-----------|---------------------| +| Drive sustainable revenue growth | - Grow ARR from $X to $Y
- Achieve Z% revenue growth rate
- Maintain X% gross margin | +| Optimize monetization strategy | - Increase ARPU by X%
- Improve pricing efficiency by Y%
- Launch Z new pricing tiers | +| Expand revenue per customer | - Grow expansion revenue by X%
- Reduce revenue churn to Y%
- Increase upsell rate by Z% | + +### Product-Level Cascade + +| Product Objective | Supports | Key Results | +|-------------------|----------|-------------| +| Optimize product monetization | Revenue growth | - Improve conversion to paid by X%
- Reduce free tier abuse by Y% | +| Build premium features | ARPU growth | - Launch N premium features
- Achieve X% premium adoption | +| Create value-based pricing alignment | Pricing efficiency | - Implement usage-based pricing
- Improve price-to-value ratio by X% | + +### Team-Level Examples + +| Team | Focus Area | Sample KRs | +|------|------------|------------| +| Growth Team | Conversion | - Improve trial-to-paid by X%
- Reduce time-to-upgrade by Y days | +| Platform Team | Usage metering | - Implement accurate usage tracking
- Support X billing scenarios | +| Data Team | Revenue analytics | - Build revenue forecasting model
- Identify Y expansion signals | + +### Key Metrics to Track + +- Annual Recurring Revenue (ARR) +- Average Revenue Per User (ARPU) +- Gross margin +- Revenue churn (net and gross) +- Expansion revenue +- LTV/CAC ratio + +--- + +## Innovation Strategy + +**Focus:** Building competitive advantage through product innovation + +### When to Use + +- Market is commoditizing +- Competitors are catching up +- New technology opportunity exists +- Company needs differentiation + +### Company-Level Objectives + +| Objective | Key Results Template | +|-----------|---------------------| +| Lead the market through product innovation | - Launch X breakthrough features
- Achieve Y% revenue from new products
- File Z patents/IP | +| Establish market leadership in [area] | - Become #1 in category for X
- Win Y analyst recognitions
- Achieve Z% awareness | +| Build sustainable competitive moat | - Reduce feature parity gap by X%
- Create Y unique capabilities
- Build Z switching barriers | + +### Product-Level Cascade + +| Product Objective | Supports | Key Results | +|-------------------|----------|-------------| +| Ship innovative features faster | Breakthrough innovation | - Reduce time-to-market by X%
- Launch Y experiments/quarter | +| Build unique technical capabilities | Competitive moat | - Develop X proprietary algorithms
- Achieve Y performance advantage | +| Create platform extensibility | Ecosystem advantage | - Launch N API endpoints
- Enable X third-party integrations | + +### Team-Level Examples + +| Team | Focus Area | Sample KRs | +|------|------------|------------| +| Platform Team | Core technology | - Build X new infrastructure capabilities
- Improve performance by Y% | +| Data Team | ML/AI innovation | - Deploy X ML models
- Improve prediction accuracy by Y% | +| Mobile Team | Mobile innovation | - Launch X mobile-first features
- Achieve Y% mobile parity | + +### Key Metrics to Track + +- Time-to-market +- Revenue from new products +- Feature uniqueness score +- Patent/IP filings +- Technology differentiation +- Innovation velocity + +--- + +## Operational Strategy + +**Focus:** Improving efficiency and organizational excellence + +### When to Use + +- Scaling challenges are emerging +- Operational costs are high +- Team productivity needs improvement +- Quality issues are increasing + +### Company-Level Objectives + +| Objective | Key Results Template | +|-----------|---------------------| +| Improve organizational efficiency | - Improve velocity by X%
- Reduce cycle time to Y days
- Achieve Z% automation | +| Scale operations sustainably | - Support X users per engineer
- Reduce cost per transaction by Y%
- Improve operational leverage by Z% | +| Achieve operational excellence | - Reduce incidents by X%
- Improve team NPS to Y
- Achieve Z% on-time delivery | + +### Product-Level Cascade + +| Product Objective | Supports | Key Results | +|-------------------|----------|-------------| +| Improve product delivery efficiency | Velocity | - Reduce PR cycle time by X%
- Increase deployment frequency by Y% | +| Reduce operational toil | Automation | - Automate X% of manual processes
- Reduce on-call burden by Y% | +| Improve product quality | Excellence | - Reduce bugs by X%
- Improve test coverage to Y% | + +### Team-Level Examples + +| Team | Focus Area | Sample KRs | +|------|------------|------------| +| Platform Team | Infrastructure efficiency | - Reduce infrastructure costs by X%
- Improve deployment reliability to Y% | +| Data Team | Data operations | - Improve data pipeline reliability to X%
- Reduce data latency by Y% | +| All Teams | Process improvement | - Reduce meeting overhead by X%
- Improve sprint predictability to Y% | + +### Key Metrics to Track + +- Velocity (story points, throughput) +- Cycle time +- Deployment frequency +- Change failure rate +- Incident count and MTTR +- Team satisfaction (eNPS) + +--- + +## Multi-Strategy Combinations + +### Common Pairings + +| Primary | Secondary | Balanced Objectives | +|---------|-----------|---------------------| +| Growth + Retention | 60/40 | Grow while keeping users | +| Revenue + Retention | 50/50 | Monetize without churning | +| Innovation + Growth | 40/60 | Differentiate to acquire | +| Operational + Revenue | 50/50 | Efficiency for margins | + +### Balanced OKR Set Example + +**Mixed Growth + Retention Strategy:** + +``` +Company Objective 1: Accelerate user growth (Growth) +ā”œā”€ā”€ KR1: Increase MAU from 100K to 200K +ā”œā”€ā”€ KR2: Achieve 15% MoM growth rate +└── KR3: Reduce CAC by 20% + +Company Objective 2: Improve user retention (Retention) +ā”œā”€ā”€ KR1: Improve D30 retention from 20% to 35% +ā”œā”€ā”€ KR2: Increase NPS from 40 to 55 +└── KR3: Reduce churn to below 5% + +Company Objective 3: Improve delivery efficiency (Operational) +ā”œā”€ā”€ KR1: Reduce cycle time by 30% +ā”œā”€ā”€ KR2: Achieve 95% on-time delivery +└── KR3: Improve team eNPS to 50 +``` + +--- + +## Strategy Selection Checklist + +Before choosing a strategy: + +- [ ] What is the company's #1 priority this quarter? +- [ ] What metrics is leadership being evaluated on? +- [ ] Where are the biggest gaps vs. competitors? +- [ ] What does customer feedback emphasize? +- [ ] What can we realistically move in 90 days? + +--- + +*See also: `okr_framework.md` for OKR writing best practices* diff --git a/product-team/product-strategist/scripts/okr_cascade_generator.py b/product-team/product-strategist/scripts/okr_cascade_generator.py index 40198e5..ef644f6 100644 --- a/product-team/product-strategist/scripts/okr_cascade_generator.py +++ b/product-team/product-strategist/scripts/okr_cascade_generator.py @@ -1,17 +1,40 @@ #!/usr/bin/env python3 """ OKR Cascade Generator -Creates aligned OKRs from company strategy down to team level +Creates aligned OKRs from company strategy down to team level. + +Features: +- Generates company → product → team OKR cascade +- Configurable team structure and contribution percentages +- Alignment scoring across vertical and horizontal dimensions +- Multiple output formats (dashboard, JSON) + +Usage: + python okr_cascade_generator.py growth + python okr_cascade_generator.py retention --teams "Engineering,Design,Data" + python okr_cascade_generator.py revenue --contribution 0.4 --json """ import json +import argparse from typing import Dict, List -from datetime import datetime, timedelta +from datetime import datetime + class OKRGenerator: """Generate and cascade OKRs across the organization""" - - def __init__(self): + + def __init__(self, teams: List[str] = None, product_contribution: float = 0.3): + """ + Initialize OKR generator. + + Args: + teams: List of team names (default: Growth, Platform, Mobile, Data) + product_contribution: Fraction of company KRs that product owns (default: 0.3) + """ + self.teams = teams or ['Growth', 'Platform', 'Mobile', 'Data'] + self.product_contribution = product_contribution + self.okr_templates = { 'growth': { 'objectives': [ @@ -30,7 +53,7 @@ class OKRGenerator: 'retention': { 'objectives': [ 'Create lasting customer value and loyalty', - 'Build best-in-class user experience', + 'Deliver a superior user experience', 'Maximize customer lifetime value' ], 'key_results': [ @@ -57,9 +80,9 @@ class OKRGenerator: }, 'innovation': { 'objectives': [ - 'Pioneer next-generation product capabilities', - 'Establish market leadership through innovation', - 'Build competitive moat' + 'Lead the market through product innovation', + 'Establish leadership in key capability areas', + 'Build sustainable competitive differentiation' ], 'key_results': [ 'Launch {target} breakthrough features', @@ -71,36 +94,46 @@ class OKRGenerator: }, 'operational': { 'objectives': [ - 'Build world-class product organization', + 'Improve organizational efficiency', 'Achieve operational excellence', - 'Scale efficiently' + 'Scale operations sustainably' ], 'key_results': [ 'Improve velocity by {target}%', 'Reduce cycle time to {target} days', 'Achieve {target}% automation', - 'Improve team NPS to {target}', + 'Improve team satisfaction to {target}', 'Reduce incidents by {target}%' ] } } - + + # Team focus areas for objective relevance matching + self.team_relevance = { + 'Growth': ['acquisition', 'growth', 'activation', 'viral', 'onboarding', 'conversion'], + 'Platform': ['infrastructure', 'reliability', 'scale', 'performance', 'efficiency', 'automation'], + 'Mobile': ['mobile', 'app', 'ios', 'android', 'native'], + 'Data': ['analytics', 'metrics', 'insights', 'data', 'measurement', 'experimentation'], + 'Engineering': ['delivery', 'velocity', 'quality', 'automation', 'infrastructure'], + 'Design': ['experience', 'usability', 'interface', 'user', 'accessibility'], + 'Product': ['features', 'roadmap', 'prioritization', 'strategy'], + } + def generate_company_okrs(self, strategy: str, metrics: Dict) -> Dict: """Generate company-level OKRs based on strategy""" - + if strategy not in self.okr_templates: - strategy = 'growth' # Default - + strategy = 'growth' + template = self.okr_templates[strategy] - + company_okrs = { 'level': 'Company', 'quarter': self._get_current_quarter(), 'strategy': strategy, 'objectives': [] } - - # Generate 3 objectives + for i in range(min(3, len(template['objectives']))): obj = { 'id': f'CO-{i+1}', @@ -109,8 +142,7 @@ class OKRGenerator: 'owner': 'CEO', 'status': 'draft' } - - # Add 3-5 key results per objective + for j in range(3): if j < len(template['key_results']): kr_template = template['key_results'][j] @@ -123,22 +155,22 @@ class OKRGenerator: 'status': 'not_started' } obj['key_results'].append(kr) - + company_okrs['objectives'].append(obj) - + return company_okrs - + def cascade_to_product(self, company_okrs: Dict) -> Dict: """Cascade company OKRs to product organization""" - + product_okrs = { 'level': 'Product', 'quarter': company_okrs['quarter'], 'parent': 'Company', + 'contribution': self.product_contribution, 'objectives': [] } - - # Map company objectives to product objectives + for company_obj in company_okrs['objectives']: product_obj = { 'id': f'PO-{company_obj["id"].split("-")[1]}', @@ -148,40 +180,40 @@ class OKRGenerator: 'owner': 'Head of Product', 'status': 'draft' } - - # Generate product-specific key results + for kr in company_obj['key_results']: product_kr = { 'id': f'PO-{product_obj["id"].split("-")[1]}-KR{kr["id"].split("KR")[1]}', 'title': self._translate_kr_to_product(kr['title']), 'contributes_to': kr['id'], 'current': kr['current'], - 'target': kr['target'] * 0.3, # Product typically contributes 30% + 'target': kr['target'] * self.product_contribution, 'unit': kr['unit'], + 'contribution_pct': self.product_contribution * 100, 'status': 'not_started' } product_obj['key_results'].append(product_kr) - + product_okrs['objectives'].append(product_obj) - + return product_okrs - + def cascade_to_teams(self, product_okrs: Dict) -> List[Dict]: """Cascade product OKRs to individual teams""" - - teams = ['Growth', 'Platform', 'Mobile', 'Data'] + team_okrs = [] - - for team in teams: + team_contribution = 1.0 / len(self.teams) if self.teams else 0.25 + + for team in self.teams: team_okr = { 'level': 'Team', 'team': team, 'quarter': product_okrs['quarter'], 'parent': 'Product', + 'contribution': team_contribution, 'objectives': [] } - - # Each team takes relevant objectives + for product_obj in product_okrs['objectives']: if self._is_relevant_for_team(product_obj['title'], team): team_obj = { @@ -192,35 +224,37 @@ class OKRGenerator: 'owner': f'{team} PM', 'status': 'draft' } - - # Add team-specific key results - for kr in product_obj['key_results'][:2]: # Each team takes 2 KRs + + for kr in product_obj['key_results'][:2]: team_kr = { 'id': f'{team[:3].upper()}-{team_obj["id"].split("-")[1]}-KR{kr["id"].split("KR")[1]}', 'title': self._translate_kr_to_team(kr['title'], team), 'contributes_to': kr['id'], 'current': kr['current'], - 'target': kr['target'] / len(teams), + 'target': kr['target'] * team_contribution, 'unit': kr['unit'], 'status': 'not_started' } team_obj['key_results'].append(team_kr) - + team_okr['objectives'].append(team_obj) - + if team_okr['objectives']: team_okrs.append(team_okr) - + return team_okrs - + def generate_okr_dashboard(self, all_okrs: Dict) -> str: """Generate OKR dashboard view""" - + dashboard = ["=" * 60] dashboard.append("OKR CASCADE DASHBOARD") dashboard.append(f"Quarter: {all_okrs.get('quarter', 'Q1 2025')}") + dashboard.append(f"Strategy: {all_okrs.get('strategy', 'growth').upper()}") + dashboard.append(f"Teams: {', '.join(self.teams)}") + dashboard.append(f"Product Contribution: {self.product_contribution * 100:.0f}%") dashboard.append("=" * 60) - + # Company OKRs if 'company' in all_okrs: dashboard.append("\nšŸ¢ COMPANY OKRS\n") @@ -228,7 +262,7 @@ class OKRGenerator: dashboard.append(f"šŸ“Œ {obj['id']}: {obj['title']}") for kr in obj['key_results']: dashboard.append(f" └─ {kr['id']}: {kr['title']}") - + # Product OKRs if 'product' in all_okrs: dashboard.append("\nšŸš€ PRODUCT OKRS\n") @@ -237,7 +271,7 @@ class OKRGenerator: dashboard.append(f" ↳ Supports: {obj.get('parent_objective', 'N/A')}") for kr in obj['key_results']: dashboard.append(f" └─ {kr['id']}: {kr['title']}") - + # Team OKRs if 'teams' in all_okrs: dashboard.append("\nšŸ‘„ TEAM OKRS\n") @@ -247,12 +281,12 @@ class OKRGenerator: dashboard.append(f" šŸ“Œ {obj['id']}: {obj['title']}") for kr in obj['key_results']: dashboard.append(f" └─ {kr['id']}: {kr['title']}") - + # Alignment Matrix dashboard.append("\n\nšŸ“Š ALIGNMENT MATRIX\n") dashboard.append("Company → Product → Teams") dashboard.append("-" * 40) - + if 'company' in all_okrs and 'product' in all_okrs: for c_obj in all_okrs['company']['objectives']: dashboard.append(f"\n{c_obj['id']}") @@ -264,12 +298,12 @@ class OKRGenerator: for t_obj in team_okr['objectives']: if t_obj.get('parent_objective') == p_obj['id']: dashboard.append(f" └─ {t_obj['id']} ({team_okr['team']})") - + return "\n".join(dashboard) - + def calculate_alignment_score(self, all_okrs: Dict) -> Dict: """Calculate alignment score across OKR cascade""" - + scores = { 'vertical_alignment': 0, 'horizontal_alignment': 0, @@ -277,27 +311,27 @@ class OKRGenerator: 'balance': 0, 'overall': 0 } - + # Vertical alignment: How well each level supports the above total_objectives = 0 aligned_objectives = 0 - + if 'product' in all_okrs: for obj in all_okrs['product']['objectives']: total_objectives += 1 if 'parent_objective' in obj: aligned_objectives += 1 - + if 'teams' in all_okrs: for team in all_okrs['teams']: for obj in team['objectives']: total_objectives += 1 if 'parent_objective' in obj: aligned_objectives += 1 - + if total_objectives > 0: scores['vertical_alignment'] = round((aligned_objectives / total_objectives) * 100, 1) - + # Horizontal alignment: How well teams coordinate if 'teams' in all_okrs and len(all_okrs['teams']) > 1: shared_objectives = set() @@ -306,16 +340,16 @@ class OKRGenerator: parent = obj.get('parent_objective') if parent: shared_objectives.add(parent) - + scores['horizontal_alignment'] = min(100, len(shared_objectives) * 25) - + # Coverage: How much of company OKRs are covered if 'company' in all_okrs and 'product' in all_okrs: company_krs = sum(len(obj['key_results']) for obj in all_okrs['company']['objectives']) covered_krs = sum(len(obj['key_results']) for obj in all_okrs['product']['objectives']) if company_krs > 0: scores['coverage'] = round((covered_krs / company_krs) * 100, 1) - + # Balance: Distribution across teams if 'teams' in all_okrs: objectives_per_team = [len(team['objectives']) for team in all_okrs['teams']] @@ -323,7 +357,7 @@ class OKRGenerator: avg_objectives = sum(objectives_per_team) / len(objectives_per_team) variance = sum((x - avg_objectives) ** 2 for x in objectives_per_team) / len(objectives_per_team) scores['balance'] = round(max(0, 100 - variance * 10), 1) - + # Overall score scores['overall'] = round(sum([ scores['vertical_alignment'] * 0.4, @@ -331,22 +365,22 @@ class OKRGenerator: scores['coverage'] * 0.2, scores['balance'] * 0.2 ]), 1) - + return scores - + def _get_current_quarter(self) -> str: """Get current quarter""" now = datetime.now() quarter = (now.month - 1) // 3 + 1 return f"Q{quarter} {now.year}" - + def _fill_metrics(self, template: str, metrics: Dict) -> str: """Fill template with actual metrics""" result = template for key, value in metrics.items(): result = result.replace(f'{{{key}}}', str(value)) return result - + def _extract_unit(self, kr_template: str) -> str: """Extract measurement unit from KR template""" if '%' in kr_template: @@ -358,7 +392,7 @@ class OKRGenerator: elif 'score' in kr_template.lower(): return 'points' return 'count' - + def _translate_to_product(self, company_objective: str) -> str: """Translate company objective to product objective""" translations = { @@ -367,15 +401,15 @@ class OKRGenerator: 'Build sustainable growth': 'Create product-led growth loops', 'Create lasting customer value': 'Design sticky user experiences', 'Drive sustainable revenue': 'Optimize product monetization', - 'Pioneer next-generation': 'Ship innovative features', - 'Build world-class': 'Elevate product excellence' + 'Lead the market through': 'Ship innovative features to', + 'Improve organizational': 'Improve product delivery' } - + for key, value in translations.items(): if key in company_objective: return company_objective.replace(key, value) return f"Product: {company_objective}" - + def _translate_kr_to_product(self, kr: str) -> str: """Translate KR to product context""" product_terms = { @@ -387,92 +421,172 @@ class OKRGenerator: 'ARR': 'product-driven revenue', 'churn': 'product churn' } - + result = kr for term, replacement in product_terms.items(): if term in result: result = result.replace(term, replacement) break return result - + def _translate_to_team(self, objective: str, team: str) -> str: """Translate objective to team context""" team_focus = { 'Growth': 'acquisition and activation', 'Platform': 'infrastructure and reliability', 'Mobile': 'mobile experience', - 'Data': 'analytics and insights' + 'Data': 'analytics and insights', + 'Engineering': 'technical delivery', + 'Design': 'user experience', + 'Product': 'product strategy' } - + focus = team_focus.get(team, 'delivery') return f"{objective} through {focus}" - + def _translate_kr_to_team(self, kr: str, team: str) -> str: """Translate KR to team context""" return f"[{team}] {kr}" - + def _is_relevant_for_team(self, objective: str, team: str) -> bool: """Check if objective is relevant for team""" - relevance = { - 'Growth': ['acquisition', 'growth', 'activation', 'viral'], - 'Platform': ['infrastructure', 'reliability', 'scale', 'performance'], - 'Mobile': ['mobile', 'app', 'ios', 'android'], - 'Data': ['analytics', 'metrics', 'insights', 'data'] - } - - keywords = relevance.get(team, []) + keywords = self.team_relevance.get(team, []) objective_lower = objective.lower() - return any(keyword in objective_lower for keyword in keywords) or team == 'Platform' + + # Platform is always relevant (infrastructure supports everything) + if team == 'Platform': + return True + + return any(keyword in objective_lower for keyword in keywords) + + +def parse_teams(teams_str: str) -> List[str]: + """Parse comma-separated team string into list""" + if not teams_str: + return None + return [t.strip() for t in teams_str.split(',') if t.strip()] + def main(): - import sys - - # Sample metrics - metrics = { - 'current': 100000, - 'target': 150000, - 'current_revenue': 10, - 'target_revenue': 15, - 'current_nps': 40, - 'target_nps': 60 - } - - # Get strategy from command line or default - strategy = sys.argv[1] if len(sys.argv) > 1 else 'growth' - + parser = argparse.ArgumentParser( + description='Generate OKR cascade from company strategy to team level', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + # Generate growth strategy OKRs with default teams + python okr_cascade_generator.py growth + + # Custom teams + python okr_cascade_generator.py retention --teams "Engineering,Design,Data,Growth" + + # Custom product contribution percentage + python okr_cascade_generator.py revenue --contribution 0.4 + + # JSON output + python okr_cascade_generator.py innovation --json + + # All options combined + python okr_cascade_generator.py operational --teams "Core,Platform" --contribution 0.5 --json + """ + ) + + parser.add_argument( + 'strategy', + nargs='?', + choices=['growth', 'retention', 'revenue', 'innovation', 'operational'], + default='growth', + help='Strategy type (default: growth)' + ) + + parser.add_argument( + '--teams', '-t', + type=str, + help='Comma-separated list of team names (default: Growth,Platform,Mobile,Data)' + ) + + parser.add_argument( + '--contribution', '-c', + type=float, + default=0.3, + help='Product contribution to company OKRs as decimal (default: 0.3 = 30%%)' + ) + + parser.add_argument( + '--json', '-j', + action='store_true', + help='Output as JSON instead of dashboard' + ) + + parser.add_argument( + '--metrics', '-m', + type=str, + help='Metrics as JSON string (default: sample metrics)' + ) + + args = parser.parse_args() + + # Parse teams + teams = parse_teams(args.teams) + + # Parse metrics + if args.metrics: + metrics = json.loads(args.metrics) + else: + metrics = { + 'current': 100000, + 'target': 150000, + 'current_revenue': 10, + 'target_revenue': 15, + 'current_nps': 40, + 'target_nps': 60 + } + + # Validate contribution + if not 0 < args.contribution <= 1: + print("Error: Contribution must be between 0 and 1") + return 1 + # Generate OKRs - generator = OKRGenerator() - - # Generate company OKRs - company_okrs = generator.generate_company_okrs(strategy, metrics) - - # Cascade to product + generator = OKRGenerator(teams=teams, product_contribution=args.contribution) + + company_okrs = generator.generate_company_okrs(args.strategy, metrics) product_okrs = generator.cascade_to_product(company_okrs) - - # Cascade to teams team_okrs = generator.cascade_to_teams(product_okrs) - - # Combine all OKRs + all_okrs = { + 'quarter': company_okrs['quarter'], + 'strategy': args.strategy, 'company': company_okrs, 'product': product_okrs, 'teams': team_okrs } - - # Generate dashboard - dashboard = generator.generate_okr_dashboard(all_okrs) - print(dashboard) - - # Calculate alignment + alignment = generator.calculate_alignment_score(all_okrs) - print("\n\nšŸŽÆ ALIGNMENT SCORES\n" + "-" * 40) - for metric, score in alignment.items(): - print(f"{metric.replace('_', ' ').title()}: {score}%") - - # Export as JSON if requested - if len(sys.argv) > 2 and sys.argv[2] == 'json': - print("\n\nJSON Output:") + + if args.json: + all_okrs['alignment_scores'] = alignment + all_okrs['config'] = { + 'teams': generator.teams, + 'product_contribution': generator.product_contribution + } print(json.dumps(all_okrs, indent=2)) + else: + dashboard = generator.generate_okr_dashboard(all_okrs) + print(dashboard) + + print("\n\nšŸŽÆ ALIGNMENT SCORES") + print("-" * 40) + for metric, score in alignment.items(): + status = "āœ“" if score >= 80 else "!" if score >= 60 else "āœ—" + print(f"{status} {metric.replace('_', ' ').title()}: {score}%") + + if alignment['overall'] >= 80: + print("\nāœ… Overall alignment is GOOD (≄80%)") + elif alignment['overall'] >= 60: + print("\nāš ļø Overall alignment NEEDS ATTENTION (60-80%)") + else: + print("\nāŒ Overall alignment is POOR (<60%)") + if __name__ == "__main__": main()