A discrete unit of work within a user story
A task is the smallest unit of tracked work a team commits to: a concrete, finishable step like "add the export endpoint" or "write the migration script". It carries no user and no benefit of its own, which is exactly why it stays small and unambiguous, and exactly why a backlog made only of tasks loses sight of why any of it is being done.
The task as a planning primitive comes out of the iterative-planning tradition, formalised in Scrum. The Scrum Guide, written by Ken Schwaber and Jeff Sutherland, does not actually use the word "task". It speaks of Product Backlog Items and of the Sprint Backlog being decomposed by the developers, "often to units of one day or less". Teams supplied the word "task" for those day-sized units, and it stuck.
The useful distinction the practice settled on is between the what and the how. A Product Backlog Item, often written as a story statement, expresses what value is wanted. The tasks beneath it express how the developers intend to build it. Mike Cohn made the same split explicit in agile estimating and planning: stories are owned by the whole team and estimated in relative points, while tasks are an implementation breakdown the developers create during planning, sized in hours. Ownership matters here. Decomposition into tasks is the development team's jobJobUserJob To Be Done: what the user is trying to accomplishView reference →, not the product owner's, because the how is an engineering decisionDecisionStrategyA recorded decision with context, rationale, and consequencesView reference →.
The riskRiskComplianceA risk to the product or businessView reference → the field learned the hard way is task-shaped thinking. A backlog of two hundred tasks with no visible parent value reads as motion. Bill Wake's SMART tasks (Specific, Measurable, Achievable, Relevant, Time-boxed) were proposed in 2003 as the task-level counterpart to INVEST, a reminder that a task still has to earn its place against the story it serves.
A team picks up the statement "As a finance admin, I want to export transactions as CSV". During sprint planning the developers break it into tasks: build the export endpoint, write the CSV serialiser, add a column-mapping config, handle the 200,000-row pagination case, write the integration test. Each is a few hours. Each is owned by whoever picks it up.
The breakdown does real work. The 200,000-row task surfaces a performance question that would otherwise have ambushed the team mid-sprint. The integration test task makes the acceptance criteria executable. None of the five tasks is independently shippable; the finance admin gets nothing from the serialiser alone. The increment becomes valuable only when the parent statement is complete, which is the line that separates a task from a story.
In the Unified Product Graph, TaskProduct SpecificationA unit of work within a story or epic lives in the product specification region as the leaf of the delivery hierarchy. Its edges keep it tethered to purpose. tasktask_implements_story_statement ties each task back to the value it serves, so a task that implements no statement is a queryable orphan. Featuredecomposes intoTaskhierarchy lets larger capabilities break down directly into work, and feature_decomposes_into_taskTaskhas subtaskTaskhierarchy allows finer splitting when a unit grows past a day. The fourth edge, task_has_subtaskResearch QuestiongeneratesTaskcausal, captures the case where investigationInvestigationEngineeringAn investigation into an issue or incidentView reference →, not a feature, is the origin of work: a study raises a question, and answering it spawns tasks. Modelling tasks this way makes the backlog auditable, because every unit of work can be traced upward to the user value or the open question that justifies it.research_question_generates_task
Type-specific fields on BaseNode
assigneestringAssigned person
effortstringEffort estimate (e.g. "2h", "1d", "3 points"). Use a consistent unit within your team.
prioritystringRelative importance against other tasks
due_datestringISO date due. Typically bounded by the containing story's due date.
labelsstring[]Free-form classification tags. Applied uniformly across work item types.
estimatestringStory-point or sizing estimate. String to support fibonacci, t-shirt sizes, or custom scales (e.g. "5", "M", "3 pts"). Absorbed from `StoryTaskProperties` when `story_task` collapsed into `task` (v0.4.0).
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
4 phases — initial: todo
5 edge types connected to this entity.
task_has_subtasktask_implements_user_storyresearch_question_generates_task1 framework use this entity type.