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:
| Inherited | Rule |
|---|---|
| Category | Copied at creation, the control is disabled, and any later change to the parent cascades down |
| Milestone | Not locked in the UI — but any change to the parent's milestone overwrites the subtask's |
| Everything else | Status, assignee, priority, dates and estimate are independent |
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.
| Subtask | Checklist item | Dependency | |
|---|---|---|---|
| Is a task | Yes | No | Both ends are tasks |
| Has its own status | Yes | Ticked or not | — |
| Can be assigned | Yes | No | — |
| Can log time | Yes | No | — |
| Expresses | Composition — part of | A step in a description | Sequence — waits for |
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
| View | How a subtask appears |
|---|---|
| List | Indented under its parent, behind an expand chevron |
| Kanban | A card in its own status column, with a Parent > Child breadcrumb |
| Table | Nested, same as the list |
| Grouped | Flat — grouping switches nesting off entirely |
| Hide Subtasks | Removed from the view |
3. Working with subtasks — step by step
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).
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
| Field | Inherited | Editable afterwards | Overwritten 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.
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 enforced | Consequence |
|---|---|
| A parent cannot be completed with open subtasks | Nothing checks; a parent can be Done with children in progress |
| Cycles | The create drawer checks only that a task is not its own parent |
| Depth | No limit |
| Deleting a parent | No warning about its children |
5. The admin contract
| Prerequisite | Without it |
|---|---|
| Create Tasks | No Add Subtask button |
| A category on the parent | The subtask inherits nothing and the field stays required |
| Categories configured | Root tasks cannot be created at all |
6. Downstream
| Consumer | Behaviour |
|---|---|
| Hide Subtasks | Filters out anything with a parent |
| Grouping | Flattens the hierarchy |
| Kanban | Treats subtasks as independent cards |
| Effort Rem. | Rolls up the subtree |
| Category drag | Moves the whole subtree |
| Timelines | Subtasks appear as their own bars |
7. Don't confuse this with…
| Thing | Where | Why it is different |
|---|---|---|
| Subtask (this page) | Parent field | Composition — part of a bigger task |
| Predecessor / Successor | Task detail | Sequence — one waits for another |
| Checklist | The description editor | Formatting, not tasks |
| Milestone | The Milestone field | A phase grouping, orthogonal to hierarchy |
| Jira subtask | Jira sync | Mapped in from Jira's own hierarchy |
8. Troubleshooting
| Symptom | Cause |
|---|---|
| Category is greyed out | The task has a parent |
| Subtasks are not nested | Grouping is on |
| A subtask vanished | Hide Subtasks is on |
| A subtask sits in a Kanban column away from its parent | Kanban positions by status, not hierarchy |
| A parent shows 0% while children are done | Progress does not aggregate |
| Dragging moved more tasks than selected | Descendants come along |
| A parent was closed with open children | Nothing prevents that |
| A subtask's milestone changed by itself | Someone changed the parent's; it cascades to the whole subtree |
| Many tasks moved milestone at once | The same cascade, from one edit on a parent |
Related
- Creating a task — where the parent is set
- Categories — what gets inherited
- Task detail — dependencies, the other relationship