@event4u/agent-config 2.8.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent-src/personas/engineering-manager.md +133 -0
- package/.agent-src/personas/finance-partner.md +129 -0
- package/.agent-src/personas/people-strategist.md +126 -0
- package/.agent-src/personas/strategist.md +129 -0
- package/.agent-src/rules/no-roadmap-references.md +19 -0
- package/.agent-src/skills/build-buy-partner/SKILL.md +145 -0
- package/.agent-src/skills/comp-banding/SKILL.md +160 -0
- package/.agent-src/skills/competitive-moat-analysis/SKILL.md +152 -0
- package/.agent-src/skills/contracts-cognition/SKILL.md +147 -0
- package/.agent-src/skills/data-handling-judgment/SKILL.md +155 -0
- package/.agent-src/skills/forecasting/SKILL.md +164 -0
- package/.agent-src/skills/hiring-loop-design/SKILL.md +167 -0
- package/.agent-src/skills/market-entry-analysis/SKILL.md +144 -0
- package/.agent-src/skills/onboarding-program/SKILL.md +157 -0
- package/.agent-src/skills/one-on-one-cadence/SKILL.md +161 -0
- package/.agent-src/skills/org-design/SKILL.md +158 -0
- package/.agent-src/skills/perf-feedback-craft/SKILL.md +157 -0
- package/.agent-src/skills/privacy-review/SKILL.md +160 -0
- package/.agent-src/skills/runway-cognition/SKILL.md +136 -0
- package/.agent-src/skills/scenario-modeling/SKILL.md +139 -0
- package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +165 -0
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +54 -7
- package/.agent-src/skills/vision-articulation/SKILL.md +146 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/scripts/telemetry/settings.py +65 -0
- package/.agent-src/templates/scripts/tier_usage_report.py +183 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +32 -3
- package/.agent-src/templates/scripts/work_engine/scoring/memory_visibility.py +147 -1
- package/.claude-plugin/marketplace.json +18 -1
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +134 -0
- package/README.md +34 -14
- package/config/agent-settings.template.yml +28 -0
- package/docs/architecture.md +37 -11
- package/docs/catalog.md +22 -4
- package/docs/contracts/adr-forecast-construction-shape.md +89 -0
- package/docs/contracts/adr-wing4-context-spine.md +125 -0
- package/docs/contracts/command-clusters.md +41 -0
- package/docs/contracts/command-surface-tiers.md +25 -9
- package/docs/contracts/context-spine.md +8 -0
- package/docs/contracts/decision-trace-v1.md +30 -0
- package/docs/contracts/hook-architecture-v1.md +46 -0
- package/docs/contracts/mcp-beta-criteria.md +129 -0
- package/docs/contracts/memory-visibility-v1.md +33 -0
- package/docs/contracts/settings-sync-yaml-subset.md +138 -0
- package/docs/guidelines/wing4-handoff.md +127 -0
- package/docs/mcp-server.md +1 -1
- package/docs/readme-split-plan.md +102 -0
- package/package.json +1 -1
- package/scripts/_cli/cmd_doctor.py +527 -14
- package/scripts/_cli/cmd_settings_check.py +171 -0
- package/scripts/_cli/cmd_validate.py +10 -0
- package/scripts/agent-config +59 -18
- package/scripts/chat_history.py +19 -0
- package/scripts/check_council_references.py +46 -5
- package/scripts/hooks/dispatch_hook.py +5 -1
- package/scripts/hooks/replay_hook.py +144 -0
- package/scripts/hooks/state_io.py +24 -1
- package/scripts/hooks_doctor.py +184 -0
- package/scripts/install.py +5 -0
- package/scripts/lint_context_spine_usage.py +1 -0
- package/scripts/lint_hook_concern_budget.py +203 -0
- package/scripts/mcp_server/__init__.py +1 -0
- package/scripts/mcp_server/server.py +4 -3
- package/scripts/roadmap_progress_hook.py +11 -0
- package/scripts/schemas/skill.schema.json +2 -2
- package/scripts/skill_linter.py +107 -3
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: privacy-review
|
|
3
|
+
description: "Use when reviewing data flows for GDPR / CCPA / HIPAA fit — regulatory-regime delta, consent shape, breach-impact triage. Triggers on 'is this GDPR-safe', 'do we need a DPA'."
|
|
4
|
+
status: active
|
|
5
|
+
tier: senior
|
|
6
|
+
source: package
|
|
7
|
+
domain: process
|
|
8
|
+
context_spine: [regulatory-regime, customer-segment, product]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# privacy-review
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- A new feature, integration, or vendor introduces a data flow and the question is *which regulatory regime applies*, *what consent / lawful basis is required*, *what the breach-impact tail looks like*.
|
|
16
|
+
- An existing data flow is being re-scoped (new geography, new customer segment, new processor) and the regulatory-regime delta must be read before the change ships.
|
|
17
|
+
- A customer / counterparty requests a DPA, BAA, or SCC and the question is *what we can credibly sign* given current data-handling reality.
|
|
18
|
+
|
|
19
|
+
Do NOT use as a substitute for qualified privacy counsel (this skill produces the non-lawyer cognition that prepares the counsel conversation), as a contract-level read (route to `contracts-cognition` (P5); P5 composes this skill for data-clause depth), or for privacy-platform SaaS configuration / audit-tool administration.
|
|
20
|
+
|
|
21
|
+
## Cognition cluster
|
|
22
|
+
|
|
23
|
+
- **Mental model 28 — Inversion.** *"What's the worst-case if this data flow leaks, is subpoenaed, or is mis-consented?"* Inversion sizes the regulatory tail before consent / DPA shape is debated. See [`mental-models.md`](../../../docs/contracts/mental-models.md) § 28.
|
|
24
|
+
- **Mental model 1 — First principles.** Strip the data flow to: *who* (data subject), *what* (data category), *why* (lawful basis / purpose), *where* (residency / transfer), *how long* (retention), *who else* (sub-processors). Six primitives anchor every regime delta. See `mental-models.md` § 1.
|
|
25
|
+
- **Mental model 21 — Second-order thinking.** Consent design at signup interacts with marketing automation; retention defaults interact with data-subject-rights workflow; sub-processor chains interact with breach-notification timelines. Each privacy choice has downstream regime obligations. See `mental-models.md` § 21.
|
|
26
|
+
- **Context-spine — regulatory-regime + customer-segment + product.** Read **regulatory-regime** (J1) for the applicable floor (GDPR, CCPA/CPRA, HIPAA, PIPEDA, LGPD, sector-specific). Read **customer-segment** for who the data subjects are (B2C-EU = GDPR primary; US-healthcare = HIPAA primary; B2B-EU-of-US-customers = mixed). Read **product** for which features touch sensitive categories.
|
|
27
|
+
|
|
28
|
+
## Cross-wing handoff
|
|
29
|
+
|
|
30
|
+
- Cites J1 `regulatory-regime` (foundation slot) for the regime floor read; without J1, this skill cannot bind which regime applies.
|
|
31
|
+
- Hands off to P5 `contracts-cognition` for clause-level redlines on DPAs / BAAs / SCCs.
|
|
32
|
+
- Hands off to P7 `data-handling-judgment` for the classification, retention, and cross-border-transfer surface that this skill flags.
|
|
33
|
+
|
|
34
|
+
## Procedure
|
|
35
|
+
|
|
36
|
+
### Step 0: Bind the regulatory-regime floor
|
|
37
|
+
|
|
38
|
+
Read the J1 `regulatory-regime` slot for the customer-segment and geography in scope. For each applicable regime, name:
|
|
39
|
+
|
|
40
|
+
1. *Which data subjects does it protect?* (EU residents → GDPR; California residents → CCPA/CPRA; US patients in covered entities → HIPAA).
|
|
41
|
+
2. *What categories does it gate?* (GDPR special categories; HIPAA PHI; CCPA "sensitive personal information").
|
|
42
|
+
3. *What lawful-basis / consent shape does it require?* (GDPR Art. 6 + Art. 9; HIPAA authorization; CCPA notice + opt-out).
|
|
43
|
+
|
|
44
|
+
Multiple regimes can apply simultaneously; the floor is the strictest applicable.
|
|
45
|
+
|
|
46
|
+
### Step 1: Map the data flow
|
|
47
|
+
|
|
48
|
+
For the feature / integration / vendor in scope, enumerate every hop:
|
|
49
|
+
|
|
50
|
+
1. **Collection** — what data category, from whom, where, with what notice / consent.
|
|
51
|
+
2. **Processing** — who processes (us, sub-processor), where, for what purpose.
|
|
52
|
+
3. **Storage** — where stored (region, system), encrypted at rest, retention default.
|
|
53
|
+
4. **Transfer** — cross-border hops, transfer mechanism (SCC, adequacy, BCR).
|
|
54
|
+
5. **Disclosure** — who sees it (internal roles, third parties, government-access risk).
|
|
55
|
+
6. **Deletion** — retention end-state, data-subject-rights workflow, hard-delete vs soft-delete.
|
|
56
|
+
|
|
57
|
+
A flow without all six hops named is not mapped; it's assumed. Force the enumeration.
|
|
58
|
+
|
|
59
|
+
### Step 2: Compute the regulatory-regime delta
|
|
60
|
+
|
|
61
|
+
For each hop × each applicable regime, name the obligation:
|
|
62
|
+
|
|
63
|
+
1. **Lawful basis / consent** — what's the basis for this hop under this regime; is it documented; is it user-affirmative where required.
|
|
64
|
+
2. **Notice** — what notice was given at the collection hop; does it cover the downstream hops.
|
|
65
|
+
3. **DPA / BAA / SCC** — for each sub-processor / cross-border hop, what contract is required; is it in place.
|
|
66
|
+
4. **Data-subject rights** — for each hop, can we deliver access / deletion / portability / objection within the regime's window.
|
|
67
|
+
5. **Breach-notification surface** — what's the notification timeline (GDPR 72 h, HIPAA 60 d, CCPA varies), to whom, with what content.
|
|
68
|
+
|
|
69
|
+
Gaps = obligations un-met. Surface them, don't smooth them.
|
|
70
|
+
|
|
71
|
+
### Step 3: Consent design read
|
|
72
|
+
|
|
73
|
+
For each lawful-basis claim:
|
|
74
|
+
|
|
75
|
+
1. *Is the basis defensible?* (legitimate-interest balancing test documented; consent freely given / specific / informed / unambiguous; contractual necessity actually necessary).
|
|
76
|
+
2. *Is withdrawal as easy as granting?* (GDPR Art. 7.3; CCPA opt-out parity).
|
|
77
|
+
3. *Are sensitive categories handled with explicit consent / authorization?*
|
|
78
|
+
|
|
79
|
+
Consent-as-checkbox-at-signup is the canonical failure mode. Inversion check: *"if a regulator inspects the consent flow tomorrow, what would they find un-defensible?"*
|
|
80
|
+
|
|
81
|
+
### Step 4: Breach-impact triage
|
|
82
|
+
|
|
83
|
+
For each data category × hop, size the breach tail:
|
|
84
|
+
|
|
85
|
+
1. **Volume** — how many subjects per hop.
|
|
86
|
+
2. **Sensitivity** — special-category / PHI / financial / identity-document presence.
|
|
87
|
+
3. **Notification surface** — 72-hour clock starts when; who notifies (us as controller, vendor as processor); content requirements.
|
|
88
|
+
4. **Regulatory-fine exposure** — GDPR up to 4 % global turnover or €20M; HIPAA tiered; CCPA per-record statutory damages.
|
|
89
|
+
|
|
90
|
+
A hop without a sized breach-tail is unstressed.
|
|
91
|
+
|
|
92
|
+
### Step 5: Validate the privacy read before emitting
|
|
93
|
+
|
|
94
|
+
Before producing the artifact, verify three things:
|
|
95
|
+
|
|
96
|
+
1. **Hop coverage** — confirm all six data-flow hops (collection, processing, storage, transfer, disclosure, deletion) were inspected; silent skips mean the flow was not mapped.
|
|
97
|
+
2. **Regime delta completeness** — assert every applicable regime was checked for lawful basis, notice, DPA/BAA/SCC, data-subject rights, breach notification; un-checked obligations are gaps in disguise.
|
|
98
|
+
3. **Counsel handoff** — verify the artifact explicitly flags which findings need privacy-counsel sign-off vs which are operational decisions; this skill does not replace counsel.
|
|
99
|
+
|
|
100
|
+
All three must pass. If any fails, return to the failing step.
|
|
101
|
+
|
|
102
|
+
### Step 6: Emit the privacy-review note
|
|
103
|
+
|
|
104
|
+
Produce the privacy-review artifact for the feature owner, legal / counsel, and DPO if applicable. The artifact is the non-lawyer cognition that prepares the counsel conversation and gates the ship decision; it is not the legal opinion.
|
|
105
|
+
|
|
106
|
+
## Related Skills
|
|
107
|
+
|
|
108
|
+
**WHEN to use this**
|
|
109
|
+
|
|
110
|
+
- Reviewing a new feature / integration / vendor data flow against applicable regulatory regimes.
|
|
111
|
+
- Re-scoping an existing flow under a new geography, segment, or processor.
|
|
112
|
+
- Sizing the breach-impact tail before a ship decision.
|
|
113
|
+
|
|
114
|
+
**WHEN NOT to use this**
|
|
115
|
+
|
|
116
|
+
- Contract-clause redline depth — route to [`contracts-cognition`](../contracts-cognition/SKILL.md) (P5); P5 composes this skill for data-clause sections.
|
|
117
|
+
- Data-classification / retention / cross-border judgment in isolation — route to [`data-handling-judgment`](../data-handling-judgment/SKILL.md) (P7); P7 is composed by this skill.
|
|
118
|
+
- Regulatory-regime floor read in general — route to `regulatory-regime` (J1); this skill cites J1, doesn't replace it.
|
|
119
|
+
- Legal privacy opinion — route to qualified privacy counsel.
|
|
120
|
+
|
|
121
|
+
## When the agent should load this
|
|
122
|
+
|
|
123
|
+
- "Is this GDPR-safe?"
|
|
124
|
+
- "Do we need a DPA / BAA / SCC for this vendor?"
|
|
125
|
+
- "What's the breach exposure on this data flow?"
|
|
126
|
+
- "Review the consent flow for the new signup."
|
|
127
|
+
- "Wir starten in der EU — was ändert sich datenschutzrechtlich?"
|
|
128
|
+
|
|
129
|
+
## Output
|
|
130
|
+
|
|
131
|
+
1. **`data-flow-map.md`** — six hops × what / who / where / how-long / who-else per hop.
|
|
132
|
+
2. **`regime-delta.md`** — applicable regimes × obligations × gaps per hop.
|
|
133
|
+
3. **`consent-design-note.md`** — lawful-basis defensibility, withdrawal parity, sensitive-category handling.
|
|
134
|
+
4. **`breach-impact-triage.md`** — sized tail per category × hop; notification clock; fine exposure.
|
|
135
|
+
5. **`counsel-handoff.md`** — findings that need counsel sign-off vs operational decisions.
|
|
136
|
+
|
|
137
|
+
## Gotcha
|
|
138
|
+
|
|
139
|
+
- "We're US-only, GDPR doesn't apply" is often wrong; GDPR follows the data subject, not the company.
|
|
140
|
+
- Consent checkboxes pre-ticked at signup are not consent under GDPR; this is a canonical regulator-attention pattern.
|
|
141
|
+
- Sub-processor chains drift silently; a vendor adds a sub-processor 6 months in and your DPA is stale.
|
|
142
|
+
- Retention defaults of "forever" interact badly with data-subject-rights timelines under every regime.
|
|
143
|
+
|
|
144
|
+
## Do NOT
|
|
145
|
+
|
|
146
|
+
- Do NOT issue privacy legal opinions; this skill prepares cognition for counsel, not replaces counsel.
|
|
147
|
+
- Do NOT collapse multiple regimes into the most familiar one; the floor is the strictest applicable.
|
|
148
|
+
- Do NOT skip breach-impact triage; un-stressed flows ship with un-sized tail.
|
|
149
|
+
|
|
150
|
+
## Runnable example
|
|
151
|
+
|
|
152
|
+
Growth-stage SaaS adds an EU customer cohort; existing US-only flow now serves EU data subjects.
|
|
153
|
+
|
|
154
|
+
- Step 0 — Bind regime: GDPR applies (EU data subjects); CCPA still applies for California subset; HIPAA n/a (no PHI).
|
|
155
|
+
- Step 1 — Map flow: collection (signup, EU IP), processing (US-east region), storage (US-east + analytics warehouse), transfer (US-east → analytics vendor in US-west; analytics vendor uses sub-processor in India), disclosure (internal CS team, no third parties), deletion (soft-delete, 7-year retention default).
|
|
156
|
+
- Step 2 — Regime delta: lawful basis missing for analytics (no opt-in); notice doesn't disclose Indian sub-processor; no SCC with analytics vendor; data-subject-rights workflow is manual ticket only; breach-notification process undocumented.
|
|
157
|
+
- Step 3 — Consent: signup checkbox is pre-ticked for marketing — fails Art. 7. Withdrawal requires support email — fails parity.
|
|
158
|
+
- Step 4 — Breach-impact: 12k EU subjects, no special categories, GDPR fine exposure up to 4 % global turnover; 72-hour notification clock with no documented owner.
|
|
159
|
+
- Step 5 — Validate: six hops mapped; both regimes checked; counsel-handoff names SCC + analytics-vendor sub-processor chain + consent UX redesign as counsel-led; retention default + DSR workflow as operational. Pass.
|
|
160
|
+
- Step 6 — Emit privacy-review note; gate EU launch on (a) SCC with analytics vendor; (b) consent UX redesign; (c) DSR workflow with named owner and 30-day window; (d) breach-notification runbook.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: runway-cognition
|
|
3
|
+
description: "Use when reasoning about cash runway — burn shape, fundraise triggers, layoff-vs-cut-vs-grow decisions. Triggers on 'how long do we have', 'should we raise', 'cut or grow'."
|
|
4
|
+
status: active
|
|
5
|
+
tier: senior
|
|
6
|
+
source: package
|
|
7
|
+
domain: process
|
|
8
|
+
context_spine: [org-stage, fiscal-period, product]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# runway-cognition
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- A finance-partner or founder needs to read the cash runway as a **shape** (not a single number) and decide whether to raise, cut, or grow.
|
|
16
|
+
- Burn has shifted in a way the prior plan didn't anticipate; the question is whether the shift is structural (revise plan) or transient (hold).
|
|
17
|
+
- A fundraise window is opening or closing; the question is whether to start the process now, in one quarter, or hold and grow.
|
|
18
|
+
- A board / leadership debate has split between *cut to extend runway* and *invest to accelerate*; the framing — not the verdict — is what's missing.
|
|
19
|
+
|
|
20
|
+
Do NOT use for per-customer economics (route to `unit-economics-modeling` (O1)), forecast-call construction (route to `forecasting` (O2)), or multi-statement scenario construction (route to `scenario-modeling` (O4)).
|
|
21
|
+
|
|
22
|
+
## Cognition cluster
|
|
23
|
+
|
|
24
|
+
- **Mental model 21 — Second-order thinking.** *"If we cut here, then ___, and then ___."* Runway decisions are second-order by construction: the first-order effect (extended runway) is trivial; the second-order effect (slower growth → next-round terms → dilution) is the real decision. See [`mental-models.md`](../../../docs/contracts/mental-models.md) § 21.
|
|
25
|
+
- **Mental model 28 — Inversion.** *"What would force a down-round?"* Invert the fundraise question: instead of *"can we raise?"* ask *"what evidence would the market need to fund us at this valuation?"* and work backwards. See `mental-models.md` § 28.
|
|
26
|
+
- **Mental model 16 — Leading vs lagging indicators.** Cash balance is lagging; **net burn trend over the last 3 fiscal-periods** + **pipeline coverage of next-window revenue** are leading. A runway model that reads only cash balance is reading yesterday's weather. See `mental-models.md` § 16.
|
|
27
|
+
- **Context-spine — org-stage + fiscal-period + product.** Read the **org-stage** slot for what bands apply (pre-seed / seed / Series A / Series B+ / growth / public — each has a different "healthy runway" band; do not hardcode 18 months). Read **fiscal-period** for the cadence the runway model rolls forward against. Read **product** for what's GA-shippable in the window — pre-revenue product changes the cognition shape (extend until traction) vs post-revenue (extend until next milestone). See [`context-spine`](../../../docs/contracts/context-spine.md).
|
|
28
|
+
|
|
29
|
+
## Procedure
|
|
30
|
+
|
|
31
|
+
### Step 0: Establish the org-stage band
|
|
32
|
+
|
|
33
|
+
Read the `org-stage` slot. The band selection is the load-bearing
|
|
34
|
+
choice — *not the agent's*. The slot answers it. Use these shapes:
|
|
35
|
+
|
|
36
|
+
- **Pre-seed / seed** → the band is "next milestone + buffer", not a fixed month count. Milestone = the evidence the next round will fund.
|
|
37
|
+
- **Series A** → the band is "to product-market-fit signal + buffer". Buffer ≥ one fundraise cycle (typically 6–9 months in the org's segment).
|
|
38
|
+
- **Series B+ / growth** → the band is "to next funding milestone with metric-driven evidence" (NRR, gross margin, growth rate). Buffer = one quarterly cycle.
|
|
39
|
+
- **Public / cash-flow positive** → runway converges to "operating cash + facility headroom"; the cognition shifts to working-capital reasoning.
|
|
40
|
+
|
|
41
|
+
If the slot is missing or contested, STOP and ask once. Do not infer from prose.
|
|
42
|
+
|
|
43
|
+
### Step 1: Compute the burn shape, not the number
|
|
44
|
+
|
|
45
|
+
1. Net burn = net cash out over the last 3 fiscal-periods. Use 3 windows, not 1 — single-window burn is noise.
|
|
46
|
+
2. **Burn trend**: flat / accelerating / decelerating. Compute the slope. Accelerating burn is the leading indicator; flat burn at a high number is the lagging confirmation.
|
|
47
|
+
3. **Burn-multiple** (cross-cite O1 `unit-economics-modeling` Step 5): net burn / net new ARR over the same windows. Read direction across the 3 windows, not the point estimate.
|
|
48
|
+
|
|
49
|
+
Output is a shape: *"net burn $X/mo, decelerating over last 3 quarters; burn-multiple 2.4 → 1.8 → 1.3."*
|
|
50
|
+
|
|
51
|
+
### Step 2: Inspect runway against the band
|
|
52
|
+
|
|
53
|
+
1. Compute months-of-runway = cash / current-burn at three burn assumptions: status-quo, +20% (overspend scenario), −20% (cuts taken).
|
|
54
|
+
2. Compare each to the **band-appropriate target** from Step 0. Do not compare to a fixed "18 months" — that's a Series-A heuristic that mis-fires at every other stage.
|
|
55
|
+
3. Verdict shape: *"at status-quo burn, we have X months vs the Y-month band; gap is Z months."* Gap, not absolute number.
|
|
56
|
+
|
|
57
|
+
### Step 3: Decide on the fundraise question (or refuse to)
|
|
58
|
+
|
|
59
|
+
Three honest answers; pick one:
|
|
60
|
+
|
|
61
|
+
1. **Raise now** — gap is closing into the band's lower bound, and at least one fundraise-trigger condition fires (revenue milestone hit, segment proof point demonstrable, founder bandwidth available). Cross-cite Wing-3 `fundraising-narrative` (H7) for external-pitch shape.
|
|
62
|
+
2. **Hold and grow** — gap is comfortably inside the band AND the leading indicators (Step 1 burn-multiple direction + pipeline coverage of next-window revenue) are improving. Do not raise into a comfortable runway; the dilution math doesn't justify it.
|
|
63
|
+
3. **Refuse to answer** — the gap is in the band's noise but no leading indicator has direction. The honest answer is *"I'm not ready to call this; tell me what to measure for two windows."*
|
|
64
|
+
|
|
65
|
+
A *cut* (Step 4) is not an answer to the fundraise question; it's a separate decision.
|
|
66
|
+
|
|
67
|
+
### Step 4: Decide on layoff-vs-cut-vs-grow
|
|
68
|
+
|
|
69
|
+
1. **Grow** — leading indicators improving + band has headroom. The cut math is dilutive (every $ cut here is a $ of capacity not built).
|
|
70
|
+
2. **Cut non-headcount** — leading indicators flat + band tightening. Tooling / contractors / venues / paid-marketing / unused real-estate first.
|
|
71
|
+
3. **Cut headcount** — band tightening into the lower bound AND leading indicators flat-or-worsening for ≥ 2 windows. Smallest cut that moves the band by ≥ 1 buffer-cycle is the right cut. *"Across-the-board 10 %"* is the failure mode — it cuts what's already efficient at the same rate as what's not.
|
|
72
|
+
|
|
73
|
+
The premortem (mental-model 29): *"if we lay off and the leading indicators don't improve, what did we just lose?"* If the answer is "the people who would have moved the indicators", the cut is wrong.
|
|
74
|
+
|
|
75
|
+
### Step 5: Emit the runway frame
|
|
76
|
+
|
|
77
|
+
Produce `runway-frame.md` — the typed artifact `scenario-modeling` (O4) reads as its runway input. Per `docs/guidelines/wing4-handoff.md` § Chain 1 / Chain 3.
|
|
78
|
+
|
|
79
|
+
## Related Skills
|
|
80
|
+
|
|
81
|
+
**WHEN to use this**
|
|
82
|
+
|
|
83
|
+
- The question is cash-runway shape, fundraise-timing, or cut-vs-grow.
|
|
84
|
+
- The decision is whether to raise, hold, or cut — at this org-stage.
|
|
85
|
+
|
|
86
|
+
**WHEN NOT to use this**
|
|
87
|
+
|
|
88
|
+
- Per-customer economics (CAC / LTV / payback) — route to [`unit-economics-modeling`](../unit-economics-modeling/SKILL.md) (O1).
|
|
89
|
+
- Forecast-call construction (top-down vs bottom-up) — route to [`forecasting`](../forecasting/SKILL.md) (O2).
|
|
90
|
+
- Three-statement scenario construction — route to [`scenario-modeling`](../scenario-modeling/SKILL.md) (O4).
|
|
91
|
+
- External fundraise narrative — route to Wing-3 [`fundraising-narrative`](../fundraising-narrative/SKILL.md) (H7); cite for pitch shape.
|
|
92
|
+
- People decisions (layoff process, communication, severance) — route to Wing-4 [`org-design`](../org-design/SKILL.md) (Q1) for shape; people-strategist owns process.
|
|
93
|
+
|
|
94
|
+
Wing-4 handoff: this skill reads `forecast-band.json` from O2 and
|
|
95
|
+
`unit-economics-frame.md` from O1; emits `runway-frame.md` consumed
|
|
96
|
+
by O4. Per `docs/guidelines/wing4-handoff.md` § Chain 1.
|
|
97
|
+
|
|
98
|
+
## When the agent should load this
|
|
99
|
+
|
|
100
|
+
- "How long is our runway?"
|
|
101
|
+
- "Should we raise now or hold?"
|
|
102
|
+
- "Do we need to cut, and if so what?"
|
|
103
|
+
- "Wie lange reicht das Geld noch?"
|
|
104
|
+
- "Sind wir noch im sicheren Band für die Stage?"
|
|
105
|
+
|
|
106
|
+
## Output
|
|
107
|
+
|
|
108
|
+
1. **`runway-frame.md`** *(Wing-4 handoff)* — org-stage, fiscal-period, current cash, net-burn trend (flat / accel / decel), burn-multiple direction, months-of-runway at 3 burn assumptions, band-appropriate target, gap, fundraise verdict (raise / hold / refuse), cut-vs-grow verdict.
|
|
109
|
+
2. **`burn-shape.md`** — last 3 fiscal-periods net burn + burn-multiple, with trend annotation.
|
|
110
|
+
3. **`fundraise-decision.md`** — which of the three verdicts (raise / hold / refuse), leading indicators read, premortem if "raise".
|
|
111
|
+
4. **`cut-or-grow.md`** *(only if cut verdict)* — non-headcount cuts first, headcount-cut shape if required, premortem on each cut.
|
|
112
|
+
|
|
113
|
+
## Gotcha
|
|
114
|
+
|
|
115
|
+
- "18 months runway" is a Series-A heuristic; applying it to seed (where milestone matters more than month count) or growth (where metric milestones matter more) silently mis-frames the decision.
|
|
116
|
+
- Single-window net burn is noise. Always 3 windows.
|
|
117
|
+
- Burn-multiple direction matters more than the point estimate. A 3.0 going to 2.0 is healthier than a 1.8 going to 2.4.
|
|
118
|
+
- Raising into a comfortable runway is dilutive theatre — *"we have 18 months so we should raise now"* doesn't survive a second-order check.
|
|
119
|
+
- *Across-the-board* cuts cut efficient teams at the same rate as inefficient ones. The smallest targeted cut that moves the band wins.
|
|
120
|
+
|
|
121
|
+
## Do NOT
|
|
122
|
+
|
|
123
|
+
- Do NOT compare months-of-runway against a fixed number; always against the band-appropriate target from Step 0.
|
|
124
|
+
- Do NOT answer the fundraise question without checking leading indicators (Step 1 + pipeline coverage).
|
|
125
|
+
- Do NOT collapse cut-vs-grow into a single "extend runway" verdict — they're separate decisions with separate evidence.
|
|
126
|
+
|
|
127
|
+
## Runnable example
|
|
128
|
+
|
|
129
|
+
Series-A SaaS, $4.2M cash, fiscal-period quarterly.
|
|
130
|
+
|
|
131
|
+
- Step 0 — `org-stage = series-a`. Band: "to PMF signal + buffer 6–9 months". Target = NRR > 110 % + segment proof + 9-month cycle ≈ 12–15 months.
|
|
132
|
+
- Step 1 — net burn last 3 quarters: $480k / $510k / $560k → accelerating. Burn-multiple: 2.1 → 1.9 → 1.7 → improving despite accel-burn (revenue catching up).
|
|
133
|
+
- Step 2 — at status-quo $560k/mo: 7.5 months runway. Target band 12–15 months. Gap = 4.5–7.5 months below band.
|
|
134
|
+
- Step 3 — verdict = **raise now**. Gap closes into lower-bound; segment-proof demonstrable; burn-multiple direction is the credible story. Cross-cite H7 for pitch.
|
|
135
|
+
- Step 4 — grow (don't cut). Cutting now would kill the burn-multiple-improvement story; the cut math is dilutive vs the raise.
|
|
136
|
+
- Step 5 — emit `runway-frame.md`: `org-stage=series-a, gap=-5mo, fundraise=raise, cut-or-grow=grow, premortem="if raise fails by Q3, structural cut to non-headcount + extend by 4 months"`.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scenario-modeling
|
|
3
|
+
description: "Use when constructing base / upside / downside scenarios — three-statement modeling, sensitivity analysis, optionality reasoning. Triggers on 'model the scenarios', 'what if growth halves'."
|
|
4
|
+
status: active
|
|
5
|
+
tier: senior
|
|
6
|
+
source: package
|
|
7
|
+
domain: process
|
|
8
|
+
context_spine: [org-stage, fiscal-period, product]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# scenario-modeling
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- A board pack, fundraise process, or annual plan needs base / upside / downside scenarios — not a single forecast number with a sensitivity table bolted on.
|
|
16
|
+
- A strategic bet (build / buy / partner, geo-expansion, pricing change) needs the **shape of its downside** before it locks; *"what's the worst defensible outcome"* is the load-bearing question.
|
|
17
|
+
- A founder or finance-partner needs to compare two options by their optionality, not their expected value — the option whose downside is bounded wins, not the option with the highest mean.
|
|
18
|
+
|
|
19
|
+
Do NOT use for per-customer economics (route to `unit-economics-modeling` (O1)), forecast-call construction (route to `forecasting` (O2)), or runway-shape reasoning (route to `runway-cognition` (O3)). This skill **composes** all three; it doesn't replace them.
|
|
20
|
+
|
|
21
|
+
## Cognition cluster
|
|
22
|
+
|
|
23
|
+
- **Mental model 21 — Second-order thinking.** Each scenario is a chain: revenue → margin → burn → runway → fundraise → dilution. Single-statement scenarios (just revenue) skip the chain and read like wishlists. See [`mental-models.md`](../../../docs/contracts/mental-models.md) § 21.
|
|
24
|
+
- **Mental model 29 — Premortem.** *"It's two windows from now and the downside scenario happened. Walk back."* The premortem forces concrete failure paths into the model; without it the downside is just a 20 % discount on base. See `mental-models.md` § 29.
|
|
25
|
+
- **Mental model 26 — Optionality.** Optionality = preserved future choices. Read each scenario by what choices it preserves vs forecloses. Bounded downside + preserved optionality > unbounded upside with foreclosed optionality. See `mental-models.md` § 26.
|
|
26
|
+
- **Context-spine — org-stage + fiscal-period + product.** Read **org-stage** for which scenarios matter (pre-revenue → upside is traction speed; growth → downside is competitive pressure). Read **fiscal-period** for the modeling horizon. Read **product** for which revenue lines are real vs roadmap. See [`context-spine`](../../../docs/contracts/context-spine.md).
|
|
27
|
+
|
|
28
|
+
## Procedure
|
|
29
|
+
|
|
30
|
+
### Step 0: Inspect and pull the upstream frames
|
|
31
|
+
|
|
32
|
+
Read the three Wing-4 inputs:
|
|
33
|
+
|
|
34
|
+
1. **`unit-economics-frame.md`** from O1 — CAC, LTV, contribution margin per channel and blended; burn-multiple direction.
|
|
35
|
+
2. **`forecast-band.json`** from O2 — construction shape, commit / best-case / pipeline, confidence band, retro signature.
|
|
36
|
+
3. **`runway-frame.md`** from O3 — current cash, burn shape, band-target, fundraise verdict, cut-or-grow verdict.
|
|
37
|
+
|
|
38
|
+
If any frame is missing, STOP and route to the producing skill. Do not synthesize the upstream frame; that breaks the boundary.
|
|
39
|
+
|
|
40
|
+
### Step 1: Define the three scenario shapes
|
|
41
|
+
|
|
42
|
+
1. **Base** = O2 commit + O3 status-quo burn + O1 channel mix unchanged. The "everything you've already said" scenario.
|
|
43
|
+
2. **Upside** = O2 best-case + O1 channel-mix shift to highest LTV/CAC + one named tailwind (segment proof / channel scale / pricing). *Name the tailwind*; un-named upside is wishlisting.
|
|
44
|
+
3. **Downside** = O2 commit-band lower bound + O1 channel mix shift to declining channel + one named headwind (segment churn / channel saturation / competitive entry). *Name the headwind*; un-named downside is "everything is 20 % worse".
|
|
45
|
+
|
|
46
|
+
### Step 2: Construct three statements per scenario
|
|
47
|
+
|
|
48
|
+
For each of the three scenarios, write three statements — **not three full models, three statements**:
|
|
49
|
+
|
|
50
|
+
1. **Revenue statement** — top-line shape over the horizon. Cite which O2 inputs flex.
|
|
51
|
+
2. **Margin statement** — gross + contribution shape. Cite which O1 inputs flex (channel mix, pricing, COGS).
|
|
52
|
+
3. **Cash statement** — net burn → runway gap shape. Cite the O3 band-target it lands against.
|
|
53
|
+
|
|
54
|
+
Each scenario = nine numbers (three statements × three time slices: now / mid-horizon / end-horizon) plus a one-line "what made this scenario this scenario" explanation.
|
|
55
|
+
|
|
56
|
+
### Step 3: Premortem each scenario
|
|
57
|
+
|
|
58
|
+
1. **Base premortem** — *"if base under-delivers by 20 %, which input was the load-bearing assumption?"* If the answer is one input, the base is fragile; demote that input and recompute.
|
|
59
|
+
2. **Upside premortem** — *"if upside hits, did we have the operating capacity to absorb it?"* Upside without operating-capacity reasoning is a fundraise pitch, not a plan.
|
|
60
|
+
3. **Downside premortem** — *"if downside hits, what's the next decision and when?"* Tag the decision points; un-tagged downsides have no operational meaning.
|
|
61
|
+
|
|
62
|
+
### Step 4: Run sensitivity, not Monte Carlo
|
|
63
|
+
|
|
64
|
+
For each scenario, vary the single load-bearing input (named in Step 3) by ±20 %. Read whether the runway-gap verdict changes shape.
|
|
65
|
+
|
|
66
|
+
A scenario whose verdict is stable under ±20 % sensitivity on its load-bearing input is robust. A scenario whose verdict flips is brittle; demote it into a *"what if"* footnote, not a board-pack scenario.
|
|
67
|
+
|
|
68
|
+
Monte-Carlo is over-precise for this cognition; the question is *"does the verdict survive the obvious sensitivity?"* — not *"what's the 95th percentile?"*.
|
|
69
|
+
|
|
70
|
+
### Step 5: Read the optionality, not just the mean
|
|
71
|
+
|
|
72
|
+
For each scenario, write the option-preservation note:
|
|
73
|
+
|
|
74
|
+
- *"This scenario preserves: ___ (named choices)."*
|
|
75
|
+
- *"This scenario forecloses: ___ (named choices)."*
|
|
76
|
+
|
|
77
|
+
The decision shape is rarely *"pick the highest mean"*. It's *"pick the scenario whose foreclosures we can live with and whose preserved options match the strategy"*.
|
|
78
|
+
|
|
79
|
+
### Step 6: Emit the scenario bundle
|
|
80
|
+
|
|
81
|
+
Produce `scenario-bundle.md` — the artifact strategist (T2 / P1 `build-buy-partner`) and finance-partner (T1) read for downstream decisions. Per `docs/guidelines/wing4-handoff.md` § Chain 1.
|
|
82
|
+
|
|
83
|
+
## Related Skills
|
|
84
|
+
|
|
85
|
+
**WHEN to use this**
|
|
86
|
+
|
|
87
|
+
- Constructing base / upside / downside for a board pack, fundraise, or strategic bet.
|
|
88
|
+
- Comparing two strategic options by their optionality and downside shape.
|
|
89
|
+
|
|
90
|
+
**WHEN NOT to use this**
|
|
91
|
+
|
|
92
|
+
- Per-customer economics — route to [`unit-economics-modeling`](../unit-economics-modeling/SKILL.md) (O1).
|
|
93
|
+
- Forecast-call construction — route to [`forecasting`](../forecasting/SKILL.md) (O2).
|
|
94
|
+
- Runway shape / fundraise timing — route to [`runway-cognition`](../runway-cognition/SKILL.md) (O3).
|
|
95
|
+
- Insource-vs-outsource-vs-acquire decisions — route to [`build-buy-partner`](../build-buy-partner/SKILL.md) (P1); P1 consumes this skill's bundle.
|
|
96
|
+
- Whole-business intrinsic value with terminal value — route to [`dcf-modeling`](../dcf-modeling/SKILL.md).
|
|
97
|
+
|
|
98
|
+
Wing-4 handoff: this skill reads `unit-economics-frame.md` (O1),
|
|
99
|
+
`forecast-band.json` (O2), `runway-frame.md` (O3); emits
|
|
100
|
+
`scenario-bundle.md` consumed by P1 and T1. Per
|
|
101
|
+
`docs/guidelines/wing4-handoff.md` § Chain 1.
|
|
102
|
+
|
|
103
|
+
## When the agent should load this
|
|
104
|
+
|
|
105
|
+
- "Model base / upside / downside for the board pack."
|
|
106
|
+
- "What does the downside look like if growth halves?"
|
|
107
|
+
- "Compare option A and option B by their downside shape."
|
|
108
|
+
- "Wie sehen unsere Szenarien aus?"
|
|
109
|
+
|
|
110
|
+
## Output
|
|
111
|
+
|
|
112
|
+
1. **`scenario-bundle.md`** *(Wing-4 handoff)* — three scenarios × three statements × three time slices, plus tailwind / headwind names, sensitivity-stability flag, and optionality note per scenario.
|
|
113
|
+
2. **`load-bearing-inputs.md`** — one input named per scenario as the load-bearing assumption; sensitivity result on each.
|
|
114
|
+
3. **`optionality-map.md`** — preserved / foreclosed choices per scenario; decision-shape recommendation.
|
|
115
|
+
4. **`premortems.md`** — base / upside / downside premortems with named failure paths and tagged decision points.
|
|
116
|
+
|
|
117
|
+
## Gotcha
|
|
118
|
+
|
|
119
|
+
- "Downside = base × 0.8" is the most common deception. Downside must have a *named* headwind; without it the scenario doesn't model anything.
|
|
120
|
+
- Upside without operating-capacity reasoning is a fundraise narrative, not a plan. Capacity (hiring lag, infrastructure, support load) is the inversion check.
|
|
121
|
+
- Monte-Carlo simulations on a forecast that has a typed confidence band are over-precise theatre. Sensitivity ±20 % on the load-bearing input is the honest test.
|
|
122
|
+
- Three-statement = three statements per scenario, not three full models. Nine numbers + one-line explanation = a readable bundle.
|
|
123
|
+
|
|
124
|
+
## Do NOT
|
|
125
|
+
|
|
126
|
+
- Do NOT construct scenarios without the three upstream frames (O1 / O2 / O3) — that breaks Wing-4 cognition boundaries.
|
|
127
|
+
- Do NOT name a scenario without naming its tailwind / headwind / decision points — the labels are the cognition.
|
|
128
|
+
- Do NOT optimise on mean; optimise on optionality + downside shape.
|
|
129
|
+
|
|
130
|
+
## Runnable example
|
|
131
|
+
|
|
132
|
+
Series-A SaaS, annual plan window.
|
|
133
|
+
|
|
134
|
+
- Step 0 — frames: O1 says blended LTV/CAC 3.1, burn-multiple 1.8 decel. O2 says hybrid forecast, commit $6.3M, best-case $8.1M, band ±14 %. O3 says runway gap −5mo, fundraise=raise.
|
|
135
|
+
- Step 1 — Base = $6.3M revenue, status-quo burn. Upside = $8.1M, tailwind = "enterprise segment proof point closes Q2". Downside = $5.4M, headwind = "competitor enters mid-market, churn spikes 2× in Q3".
|
|
136
|
+
- Step 2 — three statements × three slices each. Base lands at gap −5mo; upside closes to −1mo; downside opens to −9mo.
|
|
137
|
+
- Step 3 — base premortem: load-bearing = enterprise segment close rate. Upside premortem: capacity = need 2 AEs by Q1 or upside is shape-wrong. Downside premortem: decision point = if churn ≥ 1.5× by mid-Q3, cut non-headcount + tighten fundraise narrative.
|
|
138
|
+
- Step 4 — sensitivity on close-rate ±20 %: base flips brittle (gap shape changes); demote to "fragile-base" footnote, re-run with conservative close rate.
|
|
139
|
+
- Step 5 — upside preserves M&A optionality; downside forecloses pricing-experiment optionality. Recommendation: plan against re-run base, raise narrative on upside, hold downside as triggered playbook.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: throughput-vs-morale-tradeoff
|
|
3
|
+
description: "Use when balancing eng-team velocity vs quality vs burnout — on-call load, focus fragmentation, reorg shock. Triggers on 'team is burning out', 'why is velocity dropping'."
|
|
4
|
+
status: active
|
|
5
|
+
tier: senior
|
|
6
|
+
source: package
|
|
7
|
+
domain: process
|
|
8
|
+
context_spine: [org-stage, product, customer-segment]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# throughput-vs-morale-tradeoff
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- An engineering team's velocity is dropping (or about to) and the question is *which lever to pull* — scope, on-call, focus-time, team-shape — and *which lever costs more morale than it returns*.
|
|
16
|
+
- Burnout signals are surfacing (cancelled 1:1s, slipped commitments, attrition risk, low Slack-volume) and the question is *which load to take off the team before someone leaves*.
|
|
17
|
+
- A reorg, growth push, or major deadline is being planned and the question is *what's the throughput-vs-morale trade* before the decision is made, not after.
|
|
18
|
+
|
|
19
|
+
Do NOT use this for individual performance issues (route to Q4 `perf-feedback-craft` or S1 `one-on-one-cadence`), as a hiring-rate skill (route to S2 `hiring-loop-design`), or for team-velocity-tracking-platform configuration.
|
|
20
|
+
|
|
21
|
+
## Cognition cluster
|
|
22
|
+
|
|
23
|
+
- **Mental model — Theory of constraints.** Team throughput has one binding constraint at a time — usually code review queue, single-threaded role, on-call load, or focus-fragmentation. Identifying the constraint with file:line precision is the most leveraged hour an EM spends in a quarter; lifting non-constraint loads produces zero throughput gain. See [`mental-models.md`](../../../docs/contracts/mental-models.md).
|
|
24
|
+
- **Mental model 21 — Second-order thinking.** Throughput borrowed from morale always compounds back. A two-quarter sprint to a deadline costs three-to-four quarters of slower hiring (reputation), slower velocity (post-burnout shape), and senior-IC attrition. Compute the round-trip, not just the deadline.
|
|
25
|
+
- **Mental model 28 — Inversion.** *"What would make this team silently disengage by quarter-end?"* — usually: chronic on-call without recovery, focus-fragmentation > 4 context-switches / day, reorg-shock without re-shape time, leadership-promised-relief that doesn't arrive. Inversion surfaces the 4 canonical morale-collapse causes.
|
|
26
|
+
- **Mental model — Base rates.** A team running at 80% utilization has zero slack for incidents; this is the base rate, not a worst case. A team running at 90% utilization for two quarters has 50%+ attrition base rate. Most EMs over-estimate sustainable utilization by 20 percentage points.
|
|
27
|
+
- **Context-spine — org-stage + product + customer-segment.** Read **org-stage** for what's feasible (10-person co: high tolerance for surge; 50-person: pattern-establishing matters; 150+: well-established burn-rate signals). Read **product** for incident-load shape (consumer high-traffic = heavier on-call; deep-domain = lower volume / higher severity). Read **customer-segment** for SLA-driven on-call obligations.
|
|
28
|
+
|
|
29
|
+
## Cross-wing handoff
|
|
30
|
+
|
|
31
|
+
- Composed by T4 `engineering-manager` persona; specializes the throughput / morale conversation for engineering teams.
|
|
32
|
+
- Hands off to Q4 `perf-feedback-craft` when team-level morale signals trigger individual feedback exchanges.
|
|
33
|
+
- Hands off to Q1 `org-design` when the binding constraint is structural (team boundary, single-threaded role, span-of-control).
|
|
34
|
+
- Hands off to O3 `runway-cognition` when the throughput-vs-morale trade is being driven by runway pressure — finance owns the runway pressure, EM owns whether the team can absorb the response.
|
|
35
|
+
|
|
36
|
+
## Procedure
|
|
37
|
+
|
|
38
|
+
### Step 0: Diagnose the binding constraint, not the symptoms
|
|
39
|
+
|
|
40
|
+
Symptoms (slipped commitment, missed deadline, attrition signal) point at constraints; force the diagnosis before reacting:
|
|
41
|
+
|
|
42
|
+
1. **Code-review queue** — PRs waiting > 24h on average. Throughput bound by review, not by writing code.
|
|
43
|
+
2. **Single-threaded role** — one person owns N critical workstreams; vacation / sickness collapses progress.
|
|
44
|
+
3. **On-call load** — primary on-call shift > 1 in 6 weeks for the same person, or > 50% of weeks with paging; on-call exhaustion is invisible until departures.
|
|
45
|
+
4. **Focus fragmentation** — > 4 context switches / day, or < 3 hours of contiguous focus time / day. Producing systems work in 30-minute windows is a known anti-pattern.
|
|
46
|
+
5. **Scope volatility** — > 30% scope change mid-cycle; team velocity drops because half the work in progress becomes throwaway.
|
|
47
|
+
6. **Reorg / role-change shock** — new manager, new team boundaries, or new role within 90 days; 3–6 months of degraded throughput is the baseline.
|
|
48
|
+
|
|
49
|
+
A team running on multiple constraints simultaneously is in burnout shape; pick the binding one first.
|
|
50
|
+
|
|
51
|
+
### Step 1: Size the current throughput / morale state
|
|
52
|
+
|
|
53
|
+
For the team in scope, gather:
|
|
54
|
+
|
|
55
|
+
1. **Sustained utilization** — % of capacity allocated to committed work; > 80% = no slack; > 90% for > 2 quarters = attrition base rate triggers.
|
|
56
|
+
2. **On-call distribution** — shifts per person per quarter; pages per shift; recovery time after high-page shifts.
|
|
57
|
+
3. **Morale signals** — cancellation rate of optional meetings, 1:1 cadence health, Slack-volume changes, vacation usage. Each signal is noisy alone; three or more co-occurring = pattern.
|
|
58
|
+
4. **Throughput trend** — committed-vs-delivered ratio over last 6 cycles. Single-cycle miss = noise; three-cycle decline = pattern.
|
|
59
|
+
|
|
60
|
+
Without measurement, the trade is being made on vibes; force the read.
|
|
61
|
+
|
|
62
|
+
### Step 2: Inspect the proposed lever before pulling it
|
|
63
|
+
|
|
64
|
+
For each candidate lever to lift the constraint, run an inspect step before committing:
|
|
65
|
+
|
|
66
|
+
1. **Scope reduction** — what gets deferred, by whom, with what stakeholder communication. Reduces load cleanly; cost = scope conversation with PM / stakeholders.
|
|
67
|
+
2. **Hiring** — only relevant if hiring lead-time < timeline; cost = onboarding tax (Q3) on existing team.
|
|
68
|
+
3. **On-call rotation reshape** — wider rotation, better runbooks, page-quality work. Cost = upfront engineering investment.
|
|
69
|
+
4. **Focus-protection** — meeting-free days, no-Slack windows, makers-vs-managers calendaring. Cost = manager-communication overhead.
|
|
70
|
+
5. **Reorg / boundary reshape** — Q1 territory; cost = 3–6 months of degraded throughput before settling.
|
|
71
|
+
|
|
72
|
+
The cheapest-looking lever (just push harder for 6 weeks) is the most expensive in second-order terms.
|
|
73
|
+
|
|
74
|
+
### Step 3: Map the round-trip cost honestly
|
|
75
|
+
|
|
76
|
+
For the chosen lever, name the round-trip:
|
|
77
|
+
|
|
78
|
+
1. **Q1 cost / benefit** — immediate impact.
|
|
79
|
+
2. **Q2 cost / benefit** — settling impact.
|
|
80
|
+
3. **Q3+ cost / benefit** — compounding impact (attrition base rate, hiring reputation, internal trust).
|
|
81
|
+
|
|
82
|
+
Pushing harder for 6 weeks looks like a + in Q1 but is usually – in Q2 + Q3 + Q4 once attrition + slower hiring + reputation effects ripple. Forcing the round-trip honest is the most-skipped step.
|
|
83
|
+
|
|
84
|
+
### Step 4: Lock the recovery shape, not just the surge shape
|
|
85
|
+
|
|
86
|
+
Throughput borrowed from morale must be paid back; the recovery is part of the design, not an afterthought:
|
|
87
|
+
|
|
88
|
+
1. **Recovery window** — minimum 4 weeks of reduced-load work after a 6-week sprint; 8 weeks after a quarter-long sprint.
|
|
89
|
+
2. **No-overlap rule** — recovery from sprint A cannot run during sprint B; sequential, not parallel.
|
|
90
|
+
3. **Recovery-shape clarity** — what does "reduced load" mean concretely (e.g., 20% allocation to tech-debt, 0 on-call shifts for the 2 people who carried most pages, explicit no-deadline-commits in the recovery window).
|
|
91
|
+
4. **Manager-visible recovery** — recovery is named, scheduled, and protected; recoveries that exist only in the manager's head do not happen.
|
|
92
|
+
|
|
93
|
+
Sprints without recovery are extraction; the team learns that "sprint" means "permanent state" and morale collapses.
|
|
94
|
+
|
|
95
|
+
### Step 5: Validate the throughput / morale plan before announcing
|
|
96
|
+
|
|
97
|
+
Before communicating the plan to the team, inspect three things:
|
|
98
|
+
|
|
99
|
+
1. **Constraint named with precision** — confirm Step 0 named exactly one binding constraint with file:line / person:role specificity; multi-constraint or vague reads fail and must be re-diagnosed.
|
|
100
|
+
2. **Round-trip honest** — assert Step 3's Q2+ cost is sized in attrition-base-rate and throughput-recovery-time terms; missing round-trip means the plan over-claims and must be re-sized.
|
|
101
|
+
3. **Recovery shape locked** — verify Step 4's recovery window is named, scheduled, and on the calendar before the surge starts; recovery promised after surge launches almost never lands.
|
|
102
|
+
|
|
103
|
+
All three must pass. If any fails, return to the failing step.
|
|
104
|
+
|
|
105
|
+
### Step 6: Emit the throughput / morale plan
|
|
106
|
+
|
|
107
|
+
Produce the plan artifact for the EM + their VP / leadership chain + a team-facing version. The leadership artifact contains the diagnosis + lever + round-trip + recovery shape. The team-facing version names the surge + when it ends + what recovery looks like + how morale signals will be monitored during the surge.
|
|
108
|
+
|
|
109
|
+
## Related Skills
|
|
110
|
+
|
|
111
|
+
**WHEN to use this**
|
|
112
|
+
|
|
113
|
+
- Velocity drops, missed commitments, surfacing burnout signals.
|
|
114
|
+
- Pre-decision read on a planned sprint / deadline / reorg.
|
|
115
|
+
- Annual capacity / on-call shape planning.
|
|
116
|
+
- Post-incident retrospective when team load was a contributing factor.
|
|
117
|
+
|
|
118
|
+
**WHEN NOT to use this**
|
|
119
|
+
|
|
120
|
+
- Individual performance issues — route to [`perf-feedback-craft`](../perf-feedback-craft/SKILL.md) (Q4) or [`one-on-one-cadence`](../one-on-one-cadence/SKILL.md) (S1).
|
|
121
|
+
- Hiring-loop / role-family design — route to [`hiring-loop-design`](../hiring-loop-design/SKILL.md) (S2).
|
|
122
|
+
- Org-shape / team-boundary decisions — route to [`org-design`](../org-design/SKILL.md) (Q1).
|
|
123
|
+
- Runway-pressure-driven scope conversation — route to [`runway-cognition`](../runway-cognition/SKILL.md) (O3) for the upstream finance read.
|
|
124
|
+
|
|
125
|
+
## When the agent should load this
|
|
126
|
+
|
|
127
|
+
- "Team is burning out."
|
|
128
|
+
- "Why is velocity dropping?"
|
|
129
|
+
- "Should we push harder this quarter?"
|
|
130
|
+
- "On-call is killing the team."
|
|
131
|
+
- "Wie balanciere ich Tempo und Moral?"
|
|
132
|
+
|
|
133
|
+
## Output
|
|
134
|
+
|
|
135
|
+
1. **`constraint-diagnosis.md`** — named binding constraint with file:line / person:role specificity.
|
|
136
|
+
2. **`current-state-sizing.md`** — sustained utilization, on-call distribution, morale signals, throughput trend.
|
|
137
|
+
3. **`lever-comparison.md`** — candidate levers × immediate cost / benefit × round-trip cost / benefit.
|
|
138
|
+
4. **`recovery-shape.md`** — recovery window + reduced-load definition + no-overlap rule + calendar-locked dates.
|
|
139
|
+
5. **`team-facing-plan.md`** — surge scope + end date + recovery shape + morale-signal monitoring during surge.
|
|
140
|
+
|
|
141
|
+
## Gotcha
|
|
142
|
+
|
|
143
|
+
- "We can push harder for 6 weeks" is the most expensive sentence an EM says. Round-trip cost is 3–4 quarters.
|
|
144
|
+
- 80% sustained utilization has zero slack for incidents; teams at 90% for two quarters have base-rate 50%+ attrition.
|
|
145
|
+
- A surge without a calendar-locked recovery is extraction. The team learns the word "sprint" means "permanent state".
|
|
146
|
+
- Multi-constraint reads are usually under-diagnosed; press for the binding one, even if multiple feel binding.
|
|
147
|
+
- "Morale" in EMs' heads is usually 30–60 days behind reality; lagging-indicator decisions are the canonical mis-shape.
|
|
148
|
+
|
|
149
|
+
## Do NOT
|
|
150
|
+
|
|
151
|
+
- Do NOT pull a throughput lever without sizing the round-trip cost; first-order math always favors pulling, second-order math often doesn't.
|
|
152
|
+
- Do NOT promise recovery after the surge ends; schedule it before the surge starts or it doesn't happen.
|
|
153
|
+
- Do NOT confuse this with individual-performance work; team-level constraints have team-level fixes.
|
|
154
|
+
|
|
155
|
+
## Runnable example
|
|
156
|
+
|
|
157
|
+
Series-B SaaS eng team (8 engineers), velocity has dropped 30% over 3 cycles, two senior ICs hinting at leaving, on-call has been heavy.
|
|
158
|
+
|
|
159
|
+
- Step 0 — Constraint diagnosis: 2 of 8 engineers are doing 60% of on-call (specialty domain knowledge); single-threaded-role + on-call-load both binding. Binding-most: on-call distribution.
|
|
160
|
+
- Step 1 — Current state: 88% sustained utilization (no slack), 4-in-6-week primary on-call for the 2 specialists, vacation usage near zero for those 2, throughput trend declining 3 cycles. Pattern is unambiguous.
|
|
161
|
+
- Step 2 — Lever comparison: (a) push-harder = + 0 throughput, very negative round-trip; (b) widen on-call rotation requires 6 weeks of runbook + onboarding work for 3 other engineers; (c) defer Q3 scope by 20% — clean immediate relief; (d) hire — lead-time 3-6 months, doesn't help this cycle.
|
|
162
|
+
- Step 3 — Round-trip: lever (b) + (c) combined: Q1 = -10% throughput on current scope (runbook investment + deferred scope) but + 0 on roadmap (defer absorbed); Q2 = + 15% throughput (wider on-call + recovered ICs); Q3+ = + retention base rate (specialists no longer at exhaustion).
|
|
163
|
+
- Step 4 — Recovery shape: 6 weeks of reduced load for the 2 specialists (no primary on-call, 20% tech-debt allocation) starting week 1 of Q3. Calendar-locked, communicated.
|
|
164
|
+
- Step 5 — Validate: binding constraint named with person-specificity; round-trip sized in attrition + Q2 / Q3 throughput terms; recovery on calendar before plan announced. Pass.
|
|
165
|
+
- Step 6 — Emit leadership plan (diagnosis + (b)+(c) lever + round-trip + recovery) and team-facing plan (Q3 scope-defer + on-call reshape + named recovery window for the 2 specialists).
|