@unified-product-graph/core 0.8.1 → 0.8.2
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/CHANGELOG.md +12 -0
- package/dist/index.cjs +1253 -306
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +62 -15
- package/dist/index.d.ts +62 -15
- package/dist/index.js +1253 -306
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1136,7 +1136,7 @@ var UPG_EDGE_CATALOG = {
|
|
|
1136
1136
|
// product → persona is the most fundamental relationship in the
|
|
1137
1137
|
// user domain ("who is this product for?") and was the only way to
|
|
1138
1138
|
// anchor a fresh persona to its product before this edge existed. Without
|
|
1139
|
-
// it, the natural agent path through `/upg-persona` produced an orphan
|
|
1139
|
+
// it, the natural agent path through `/upg-new-persona` produced an orphan
|
|
1140
1140
|
// persona only attached laterally via `ideal_customer_profile_maps_to_persona`
|
|
1141
1141
|
// or `positioning_resonates_with_persona`. Semantic, not hierarchy: a
|
|
1142
1142
|
// product doesn't "contain" personas; it targets them.
|
|
@@ -2351,6 +2351,13 @@ var UPG_EDGE_CATALOG = {
|
|
|
2351
2351
|
// release strategy to the concrete deployments it governs.
|
|
2352
2352
|
incident_affects_feature: { forward_verb: "affects", reverse_verb: "affected_by", classification: "cross-domain", source_type: "incident", target_type: "feature" },
|
|
2353
2353
|
release_strategy_used_by_deployment: { forward_verb: "used_by", reverse_verb: "uses", classification: "cross-domain", source_type: "release_strategy", target_type: "deployment" },
|
|
2354
|
+
// v0.8.2 (UPG-615): ITIL/ITSM incident management explicitly links an incident
|
|
2355
|
+
// to the customer-facing support tickets/cases it spawns — when a service
|
|
2356
|
+
// breaks, customers raise tickets; the incident is the cause, the ticket the
|
|
2357
|
+
// effect. Closes the otherwise-unmediated "Customer Support" island in
|
|
2358
|
+
// `playbook:operations-quality`, binding `support_ticket` to the incident/ops
|
|
2359
|
+
// spine. Source: ITIL v4 incident management; DORA/SRE customer-facing impact.
|
|
2360
|
+
incident_generates_support_ticket: { forward_verb: "generates", reverse_verb: "generated_by", classification: "cross-domain", source_type: "incident", target_type: "support_ticket" },
|
|
2354
2361
|
// Cluster C: User Research linkage matrix.
|
|
2355
2362
|
// research_study → {participant, research_question, survey_response,
|
|
2356
2363
|
// interview_guide} containment edges already exist (49/49 in Wave 4).
|
|
@@ -12158,6 +12165,9 @@ var UPG_FRAMEWORKS = [
|
|
|
12158
12165
|
},
|
|
12159
12166
|
{
|
|
12160
12167
|
"id": "value-proposition-canvas",
|
|
12168
|
+
"approach_ids": [
|
|
12169
|
+
"trace"
|
|
12170
|
+
],
|
|
12161
12171
|
"name": "Value Proposition Canvas",
|
|
12162
12172
|
"version": "1.0.0",
|
|
12163
12173
|
"description": "Map customer jobs, pains, and gains on one side, then align product features, pain relievers, and gain creators on the other to achieve product-market fit.",
|
|
@@ -12262,6 +12272,9 @@ var UPG_FRAMEWORKS = [
|
|
|
12262
12272
|
},
|
|
12263
12273
|
{
|
|
12264
12274
|
"id": "persona-canvas",
|
|
12275
|
+
"approach_ids": [
|
|
12276
|
+
"trace"
|
|
12277
|
+
],
|
|
12265
12278
|
"name": "Persona Canvas",
|
|
12266
12279
|
"version": "1.0.0",
|
|
12267
12280
|
"description": "Demographics, goals, frustrations, JTBD: a structured template for creating research-backed personas.",
|
|
@@ -12374,6 +12387,9 @@ var UPG_FRAMEWORKS = [
|
|
|
12374
12387
|
},
|
|
12375
12388
|
{
|
|
12376
12389
|
"id": "empathy-map",
|
|
12390
|
+
"approach_ids": [
|
|
12391
|
+
"trace"
|
|
12392
|
+
],
|
|
12377
12393
|
"name": "Empathy Map",
|
|
12378
12394
|
"version": "1.0.0",
|
|
12379
12395
|
"description": "Visualise what a user says, thinks, does, and feels to build deeper empathy and uncover hidden needs.",
|
|
@@ -12534,6 +12550,7 @@ var UPG_FRAMEWORKS = [
|
|
|
12534
12550
|
"property": "evolution_stage",
|
|
12535
12551
|
"type": "enum",
|
|
12536
12552
|
"required": true,
|
|
12553
|
+
"scope": "framework",
|
|
12537
12554
|
"label": "Evolution Stage",
|
|
12538
12555
|
"description": "Where this component sits on the evolution axis",
|
|
12539
12556
|
"enum_values": [
|
|
@@ -12547,6 +12564,7 @@ var UPG_FRAMEWORKS = [
|
|
|
12547
12564
|
"property": "visibility",
|
|
12548
12565
|
"type": "number",
|
|
12549
12566
|
"required": true,
|
|
12567
|
+
"scope": "framework",
|
|
12550
12568
|
"label": "Visibility",
|
|
12551
12569
|
"description": "Y-axis position (0=infrastructure, 1=anchor/user)"
|
|
12552
12570
|
}
|
|
@@ -12556,6 +12574,7 @@ var UPG_FRAMEWORKS = [
|
|
|
12556
12574
|
"property": "evolution_stage",
|
|
12557
12575
|
"type": "enum",
|
|
12558
12576
|
"required": true,
|
|
12577
|
+
"scope": "framework",
|
|
12559
12578
|
"label": "Evolution Stage",
|
|
12560
12579
|
"description": "Where this component sits on the evolution axis",
|
|
12561
12580
|
"enum_values": [
|
|
@@ -12569,6 +12588,7 @@ var UPG_FRAMEWORKS = [
|
|
|
12569
12588
|
"property": "visibility",
|
|
12570
12589
|
"type": "number",
|
|
12571
12590
|
"required": true,
|
|
12591
|
+
"scope": "framework",
|
|
12572
12592
|
"label": "Visibility",
|
|
12573
12593
|
"description": "Y-axis position (0=infrastructure, 1=anchor/user)"
|
|
12574
12594
|
}
|
|
@@ -12578,6 +12598,7 @@ var UPG_FRAMEWORKS = [
|
|
|
12578
12598
|
"property": "evolution_stage",
|
|
12579
12599
|
"type": "enum",
|
|
12580
12600
|
"required": true,
|
|
12601
|
+
"scope": "framework",
|
|
12581
12602
|
"label": "Evolution Stage",
|
|
12582
12603
|
"description": "Where this component sits on the evolution axis",
|
|
12583
12604
|
"enum_values": [
|
|
@@ -12591,6 +12612,7 @@ var UPG_FRAMEWORKS = [
|
|
|
12591
12612
|
"property": "visibility",
|
|
12592
12613
|
"type": "number",
|
|
12593
12614
|
"required": true,
|
|
12615
|
+
"scope": "framework",
|
|
12594
12616
|
"label": "Visibility",
|
|
12595
12617
|
"description": "Y-axis position (0=infrastructure, 1=anchor/user)"
|
|
12596
12618
|
}
|
|
@@ -12600,6 +12622,7 @@ var UPG_FRAMEWORKS = [
|
|
|
12600
12622
|
"property": "evolution_stage",
|
|
12601
12623
|
"type": "enum",
|
|
12602
12624
|
"required": true,
|
|
12625
|
+
"scope": "framework",
|
|
12603
12626
|
"label": "Evolution Stage",
|
|
12604
12627
|
"description": 'Where this component sits on the evolution axis (need anchor is usually at "product" or "commodity")',
|
|
12605
12628
|
"enum_values": [
|
|
@@ -12613,6 +12636,7 @@ var UPG_FRAMEWORKS = [
|
|
|
12613
12636
|
"property": "visibility",
|
|
12614
12637
|
"type": "number",
|
|
12615
12638
|
"required": true,
|
|
12639
|
+
"scope": "framework",
|
|
12616
12640
|
"label": "Visibility",
|
|
12617
12641
|
"description": "Y-axis position (0=infrastructure, 1=anchor/user); needs sit at 1.0"
|
|
12618
12642
|
}
|
|
@@ -12653,6 +12677,9 @@ var UPG_FRAMEWORKS = [
|
|
|
12653
12677
|
},
|
|
12654
12678
|
{
|
|
12655
12679
|
"id": "business-model-canvas",
|
|
12680
|
+
"approach_ids": [
|
|
12681
|
+
"plan"
|
|
12682
|
+
],
|
|
12656
12683
|
"name": "Business Model Canvas",
|
|
12657
12684
|
"version": "1.0.0",
|
|
12658
12685
|
"description": "Nine building blocks that describe how an organisation creates, delivers, and captures value.",
|
|
@@ -12792,6 +12819,9 @@ var UPG_FRAMEWORKS = [
|
|
|
12792
12819
|
},
|
|
12793
12820
|
{
|
|
12794
12821
|
"id": "porter-five-forces",
|
|
12822
|
+
"approach_ids": [
|
|
12823
|
+
"inspect"
|
|
12824
|
+
],
|
|
12795
12825
|
"name": "Porter Five Forces",
|
|
12796
12826
|
"version": "1.0.0",
|
|
12797
12827
|
"description": "Analyse industry competitiveness through five forces: rivalry, new entrants, substitutes, buyer power, and supplier power.",
|
|
@@ -12881,6 +12911,9 @@ var UPG_FRAMEWORKS = [
|
|
|
12881
12911
|
},
|
|
12882
12912
|
{
|
|
12883
12913
|
"id": "swot-analysis",
|
|
12914
|
+
"approach_ids": [
|
|
12915
|
+
"inspect"
|
|
12916
|
+
],
|
|
12884
12917
|
"name": "SWOT Analysis",
|
|
12885
12918
|
"version": "1.0.0",
|
|
12886
12919
|
"description": "Map Strengths, Weaknesses, Opportunities, and Threats in a 2x2 grid. Internal vs external, helpful vs harmful.",
|
|
@@ -13207,6 +13240,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13207
13240
|
"type": "assessment",
|
|
13208
13241
|
"scale_id": "reach_5",
|
|
13209
13242
|
"required": true,
|
|
13243
|
+
"scope": "framework",
|
|
13210
13244
|
"label": "Reach",
|
|
13211
13245
|
"description": "How many users will this impact per quarter?"
|
|
13212
13246
|
},
|
|
@@ -13215,6 +13249,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13215
13249
|
"type": "assessment",
|
|
13216
13250
|
"scale_id": "impact_5",
|
|
13217
13251
|
"required": true,
|
|
13252
|
+
"scope": "framework",
|
|
13218
13253
|
"label": "Impact",
|
|
13219
13254
|
"description": "How much will this impact each user, on the impact scale?"
|
|
13220
13255
|
},
|
|
@@ -13223,6 +13258,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13223
13258
|
"type": "assessment",
|
|
13224
13259
|
"scale_id": "confidence_5",
|
|
13225
13260
|
"required": true,
|
|
13261
|
+
"scope": "framework",
|
|
13226
13262
|
"label": "Confidence",
|
|
13227
13263
|
"description": "How confident are you in the reach, impact, and effort estimates?"
|
|
13228
13264
|
},
|
|
@@ -13231,6 +13267,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13231
13267
|
"type": "assessment",
|
|
13232
13268
|
"scale_id": "effort_5",
|
|
13233
13269
|
"required": true,
|
|
13270
|
+
"scope": "framework",
|
|
13234
13271
|
"label": "Effort",
|
|
13235
13272
|
"description": "How much work is required to build and ship this, on the effort scale?"
|
|
13236
13273
|
}
|
|
@@ -13317,6 +13354,9 @@ var UPG_FRAMEWORKS = [
|
|
|
13317
13354
|
},
|
|
13318
13355
|
{
|
|
13319
13356
|
"id": "build-measure-learn",
|
|
13357
|
+
"approach_ids": [
|
|
13358
|
+
"reflect"
|
|
13359
|
+
],
|
|
13320
13360
|
"name": "Build-Measure-Learn",
|
|
13321
13361
|
"version": "1.0.0",
|
|
13322
13362
|
"description": "The core Lean Startup feedback loop: build a minimum viable product, measure its impact with actionable metrics, and learn whether to pivot or persevere.",
|
|
@@ -13452,6 +13492,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13452
13492
|
"property": "functional_response",
|
|
13453
13493
|
"type": "enum",
|
|
13454
13494
|
"required": true,
|
|
13495
|
+
"scope": "framework",
|
|
13455
13496
|
"label": "Functional Response",
|
|
13456
13497
|
"description": "How users feel when the feature IS present",
|
|
13457
13498
|
"enum_values": [
|
|
@@ -13466,6 +13507,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13466
13507
|
"property": "dysfunctional_response",
|
|
13467
13508
|
"type": "enum",
|
|
13468
13509
|
"required": true,
|
|
13510
|
+
"scope": "framework",
|
|
13469
13511
|
"label": "Dysfunctional Response",
|
|
13470
13512
|
"description": "How users feel when the feature IS NOT present",
|
|
13471
13513
|
"enum_values": [
|
|
@@ -13480,6 +13522,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13480
13522
|
"property": "delighter_count",
|
|
13481
13523
|
"type": "number",
|
|
13482
13524
|
"required": false,
|
|
13525
|
+
"scope": "framework",
|
|
13483
13526
|
"label": "Delighter classifications",
|
|
13484
13527
|
"description": "Count of survey responses classifying this feature as a delighter (attractive)"
|
|
13485
13528
|
},
|
|
@@ -13487,6 +13530,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13487
13530
|
"property": "performance_count",
|
|
13488
13531
|
"type": "number",
|
|
13489
13532
|
"required": false,
|
|
13533
|
+
"scope": "framework",
|
|
13490
13534
|
"label": "Performance classifications",
|
|
13491
13535
|
"description": "Count of survey responses classifying this feature as performance (one-dimensional)"
|
|
13492
13536
|
},
|
|
@@ -13494,6 +13538,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13494
13538
|
"property": "must_be_count",
|
|
13495
13539
|
"type": "number",
|
|
13496
13540
|
"required": false,
|
|
13541
|
+
"scope": "framework",
|
|
13497
13542
|
"label": "Must-be classifications",
|
|
13498
13543
|
"description": "Count of survey responses classifying this feature as must-be (basic)"
|
|
13499
13544
|
},
|
|
@@ -13501,6 +13546,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13501
13546
|
"property": "indifferent_count",
|
|
13502
13547
|
"type": "number",
|
|
13503
13548
|
"required": false,
|
|
13549
|
+
"scope": "framework",
|
|
13504
13550
|
"label": "Indifferent classifications",
|
|
13505
13551
|
"description": "Count of survey responses classifying this feature as indifferent"
|
|
13506
13552
|
}
|
|
@@ -13693,6 +13739,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13693
13739
|
"property": "moscow",
|
|
13694
13740
|
"type": "enum",
|
|
13695
13741
|
"required": true,
|
|
13742
|
+
"scope": "framework",
|
|
13696
13743
|
"label": "MoSCoW priority",
|
|
13697
13744
|
"description": "Which scope bucket this requirement falls into for the current release",
|
|
13698
13745
|
"enum_values": [
|
|
@@ -13703,16 +13750,7 @@ var UPG_FRAMEWORKS = [
|
|
|
13703
13750
|
]
|
|
13704
13751
|
}
|
|
13705
13752
|
]
|
|
13706
|
-
}
|
|
13707
|
-
"computed_properties": [
|
|
13708
|
-
{
|
|
13709
|
-
"property": "must_have_ratio",
|
|
13710
|
-
"expression": "must_count / total_count",
|
|
13711
|
-
"entity_type": "feature",
|
|
13712
|
-
"label": "Must-have Ratio",
|
|
13713
|
-
"format": "percentage"
|
|
13714
|
-
}
|
|
13715
|
-
]
|
|
13753
|
+
}
|
|
13716
13754
|
},
|
|
13717
13755
|
"structure": {
|
|
13718
13756
|
"pattern": "table"
|
|
@@ -13876,6 +13914,9 @@ var UPG_FRAMEWORKS = [
|
|
|
13876
13914
|
},
|
|
13877
13915
|
{
|
|
13878
13916
|
"id": "c4-model",
|
|
13917
|
+
"approach_ids": [
|
|
13918
|
+
"trace"
|
|
13919
|
+
],
|
|
13879
13920
|
"name": "C4 Model",
|
|
13880
13921
|
"version": "1.0.0",
|
|
13881
13922
|
"description": "Visualise software architecture at four levels of abstraction: System Context, Container, Component, and Code. Each level zooms in to reveal more detail.",
|
|
@@ -13968,6 +14009,9 @@ var UPG_FRAMEWORKS = [
|
|
|
13968
14009
|
},
|
|
13969
14010
|
{
|
|
13970
14011
|
"id": "adr-log",
|
|
14012
|
+
"approach_ids": [
|
|
14013
|
+
"inspect"
|
|
14014
|
+
],
|
|
13971
14015
|
"name": "ADR Log",
|
|
13972
14016
|
"version": "1.0.0",
|
|
13973
14017
|
"description": "Architecture Decision Records: log decisions with context, options, and rationale.",
|
|
@@ -14081,6 +14125,9 @@ var UPG_FRAMEWORKS = [
|
|
|
14081
14125
|
},
|
|
14082
14126
|
{
|
|
14083
14127
|
"id": "atomic-design",
|
|
14128
|
+
"approach_ids": [
|
|
14129
|
+
"trace"
|
|
14130
|
+
],
|
|
14084
14131
|
"name": "Atomic Design",
|
|
14085
14132
|
"version": "1.0.0",
|
|
14086
14133
|
"description": "Atoms, Molecules, Organisms, Templates, Pages: a methodology for creating design systems from the smallest elements up.",
|
|
@@ -14178,6 +14225,9 @@ var UPG_FRAMEWORKS = [
|
|
|
14178
14225
|
},
|
|
14179
14226
|
{
|
|
14180
14227
|
"id": "double-diamond",
|
|
14228
|
+
"approach_ids": [
|
|
14229
|
+
"plan"
|
|
14230
|
+
],
|
|
14181
14231
|
"name": "Double Diamond",
|
|
14182
14232
|
"version": "1.0.0",
|
|
14183
14233
|
"description": "Discover, Define, Develop, Deliver: a four-phase divergent/convergent design process.",
|
|
@@ -14268,6 +14318,9 @@ var UPG_FRAMEWORKS = [
|
|
|
14268
14318
|
},
|
|
14269
14319
|
{
|
|
14270
14320
|
"id": "dora-metrics",
|
|
14321
|
+
"approach_ids": [
|
|
14322
|
+
"inspect"
|
|
14323
|
+
],
|
|
14271
14324
|
"name": "DORA Metrics",
|
|
14272
14325
|
"version": "1.0.0",
|
|
14273
14326
|
"description": "Four key metrics for software delivery performance: deployment frequency, lead time, change failure rate, and time to restore.",
|
|
@@ -14327,16 +14380,7 @@ var UPG_FRAMEWORKS = [
|
|
|
14327
14380
|
]
|
|
14328
14381
|
}
|
|
14329
14382
|
]
|
|
14330
|
-
}
|
|
14331
|
-
"computed_properties": [
|
|
14332
|
-
{
|
|
14333
|
-
"property": "stability_index",
|
|
14334
|
-
"expression": "change_failure_rate * mean_time_to_recovery",
|
|
14335
|
-
"entity_type": "metric",
|
|
14336
|
-
"label": "Stability Index",
|
|
14337
|
-
"format": "number"
|
|
14338
|
-
}
|
|
14339
|
-
]
|
|
14383
|
+
}
|
|
14340
14384
|
},
|
|
14341
14385
|
"structure": {
|
|
14342
14386
|
"pattern": "collection"
|
|
@@ -14465,6 +14509,9 @@ var UPG_FRAMEWORKS = [
|
|
|
14465
14509
|
},
|
|
14466
14510
|
{
|
|
14467
14511
|
"id": "pirate-metrics-aarrr",
|
|
14512
|
+
"approach_ids": [
|
|
14513
|
+
"trace"
|
|
14514
|
+
],
|
|
14468
14515
|
"name": "Pirate Metrics AARRR",
|
|
14469
14516
|
"version": "1.0.0",
|
|
14470
14517
|
"description": "Track user lifecycle across five stages: Acquisition, Activation, Retention, Revenue, and Referral.",
|
|
@@ -14498,7 +14545,7 @@ var UPG_FRAMEWORKS = [
|
|
|
14498
14545
|
"required_properties": {
|
|
14499
14546
|
"metric": [
|
|
14500
14547
|
{
|
|
14501
|
-
"property": "
|
|
14548
|
+
"property": "metric_category",
|
|
14502
14549
|
"type": "enum",
|
|
14503
14550
|
"required": true,
|
|
14504
14551
|
"label": "Lifecycle stage",
|
|
@@ -14512,16 +14559,7 @@ var UPG_FRAMEWORKS = [
|
|
|
14512
14559
|
]
|
|
14513
14560
|
}
|
|
14514
14561
|
]
|
|
14515
|
-
}
|
|
14516
|
-
"computed_properties": [
|
|
14517
|
-
{
|
|
14518
|
-
"property": "conversion_rate",
|
|
14519
|
-
"expression": "(stage_exits / stage_entries) * 100",
|
|
14520
|
-
"entity_type": "metric",
|
|
14521
|
-
"label": "Stage Conversion",
|
|
14522
|
-
"format": "percentage"
|
|
14523
|
-
}
|
|
14524
|
-
]
|
|
14562
|
+
}
|
|
14525
14563
|
},
|
|
14526
14564
|
"structure": {
|
|
14527
14565
|
"pattern": "funnel",
|
|
@@ -14585,6 +14623,9 @@ var UPG_FRAMEWORKS = [
|
|
|
14585
14623
|
},
|
|
14586
14624
|
{
|
|
14587
14625
|
"id": "north-star-metric",
|
|
14626
|
+
"approach_ids": [
|
|
14627
|
+
"plan"
|
|
14628
|
+
],
|
|
14588
14629
|
"name": "North Star Metric",
|
|
14589
14630
|
"version": "1.0.0",
|
|
14590
14631
|
"description": "One metric that best captures the core value you deliver. Supported by 3-5 input metrics that drive it.",
|
|
@@ -14618,7 +14659,7 @@ var UPG_FRAMEWORKS = [
|
|
|
14618
14659
|
"required_properties": {
|
|
14619
14660
|
"metric": [
|
|
14620
14661
|
{
|
|
14621
|
-
"property": "
|
|
14662
|
+
"property": "designation",
|
|
14622
14663
|
"type": "enum",
|
|
14623
14664
|
"required": true,
|
|
14624
14665
|
"label": "Metric role",
|
|
@@ -14636,16 +14677,7 @@ var UPG_FRAMEWORKS = [
|
|
|
14636
14677
|
"description": "How strongly this input metric moves the North Star (input metrics only)"
|
|
14637
14678
|
}
|
|
14638
14679
|
]
|
|
14639
|
-
}
|
|
14640
|
-
"computed_properties": [
|
|
14641
|
-
{
|
|
14642
|
-
"property": "nsm_impact",
|
|
14643
|
-
"expression": "input_metric_value * leverage",
|
|
14644
|
-
"entity_type": "metric",
|
|
14645
|
-
"label": "NSM Impact",
|
|
14646
|
-
"format": "number"
|
|
14647
|
-
}
|
|
14648
|
-
]
|
|
14680
|
+
}
|
|
14649
14681
|
},
|
|
14650
14682
|
"structure": {
|
|
14651
14683
|
"pattern": "collection"
|
|
@@ -14681,6 +14713,9 @@ var UPG_FRAMEWORKS = [
|
|
|
14681
14713
|
},
|
|
14682
14714
|
{
|
|
14683
14715
|
"id": "marketing-mix-4ps",
|
|
14716
|
+
"approach_ids": [
|
|
14717
|
+
"plan"
|
|
14718
|
+
],
|
|
14684
14719
|
"name": "Marketing Mix 4Ps",
|
|
14685
14720
|
"version": "1.0.0",
|
|
14686
14721
|
"description": "The foundational marketing framework. Every marketing strategy must address four decisions: what to sell (Product), what to charge (Price), where to sell (Place), and how to promote (Promotion).",
|
|
@@ -14774,6 +14809,9 @@ var UPG_FRAMEWORKS = [
|
|
|
14774
14809
|
},
|
|
14775
14810
|
{
|
|
14776
14811
|
"id": "bullseye-framework",
|
|
14812
|
+
"approach_ids": [
|
|
14813
|
+
"plan"
|
|
14814
|
+
],
|
|
14777
14815
|
"name": "Bullseye Framework",
|
|
14778
14816
|
"version": "1.0.0",
|
|
14779
14817
|
"description": "Test 19 traction channels systematically. Start with the outer ring (what's possible), narrow to the middle ring (what's probable), then focus on the inner ring (what's working). Run cheap tests across all channels to find your bullseye.",
|
|
@@ -14860,6 +14898,9 @@ var UPG_FRAMEWORKS = [
|
|
|
14860
14898
|
},
|
|
14861
14899
|
{
|
|
14862
14900
|
"id": "product-led-growth-framework",
|
|
14901
|
+
"approach_ids": [
|
|
14902
|
+
"plan"
|
|
14903
|
+
],
|
|
14863
14904
|
"name": "PLG Framework",
|
|
14864
14905
|
"version": "1.0.0",
|
|
14865
14906
|
"description": "Product-led go-to-market motion. Free entry gives users access, the aha moment hooks them, they expand usage within their team, and monetisation captures value from power users.",
|
|
@@ -15042,6 +15083,9 @@ var UPG_FRAMEWORKS = [
|
|
|
15042
15083
|
},
|
|
15043
15084
|
{
|
|
15044
15085
|
"id": "raci-matrix",
|
|
15086
|
+
"approach_ids": [
|
|
15087
|
+
"inspect"
|
|
15088
|
+
],
|
|
15045
15089
|
"name": "RACI Matrix",
|
|
15046
15090
|
"version": "1.0.0",
|
|
15047
15091
|
"description": "Assign roles: Responsible, Accountable, Consulted, Informed for each activity.",
|
|
@@ -15093,16 +15137,7 @@ var UPG_FRAMEWORKS = [
|
|
|
15093
15137
|
"role": "item"
|
|
15094
15138
|
}
|
|
15095
15139
|
],
|
|
15096
|
-
"required_properties": {}
|
|
15097
|
-
"computed_properties": [
|
|
15098
|
-
{
|
|
15099
|
-
"property": "coverage_score",
|
|
15100
|
-
"expression": "assigned_count / total_activities",
|
|
15101
|
-
"entity_type": "team",
|
|
15102
|
-
"label": "RACI Coverage",
|
|
15103
|
-
"format": "percentage"
|
|
15104
|
-
}
|
|
15105
|
-
]
|
|
15140
|
+
"required_properties": {}
|
|
15106
15141
|
},
|
|
15107
15142
|
"structure": {
|
|
15108
15143
|
"pattern": "matrix"
|
|
@@ -15240,328 +15275,1253 @@ var UPG_FRAMEWORKS = [
|
|
|
15240
15275
|
"category": "data_analytics",
|
|
15241
15276
|
"origin": {
|
|
15242
15277
|
"type": "practitioner",
|
|
15243
|
-
"attribution": "Amplitude/Reforge",
|
|
15244
|
-
"description": "Popularised by Amplitude and Reforge around 2018 as growth teams needed to decompose north star metrics into actionable component metrics and identify the highest-leverage improvement opportunities.",
|
|
15245
|
-
"url": "https://amplitude.com/blog/north-star-metric",
|
|
15246
|
-
"year": 2018,
|
|
15247
|
-
"license": "open_attribution"
|
|
15278
|
+
"attribution": "Amplitude/Reforge",
|
|
15279
|
+
"description": "Popularised by Amplitude and Reforge around 2018 as growth teams needed to decompose north star metrics into actionable component metrics and identify the highest-leverage improvement opportunities.",
|
|
15280
|
+
"url": "https://amplitude.com/blog/north-star-metric",
|
|
15281
|
+
"year": 2018,
|
|
15282
|
+
"license": "open_attribution"
|
|
15283
|
+
},
|
|
15284
|
+
"tags": [
|
|
15285
|
+
"data_analytics",
|
|
15286
|
+
"tree"
|
|
15287
|
+
],
|
|
15288
|
+
"slots": [
|
|
15289
|
+
{
|
|
15290
|
+
"label": "Metric",
|
|
15291
|
+
"entityTypeId": "metric",
|
|
15292
|
+
"description": "A measurable indicator at any level of the tree: north star at the root, driver and input metrics as children"
|
|
15293
|
+
},
|
|
15294
|
+
{
|
|
15295
|
+
"label": "Outcome",
|
|
15296
|
+
"entityTypeId": "outcome",
|
|
15297
|
+
"description": "The business or product outcome the north-star metric is designed to represent"
|
|
15298
|
+
},
|
|
15299
|
+
{
|
|
15300
|
+
"label": "Dashboard",
|
|
15301
|
+
"entityTypeId": "dashboard",
|
|
15302
|
+
"description": "Dashboard visualising the metrics tree and showing real-time progress across levels"
|
|
15303
|
+
},
|
|
15304
|
+
{
|
|
15305
|
+
"label": "Report",
|
|
15306
|
+
"entityTypeId": "report",
|
|
15307
|
+
"description": "Periodic report analysing movement across the tree and attributing changes to specific inputs"
|
|
15308
|
+
}
|
|
15309
|
+
],
|
|
15310
|
+
"data": {
|
|
15311
|
+
"entity_types": [
|
|
15312
|
+
{
|
|
15313
|
+
"type": "metric",
|
|
15314
|
+
"role": "item"
|
|
15315
|
+
},
|
|
15316
|
+
{
|
|
15317
|
+
"type": "outcome",
|
|
15318
|
+
"role": "root"
|
|
15319
|
+
},
|
|
15320
|
+
{
|
|
15321
|
+
"type": "dashboard",
|
|
15322
|
+
"role": "item"
|
|
15323
|
+
},
|
|
15324
|
+
{
|
|
15325
|
+
"type": "report",
|
|
15326
|
+
"role": "item"
|
|
15327
|
+
}
|
|
15328
|
+
],
|
|
15329
|
+
"required_properties": {}
|
|
15330
|
+
},
|
|
15331
|
+
"structure": {
|
|
15332
|
+
"pattern": "tree"
|
|
15333
|
+
},
|
|
15334
|
+
"presentation": {
|
|
15335
|
+
"layout": {
|
|
15336
|
+
"type": "tree",
|
|
15337
|
+
"direction": "TB",
|
|
15338
|
+
"engine": "dagre"
|
|
15339
|
+
},
|
|
15340
|
+
"colour_by": "type",
|
|
15341
|
+
"collapsible": true,
|
|
15342
|
+
"card_fields": [
|
|
15343
|
+
"title",
|
|
15344
|
+
"description",
|
|
15345
|
+
"status"
|
|
15346
|
+
]
|
|
15347
|
+
},
|
|
15348
|
+
"education": {
|
|
15349
|
+
"purpose": "Decompose a top-level business metric into its component parts and drivers, creating a tree that shows exactly which levers move the number.",
|
|
15350
|
+
"core_question": "What are the component metrics that drive our north star, and which lever has the most headroom for improvement?",
|
|
15351
|
+
"when_to_use": [
|
|
15352
|
+
"You need to structure your data architecture or analytics practice",
|
|
15353
|
+
"Data quality, governance, or accessibility is a problem",
|
|
15354
|
+
"You want to move from ad-hoc analysis to systematic data practices"
|
|
15355
|
+
],
|
|
15356
|
+
"when_not_to_use": [
|
|
15357
|
+
"The product generates minimal data that does not warrant formal practices",
|
|
15358
|
+
"You are in very early stage where data infrastructure is premature"
|
|
15359
|
+
]
|
|
15360
|
+
}
|
|
15361
|
+
},
|
|
15362
|
+
{
|
|
15363
|
+
"id": "team-health-check",
|
|
15364
|
+
"approach_ids": [
|
|
15365
|
+
"inspect"
|
|
15366
|
+
],
|
|
15367
|
+
"name": "Team Health Check",
|
|
15368
|
+
"version": "1.0.0",
|
|
15369
|
+
"description": "A facilitated team self-assessment across dimensions like mission, fun, learning, speed, and support, using traffic-light voting to surface strengths and improvement areas in a safe format.",
|
|
15370
|
+
"category": "team_process",
|
|
15371
|
+
"origin": {
|
|
15372
|
+
"type": "practitioner",
|
|
15373
|
+
"attribution": "Spotify / Kniberg",
|
|
15374
|
+
"description": "Popularised by Spotify and Henrik Kniberg's Squad Health Check model (2014). Teams self-assess health across dimensions like mission clarity, psychological safety, speed, and learning.",
|
|
15375
|
+
"url": "https://engineering.atspotify.com/2014/09/squad-health-check-model/",
|
|
15376
|
+
"year": 2014,
|
|
15377
|
+
"license": "open_attribution"
|
|
15378
|
+
},
|
|
15379
|
+
"tags": [
|
|
15380
|
+
"team_process",
|
|
15381
|
+
"table"
|
|
15382
|
+
],
|
|
15383
|
+
"slots": [
|
|
15384
|
+
{
|
|
15385
|
+
"label": "Team",
|
|
15386
|
+
"entityTypeId": "team",
|
|
15387
|
+
"description": "Team conducting the health check; all members vote anonymously on each dimension"
|
|
15388
|
+
},
|
|
15389
|
+
{
|
|
15390
|
+
"label": "Retrospective",
|
|
15391
|
+
"entityTypeId": "retrospective",
|
|
15392
|
+
"description": "Health check session results feeding into the retrospective discussion and action items"
|
|
15393
|
+
},
|
|
15394
|
+
{
|
|
15395
|
+
"label": "Metric",
|
|
15396
|
+
"entityTypeId": "metric",
|
|
15397
|
+
"description": "Health dimension scored, e.g. delivering value, teamwork, fun, learning, mission clarity, speed"
|
|
15398
|
+
},
|
|
15399
|
+
{
|
|
15400
|
+
"label": "Team OKR",
|
|
15401
|
+
"entityTypeId": "team_okr",
|
|
15402
|
+
"description": "Team OKR or improvement goal derived from consistently red health check dimensions"
|
|
15403
|
+
}
|
|
15404
|
+
],
|
|
15405
|
+
"data": {
|
|
15406
|
+
"entity_types": [
|
|
15407
|
+
{
|
|
15408
|
+
"type": "team",
|
|
15409
|
+
"role": "scored_item"
|
|
15410
|
+
},
|
|
15411
|
+
{
|
|
15412
|
+
"type": "retrospective",
|
|
15413
|
+
"role": "item"
|
|
15414
|
+
},
|
|
15415
|
+
{
|
|
15416
|
+
"type": "metric",
|
|
15417
|
+
"role": "item"
|
|
15418
|
+
},
|
|
15419
|
+
{
|
|
15420
|
+
"type": "team_okr",
|
|
15421
|
+
"role": "item"
|
|
15422
|
+
}
|
|
15423
|
+
],
|
|
15424
|
+
"required_properties": {}
|
|
15425
|
+
},
|
|
15426
|
+
"structure": {
|
|
15427
|
+
"pattern": "table"
|
|
15428
|
+
},
|
|
15429
|
+
"presentation": {
|
|
15430
|
+
"layout": {
|
|
15431
|
+
"type": "table",
|
|
15432
|
+
"columns": [
|
|
15433
|
+
{
|
|
15434
|
+
"property": "title",
|
|
15435
|
+
"label": "Team",
|
|
15436
|
+
"sortable": true
|
|
15437
|
+
},
|
|
15438
|
+
{
|
|
15439
|
+
"property": "title",
|
|
15440
|
+
"label": "Retrospective",
|
|
15441
|
+
"sortable": true
|
|
15442
|
+
},
|
|
15443
|
+
{
|
|
15444
|
+
"property": "description",
|
|
15445
|
+
"label": "Metric"
|
|
15446
|
+
},
|
|
15447
|
+
{
|
|
15448
|
+
"property": "title",
|
|
15449
|
+
"label": "Team OKR",
|
|
15450
|
+
"sortable": true
|
|
15451
|
+
}
|
|
15452
|
+
]
|
|
15453
|
+
},
|
|
15454
|
+
"sort_by": {
|
|
15455
|
+
"property": "title",
|
|
15456
|
+
"direction": "asc"
|
|
15457
|
+
},
|
|
15458
|
+
"colour_by": "type",
|
|
15459
|
+
"card_fields": [
|
|
15460
|
+
"title",
|
|
15461
|
+
"description",
|
|
15462
|
+
"status"
|
|
15463
|
+
]
|
|
15464
|
+
},
|
|
15465
|
+
"education": {
|
|
15466
|
+
"purpose": "Regularly assess team health across dimensions (psychological safety, autonomy, mission clarity, fun, speed, learning) to catch problems early and celebrate strengths.",
|
|
15467
|
+
"core_question": "How is the team really doing: where do they feel strong, where do they feel stuck, and what has changed since last check?",
|
|
15468
|
+
"when_to_use": [
|
|
15469
|
+
"You need to improve team collaboration, clarity, or effectiveness",
|
|
15470
|
+
"Roles and responsibilities are unclear or causing friction",
|
|
15471
|
+
"You want to establish or improve team processes and ceremonies"
|
|
15472
|
+
],
|
|
15473
|
+
"when_not_to_use": [
|
|
15474
|
+
"The team is small and informal coordination works well",
|
|
15475
|
+
"Process overhead would slow down a team that needs speed"
|
|
15476
|
+
]
|
|
15477
|
+
}
|
|
15478
|
+
},
|
|
15479
|
+
{
|
|
15480
|
+
"id": "raid-log",
|
|
15481
|
+
"approach_ids": [
|
|
15482
|
+
"inspect"
|
|
15483
|
+
],
|
|
15484
|
+
"name": "RAID Log",
|
|
15485
|
+
"version": "1.0.0",
|
|
15486
|
+
"description": "A project management register tracking Risks, Assumptions, Issues, and Dependencies, the four categories most likely to derail a project if left unmanaged.",
|
|
15487
|
+
"category": "program_mgmt",
|
|
15488
|
+
"origin": {
|
|
15489
|
+
"type": "practitioner",
|
|
15490
|
+
"description": "Standard project management tool used across methodologies. The RAID log (Risks, Assumptions, Issues, Dependencies) provides a single living document for tracking all factors that could derail a programme.",
|
|
15491
|
+
"license": "cc_by"
|
|
15492
|
+
},
|
|
15493
|
+
"tags": [
|
|
15494
|
+
"program_mgmt",
|
|
15495
|
+
"table"
|
|
15496
|
+
],
|
|
15497
|
+
"slots": [
|
|
15498
|
+
{
|
|
15499
|
+
"label": "Risk Register",
|
|
15500
|
+
"entityTypeId": "risk_register",
|
|
15501
|
+
"description": "Risk or assumption logged with likelihood, impact, owner, and mitigation strategy"
|
|
15502
|
+
},
|
|
15503
|
+
{
|
|
15504
|
+
"label": "Risk",
|
|
15505
|
+
"entityTypeId": "risk",
|
|
15506
|
+
"description": "Individual risk scored by probability and impact; severity = probability * impact"
|
|
15507
|
+
},
|
|
15508
|
+
{
|
|
15509
|
+
"label": "Dependency",
|
|
15510
|
+
"entityTypeId": "dependency",
|
|
15511
|
+
"description": "Dependency on another team, system, or deliverable that could block progress if not resolved"
|
|
15512
|
+
},
|
|
15513
|
+
{
|
|
15514
|
+
"label": "Status Report",
|
|
15515
|
+
"entityTypeId": "status_report",
|
|
15516
|
+
"description": "Status update summarising RAID log changes: new risks, resolved issues, and dependency updates"
|
|
15517
|
+
},
|
|
15518
|
+
{
|
|
15519
|
+
"label": "Deliverable",
|
|
15520
|
+
"entityTypeId": "deliverable",
|
|
15521
|
+
"description": "Deliverable affected by logged risks, issues, or dependencies, linking RAID items to project scope"
|
|
15522
|
+
}
|
|
15523
|
+
],
|
|
15524
|
+
"data": {
|
|
15525
|
+
"entity_types": [
|
|
15526
|
+
{
|
|
15527
|
+
"type": "risk_register",
|
|
15528
|
+
"role": "item"
|
|
15529
|
+
},
|
|
15530
|
+
{
|
|
15531
|
+
"type": "risk",
|
|
15532
|
+
"role": "scored_item"
|
|
15533
|
+
},
|
|
15534
|
+
{
|
|
15535
|
+
"type": "dependency",
|
|
15536
|
+
"role": "item"
|
|
15537
|
+
},
|
|
15538
|
+
{
|
|
15539
|
+
"type": "status_report",
|
|
15540
|
+
"role": "item"
|
|
15541
|
+
},
|
|
15542
|
+
{
|
|
15543
|
+
"type": "deliverable",
|
|
15544
|
+
"role": "item"
|
|
15545
|
+
}
|
|
15546
|
+
],
|
|
15547
|
+
"required_properties": {
|
|
15548
|
+
"risk": [
|
|
15549
|
+
{
|
|
15550
|
+
"property": "probability",
|
|
15551
|
+
"type": "number",
|
|
15552
|
+
"required": true,
|
|
15553
|
+
"label": "Probability",
|
|
15554
|
+
"description": "Likelihood the risk materialises (risk.probability assessment)"
|
|
15555
|
+
},
|
|
15556
|
+
{
|
|
15557
|
+
"property": "impact",
|
|
15558
|
+
"type": "number",
|
|
15559
|
+
"required": true,
|
|
15560
|
+
"label": "Impact",
|
|
15561
|
+
"description": "Consequence severity if the risk materialises (risk.impact assessment)"
|
|
15562
|
+
}
|
|
15563
|
+
]
|
|
15564
|
+
},
|
|
15565
|
+
"computed_properties": [
|
|
15566
|
+
{
|
|
15567
|
+
"property": "severity",
|
|
15568
|
+
"expression": "probability * impact",
|
|
15569
|
+
"entity_type": "risk",
|
|
15570
|
+
"label": "Severity",
|
|
15571
|
+
"format": "number"
|
|
15572
|
+
}
|
|
15573
|
+
]
|
|
15574
|
+
},
|
|
15575
|
+
"structure": {
|
|
15576
|
+
"pattern": "table"
|
|
15577
|
+
},
|
|
15578
|
+
"presentation": {
|
|
15579
|
+
"layout": {
|
|
15580
|
+
"type": "table",
|
|
15581
|
+
"columns": [
|
|
15582
|
+
{
|
|
15583
|
+
"property": "title",
|
|
15584
|
+
"label": "Item",
|
|
15585
|
+
"sortable": true
|
|
15586
|
+
},
|
|
15587
|
+
{
|
|
15588
|
+
"property": "description",
|
|
15589
|
+
"label": "Category"
|
|
15590
|
+
},
|
|
15591
|
+
{
|
|
15592
|
+
"property": "status",
|
|
15593
|
+
"label": "Status"
|
|
15594
|
+
},
|
|
15595
|
+
{
|
|
15596
|
+
"property": "description",
|
|
15597
|
+
"label": "Owner / Action"
|
|
15598
|
+
}
|
|
15599
|
+
]
|
|
15600
|
+
},
|
|
15601
|
+
"sort_by": {
|
|
15602
|
+
"property": "title",
|
|
15603
|
+
"direction": "asc"
|
|
15604
|
+
},
|
|
15605
|
+
"colour_by": "type",
|
|
15606
|
+
"card_fields": [
|
|
15607
|
+
"title",
|
|
15608
|
+
"description",
|
|
15609
|
+
"status"
|
|
15610
|
+
]
|
|
15611
|
+
},
|
|
15612
|
+
"education": {
|
|
15613
|
+
"purpose": "Track Risks, Assumptions, Issues, and Dependencies in a single living document so the project manager sees all potential blockers in one place.",
|
|
15614
|
+
"core_question": "What are the current risks, untested assumptions, open issues, and external dependencies that could derail this programme?",
|
|
15615
|
+
"when_to_use": [
|
|
15616
|
+
"You are managing complex, multi-team initiatives with dependencies",
|
|
15617
|
+
"You need to track risks, decisions, and milestones across workstreams",
|
|
15618
|
+
"Stakeholders need visibility into programme-level progress"
|
|
15619
|
+
],
|
|
15620
|
+
"when_not_to_use": [
|
|
15621
|
+
"The project is small enough for a single team to manage",
|
|
15622
|
+
"Formal programme management would create overhead without value"
|
|
15623
|
+
]
|
|
15624
|
+
}
|
|
15625
|
+
},
|
|
15626
|
+
{
|
|
15627
|
+
"id": "ice-scoring",
|
|
15628
|
+
"approach_ids": [
|
|
15629
|
+
"prioritise"
|
|
15630
|
+
],
|
|
15631
|
+
"name": "ICE Scoring",
|
|
15632
|
+
"version": "1.0.0",
|
|
15633
|
+
"description": "Rate ideas by Impact, Confidence, and Ease on a 1-10 scale. Multiply for a composite score. Fast and lightweight.",
|
|
15634
|
+
"category": "prioritization",
|
|
15635
|
+
"origin": {
|
|
15636
|
+
"type": "practitioner",
|
|
15637
|
+
"attribution": "Sean Ellis",
|
|
15638
|
+
"description": "Created by Sean Ellis as a lightweight growth experiment scoring method. Widely adopted in growth teams.",
|
|
15639
|
+
"year": 2010,
|
|
15640
|
+
"license": "open_attribution"
|
|
15641
|
+
},
|
|
15642
|
+
"tags": [
|
|
15643
|
+
"prioritization",
|
|
15644
|
+
"table"
|
|
15645
|
+
],
|
|
15646
|
+
"slots": [
|
|
15647
|
+
{
|
|
15648
|
+
"label": "Items to score",
|
|
15649
|
+
"entityTypeId": "feature",
|
|
15650
|
+
"description": "Features or experiments being evaluated"
|
|
15651
|
+
},
|
|
15652
|
+
{
|
|
15653
|
+
"label": "Impact",
|
|
15654
|
+
"entityTypeId": "outcome",
|
|
15655
|
+
"description": "How much will this move the needle?"
|
|
15656
|
+
},
|
|
15657
|
+
{
|
|
15658
|
+
"label": "Confidence",
|
|
15659
|
+
"entityTypeId": "assumption",
|
|
15660
|
+
"description": "How sure are we about the impact?"
|
|
15661
|
+
},
|
|
15662
|
+
{
|
|
15663
|
+
"label": "Ease",
|
|
15664
|
+
"entityTypeId": "feature",
|
|
15665
|
+
"description": "How easy is this to implement?"
|
|
15666
|
+
}
|
|
15667
|
+
],
|
|
15668
|
+
"data": {
|
|
15669
|
+
"entity_types": [
|
|
15670
|
+
{
|
|
15671
|
+
"type": "feature",
|
|
15672
|
+
"role": "scored_item"
|
|
15673
|
+
},
|
|
15674
|
+
{
|
|
15675
|
+
"type": "outcome",
|
|
15676
|
+
"role": "item"
|
|
15677
|
+
},
|
|
15678
|
+
{
|
|
15679
|
+
"type": "assumption",
|
|
15680
|
+
"role": "item"
|
|
15681
|
+
}
|
|
15682
|
+
],
|
|
15683
|
+
"required_properties": {
|
|
15684
|
+
"feature": [
|
|
15685
|
+
{
|
|
15686
|
+
"property": "impact",
|
|
15687
|
+
"type": "number",
|
|
15688
|
+
"required": true,
|
|
15689
|
+
"scope": "framework",
|
|
15690
|
+
"label": "Impact",
|
|
15691
|
+
"description": "Expected impact on the target metric (1-10)"
|
|
15692
|
+
},
|
|
15693
|
+
{
|
|
15694
|
+
"property": "confidence",
|
|
15695
|
+
"type": "number",
|
|
15696
|
+
"required": true,
|
|
15697
|
+
"scope": "framework",
|
|
15698
|
+
"label": "Confidence",
|
|
15699
|
+
"description": "Confidence in the impact estimate (1-10)"
|
|
15700
|
+
},
|
|
15701
|
+
{
|
|
15702
|
+
"property": "ease",
|
|
15703
|
+
"type": "number",
|
|
15704
|
+
"required": true,
|
|
15705
|
+
"scope": "framework",
|
|
15706
|
+
"label": "Ease",
|
|
15707
|
+
"description": "Ease of implementation (1-10)"
|
|
15708
|
+
}
|
|
15709
|
+
]
|
|
15710
|
+
},
|
|
15711
|
+
"computed_properties": [
|
|
15712
|
+
{
|
|
15713
|
+
"property": "ice_score",
|
|
15714
|
+
"expression": "impact * confidence * ease",
|
|
15715
|
+
"entity_type": "feature",
|
|
15716
|
+
"label": "ICE Score",
|
|
15717
|
+
"format": "number"
|
|
15718
|
+
}
|
|
15719
|
+
]
|
|
15720
|
+
},
|
|
15721
|
+
"structure": {
|
|
15722
|
+
"pattern": "table"
|
|
15723
|
+
},
|
|
15724
|
+
"presentation": {
|
|
15725
|
+
"layout": {
|
|
15726
|
+
"type": "table",
|
|
15727
|
+
"columns": [
|
|
15728
|
+
{
|
|
15729
|
+
"property": "title",
|
|
15730
|
+
"label": "Items to score",
|
|
15731
|
+
"sortable": true
|
|
15732
|
+
},
|
|
15733
|
+
{
|
|
15734
|
+
"property": "impact",
|
|
15735
|
+
"label": "Impact",
|
|
15736
|
+
"sortable": true
|
|
15737
|
+
},
|
|
15738
|
+
{
|
|
15739
|
+
"property": "confidence",
|
|
15740
|
+
"label": "Confidence",
|
|
15741
|
+
"sortable": true
|
|
15742
|
+
},
|
|
15743
|
+
{
|
|
15744
|
+
"property": "ease",
|
|
15745
|
+
"label": "Ease",
|
|
15746
|
+
"sortable": true
|
|
15747
|
+
}
|
|
15748
|
+
]
|
|
15749
|
+
},
|
|
15750
|
+
"sort_by": {
|
|
15751
|
+
"property": "title",
|
|
15752
|
+
"direction": "asc"
|
|
15753
|
+
},
|
|
15754
|
+
"colour_by": "type",
|
|
15755
|
+
"card_fields": [
|
|
15756
|
+
"title",
|
|
15757
|
+
"description",
|
|
15758
|
+
"status"
|
|
15759
|
+
]
|
|
15760
|
+
},
|
|
15761
|
+
"education": {
|
|
15762
|
+
"purpose": "Provide a lightweight scoring model for early-stage ideas when detailed effort estimates are unavailable. Faster than RICE and useful for brainstorm triage.",
|
|
15763
|
+
"core_question": "Which ideas should we investigate further based on their potential impact, confidence in our assumptions, and implementation ease?",
|
|
15764
|
+
"when_to_use": [
|
|
15765
|
+
"You have more ideas or features than capacity to build them",
|
|
15766
|
+
"Stakeholders disagree on what to build next",
|
|
15767
|
+
"You need a transparent, defensible prioritisation process"
|
|
15768
|
+
],
|
|
15769
|
+
"when_not_to_use": [
|
|
15770
|
+
"You have a single obvious next step with no contention",
|
|
15771
|
+
"The backlog is small enough to sequence intuitively"
|
|
15772
|
+
]
|
|
15773
|
+
}
|
|
15774
|
+
},
|
|
15775
|
+
{
|
|
15776
|
+
"id": "wsjf",
|
|
15777
|
+
"approach_ids": [
|
|
15778
|
+
"prioritise"
|
|
15779
|
+
],
|
|
15780
|
+
"name": "WSJF (Weighted Shortest Job First)",
|
|
15781
|
+
"version": "1.0.0",
|
|
15782
|
+
"description": "Prioritise work by dividing Cost of Delay (user value + time criticality + risk reduction) by job duration to maximise economic throughput.",
|
|
15783
|
+
"category": "planning",
|
|
15784
|
+
"origin": {
|
|
15785
|
+
"type": "practitioner",
|
|
15786
|
+
"attribution": "Reinertsen / SAFe",
|
|
15787
|
+
"description": "Developed by Don Reinertsen and adopted as a core practice in the Scaled Agile Framework (SAFe). Combines urgency (Cost of Delay) with job size to produce an economic prioritisation sequence.",
|
|
15788
|
+
"url": "https://www.scaledagileframework.com/wsjf/",
|
|
15789
|
+
"year": 2011,
|
|
15790
|
+
"license": "open_attribution"
|
|
15791
|
+
},
|
|
15792
|
+
"tags": [
|
|
15793
|
+
"planning",
|
|
15794
|
+
"table"
|
|
15795
|
+
],
|
|
15796
|
+
"slots": [
|
|
15797
|
+
{
|
|
15798
|
+
"label": "Backlog Items",
|
|
15799
|
+
"entityTypeId": "feature",
|
|
15800
|
+
"description": "Backlog Items: feature entries to evaluate"
|
|
15801
|
+
},
|
|
15802
|
+
{
|
|
15803
|
+
"label": "User/Business Value",
|
|
15804
|
+
"entityTypeId": "metric",
|
|
15805
|
+
"description": "User/Business Value: metric entries to evaluate"
|
|
15806
|
+
},
|
|
15807
|
+
{
|
|
15808
|
+
"label": "Time Criticality",
|
|
15809
|
+
"entityTypeId": "metric",
|
|
15810
|
+
"description": "How much value decays if delivery is delayed (deadlines, competition, seasonal windows)"
|
|
15811
|
+
},
|
|
15812
|
+
{
|
|
15813
|
+
"label": "Risk Reduction / Opportunity Enablement",
|
|
15814
|
+
"entityTypeId": "metric",
|
|
15815
|
+
"description": "Risk Reduction / Opportunity Enablement: metric entries to evaluate"
|
|
15816
|
+
},
|
|
15817
|
+
{
|
|
15818
|
+
"label": "Job Size",
|
|
15819
|
+
"entityTypeId": "metric",
|
|
15820
|
+
"description": "Estimated effort (story points, t-shirt size, or person-weeks)"
|
|
15821
|
+
}
|
|
15822
|
+
],
|
|
15823
|
+
"data": {
|
|
15824
|
+
"entity_types": [
|
|
15825
|
+
{
|
|
15826
|
+
"type": "feature",
|
|
15827
|
+
"role": "scored_item"
|
|
15828
|
+
},
|
|
15829
|
+
{
|
|
15830
|
+
"type": "metric",
|
|
15831
|
+
"role": "item"
|
|
15832
|
+
}
|
|
15833
|
+
],
|
|
15834
|
+
"required_properties": {
|
|
15835
|
+
"feature": [
|
|
15836
|
+
{
|
|
15837
|
+
"property": "user_value",
|
|
15838
|
+
"type": "number",
|
|
15839
|
+
"required": true,
|
|
15840
|
+
"scope": "framework",
|
|
15841
|
+
"label": "User/Business Value",
|
|
15842
|
+
"description": "Relative value to users and the business if delivered"
|
|
15843
|
+
},
|
|
15844
|
+
{
|
|
15845
|
+
"property": "time_criticality",
|
|
15846
|
+
"type": "number",
|
|
15847
|
+
"required": true,
|
|
15848
|
+
"scope": "framework",
|
|
15849
|
+
"label": "Time Criticality",
|
|
15850
|
+
"description": "How much value decays if delivery is delayed (deadlines, competition, seasonal windows)"
|
|
15851
|
+
},
|
|
15852
|
+
{
|
|
15853
|
+
"property": "risk_reduction",
|
|
15854
|
+
"type": "number",
|
|
15855
|
+
"required": true,
|
|
15856
|
+
"scope": "framework",
|
|
15857
|
+
"label": "Risk Reduction / Opportunity Enablement",
|
|
15858
|
+
"description": "Value from reducing risk or enabling future opportunities"
|
|
15859
|
+
},
|
|
15860
|
+
{
|
|
15861
|
+
"property": "job_size",
|
|
15862
|
+
"type": "number",
|
|
15863
|
+
"required": true,
|
|
15864
|
+
"scope": "framework",
|
|
15865
|
+
"label": "Job Size",
|
|
15866
|
+
"description": "Estimated effort (story points, t-shirt size, or person-weeks)"
|
|
15867
|
+
}
|
|
15868
|
+
]
|
|
15869
|
+
},
|
|
15870
|
+
"computed_properties": [
|
|
15871
|
+
{
|
|
15872
|
+
"property": "wsjf_score",
|
|
15873
|
+
"expression": "(user_value + time_criticality + risk_reduction) / job_size",
|
|
15874
|
+
"entity_type": "feature",
|
|
15875
|
+
"label": "WSJF Score",
|
|
15876
|
+
"format": "number"
|
|
15877
|
+
}
|
|
15878
|
+
]
|
|
15879
|
+
},
|
|
15880
|
+
"structure": {
|
|
15881
|
+
"pattern": "table"
|
|
15882
|
+
},
|
|
15883
|
+
"presentation": {
|
|
15884
|
+
"layout": {
|
|
15885
|
+
"type": "table",
|
|
15886
|
+
"columns": [
|
|
15887
|
+
{
|
|
15888
|
+
"property": "title",
|
|
15889
|
+
"label": "Backlog Items",
|
|
15890
|
+
"sortable": true
|
|
15891
|
+
},
|
|
15892
|
+
{
|
|
15893
|
+
"property": "user_value",
|
|
15894
|
+
"label": "User/Business Value",
|
|
15895
|
+
"sortable": true
|
|
15896
|
+
},
|
|
15897
|
+
{
|
|
15898
|
+
"property": "time_criticality",
|
|
15899
|
+
"label": "Time Criticality",
|
|
15900
|
+
"sortable": true
|
|
15901
|
+
},
|
|
15902
|
+
{
|
|
15903
|
+
"property": "risk_reduction",
|
|
15904
|
+
"label": "Risk Reduction / Opportunity Enablement",
|
|
15905
|
+
"sortable": true
|
|
15906
|
+
},
|
|
15907
|
+
{
|
|
15908
|
+
"property": "job_size",
|
|
15909
|
+
"label": "Job Size",
|
|
15910
|
+
"sortable": true
|
|
15911
|
+
},
|
|
15912
|
+
{
|
|
15913
|
+
"property": "wsjf_score",
|
|
15914
|
+
"label": "WSJF Score",
|
|
15915
|
+
"sortable": true
|
|
15916
|
+
}
|
|
15917
|
+
]
|
|
15918
|
+
},
|
|
15919
|
+
"sort_by": {
|
|
15920
|
+
"property": "title",
|
|
15921
|
+
"direction": "asc"
|
|
15922
|
+
},
|
|
15923
|
+
"colour_by": "type",
|
|
15924
|
+
"card_fields": [
|
|
15925
|
+
"title",
|
|
15926
|
+
"description",
|
|
15927
|
+
"status"
|
|
15928
|
+
]
|
|
15929
|
+
},
|
|
15930
|
+
"education": {
|
|
15931
|
+
"purpose": "Prioritise work by dividing the Cost of Delay by job duration, ensuring the most time-sensitive, valuable items are done first.",
|
|
15932
|
+
"core_question": "Considering the cost of waiting, which items should we start now to maximise economic benefit?",
|
|
15933
|
+
"when_to_use": [
|
|
15934
|
+
"You need to coordinate work across multiple teams or time horizons",
|
|
15935
|
+
"Stakeholders need visibility into what is coming and when",
|
|
15936
|
+
"You want to balance commitments with flexibility"
|
|
15937
|
+
],
|
|
15938
|
+
"when_not_to_use": [
|
|
15939
|
+
"The team is small enough that informal coordination works",
|
|
15940
|
+
"Plans would create false precision about uncertain outcomes"
|
|
15941
|
+
]
|
|
15942
|
+
}
|
|
15943
|
+
},
|
|
15944
|
+
{
|
|
15945
|
+
"id": "cost-of-delay",
|
|
15946
|
+
"approach_ids": [
|
|
15947
|
+
"prioritise"
|
|
15948
|
+
],
|
|
15949
|
+
"name": "Cost of Delay",
|
|
15950
|
+
"version": "1.0.0",
|
|
15951
|
+
"description": "Quantify the economic cost of not shipping a feature to drive priority decisions. Combines urgency with value.",
|
|
15952
|
+
"category": "prioritization",
|
|
15953
|
+
"origin": {
|
|
15954
|
+
"type": "practitioner",
|
|
15955
|
+
"attribution": "Don Reinertsen",
|
|
15956
|
+
"description": "Formalised in The Principles of Product Development Flow (Celeritas Publishing). Foundational to lean product economics.",
|
|
15957
|
+
"year": 2009,
|
|
15958
|
+
"license": "public_domain"
|
|
15959
|
+
},
|
|
15960
|
+
"tags": [
|
|
15961
|
+
"prioritization",
|
|
15962
|
+
"table"
|
|
15963
|
+
],
|
|
15964
|
+
"slots": [
|
|
15965
|
+
{
|
|
15966
|
+
"label": "Items to evaluate",
|
|
15967
|
+
"entityTypeId": "feature",
|
|
15968
|
+
"description": "Features or initiatives being assessed"
|
|
15969
|
+
},
|
|
15970
|
+
{
|
|
15971
|
+
"label": "User-Business Value",
|
|
15972
|
+
"entityTypeId": "outcome",
|
|
15973
|
+
"description": "Revenue, retention, or strategic value"
|
|
15974
|
+
},
|
|
15975
|
+
{
|
|
15976
|
+
"label": "Time Criticality",
|
|
15977
|
+
"entityTypeId": "metric",
|
|
15978
|
+
"description": "How much value decays with delay"
|
|
15979
|
+
},
|
|
15980
|
+
{
|
|
15981
|
+
"label": "Risk Reduction",
|
|
15982
|
+
"entityTypeId": "risk",
|
|
15983
|
+
"description": "What risk does this mitigate?"
|
|
15984
|
+
}
|
|
15985
|
+
],
|
|
15986
|
+
"data": {
|
|
15987
|
+
"entity_types": [
|
|
15988
|
+
{
|
|
15989
|
+
"type": "feature",
|
|
15990
|
+
"role": "scored_item"
|
|
15991
|
+
},
|
|
15992
|
+
{
|
|
15993
|
+
"type": "metric",
|
|
15994
|
+
"role": "item"
|
|
15995
|
+
},
|
|
15996
|
+
{
|
|
15997
|
+
"type": "outcome",
|
|
15998
|
+
"role": "item"
|
|
15999
|
+
},
|
|
16000
|
+
{
|
|
16001
|
+
"type": "risk",
|
|
16002
|
+
"role": "item"
|
|
16003
|
+
}
|
|
16004
|
+
],
|
|
16005
|
+
"required_properties": {
|
|
16006
|
+
"feature": [
|
|
16007
|
+
{
|
|
16008
|
+
"property": "cost_of_delay",
|
|
16009
|
+
"type": "number",
|
|
16010
|
+
"required": true,
|
|
16011
|
+
"scope": "framework",
|
|
16012
|
+
"label": "Cost of Delay",
|
|
16013
|
+
"description": "Weekly revenue impact of not shipping"
|
|
16014
|
+
},
|
|
16015
|
+
{
|
|
16016
|
+
"property": "job_size",
|
|
16017
|
+
"type": "number",
|
|
16018
|
+
"required": true,
|
|
16019
|
+
"scope": "framework",
|
|
16020
|
+
"label": "Job Size",
|
|
16021
|
+
"description": "Weeks of development effort"
|
|
16022
|
+
}
|
|
16023
|
+
]
|
|
16024
|
+
},
|
|
16025
|
+
"computed_properties": [
|
|
16026
|
+
{
|
|
16027
|
+
"property": "wsjf_score",
|
|
16028
|
+
"expression": "cost_of_delay / job_size",
|
|
16029
|
+
"entity_type": "feature",
|
|
16030
|
+
"label": "WSJF Score",
|
|
16031
|
+
"format": "number"
|
|
16032
|
+
}
|
|
16033
|
+
]
|
|
16034
|
+
},
|
|
16035
|
+
"structure": {
|
|
16036
|
+
"pattern": "table"
|
|
16037
|
+
},
|
|
16038
|
+
"presentation": {
|
|
16039
|
+
"layout": {
|
|
16040
|
+
"type": "table",
|
|
16041
|
+
"columns": [
|
|
16042
|
+
{
|
|
16043
|
+
"property": "title",
|
|
16044
|
+
"label": "Items to evaluate",
|
|
16045
|
+
"sortable": true
|
|
16046
|
+
},
|
|
16047
|
+
{
|
|
16048
|
+
"property": "cost_of_delay",
|
|
16049
|
+
"label": "User-Business Value",
|
|
16050
|
+
"sortable": true
|
|
16051
|
+
},
|
|
16052
|
+
{
|
|
16053
|
+
"property": "job_size",
|
|
16054
|
+
"label": "Job Size",
|
|
16055
|
+
"sortable": true
|
|
16056
|
+
},
|
|
16057
|
+
{
|
|
16058
|
+
"property": "wsjf_score",
|
|
16059
|
+
"label": "CoD Score",
|
|
16060
|
+
"sortable": true
|
|
16061
|
+
}
|
|
16062
|
+
]
|
|
16063
|
+
},
|
|
16064
|
+
"sort_by": {
|
|
16065
|
+
"property": "title",
|
|
16066
|
+
"direction": "asc"
|
|
16067
|
+
},
|
|
16068
|
+
"colour_by": "type",
|
|
16069
|
+
"card_fields": [
|
|
16070
|
+
"title",
|
|
16071
|
+
"description",
|
|
16072
|
+
"status"
|
|
16073
|
+
]
|
|
16074
|
+
},
|
|
16075
|
+
"education": {
|
|
16076
|
+
"purpose": "Quantify the economic impact of not delivering a feature by a given date, making urgency visible and enabling time-sensitive prioritisation.",
|
|
16077
|
+
"core_question": "How much value are we losing every week this feature is not in production, and does that urgency justify fast-tracking it?",
|
|
16078
|
+
"when_to_use": [
|
|
16079
|
+
"You have more ideas or features than capacity to build them",
|
|
16080
|
+
"Stakeholders disagree on what to build next",
|
|
16081
|
+
"You need a transparent, defensible prioritisation process"
|
|
16082
|
+
],
|
|
16083
|
+
"when_not_to_use": [
|
|
16084
|
+
"You have a single obvious next step with no contention",
|
|
16085
|
+
"The backlog is small enough to sequence intuitively"
|
|
16086
|
+
]
|
|
16087
|
+
}
|
|
16088
|
+
},
|
|
16089
|
+
{
|
|
16090
|
+
"id": "five-whys",
|
|
16091
|
+
"approach_ids": [
|
|
16092
|
+
"reflect",
|
|
16093
|
+
"inspect"
|
|
16094
|
+
],
|
|
16095
|
+
"name": "Five Whys",
|
|
16096
|
+
"version": "1.0.0",
|
|
16097
|
+
"description": 'Iteratively ask "why?", typically five times, starting from a symptom; each answer becomes the subject of the next question. The chain of answers reveals the underlying root cause behind the surface problem.',
|
|
16098
|
+
"category": "team_process",
|
|
16099
|
+
"origin": {
|
|
16100
|
+
"type": "practitioner",
|
|
16101
|
+
"attribution": "Sakichi Toyoda / Toyota Production System",
|
|
16102
|
+
"description": "Developed within the Toyota Production System as a root-cause analysis technique. Popularised through Lean and Six Sigma practice; now a widely used incident-review and design-debug staple.",
|
|
16103
|
+
"year": 1930,
|
|
16104
|
+
"license": "public_domain"
|
|
16105
|
+
},
|
|
16106
|
+
"tags": [
|
|
16107
|
+
"team_process",
|
|
16108
|
+
"reflection",
|
|
16109
|
+
"root_cause",
|
|
16110
|
+
"tree"
|
|
16111
|
+
],
|
|
16112
|
+
"slots": [
|
|
16113
|
+
{
|
|
16114
|
+
"label": "Symptom",
|
|
16115
|
+
"entityTypeId": "need",
|
|
16116
|
+
"description": "The observed problem the analysis starts from."
|
|
16117
|
+
},
|
|
16118
|
+
{
|
|
16119
|
+
"label": "Why chain",
|
|
16120
|
+
"entityTypeId": "insight",
|
|
16121
|
+
"description": 'Each "why?" answer along the chain, typically five iterations deep.'
|
|
16122
|
+
},
|
|
16123
|
+
{
|
|
16124
|
+
"label": "Root cause",
|
|
16125
|
+
"entityTypeId": "insight",
|
|
16126
|
+
"description": "The terminal answer at the bottom of the chain: the underlying cause to address."
|
|
16127
|
+
}
|
|
16128
|
+
],
|
|
16129
|
+
"data": {
|
|
16130
|
+
"entity_types": [
|
|
16131
|
+
{
|
|
16132
|
+
"type": "need",
|
|
16133
|
+
"role": "root"
|
|
16134
|
+
},
|
|
16135
|
+
{
|
|
16136
|
+
"type": "insight",
|
|
16137
|
+
"role": "branch"
|
|
16138
|
+
}
|
|
16139
|
+
],
|
|
16140
|
+
"required_properties": {}
|
|
16141
|
+
},
|
|
16142
|
+
"structure": {
|
|
16143
|
+
"pattern": "tree"
|
|
16144
|
+
},
|
|
16145
|
+
"presentation": {
|
|
16146
|
+
"layout": {
|
|
16147
|
+
"type": "tree",
|
|
16148
|
+
"direction": "TB"
|
|
16149
|
+
},
|
|
16150
|
+
"sort_by": {
|
|
16151
|
+
"property": "title",
|
|
16152
|
+
"direction": "asc"
|
|
16153
|
+
},
|
|
16154
|
+
"card_fields": [
|
|
16155
|
+
"title",
|
|
16156
|
+
"description"
|
|
16157
|
+
]
|
|
16158
|
+
},
|
|
16159
|
+
"education": {
|
|
16160
|
+
"purpose": 'Move past surface symptoms by chaining "why?" questions until the underlying root cause surfaces, so fixes target the real driver rather than a downstream effect.',
|
|
16161
|
+
"core_question": "Why is this happening, and why is THAT happening, until we reach a cause we can act on?",
|
|
16162
|
+
"when_to_use": [
|
|
16163
|
+
"A problem keeps recurring after surface fixes",
|
|
16164
|
+
"Post-incident review where the obvious cause feels too obvious",
|
|
16165
|
+
"Designing a fix and you want to confirm you understand the actual driver"
|
|
16166
|
+
],
|
|
16167
|
+
"when_not_to_use": [
|
|
16168
|
+
"The problem has multiple independent root causes (use a fishbone or richer RCA tool)",
|
|
16169
|
+
"You need quantitative attribution rather than a single-thread narrative",
|
|
16170
|
+
'Five linear "whys" oversimplify a systems problem with feedback loops'
|
|
16171
|
+
]
|
|
16172
|
+
}
|
|
16173
|
+
},
|
|
16174
|
+
{
|
|
16175
|
+
"id": "pre-mortem",
|
|
16176
|
+
"approach_ids": [
|
|
16177
|
+
"reflect"
|
|
16178
|
+
],
|
|
16179
|
+
"name": "Pre-mortem",
|
|
16180
|
+
"version": "1.0.0",
|
|
16181
|
+
"description": "Imagine the project has already failed; work backward listing the plausible causes of the failure. Produce a risk register and matching mitigations before the work starts.",
|
|
16182
|
+
"category": "team_process",
|
|
16183
|
+
"origin": {
|
|
16184
|
+
"type": "practitioner",
|
|
16185
|
+
"attribution": "Gary Klein",
|
|
16186
|
+
"description": "Popularised by Gary Klein in Harvard Business Review (2007) as a prospective-hindsight technique. Inverts the post-mortem: imagine failure first, then list causes, while there is still time to act.",
|
|
16187
|
+
"url": "https://hbr.org/2007/09/performing-a-project-premortem",
|
|
16188
|
+
"year": 2007,
|
|
16189
|
+
"license": "published_methodology"
|
|
16190
|
+
},
|
|
16191
|
+
"tags": [
|
|
16192
|
+
"team_process",
|
|
16193
|
+
"reflection",
|
|
16194
|
+
"risk",
|
|
16195
|
+
"collection"
|
|
16196
|
+
],
|
|
16197
|
+
"slots": [
|
|
16198
|
+
{
|
|
16199
|
+
"label": "Imagined failures",
|
|
16200
|
+
"entityTypeId": "risk",
|
|
16201
|
+
"description": "Plausible failure modes named as if they had already occurred."
|
|
16202
|
+
},
|
|
16203
|
+
{
|
|
16204
|
+
"label": "Causes",
|
|
16205
|
+
"entityTypeId": "insight",
|
|
16206
|
+
"description": "For each imagined failure, the contributing causes the team can foresee."
|
|
16207
|
+
},
|
|
16208
|
+
{
|
|
16209
|
+
"label": "Mitigations",
|
|
16210
|
+
"entityTypeId": "initiative",
|
|
16211
|
+
"description": "Mitigation actions the team will take before failure can occur."
|
|
16212
|
+
}
|
|
16213
|
+
],
|
|
16214
|
+
"data": {
|
|
16215
|
+
"entity_types": [
|
|
16216
|
+
{
|
|
16217
|
+
"type": "risk",
|
|
16218
|
+
"role": "bucket"
|
|
16219
|
+
},
|
|
16220
|
+
{
|
|
16221
|
+
"type": "insight",
|
|
16222
|
+
"role": "bucket"
|
|
16223
|
+
},
|
|
16224
|
+
{
|
|
16225
|
+
"type": "initiative",
|
|
16226
|
+
"role": "bucket"
|
|
16227
|
+
}
|
|
16228
|
+
],
|
|
16229
|
+
"required_properties": {}
|
|
16230
|
+
},
|
|
16231
|
+
"structure": {
|
|
16232
|
+
"pattern": "collection"
|
|
16233
|
+
},
|
|
16234
|
+
"presentation": {
|
|
16235
|
+
"layout": {
|
|
16236
|
+
"type": "grid",
|
|
16237
|
+
"groupBy": "type"
|
|
16238
|
+
},
|
|
16239
|
+
"sort_by": {
|
|
16240
|
+
"property": "title",
|
|
16241
|
+
"direction": "asc"
|
|
16242
|
+
},
|
|
16243
|
+
"colour_by": "group",
|
|
16244
|
+
"card_fields": [
|
|
16245
|
+
"title",
|
|
16246
|
+
"description"
|
|
16247
|
+
]
|
|
16248
|
+
},
|
|
16249
|
+
"education": {
|
|
16250
|
+
"purpose": "Surface project risks early by inverting hindsight: imagine the project has already failed and ask why, while there is still time to mitigate.",
|
|
16251
|
+
"core_question": "It is six months from now and the project has failed catastrophically. What happened, and why?",
|
|
16252
|
+
"when_to_use": [
|
|
16253
|
+
"Kicking off a project with significant downside or irreversible commitment",
|
|
16254
|
+
"A plan looks too clean and the team senses unspoken concerns",
|
|
16255
|
+
"Stakeholders disagree on risk; the exercise externalises and ranks them"
|
|
16256
|
+
],
|
|
16257
|
+
"when_not_to_use": [
|
|
16258
|
+
"The work is small, reversible, and cheap to course-correct",
|
|
16259
|
+
"The team is in execution mode and reflective ceremonies will derail momentum",
|
|
16260
|
+
"Risk surfacing has become performative: the team names risks but never mitigates them"
|
|
16261
|
+
]
|
|
16262
|
+
}
|
|
16263
|
+
},
|
|
16264
|
+
{
|
|
16265
|
+
"id": "red-team",
|
|
16266
|
+
"approach_ids": [
|
|
16267
|
+
"reflect",
|
|
16268
|
+
"inspect"
|
|
16269
|
+
],
|
|
16270
|
+
"name": "Red Team",
|
|
16271
|
+
"version": "1.0.0",
|
|
16272
|
+
"description": "Structured adversarial review. A designated group is assigned to attack a plan, design, or proposal from an outside-in stance, surfacing weaknesses the inside-out builders cannot see.",
|
|
16273
|
+
"category": "team_process",
|
|
16274
|
+
"origin": {
|
|
16275
|
+
"type": "practitioner",
|
|
16276
|
+
"attribution": "US Department of Defense (Cold War era); broadened by security and intelligence practice",
|
|
16277
|
+
"description": `Originated in Cold War-era military strategic exercises ("red" team takes the adversary role against the "blue" team's defence). Adopted by cybersecurity, intelligence analysis, and product teams as a structured contrarian-review practice.`,
|
|
16278
|
+
"year": 1960,
|
|
16279
|
+
"license": "public_domain"
|
|
15248
16280
|
},
|
|
15249
16281
|
"tags": [
|
|
15250
|
-
"
|
|
15251
|
-
"
|
|
16282
|
+
"team_process",
|
|
16283
|
+
"reflection",
|
|
16284
|
+
"adversarial",
|
|
16285
|
+
"collection"
|
|
15252
16286
|
],
|
|
15253
16287
|
"slots": [
|
|
15254
16288
|
{
|
|
15255
|
-
"label": "
|
|
15256
|
-
"entityTypeId": "
|
|
15257
|
-
"description": "
|
|
15258
|
-
},
|
|
15259
|
-
{
|
|
15260
|
-
"label": "Outcome",
|
|
15261
|
-
"entityTypeId": "outcome",
|
|
15262
|
-
"description": "The business or product outcome the north-star metric is designed to represent"
|
|
16289
|
+
"label": "Target",
|
|
16290
|
+
"entityTypeId": "initiative",
|
|
16291
|
+
"description": "The plan, design, or proposal under adversarial review."
|
|
15263
16292
|
},
|
|
15264
16293
|
{
|
|
15265
|
-
"label": "
|
|
15266
|
-
"entityTypeId": "
|
|
15267
|
-
"description": "
|
|
16294
|
+
"label": "Attack vectors",
|
|
16295
|
+
"entityTypeId": "risk",
|
|
16296
|
+
"description": "The angles the red team uses to probe weaknesses."
|
|
15268
16297
|
},
|
|
15269
16298
|
{
|
|
15270
|
-
"label": "
|
|
15271
|
-
"entityTypeId": "
|
|
15272
|
-
"description": "
|
|
16299
|
+
"label": "Findings",
|
|
16300
|
+
"entityTypeId": "insight",
|
|
16301
|
+
"description": "Weaknesses, blind spots, or unstated assumptions surfaced by the review."
|
|
15273
16302
|
}
|
|
15274
16303
|
],
|
|
15275
16304
|
"data": {
|
|
15276
16305
|
"entity_types": [
|
|
15277
16306
|
{
|
|
15278
|
-
"type": "
|
|
15279
|
-
"role": "item"
|
|
15280
|
-
},
|
|
15281
|
-
{
|
|
15282
|
-
"type": "outcome",
|
|
16307
|
+
"type": "initiative",
|
|
15283
16308
|
"role": "root"
|
|
15284
16309
|
},
|
|
15285
16310
|
{
|
|
15286
|
-
"type": "
|
|
15287
|
-
"role": "
|
|
16311
|
+
"type": "risk",
|
|
16312
|
+
"role": "bucket"
|
|
15288
16313
|
},
|
|
15289
16314
|
{
|
|
15290
|
-
"type": "
|
|
15291
|
-
"role": "
|
|
16315
|
+
"type": "insight",
|
|
16316
|
+
"role": "bucket"
|
|
15292
16317
|
}
|
|
15293
16318
|
],
|
|
15294
16319
|
"required_properties": {}
|
|
15295
16320
|
},
|
|
15296
16321
|
"structure": {
|
|
15297
|
-
"pattern": "
|
|
16322
|
+
"pattern": "collection"
|
|
15298
16323
|
},
|
|
15299
16324
|
"presentation": {
|
|
15300
16325
|
"layout": {
|
|
15301
|
-
"type": "
|
|
15302
|
-
"
|
|
15303
|
-
"engine": "dagre"
|
|
16326
|
+
"type": "grid",
|
|
16327
|
+
"groupBy": "type"
|
|
15304
16328
|
},
|
|
15305
|
-
"
|
|
15306
|
-
|
|
16329
|
+
"sort_by": {
|
|
16330
|
+
"property": "title",
|
|
16331
|
+
"direction": "asc"
|
|
16332
|
+
},
|
|
16333
|
+
"colour_by": "group",
|
|
15307
16334
|
"card_fields": [
|
|
15308
16335
|
"title",
|
|
15309
|
-
"description"
|
|
15310
|
-
"status"
|
|
16336
|
+
"description"
|
|
15311
16337
|
]
|
|
15312
16338
|
},
|
|
15313
16339
|
"education": {
|
|
15314
|
-
"purpose": "
|
|
15315
|
-
"core_question": "
|
|
16340
|
+
"purpose": "Stress-test a plan against an explicit adversary by assigning reviewers to attack rather than agree, so weaknesses surface before reality finds them.",
|
|
16341
|
+
"core_question": "If a competent adversary wanted this to fail, where would they push first, and would we hold?",
|
|
15316
16342
|
"when_to_use": [
|
|
15317
|
-
"
|
|
15318
|
-
"
|
|
15319
|
-
"
|
|
16343
|
+
"A high-stakes decision, launch, or security posture needs hardening",
|
|
16344
|
+
"Inside-out thinking is dominant and dissent has gone quiet",
|
|
16345
|
+
"Risk register is suspiciously short for the size of the bet"
|
|
15320
16346
|
],
|
|
15321
16347
|
"when_not_to_use": [
|
|
15322
|
-
"
|
|
15323
|
-
"
|
|
16348
|
+
"Early-stage exploration where adversarial framing would crush a fragile idea prematurely",
|
|
16349
|
+
"Team trust is too low: red-teaming will read as personal attack rather than role-play",
|
|
16350
|
+
"The work is small enough that a lightweight devil's-advocate pass is sufficient"
|
|
15324
16351
|
]
|
|
15325
16352
|
}
|
|
15326
16353
|
},
|
|
15327
16354
|
{
|
|
15328
|
-
"id": "
|
|
15329
|
-
"
|
|
16355
|
+
"id": "devils-advocate",
|
|
16356
|
+
"approach_ids": [
|
|
16357
|
+
"reflect"
|
|
16358
|
+
],
|
|
16359
|
+
"name": "Devil's Advocate",
|
|
15330
16360
|
"version": "1.0.0",
|
|
15331
|
-
"description": "
|
|
16361
|
+
"description": "Designate one reviewer to formally take the opposing position regardless of personal view. The assigned-role contrarian defangs groupthink by making dissent legitimate and structured.",
|
|
15332
16362
|
"category": "team_process",
|
|
15333
16363
|
"origin": {
|
|
15334
16364
|
"type": "practitioner",
|
|
15335
|
-
"attribution": "
|
|
15336
|
-
"description": "
|
|
15337
|
-
"
|
|
15338
|
-
"
|
|
15339
|
-
"license": "open_attribution"
|
|
16365
|
+
"attribution": "Roman Catholic Church (advocatus diaboli); broadened by decision-quality practice",
|
|
16366
|
+
"description": "Originated in 16th-century canonisation proceedings as the advocatus diaboli, an official assigned to argue against canonising a candidate. Adopted by decision-science and product-team practice as a structured antidote to groupthink.",
|
|
16367
|
+
"year": 1587,
|
|
16368
|
+
"license": "public_domain"
|
|
15340
16369
|
},
|
|
15341
16370
|
"tags": [
|
|
15342
16371
|
"team_process",
|
|
15343
|
-
"
|
|
16372
|
+
"reflection",
|
|
16373
|
+
"decision_quality",
|
|
16374
|
+
"collection"
|
|
15344
16375
|
],
|
|
15345
16376
|
"slots": [
|
|
15346
16377
|
{
|
|
15347
|
-
"label": "
|
|
15348
|
-
"entityTypeId": "
|
|
15349
|
-
"description": "
|
|
15350
|
-
},
|
|
15351
|
-
{
|
|
15352
|
-
"label": "Retrospective",
|
|
15353
|
-
"entityTypeId": "retrospective",
|
|
15354
|
-
"description": "Health check session results feeding into the retrospective discussion and action items"
|
|
16378
|
+
"label": "Proposal",
|
|
16379
|
+
"entityTypeId": "initiative",
|
|
16380
|
+
"description": "The plan or recommendation under consideration."
|
|
15355
16381
|
},
|
|
15356
16382
|
{
|
|
15357
|
-
"label": "
|
|
15358
|
-
"entityTypeId": "
|
|
15359
|
-
"description": "
|
|
16383
|
+
"label": "Opposing arguments",
|
|
16384
|
+
"entityTypeId": "insight",
|
|
16385
|
+
"description": "The case against the proposal, voiced by the assigned contrarian regardless of personal view."
|
|
15360
16386
|
},
|
|
15361
16387
|
{
|
|
15362
|
-
"label": "
|
|
15363
|
-
"entityTypeId": "
|
|
15364
|
-
"description": "
|
|
16388
|
+
"label": "Counter-evidence",
|
|
16389
|
+
"entityTypeId": "evidence",
|
|
16390
|
+
"description": "Data points the contrarian raises that the proposal does not yet account for."
|
|
15365
16391
|
}
|
|
15366
16392
|
],
|
|
15367
16393
|
"data": {
|
|
15368
16394
|
"entity_types": [
|
|
15369
16395
|
{
|
|
15370
|
-
"type": "
|
|
15371
|
-
"role": "
|
|
15372
|
-
},
|
|
15373
|
-
{
|
|
15374
|
-
"type": "retrospective",
|
|
15375
|
-
"role": "item"
|
|
16396
|
+
"type": "initiative",
|
|
16397
|
+
"role": "root"
|
|
15376
16398
|
},
|
|
15377
16399
|
{
|
|
15378
|
-
"type": "
|
|
15379
|
-
"role": "
|
|
16400
|
+
"type": "insight",
|
|
16401
|
+
"role": "bucket"
|
|
15380
16402
|
},
|
|
15381
16403
|
{
|
|
15382
|
-
"type": "
|
|
15383
|
-
"role": "
|
|
16404
|
+
"type": "evidence",
|
|
16405
|
+
"role": "bucket"
|
|
15384
16406
|
}
|
|
15385
16407
|
],
|
|
15386
|
-
"required_properties": {}
|
|
15387
|
-
"computed_properties": [
|
|
15388
|
-
{
|
|
15389
|
-
"property": "health_index",
|
|
15390
|
-
"expression": "(green_count - red_count) / total_indicators",
|
|
15391
|
-
"entity_type": "team",
|
|
15392
|
-
"label": "Health Index",
|
|
15393
|
-
"format": "number"
|
|
15394
|
-
}
|
|
15395
|
-
]
|
|
16408
|
+
"required_properties": {}
|
|
15396
16409
|
},
|
|
15397
16410
|
"structure": {
|
|
15398
|
-
"pattern": "
|
|
16411
|
+
"pattern": "collection"
|
|
15399
16412
|
},
|
|
15400
16413
|
"presentation": {
|
|
15401
16414
|
"layout": {
|
|
15402
|
-
"type": "
|
|
15403
|
-
"
|
|
15404
|
-
{
|
|
15405
|
-
"property": "title",
|
|
15406
|
-
"label": "Team",
|
|
15407
|
-
"sortable": true
|
|
15408
|
-
},
|
|
15409
|
-
{
|
|
15410
|
-
"property": "title",
|
|
15411
|
-
"label": "Retrospective",
|
|
15412
|
-
"sortable": true
|
|
15413
|
-
},
|
|
15414
|
-
{
|
|
15415
|
-
"property": "description",
|
|
15416
|
-
"label": "Metric"
|
|
15417
|
-
},
|
|
15418
|
-
{
|
|
15419
|
-
"property": "title",
|
|
15420
|
-
"label": "Team OKR",
|
|
15421
|
-
"sortable": true
|
|
15422
|
-
}
|
|
15423
|
-
]
|
|
16415
|
+
"type": "grid",
|
|
16416
|
+
"groupBy": "type"
|
|
15424
16417
|
},
|
|
15425
16418
|
"sort_by": {
|
|
15426
16419
|
"property": "title",
|
|
15427
16420
|
"direction": "asc"
|
|
15428
16421
|
},
|
|
15429
|
-
"colour_by": "
|
|
16422
|
+
"colour_by": "group",
|
|
15430
16423
|
"card_fields": [
|
|
15431
16424
|
"title",
|
|
15432
|
-
"description"
|
|
15433
|
-
"status"
|
|
16425
|
+
"description"
|
|
15434
16426
|
]
|
|
15435
16427
|
},
|
|
15436
16428
|
"education": {
|
|
15437
|
-
"purpose": "
|
|
15438
|
-
"core_question": "
|
|
16429
|
+
"purpose": "Make dissent a legitimate role rather than a personal stance. Assigning one reviewer to argue against the proposal forces the team to confront the strongest counter-case.",
|
|
16430
|
+
"core_question": "If we had to argue against this proposal (not because we believe it, but because the role demands it) what is the strongest case?",
|
|
15439
16431
|
"when_to_use": [
|
|
15440
|
-
"
|
|
15441
|
-
"
|
|
15442
|
-
"
|
|
16432
|
+
"A decision is heading toward consensus and you suspect groupthink",
|
|
16433
|
+
"Stakes are high and the team has not heard a serious counter-argument",
|
|
16434
|
+
"Cultural norms make raw dissent costly; assigning the role lowers the social cost"
|
|
15443
16435
|
],
|
|
15444
16436
|
"when_not_to_use": [
|
|
15445
|
-
"
|
|
15446
|
-
"
|
|
16437
|
+
"Genuine disagreement already exists in the room (let it surface; do not theatricalise it)",
|
|
16438
|
+
"The decision is small enough that the ceremony costs more than the insight returned",
|
|
16439
|
+
"The assigned contrarian will be punished socially for the role; set the norms first or skip"
|
|
15447
16440
|
]
|
|
15448
16441
|
}
|
|
15449
16442
|
},
|
|
15450
16443
|
{
|
|
15451
|
-
"id": "
|
|
15452
|
-
"
|
|
16444
|
+
"id": "second-order-thinking",
|
|
16445
|
+
"approach_ids": [
|
|
16446
|
+
"reflect"
|
|
16447
|
+
],
|
|
16448
|
+
"name": "Second-order Thinking",
|
|
15453
16449
|
"version": "1.0.0",
|
|
15454
|
-
"description":
|
|
15455
|
-
"category": "
|
|
16450
|
+
"description": 'After deciding a move, ask "and then what?" repeatedly. Trace second-, third-, and higher-order consequences to surface downstream effects that first-order reasoning misses.',
|
|
16451
|
+
"category": "team_process",
|
|
15456
16452
|
"origin": {
|
|
15457
16453
|
"type": "practitioner",
|
|
15458
|
-
"
|
|
15459
|
-
"
|
|
16454
|
+
"attribution": "Howard Marks / Charlie Munger",
|
|
16455
|
+
"description": `Howard Marks distinguished first-order vs second-order thinking in The Most Important Thing (2011) as the essential discipline of consequential decision-making. Charlie Munger's "and then what?" framing is the practical heuristic.`,
|
|
16456
|
+
"url": "https://www.oaktreecapital.com/insights/memo/dare-to-be-great-ii",
|
|
16457
|
+
"year": 2011,
|
|
16458
|
+
"license": "published_methodology"
|
|
15460
16459
|
},
|
|
15461
16460
|
"tags": [
|
|
15462
|
-
"
|
|
15463
|
-
"
|
|
16461
|
+
"team_process",
|
|
16462
|
+
"reflection",
|
|
16463
|
+
"consequences",
|
|
16464
|
+
"tree"
|
|
15464
16465
|
],
|
|
15465
16466
|
"slots": [
|
|
15466
16467
|
{
|
|
15467
|
-
"label": "
|
|
15468
|
-
"entityTypeId": "
|
|
15469
|
-
"description": "
|
|
15470
|
-
},
|
|
15471
|
-
{
|
|
15472
|
-
"label": "Dependency",
|
|
15473
|
-
"entityTypeId": "dependency",
|
|
15474
|
-
"description": "Dependency on another team, system, or deliverable that could block progress if not resolved"
|
|
16468
|
+
"label": "First-order move",
|
|
16469
|
+
"entityTypeId": "decision",
|
|
16470
|
+
"description": "The decision or move under consideration."
|
|
15475
16471
|
},
|
|
15476
16472
|
{
|
|
15477
|
-
"label": "
|
|
15478
|
-
"entityTypeId": "
|
|
15479
|
-
"description": "
|
|
16473
|
+
"label": "Second-order consequences",
|
|
16474
|
+
"entityTypeId": "insight",
|
|
16475
|
+
"description": "Downstream effects that follow from the first-order move."
|
|
15480
16476
|
},
|
|
15481
16477
|
{
|
|
15482
|
-
"label": "
|
|
15483
|
-
"entityTypeId": "
|
|
15484
|
-
"description": "
|
|
16478
|
+
"label": "Higher-order consequences",
|
|
16479
|
+
"entityTypeId": "insight",
|
|
16480
|
+
"description": "Third-, fourth-, fifth-order ripples: second-order consequences of the second-order consequences."
|
|
15485
16481
|
}
|
|
15486
16482
|
],
|
|
15487
16483
|
"data": {
|
|
15488
16484
|
"entity_types": [
|
|
15489
16485
|
{
|
|
15490
|
-
"type": "
|
|
15491
|
-
"role": "
|
|
15492
|
-
},
|
|
15493
|
-
{
|
|
15494
|
-
"type": "dependency",
|
|
15495
|
-
"role": "item"
|
|
15496
|
-
},
|
|
15497
|
-
{
|
|
15498
|
-
"type": "status_report",
|
|
15499
|
-
"role": "item"
|
|
16486
|
+
"type": "decision",
|
|
16487
|
+
"role": "root"
|
|
15500
16488
|
},
|
|
15501
16489
|
{
|
|
15502
|
-
"type": "
|
|
15503
|
-
"role": "
|
|
16490
|
+
"type": "insight",
|
|
16491
|
+
"role": "branch"
|
|
15504
16492
|
}
|
|
15505
16493
|
],
|
|
15506
|
-
"required_properties": {}
|
|
15507
|
-
"computed_properties": [
|
|
15508
|
-
{
|
|
15509
|
-
"property": "severity",
|
|
15510
|
-
"expression": "probability * impact",
|
|
15511
|
-
"entity_type": "risk",
|
|
15512
|
-
"label": "Severity",
|
|
15513
|
-
"format": "number"
|
|
15514
|
-
}
|
|
15515
|
-
]
|
|
16494
|
+
"required_properties": {}
|
|
15516
16495
|
},
|
|
15517
16496
|
"structure": {
|
|
15518
|
-
"pattern": "
|
|
16497
|
+
"pattern": "tree"
|
|
15519
16498
|
},
|
|
15520
16499
|
"presentation": {
|
|
15521
16500
|
"layout": {
|
|
15522
|
-
"type": "
|
|
15523
|
-
"
|
|
15524
|
-
{
|
|
15525
|
-
"property": "title",
|
|
15526
|
-
"label": "Item",
|
|
15527
|
-
"sortable": true
|
|
15528
|
-
},
|
|
15529
|
-
{
|
|
15530
|
-
"property": "description",
|
|
15531
|
-
"label": "Category"
|
|
15532
|
-
},
|
|
15533
|
-
{
|
|
15534
|
-
"property": "status",
|
|
15535
|
-
"label": "Status"
|
|
15536
|
-
},
|
|
15537
|
-
{
|
|
15538
|
-
"property": "description",
|
|
15539
|
-
"label": "Owner / Action"
|
|
15540
|
-
}
|
|
15541
|
-
]
|
|
16501
|
+
"type": "tree",
|
|
16502
|
+
"direction": "TB"
|
|
15542
16503
|
},
|
|
15543
16504
|
"sort_by": {
|
|
15544
16505
|
"property": "title",
|
|
15545
16506
|
"direction": "asc"
|
|
15546
16507
|
},
|
|
15547
|
-
"colour_by": "type",
|
|
15548
16508
|
"card_fields": [
|
|
15549
16509
|
"title",
|
|
15550
|
-
"description"
|
|
15551
|
-
"status"
|
|
16510
|
+
"description"
|
|
15552
16511
|
]
|
|
15553
16512
|
},
|
|
15554
16513
|
"education": {
|
|
15555
|
-
"purpose":
|
|
15556
|
-
"core_question": "
|
|
16514
|
+
"purpose": 'Resist first-order reasoning by chaining "and then what?" until non-obvious downstream consequences come into view.',
|
|
16515
|
+
"core_question": "If we make this move and it works, what does the world look like next, and is that the world we want?",
|
|
15557
16516
|
"when_to_use": [
|
|
15558
|
-
"
|
|
15559
|
-
"
|
|
15560
|
-
"
|
|
16517
|
+
"A decision has feedback loops, market reactions, or behavioural ripples",
|
|
16518
|
+
"The first-order case is compelling, which is exactly when downstream effects bite",
|
|
16519
|
+
"Considering an irreversible or large-scale commitment"
|
|
15561
16520
|
],
|
|
15562
16521
|
"when_not_to_use": [
|
|
15563
|
-
"
|
|
15564
|
-
"
|
|
16522
|
+
"Routine, reversible, low-blast-radius decisions where deliberation costs more than mistakes",
|
|
16523
|
+
"Higher-order branches diverge into pure speculation with no anchor in evidence",
|
|
16524
|
+
"Time pressure makes a deeper trace expensive and the first-order call is good enough"
|
|
15565
16525
|
]
|
|
15566
16526
|
}
|
|
15567
16527
|
}
|
|
@@ -16515,7 +17475,10 @@ var STRATEGY_OUTCOMES_PLAYBOOK = {
|
|
|
16515
17475
|
region: "strategy_outcomes",
|
|
16516
17476
|
is_canonical: true,
|
|
16517
17477
|
related_framework_ids: ["okr-framework", "three-horizons", "north-star-metric", "metrics-tree", "wardley-map"],
|
|
16518
|
-
|
|
17478
|
+
// DT-PB-3: anchor is `outcome`, not `objective`. The creation_sequence
|
|
17479
|
+
// creates outcome (step 3) before objective (step 4), and outcome is the
|
|
17480
|
+
// strategy region's gravitational centre (objectives translate outcomes).
|
|
17481
|
+
target_anchor_entity: "outcome",
|
|
16519
17482
|
creation_sequence: [
|
|
16520
17483
|
seqStep(
|
|
16521
17484
|
1,
|
|
@@ -16671,8 +17634,12 @@ var DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK = {
|
|
|
16671
17634
|
seqStep(
|
|
16672
17635
|
8,
|
|
16673
17636
|
"Test",
|
|
16674
|
-
|
|
16675
|
-
|
|
17637
|
+
// DT-PB-1: was `experiment` — which resolves to NO canonical edge with
|
|
17638
|
+
// hypothesis or test_plan, forcing an orphan. `experiment_run` is the
|
|
17639
|
+
// hypothesis-linked test unit (experiment_run_validates_hypothesis,
|
|
17640
|
+
// test_plan_ran_as_experiment_run, experiment_run_yields_evidence).
|
|
17641
|
+
["experiment_run", "test_plan", "evidence"],
|
|
17642
|
+
"Validate with targeted experiment runs. Close the loop between research and action."
|
|
16676
17643
|
)
|
|
16677
17644
|
]
|
|
16678
17645
|
};
|
|
@@ -16719,8 +17686,8 @@ var MARKET_COMPETITIVE_PLAYBOOK = {
|
|
|
16719
17686
|
seqStep(
|
|
16720
17687
|
6,
|
|
16721
17688
|
"Moves",
|
|
16722
|
-
["
|
|
16723
|
-
"Look where competitors are weak and trends are strong. That intersection is where your moves live
|
|
17689
|
+
["competitive_battle_card"],
|
|
17690
|
+
"Look where competitors are weak and trends are strong. That intersection is where your moves live: arm the team with battle cards that turn each competitor weakness into a position you can win. (Partnership moves belong in the business & GTM playbook, where `partnership` connects.)"
|
|
16724
17691
|
)
|
|
16725
17692
|
]
|
|
16726
17693
|
};
|
|
@@ -17133,8 +18100,8 @@ var OPERATIONS_QUALITY_PLAYBOOK = {
|
|
|
17133
18100
|
seqStep(
|
|
17134
18101
|
5,
|
|
17135
18102
|
"Quality Gates",
|
|
17136
|
-
["test_suite", "test_case", "regression_test", "qa_session"],
|
|
17137
|
-
"Establish what does not ship until tests pass. Define the test pyramid: unit, integration, end-to-end."
|
|
18103
|
+
["test_suite", "test_case", "regression_test", "qa_session", "feature", "bug"],
|
|
18104
|
+
"Establish what does not ship until tests pass. Define the test pyramid: unit, integration, end-to-end. Quality is a delivery concern: gates guard the features they cover and the bugs they catch, which is also where incidents trace back (a shipped defect becomes a production incident)."
|
|
17138
18105
|
),
|
|
17139
18106
|
seqStep(
|
|
17140
18107
|
6,
|
|
@@ -21201,7 +22168,7 @@ var UPG_ANTI_PATTERNS = [
|
|
|
21201
22168
|
]
|
|
21202
22169
|
},
|
|
21203
22170
|
why_it_matters: "Without any chain link, every downstream artefact (need, opportunity, feature) loses its anchor. Features end up addressing demographics instead of struggles.",
|
|
21204
|
-
remediation: "For each persona, connect it into the user chain via at least one of: `persona_pursues_job`, `persona_experiences_need`, `persona_aspires_to_desired_outcome`, or `persona_incurs_switching_cost`. Use `/upg-persona` or the JTBD canvas workflow.",
|
|
22171
|
+
remediation: "For each persona, connect it into the user chain via at least one of: `persona_pursues_job`, `persona_experiences_need`, `persona_aspires_to_desired_outcome`, or `persona_incurs_switching_cost`. Use `/upg-new-persona` or the JTBD canvas workflow.",
|
|
21205
22172
|
stages: ["concept", "validation", "build", "beta", "launch", "growth", "mature"],
|
|
21206
22173
|
severity: "high",
|
|
21207
22174
|
source: { kind: "practitioner", attribution: "Clayton Christensen, Jobs to Be Done" }
|
|
@@ -21341,7 +22308,7 @@ var UPG_ANTI_PATTERNS = [
|
|
|
21341
22308
|
]
|
|
21342
22309
|
},
|
|
21343
22310
|
why_it_matters: "OKRs without measurable key results cannot be tracked, debated, or learned from. The graph carries intent but not accountability.",
|
|
21344
|
-
remediation: "For each `objective`, define 2\u20134 `key_result` entities and link via `objective_achieved_through_key_result`. Use `/upg-okr` to author.",
|
|
22311
|
+
remediation: "For each `objective`, define 2\u20134 `key_result` entities and link via `objective_achieved_through_key_result`. Use `/upg-new-okr` to author.",
|
|
21345
22312
|
stages: ["validation", "build", "beta", "launch", "growth", "mature"],
|
|
21346
22313
|
severity: "high",
|
|
21347
22314
|
source: { kind: "book", citation: "Measure What Matters, John Doerr (2017)" }
|
|
@@ -21401,7 +22368,7 @@ var UPG_ANTI_PATTERNS = [
|
|
|
21401
22368
|
}
|
|
21402
22369
|
},
|
|
21403
22370
|
why_it_matters: 'A graph with one persona past validation is usually carrying an unexamined "everyone is the same user" assumption.',
|
|
21404
|
-
remediation: "Add personas representing the next 1\u20132 most distinct user segments. Use `/upg-persona`.",
|
|
22371
|
+
remediation: "Add personas representing the next 1\u20132 most distinct user segments. Use `/upg-new-persona`.",
|
|
21405
22372
|
stages: ["validation", "build", "beta", "launch", "growth", "mature"],
|
|
21406
22373
|
severity: "medium",
|
|
21407
22374
|
source: { kind: "practitioner", attribution: "Alan Cooper, The Inmates Are Running the Asylum" }
|
|
@@ -21419,7 +22386,7 @@ var UPG_ANTI_PATTERNS = [
|
|
|
21419
22386
|
]
|
|
21420
22387
|
},
|
|
21421
22388
|
why_it_matters: "Build-only graphs commit the team to delivery without a learning loop. Every shipped feature becomes a permanent assumption.",
|
|
21422
|
-
remediation: "Spin up at least one `experiment_plan` or `hypothesis` per quarter's build batch. Use `/upg-
|
|
22389
|
+
remediation: "Spin up at least one `experiment_plan` or `hypothesis` per quarter's build batch. Use `/upg-new-discovery` or `/upg-new-hypothesis`.",
|
|
21423
22390
|
stages: ["build", "beta", "launch", "growth"],
|
|
21424
22391
|
severity: "high",
|
|
21425
22392
|
source: { kind: "practitioner", attribution: "Marty Cagan, Inspired (continuous discovery)" }
|
|
@@ -21710,19 +22677,31 @@ var REFLECT_MODES = [
|
|
|
21710
22677
|
];
|
|
21711
22678
|
|
|
21712
22679
|
// src/approaches/definitions/index.ts
|
|
22680
|
+
function deriveFrameworkExamples() {
|
|
22681
|
+
const byApproach = {
|
|
22682
|
+
plan: [],
|
|
22683
|
+
inspect: [],
|
|
22684
|
+
prioritise: [],
|
|
22685
|
+
trace: [],
|
|
22686
|
+
reflect: []
|
|
22687
|
+
};
|
|
22688
|
+
for (const fw of UPG_FRAMEWORKS) {
|
|
22689
|
+
for (const approachId of fw.approach_ids ?? []) {
|
|
22690
|
+
if (approachId in byApproach) {
|
|
22691
|
+
byApproach[approachId].push(fw.id);
|
|
22692
|
+
}
|
|
22693
|
+
}
|
|
22694
|
+
}
|
|
22695
|
+
return byApproach;
|
|
22696
|
+
}
|
|
22697
|
+
var FRAMEWORK_EXAMPLES = deriveFrameworkExamples();
|
|
21713
22698
|
var PLAN = {
|
|
21714
22699
|
id: "plan",
|
|
21715
22700
|
label: "Plan",
|
|
21716
22701
|
description: 'The path of arrival to "what should I build next?". Plan engages a region by surveying its entity coverage against canonical expectations and surfacing the missing scaffolding: the entities a healthy region carries that this graph does not. Cartographic sense: you are walking the coastline of a region and noting where the contour is incomplete, not deciding a strategy. Frameworks like Now/Next/Later, MoSCoW, and Wardley Mapping live within Plan as the named techniques for organising the gap-filling sequence.',
|
|
21717
22702
|
question_answered: "what should I build next?",
|
|
21718
22703
|
signature_hint: "({ region?: UPGRegionId }) \u2192 { missing_entities, coverage_score }",
|
|
21719
|
-
framework_id_examples:
|
|
21720
|
-
"now-next-later",
|
|
21721
|
-
"moscow",
|
|
21722
|
-
"wardley-map",
|
|
21723
|
-
"okr-framework",
|
|
21724
|
-
"three-horizons"
|
|
21725
|
-
]
|
|
22704
|
+
framework_id_examples: FRAMEWORK_EXAMPLES.plan
|
|
21726
22705
|
};
|
|
21727
22706
|
var INSPECT = {
|
|
21728
22707
|
id: "inspect",
|
|
@@ -21730,28 +22709,15 @@ var INSPECT = {
|
|
|
21730
22709
|
description: 'The path of arrival to "what\'s broken?". Inspect engages a region or a set of entities by running canonical health checks (anti-pattern audits, drift reports, lint passes) and emitting a structured violation list with severity, kind, target entity, description, and fix hint. Cartographic sense: you are surveying the coastline for hazards before approach; the violations are the rocks marked on the chart. The named techniques inside Inspect are the audit catalogues themselves (`UPG_ANTI_PATTERNS` and the lint passes built on the structural rules).',
|
|
21731
22710
|
question_answered: "what's broken?",
|
|
21732
22711
|
signature_hint: "({ region?: UPGRegionId, entities?: entity_ids[] }) \u2192 { violations: [{ severity, kind, entity_id, description, fix_hint }] }",
|
|
21733
|
-
framework_id_examples:
|
|
21734
|
-
"heuristic-evaluation",
|
|
21735
|
-
"tech-debt-tracker",
|
|
21736
|
-
"accessibility-maturity-model",
|
|
21737
|
-
"cognitive-walkthrough",
|
|
21738
|
-
"blameless-postmortem"
|
|
21739
|
-
]
|
|
22712
|
+
framework_id_examples: FRAMEWORK_EXAMPLES.inspect
|
|
21740
22713
|
};
|
|
21741
22714
|
var PRIORITISE = {
|
|
21742
22715
|
id: "prioritise",
|
|
21743
22716
|
label: "Prioritise",
|
|
21744
|
-
description: `The path of arrival to "what's most important?". Prioritise engages an explicit candidate set (entity ids the caller passes in) and ranks it by an explicit framework: RICE,
|
|
22717
|
+
description: `The path of arrival to "what's most important?". Prioritise engages an explicit candidate set (entity ids the caller passes in) and ranks it by an explicit framework: RICE, Kano, MoSCoW. The framework_id is required because prioritisation without a declared scoring lens is incoherent. Cartographic sense: you have a set of charted destinations and you are computing the order of arrival from a chosen vantage. Different frameworks weight the same candidate set differently; the approach delegates the actual ranking math to the named technique (the framework definition).`,
|
|
21745
22718
|
question_answered: "what's most important?",
|
|
21746
22719
|
signature_hint: "({ candidates: entity_ids[], framework_id }) \u2192 { ranked: [{ entity_id, score, rationale }], framework_used }",
|
|
21747
|
-
framework_id_examples:
|
|
21748
|
-
"rice-scoring",
|
|
21749
|
-
"ice-scoring",
|
|
21750
|
-
"kano-model",
|
|
21751
|
-
"cost-of-delay",
|
|
21752
|
-
"moscow",
|
|
21753
|
-
"wsjf"
|
|
21754
|
-
]
|
|
22720
|
+
framework_id_examples: FRAMEWORK_EXAMPLES.prioritise
|
|
21755
22721
|
};
|
|
21756
22722
|
var TRACE = {
|
|
21757
22723
|
id: "trace",
|
|
@@ -21759,34 +22725,15 @@ var TRACE = {
|
|
|
21759
22725
|
description: 'The path of arrival to "walk a meaningful path through existing graph". Trace engages an anchor entity and follows a path expressed as a UPGEntityType[] shorthand. Example: `["persona", "job", "feature"]` walks persona\u2192job\u2192feature using the canonical edge for each pair (resolved via `resolve_edge_for_pair`). An optional `edges_override` array selects non-canonical edges per hop when a pair has multiple resolutions. Cartographic sense: you are tracing a route across charted terrain; anchor is the departure, path is the heading sequence, the canonical edges are the roads. No DSL invented; the shorthand IS the path expression.',
|
|
21760
22726
|
question_answered: "walk a meaningful path through existing graph",
|
|
21761
22727
|
signature_hint: "({ anchor: entity_id, path: UPGEntityType[], edges_override?: (string | null)[] }) \u2192 { trail: [{ depth, entity_id, edge_type_in }], reached: entity_id[] }",
|
|
21762
|
-
framework_id_examples:
|
|
21763
|
-
"opportunity-solution-tree",
|
|
21764
|
-
"strategic-cascade",
|
|
21765
|
-
"metrics-tree",
|
|
21766
|
-
"user-journey-map",
|
|
21767
|
-
"impact-map",
|
|
21768
|
-
"dependency-map"
|
|
21769
|
-
]
|
|
22728
|
+
framework_id_examples: FRAMEWORK_EXAMPLES.trace
|
|
21770
22729
|
};
|
|
21771
22730
|
var REFLECT = {
|
|
21772
22731
|
id: "reflect",
|
|
21773
22732
|
label: "Reflect",
|
|
21774
|
-
description: 'The path of arrival to "what should I be questioning?". Reflect engages an optional scope (region, entity, or `null` for the whole graph) and emits structured prompts a thinker should consider: assumptions to test, alternatives to weigh, blind-spots to surface, load-bearing claims to verify. Mode is optional; absence is open reflection. Cartographic sense: before approaching the coastline, you are asking which features of your chart you have not actually verified; the prompts mark the parts of the map that may be conjecture.
|
|
22733
|
+
description: 'The path of arrival to "what should I be questioning?". Reflect engages an optional scope (region, entity, or `null` for the whole graph) and emits structured prompts a thinker should consider: assumptions to test, alternatives to weigh, blind-spots to surface, load-bearing claims to verify. Mode is optional; absence is open reflection. Cartographic sense: before approaching the coastline, you are asking which features of your chart you have not actually verified; the prompts mark the parts of the map that may be conjecture. Retrospective and Build-Measure-Learn are the named reflective techniques in the canonical surface.',
|
|
21775
22734
|
question_answered: "what should I be questioning?",
|
|
21776
22735
|
signature_hint: "({ scope?: UPGRegionId | entity_id | null, mode?: 'assumptions' | 'alternatives' | 'blind-spots' | 'load-bearing' }) \u2192 { prompts: [{ kind, question, target_entities? }] }",
|
|
21777
|
-
framework_id_examples:
|
|
21778
|
-
// Reflection classics: the five canonical reflect frameworks.
|
|
21779
|
-
"five-whys",
|
|
21780
|
-
"pre-mortem",
|
|
21781
|
-
"red-team",
|
|
21782
|
-
"devils-advocate",
|
|
21783
|
-
"second-order-thinking",
|
|
21784
|
-
// Reflective ceremonies + reflective JTBD lens already in the catalog.
|
|
21785
|
-
"retrospective",
|
|
21786
|
-
"four-forces-of-progress",
|
|
21787
|
-
"assumption-canvas",
|
|
21788
|
-
"win-loss-analysis"
|
|
21789
|
-
]
|
|
22736
|
+
framework_id_examples: FRAMEWORK_EXAMPLES.reflect
|
|
21790
22737
|
};
|
|
21791
22738
|
var UPG_APPROACHES = [PLAN, INSPECT, PRIORITISE, TRACE, REFLECT];
|
|
21792
22739
|
var UPG_APPROACHES_BY_ID = Object.fromEntries(
|
|
@@ -23983,7 +24930,7 @@ function isCanonical(text) {
|
|
|
23983
24930
|
}
|
|
23984
24931
|
|
|
23985
24932
|
// src/index.ts
|
|
23986
|
-
var UPG_VERSION = "0.8.
|
|
24933
|
+
var UPG_VERSION = "0.8.2";
|
|
23987
24934
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
23988
24935
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
23989
24936
|
var UPG_TYPES = getTypes();
|