A goal a persona is trying to achieve
A Job to be Done is the underlying progress a person is trying to make in a given circumstance, described independently of any product that might help them make it. The word "hire" is the giveaway: people hire a milkshake, a spreadsheet, or a therapist to get a job done, and they fire it the moment something serves the progress better.
Clayton Christensen, the Harvard Business School professor behind disruptive innovation, popularised the idea in the early 2000s through the milkshake study. A fast-food chain had flat milkshake sales and had tried thicker, sweeter, fruitier versions with no effect. Christensen's team watched who actually bought them and found that roughly half sold before 8am, almost always to a solo commuter who wanted something to occupy a long, dull drive and last the whole journey. The milkshake's real competitorsCompetitorMarket IntelligenceA competing product or companyView reference → were a banana, a doughnut, and boredom. The story is told in Competing Against Luck (Christensen, Dillon, Duncan, Hall, 2016).
The lineage runs deeper than the milkshake. Anthony Ulwick named OutcomeOutcomeStrategyA desired business or user outcomeView reference →-Driven Innovation in 1999, patented the process, and introduced it to Christensen. Ulwick's school treats a job as a stable functional taskTaskProduct SpecificationA unit of work within a story or epicView reference → that customers measure through up to 150 quantified desired outcomesDesired OutcomeUserWhat the user hopes to achieveView reference →, each phrased as a direction of improvement on a metricMetricStrategyA unified metric that measures progress, health, or behaviour across the productView reference →. This is the analytical, survey-friendly wing of the field.
A second school grew from Christensen's collaborator Bob Moesta, who built the Switch interview and the Four Forces of push, pull, anxiety, and habit. Here a job is the emotional and social progress someone seeks at a moment of struggle, reconstructed from the timeline of a real purchase. The phrase "jobs as progress" first appears in the Jobs to be Done Handbook (Spiek and Moesta, 2014). The two schools genuinely disagree. Ulwick has publicly rejected the progress framing as unmeasurable; the progress camp finds ODI's outcome lists mechanical. The honest position is that they answer different questions, and a serious team borrows from both.
A B2B analytics team keeps shipping dashboardDashboardData & AnalyticsAn analytics dashboardView reference → featuresFeatureProduct SpecificationA product capability or featureView reference → and keeps watching engagement stall. They run six Switch interviews with users who recently started and recently abandoned the product. A pattern surfaces: people open the tool the night before a board meeting, under pressure to explain one number that moved. The job is "walk into tomorrow's review able to defend the figure my CEO will ask about," and it is hired against a frantic Slack thread with the data team. Once the job is written that way, the roadmapRoadmapProduct SpecificationA strategic plan of features and milestonesView reference → shifts from more charts to a single annotated "what changed and why" view. Engagement among the board-prep segment rises because the team finally built for the progress, not the feature list.
jobJobUserJob To Be Done: what the user is trying to accomplish is a bounded act of progress in a circumstance ("get ready for tomorrow's board review"). A single job surfaces several needs, which is why the graph routes job_surfaces_needJobsurfacesNeedcausal from one to the other.job_motivates_desired_outcomeJobmotivatesDesired Outcomecausal.In the Unified Product Graph the job lives in the Users & Needs region as a hub, hanging off the PersonaUserAn archetype representing a user segmentView reference → anchor through personaPersonapursuesJobsemantic. From there it fans out: persona_pursues_jobJobsurfacesNeedcausal, job_surfaces_needJobmotivatesDesired Outcomecausal, and job_motivates_desired_outcomeJobdecomposes intoJob Stephierarchy for the sequence of smaller steps a job contains. Discovery work reaches back across the region boundary through job_decomposes_into_job_stepOpportunitycontextualisesJobcross-domain, which is how a validated gap gets anchored to the progress it serves. The deprecated opportunity_contextualises_jobJobUserJob To Be Done: what the user is trying to accomplish type folds into this canonical jtbdJobUserJob To Be Done: what the user is trying to accomplish, keeping the personaPersonaUserAn archetype representing a user segmentView reference → who has the job and the job itself as separate, connectable entities rather than one blurred card.job
Worked example: Trellis
Nora's job is to get her team's internal tool to adapt when a process changes, without rebuilding it by hand and without trusting a black box. That job is the durable needNeedUserA user need, pain, desire, or constraintView reference → Trellis addresses: the solutionSolutionDiscoveryA proposed approach to address an opportunityView reference → changes across eras, but the job stays the same, and capturing it separately from any featureFeatureProduct SpecificationA product capability or featureView reference → or desired outcomeDesired OutcomeUserWhat the user hopes to achieveView reference → keeps the product grounded in what directors actually hire software to do.
Critical Dealbreaker if absent
Very unsatisfied Current solution fails completely
Type-specific fields on BaseNode
statementstringJob statement: "When I... I want to... So I can..."
job_typeenumClassification by motivation dimension
importanceassessmentImportance to the user (1 = low, 5 = critical)
current_satisfactionassessmentCurrent satisfaction with how this job gets done (1 = very unsatisfied, 5 = fully satisfied)
supporting_roleenumPersona role in the value exchange
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
13 edge types connected to this entity.
persona_pursues_jobjob_surfaces_needjob_motivates_desired_outcomejob_decomposes_into_job_stepopportunity_contextualises_jobuser_journey_addresses_jobvalue_proposition_addresses_jobfeature_addresses_jobquote_relates_to_jobinsight_informs_jobquote_evidences_joblearning_validates_jobobservation_reveals_job4 frameworks use this entity type.