Skip to main content

Subtasks

Route: /org/tasks?id=<task-id> → Subtasks tab


1. What a subtask is​

A task with a parent task. That is the whole definition — a subtask is an ordinary task with its own status, assignee, estimate, time logs and comments. It is not a checklist item.

Two fields are inherited, and they behave differently from each other:

InheritedRule
CategoryCopied at creation, the control is disabled, and any later change to the parent cascades down
MilestoneNot locked in the UI — but any change to the parent's milestone overwrites the subtask's
Everything elseStatus, assignee, priority, dates and estimate are independent
Changing a parent's category or milestone silently rewrites every descendant

A database trigger pushes both values down to the immediate subtasks whenever either changes on the parent — and because that update fires the same trigger again, it recurses through the entire subtree.

So moving one parent task to a different milestone can rewrite the milestone of dozens of tasks, with no confirmation and no notification. Milestone is editable on a subtask, which makes this worse: a deliberate per-subtask milestone survives only until someone touches the parent.

SubtaskChecklist itemDependency
Is a taskYesNoBoth ends are tasks
Has its own statusYesTicked or not—
Can be assignedYesNo—
Can log timeYesNo—
ExpressesComposition — part ofA step in a descriptionSequence — waits for
Checklists live inside the description

The rich-text editor has a checklist control. Those tick-boxes are formatting inside one task's description — they are not tasks, cannot be assigned, and appear in no report. Use them for steps; use subtasks for work.


2. How the hierarchy shows up​

ViewHow a subtask appears
ListIndented under its parent, behind an expand chevron
KanbanA card in its own status column, with a Parent > Child breadcrumb
TableNested, same as the list
GroupedFlat — grouping switches nesting off entirely
Hide SubtasksRemoved from the view

3. Working with subtasks — step by step​

Figure 1 — The Subtasks tab listing children with their statuses.

Step 1 · Read the tab​

The Subtasks tab lists the task's direct children with their statuses. Clicking one navigates the panel to that task.

Step 2 · Add one​

Add Subtask — from the tab, or the button on a list row — opens the create drawer with Parent Task pre-filled.

The moment the parent is set, the category is copied in and the control is disabled. The label changes from Task Category * to Task Category (Inherited).

A subtask cannot belong to a different category from its parent

The control is disabled, not merely defaulted. If the work belongs in another category, it cannot be a subtask of that parent — make it a root task and use a dependency instead.

Step 3 · Nest deeper​

The parent picker lists every task in the project, flattened — including existing subtasks. So hierarchies can go several levels deep, and the list view nests them accordingly.

Step 4 · Move a whole subtree​

Dragging a selection onto a category in the left rail moves the selected tasks and every descendant. The toast reports the real count — Moved 12 task(s) to category after dragging three.


4. Field reference​

What a subtask inherits, and what it does not​

FieldInheritedEditable afterwardsOverwritten when the parent changes
Category✅❌ never✅ cascades
Milestone✅✅✅ cascades — your edit is lost
Status❌✅❌
Assignee❌✅❌
Priority❌✅❌
Dates❌✅❌
Estimate❌✅❌
Billable flag❌ — from the inherited category at creation✅❌

How effort rolls up​

The list's Effort Rem. column tooltips Remaining: <n>h and includes the subtree, so a parent shows the remaining effort of the work beneath it.

Progress on a parent is its own actual against its own estimate — it does not aggregate children.

A parent can read 0% while its subtasks are finished

Progress is per task. If the work was estimated on the children and logged against the children, the parent's own numbers stay at zero.

Estimate on the parent or on the children — mixing the two makes both columns misleading.

What no rule enforces​

Not enforcedConsequence
A parent cannot be completed with open subtasksNothing checks; a parent can be Done with children in progress
CyclesThe create drawer checks only that a task is not its own parent
DepthNo limit
Deleting a parentNo warning about its children

5. The admin contract​

PrerequisiteWithout it
Create TasksNo Add Subtask button
A category on the parentThe subtask inherits nothing and the field stays required
Categories configuredRoot tasks cannot be created at all

6. Downstream​

ConsumerBehaviour
Hide SubtasksFilters out anything with a parent
GroupingFlattens the hierarchy
KanbanTreats subtasks as independent cards
Effort Rem.Rolls up the subtree
Category dragMoves the whole subtree
TimelinesSubtasks appear as their own bars

7. Don't confuse this with…​

ThingWhereWhy it is different
Subtask (this page)Parent fieldComposition — part of a bigger task
Predecessor / SuccessorTask detailSequence — one waits for another
ChecklistThe description editorFormatting, not tasks
MilestoneThe Milestone fieldA phase grouping, orthogonal to hierarchy
Jira subtaskJira syncMapped in from Jira's own hierarchy

8. Troubleshooting​

SymptomCause
Category is greyed outThe task has a parent
Subtasks are not nestedGrouping is on
A subtask vanishedHide Subtasks is on
A subtask sits in a Kanban column away from its parentKanban positions by status, not hierarchy
A parent shows 0% while children are doneProgress does not aggregate
Dragging moved more tasks than selectedDescendants come along
A parent was closed with open childrenNothing prevents that
A subtask's milestone changed by itselfSomeone changed the parent's; it cascades to the whole subtree
Many tasks moved milestone at onceThe same cascade, from one edit on a parent