skip to content

A sub-goal repeats under three branches of your attack tree: duplicate, share, or lift it?

level: principalimportance: nice to knowfreq 31%

answer

  1. a tree cannot express three parents
  2. duplicate, share, or lift
  3. copies drift; one gets the control
  4. sharing makes it a DAG; roll-ups double-count
  5. convergence means chokepoint leverage

basics

~20 s

Duplicate only when the copies genuinely differ under each parent. If it is the same work, share one node or lift it into its own tree with reference stubs, and read the repetition itself as a chokepoint where one control cuts three paths.

solid answer

~50 s

First I check whether the three occurrences are actually the same work. On a music-streaming royalty run, `obtain write access to the payout table` sits under inflating my own play counts, redirecting another artist's payout, and suppressing a rival's — same node, same preconditions, so duplicating it means three copies that drift apart the moment one is updated. If it is small, I share it: one node with three parents, which turns the tree into a DAG and makes the leverage visible. If it is large, or it has grown past a dozen leaves, I lift it into its own tree with its own root and leave a reference stub in each parent. The cost of sharing is that any roll-up over children can count the shared node more than once and most readers assume a tree. The payoff is the finding: a node reachable from three goals is a chokepoint, and a control there earns triple credit.

go deeper

for a junior

Know that a strict attack tree cannot show one node under several parents, so a repeated sub-goal is either written out more than once or handled specially. Recognise the repetition rather than assuming it is a mistake.

for a middle

Be able to explain the three mechanics — duplicating the node, sharing it so the diagram becomes a directed acyclic graph, or promoting it to its own tree with reference stubs — and the drift and arithmetic consequences of each.

for a senior

Make the call in context and defend it: check whether the occurrences are truly the same work, weigh maintenance drift against roll-up correctness, and surface the convergence as a chokepoint where one control covers several attack paths.

for a principal

Own it as artifact strategy: set when the organisation lifts a sub-goal into its own owned tree, who reviews shared nodes given that an error there is wrong in every consuming branch, and how chokepoint findings turn into funded controls.

## The situation You are decomposing a music-streaming service's nightly royalty accounting job. The adversary is an authenticated low-privilege artist account; the asset is money. Three sub-goals hang under the root: ``` OR make the nightly royalty run pay out wrongly - inflate my own play counts - redirect another artist's payout to my account - suppress a rival's payout ``` And under each of them, the same node appears: *obtain write access to the payout table*. A strict tree cannot express that a node has three parents, so you have exactly three options, and the choice is a real design decision about the artifact — not a formatting preference. ## Option 1 — duplicate Write the sub-goal out three times, once under each parent, and keep a strict tree. - **For:** every reader convention, every drawing style and every roll-up over children assumes a tree, so nothing downstream breaks. Each copy can be tailored to its parent when the parent genuinely constrains it. - **Against:** three copies drift. Someone adds a fourth child to one copy; a control added under one copy makes it look as if the threat is handled while two identical copies sit uncovered. The more valuable the node, the more expensive the drift. Duplicate when the occurrences are **not actually identical** — different preconditions, different reachable actions, different timing under each parent — or when the node is a couple of lines and the audience needs a plain tree. ## Option 2 — share the node (the tree becomes a DAG) Draw the sub-goal once and let three parents point at it. The artifact is now a directed acyclic graph, not a tree. - **For:** one source of truth, no drift, and the structural fact is on the page: three goals converge here. - **Against:** arithmetic and reading habits. Any roll-up that walks children — an OR parent taking the best of its children, an AND parent summing them — can traverse the shared node more than once and count its effort repeatedly or attribute it to whichever parent it reached first. Path counting stops being a simple traversal. And a reader who assumes a tree can misread a converging edge as a mistake, so a shared node needs to be visually obvious. ## Option 3 — lift it into its own tree Promote the sub-goal to a root in its own right — *obtain write access to the payout table* becomes its own tree with its own decomposition — and leave a **reference stub** in each of the three parents pointing at it. This is also the answer to a different problem: a single branch that has simply grown too big. On a marine terminal's container-release gate system, with an on-site adversary holding a driver's handheld terminal and goods plus terminal availability at stake, the sub-goal *obtain a valid release code* keeps growing until it is a dozen-plus leaves and it visually dominates a tree that is supposed to be about the gate. Lifting it restores the parent tree's readability, gives the lifted tree room to be decomposed properly, and lets it have its own owner and its own review cadence. - **For:** readability of both artifacts, one place to maintain, and an explicit owner for a piece of analysis that had become a project on its own. - **Against:** indirection. A reader now has to follow a stub to a second document, and two artifacts can fall out of sync in a different way — the stub can outlive the tree it points at. It is worth the cost only when the node is genuinely large or genuinely shared. ## The decision rule Small and genuinely different per parent, duplicate. Small and identical, share. Large — either because it is deep or because three parents depend on it — lift, and leave stubs. If you are unsure, ask what a change to that node costs you: if updating it in one place must not silently leave two stale copies behind, you are past duplication. ## The finding hiding in the repetition Do not lose the analytical point in the bookkeeping. A sub-goal reachable from three different attacker goals is a **chokepoint**. One control there — separating who may write to the payout table from who may run the job, making writes to it append-only and reviewable — cuts three attack paths at once, and that leverage is the strongest funding argument the tree can produce. Duplicating the node buries this: three separate-looking rows in three branches read as three unrelated items in a backlog. Sharing or lifting makes it visible, which is often the better reason to choose those options than tidiness. The mirror of that is a caution: because a chokepoint node is a single point of failure in the analysis, a mistake in it is now wrong in three places at once. A lifted or shared node deserves more review attention than the average branch, not less.

  • When is duplicating the repeated node actually the right call?
    When the occurrences only look identical. If the preconditions differ under each parent — different access, different timing, different reachable actions — they are three different nodes that share a name, and merging them would hide real distinctions. Duplication is also fine for a one-line node whose audience needs a plain tree, since the drift risk scales with how much analysis hangs beneath it.
  • What breaks once the tree is a DAG?
    Mainly arithmetic and reading habits. Any roll-up that walks children can reach the shared node by more than one path and count its effort twice or attribute it to whichever parent got there first, and path enumeration is no longer a simple traversal. Readers who assume a tree may also misread the converging edges, so the shared node has to be visually unmistakable.
  • One branch has grown to a dozen-plus leaves and dominates the diagram. What do you do?
    Lift it. Promote the sub-goal to a root in its own tree, decompose it properly there, and leave a reference stub in the parent. The parent tree becomes readable again and the lifted analysis gets its own owner and review cadence. The cost is indirection: the stub must be maintained, or it will outlive the tree it points at.

It is the same call as a helper used by three features: inline it three times and the copies drift, extract it once and everything now depends on one thing you must keep right.

saying these in an interview costs you the question

  • Claims a repeated sub-goal is always a modeling error
  • Silently duplicates the node and lets the copies drift apart
  • Shares nodes freely, then reports roll-up numbers that double-count
  • Misses that convergence marks a high-leverage chokepoint control
  • Lifts every medium-sized branch, leaving stubs pointing at nothing

context