Skip to main content

Hierarchy, Links, and Dependencies

Work items can be connected to each other in three distinct ways. Each serves a different purpose, and choosing the right one keeps plans readable and reporting meaningful.

RelationshipWhat it meansTypical use
Parent–child"This item is part of that item"Containment — an Epic contains Issues, an Issue contains Tasks
Link"This item is related to that item"Qualitative relationships like blocks or duplicates
Dependency"This item's schedule depends on that item's schedule"Scheduling calculations with lag and constraint type

Parent–child hierarchy

Each work item can have a single parent work item, forming a tree. The parent–child relationship expresses containment: the child is a part of the parent.

The type hierarchy controls which types can be children of which:

Epic
└── Issue
├── Task
│ └── Sub-task
└── Bug
└── Sub-task
  • An Epic can contain Issues
  • An Issue can contain Tasks, Bugs, and Sub-tasks
  • A Task or Bug can contain Sub-tasks
  • A Sub-task cannot contain children

Attempting to create a work item with an invalid parent type (for example, nesting an Epic under a Task) is rejected. Cycles are also prevented — a work item cannot end up as its own ancestor.

When a child has a parent that belongs to a project, the child inherits that project automatically. This keeps hierarchies consistent within a project.

A link is a named relationship between two work items. Unlike parent–child, links are not containment and do not affect scheduling. They describe how two items relate to each other.

The supported link types are:

Link typeMeaning
BlocksThe target cannot start until the source completes
Relates toInformational relationship — the items are connected
DuplicatesThe target is a duplicate of the source

Links are directional: they record a source and a target, so "A blocks B" is distinct from "B blocks A." The same pair of items can have multiple links of different types.

Links cross project boundaries freely. A work item in one project can block, relate to, or duplicate an item in another project within the same tenant.

Dependencies

A dependency is a scheduling relationship between two work items. Dependencies drive schedule calculations — they determine when an item can start or finish based on another item's dates.

Each dependency has a type drawn from standard project scheduling:

Dependency typeCodeMeaning
Finish to StartFSSuccessor starts after predecessor finishes (most common)
Start to StartSSSuccessor starts when predecessor starts
Finish to FinishFFSuccessor finishes when predecessor finishes
Start to FinishSFSuccessor finishes when predecessor starts

Dependencies also carry:

  • Lag — a time offset applied to the dependency (for example, "start 2 days after the predecessor finishes")
  • Hard constraint flag — whether the dependency is enforced strictly or advisory

Like links, dependencies can span project boundaries within the same tenant, and cycle detection prevents a dependency graph from containing loops.

Choosing the right relationship

Use the relationship that matches the meaning you want to record:

  • Use parent–child when one item is a component of another. The child belongs inside the parent's scope.
  • Use a link when you need to express a qualitative relationship — something blocks, duplicates, or relates to something else — without implying containment or schedule coupling.
  • Use a dependency when scheduling logic should flow between two items. If you want the system to calculate when work can start or finish based on other items, dependencies are the right tool.

The three relationships can coexist on the same pair of items. A child Task under an Epic can also have a dependency on another Task in a different Epic, and a link marking it as a duplicate of a third item.