There are more than a few different frameworks for Jobs to be Done (JTBD) out there. The aim of this documentation is to adapt those frameworks and create a shared understanding of a JTBD process that fits our needs here at GitLab.
Our goal is to make products that people want, as well as make people want our products. Using JTBD can help us do that.
Use JTBD throughout the design process, but most notably to:
A core strength of JTBD is its structure, which clearly separates out various aspects of achieving objectives. The who, what, how, why, and when/where are analyzed individually, giving both precision and flexibility to JTBD methods.
When writing a JTBD, focus on the job performer. In other words, write it from the perspective of an end user who is trying to do the job. Conversely, do not write a JTBD from the perspective of what GitLab (or the business stakeholder) wants to achieve.
Other functions within the job ecosystem to consider include the following:
Note that these different roles don’t refer to job titles. Instead, they represent different functional actors within the context of getting a job done.
The aim of the job performer is not to interact with your company but to get something done. Because they don’t mention solutions or technology, jobs should be as timeless and unchanging as possible. Strive to frame jobs in a way that makes them stable, even as technology changes.
The process follows job performers as they move through different goal stages in order to accomplish their goal.
Why do the job performers act the way they do while getting a job done? Their actions might be tied to achieving specific outcomes, such as producing a specific report. Their actions might also be tied to requirements or processes to which they must adhere.
In JTBD, a need is seen in relation to getting the job done. Needs aren’t demands from a solution, but an individual’s requirements for getting a job done. Needs aren’t aspirations, either, which are above the job in terms of abstraction.
Example: If a main job is defined as file taxes, their need may be to minimize the time it takes to gather documents or maximize the likelihood of getting a return.
Example: Expressions like “have financial peace of mind” or “provide for my family” are motivations beyond getting the job. These are important aspects to consider later, but not needs related to reaching the objective of filing taxes.
The circumstance (or contextual factors) that frame job execution include when and where the job gets done; for example, aspects around time, manner, and place. A job without context is not complete and cannot provide strategic direction. There is a dependency between formulating a job and knowing the circumstances.
JTBD uses circumstances to make them relevant to an organization. The conditions around the job give it meaning and relevance and therefore must be considered. Adding contextual detail to the situation also helps greatly when designing a solution.
Example: Get breakfast is a very broad job that could apply to many situations. But for a fast food restaurant, get breakfast on the go, is a more precise job to focus on.
Example: A solution for the job get breakfast on the go could include everything from going to a restaurant or diner to eating a packed lunch at a desk. But when considering specific circumstances like when late for work, while commuting and when cost is a factor, a morning milkshake might be a better solution for the job.
JTBDs are difficult to get right can take some time to refine. Below is an example of a job statement and its versions throughout the refinement process. The feedback provided for each version can offer some helpful tips to keep in mind when you're writing them.
Version 1: When new features are added to a product, I want to know if and how those changes impact performance so that I can ensure my product works as expected for users.
Version 2: When I or my teammate is making a code change to our product, I want to know if the change introduces a latency for my end users so that I can ensure users are satisfied with the performance of the product and continue to use it
Final version: When a code change is made, I want to know if the change introduces a latency for my end users so that I can meet the quality standards of performance response time to maintain usability for our end users.