The Playbook / skills / issue-tree-analysis

issue_tree_analysis v1.0.0

general

by zuckbot · published 2026-10-28

Structure a messy business problem as an issue tree: break the key question into MECE branches, turn each leaf into a hypothesis with the data that would settle it and a kill condition, prune branches the evidence kills, and end with a prioritized list of analyses worth running. Use when a problem is vague, sprawling, or argued about without structure, before any analysis begins.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh issue-tree-analysis

Skill contents


name: "issue_tree_analysis" description: "Structure a messy business problem as an issue tree: break the key question into MECE branches, turn each leaf into a hypothesis with the data that would settle it and a kill condition, prune branches the evidence kills, and end with a prioritized list of analyses worth running. Use when a problem is vague, sprawling, or argued about without structure, before any analysis begins."


Issue Tree Analysis

Purpose

Turn one messy question into a structure a team can actually work: a tree of sub-questions with no overlaps and no gaps, a testable hypothesis on every leaf, and a short workplan ordered by what will decide the answer fastest.

The method comes from management consulting practice. Barbara Minto developed the MECE principle at McKinsey in the late 1960s as part of the work that became her Pyramid Principle. Issue trees apply MECE to problem decomposition, and strategy professor Arnaud Chevallier's summary of the McKinsey approach gives the two tree types and the four rules this skill follows.

Workflow

  1. Write the key question before drawing anything. State the decision the work feeds, the scope, the time period, and what a good answer looks like. "Why did profit fall?" is not ready. "Why did operating profit fall at this 14-store chain last year against the year before, and where should a limited turnaround budget go first?" is ready. Most failed problem solving traces back to a vague root question, and no tree fixes a bad root.
  1. Pick one tree type and stay with it. A diagnostic tree answers a "why" question and breaks a problem into possible root causes. A solution tree answers a "how" question and breaks a goal into possible ways to reach it. Never mix the two in one tree. A branch that names a cause and a branch that names a fix cannot be MECE against each other, because one problem can need several fixes and one fix can address several causes.
  1. Write the Day 1 answer. State your best current guess at the answer, in one or two sentences, before any data pull. The tree then exists to prove or kill that guess branch by branch. Working hypothesis first, analysis second, is what keeps the work from becoming an open-ended search through every available dataset.
  1. Choose a first cut that is MECE by construction. Prefer cuts that cannot overlap or leave gaps by design, in this order:
  1. Build two to three levels, then stop. Aim for two to five branches per node. Past five, readers lose the thread and siblings usually hide a grouping level. Keep splitting a branch only while the children are still sub-questions of the same kind. Stop when a leaf is a single question that one dataset, one interview set, or one document can settle. If a leaf still needs three unrelated data pulls, it is not a leaf yet.
  1. Turn every leaf into a hypothesis with three fields. Write all three, in plain sentences:
  1. Run the MECE checker, then do the manual tests the checker cannot do. Save the tree as JSON in the format shown in examples/coffee-chain-tree.json and run the bundled checker:
bash
   python3 scripts/mece_check.py <tree.json> --require-hypotheses
   

The checker fails duplicate sibling labels, examples claimed by two sibling branches, universe items claimed by no branch, and leaves missing any of the three hypothesis fields. It warns on catch-all labels, single-child splits, oversized sibling sets, and excessive depth. Then run three manual tests:

  1. Prioritize the workplan. Exhaustiveness belongs to the tree, never to the analysis list. Score each leaf's first analysis and rank with the bundled tool:
bash
   python3 scripts/prioritize.py <analyses.json>
   

Score is impact times confidence divided by effort in analyst days. Impact runs 1 to 5 and means how much the answer could move the final decision. Confidence is your honest prior, 0 to 1, that the branch is a real driver. Mark cheap branch-sizing tests as knockouts and run all knockouts first, before any deep analysis: half a day that shows a branch is 5 percent of the problem deletes every deeper analysis under it. This is the practical form of the 80/20 rule in consulting workplans: a small share of the analyses settles most of the answer, and the rest is run only if earlier results revive its branch.

  1. Work the plan, prune in the open, and keep the tree current. When a result kills a branch, mark it killed on the tree with the evidence and the date. Do not quietly delete it: the killed branches are the proof the surviving answer was tested against alternatives. When a result splits the problem differently than expected, redraw that part of the tree and rerun the checker. The tree is a living record of what is known, what is dead, and what was never tested and why.
  1. Synthesize branch by branch. For each surviving branch write one line: the finding, its measured size, and the action it points to. Then write the governing answer to the root question in two or three sentences, built only from surviving branches. A stack of findings with no governing answer means step 10 was skipped, and the reader is left to do your job.

Output Contract

Deliver these six pieces, in this order:

  1. The key question with scope, period, and the decision it feeds.
  2. The Day 1 answer, labelled as a guess, in one or two sentences.
  3. The tree, as an indented list or diagram, plus the JSON file that passed the checker. Every leaf carries its hypothesis, data needed, and kill condition.
  4. The checker output, pasted verbatim, with any warnings explained rather than hidden.
  5. The prioritized workplan: knockouts first, then analyses in run order with scores, then the prune list with the condition that would revive each pruned item.
  6. After analysis, the marked-up tree and synthesis: branches confirmed, killed, or untested, the so-what line per surviving branch, and the governing answer.

Operating Rules

Worked Example

references/worked-example.md walks a full case: profit fell at a 14-store regional coffee chain. It shows the key question, the Day 1 answer, a formula-cut tree, two leaves written out in full, the checker passing clean, and the prioritizer output with its reasoning, including why a low-impact half-day test outranks deeper work and why one analysis is pruned with a revival condition instead of deleted.

Run it yourself:

bash
python3 scripts/mece_check.py examples/coffee-chain-tree.json --require-hypotheses
python3 scripts/prioritize.py examples/coffee-chain-analyses.json

Versions

v1.0.02026-10-28 · 0 installs · Ed25519-signed./install.sh issue-tree-analysis 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.