{"_path":"/linear-app","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Linear","description":"As my side-projects became more serious endeavors, I wanted to use a project management tool to both as a self-documenting history of the product roadmap, and provide a better overview of the state of the progress and milestones.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"As my side-projects became more serious endeavors, I wanted to use a project management tool to both as a self-documenting history of the product roadmap, and provide a better overview of the state of the progress and milestones."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I had seen developers mention "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Linear"}]},{"type":"text","value":" on Twitter while it was still in beta and saw it supported all of the features I was looking for in a project management tool."}]},{"type":"element","tag":"h3","props":{"id":"speed"},"children":[{"type":"text","value":"Speed"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The first thing I must mention is that the app is fast and has some of the smoothest interactions I’ve seen in both the web app and the Mac app. The developers really went out of their way to get this right. 👏🏽"}]},{"type":"element","tag":"h3","props":{"id":"github-integration"},"children":[{"type":"text","value":"Github Integration"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The integration with Github works in both directions. Issue details are included in the PRs and PR automations automatically move issues to the next step in the workflow."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I use the following workflow in Linear:\n"},{"type":"element","tag":"img","props":{"alt":"Linear Workflow","src":"/assets/images/img-linear-workflow.png"},"children":[]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"And PR automation:\n"},{"type":"element","tag":"img","props":{"alt":"Linear PR Automation","src":"/assets/images/img-linear-automation.png"},"children":[]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You’ll notice that opening the PR moves it to the In Progress status. I like creating a PR with an empty commit and try to document my thought process as I build out the feature rather than create the PR after the work is completed. I not only have the final implementation, but also a historical record of what didn’t work."}]},{"type":"element","tag":"h3","props":{"id":"teams"},"children":[{"type":"text","value":"Teams"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I’m the only developer on my own apps and work on all the issues, but I still like to split the Issues between different teams e.g. backend, iOS, web, etc. This is reminiscent of the "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"contexts"}]},{"type":"text","value":" from the GTD system, keeps the focus on the platform I’m working on."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I literally put on different hats when I switch context."}]},{"type":"element","tag":"h3","props":{"id":"issues"},"children":[{"type":"text","value":"Issues"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Linear is essentially built around "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Issues"}]},{"type":"text","value":". Other apps might refer to them as tasks, user stories, etc. I view these as individual units of work, and once again borrowing from GTD, they must be completable and have a definition of done."}]},{"type":"element","tag":"blockquote","props":{},"children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Too often, I’ve seen issues like “accessibility” or “look into syncing.” These are vague, with no clear information on how to complete them and will typically live in the backlog forever."}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In addition to a title and description, "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Issues"}]},{"type":"text","value":" have all the attributes a developer would expect:"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Status"}]},{"type":"text","value":": From the workflow above, e.g. In Progress, Done, etc."}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Priority"}]},{"type":"text","value":": Urgent, High, Medium, Low or None."}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Estimate"}]},{"type":"text","value":": I prefer to use the Fibonacci sequence e.g. 1, 2, 3, 5, 8."}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Labels"}]},{"type":"text","value":": I use Bug, Chore, Feature, Improvement."}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"There are a few attributes ("},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"cycle"}]},{"type":"text","value":", "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"due date"}]},{"type":"text","value":", "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"assignee"}]},{"type":"text","value":") that I don’t use. More on that later…"}]},{"type":"element","tag":"h3","props":{"id":"projects"},"children":[{"type":"text","value":"Projects"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Every "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Issue"}]},{"type":"text","value":" belongs in a "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Project"}]},{"type":"text","value":". I reuse the same concept from GTD again, a project is a just a collection of completable tasks. Any feature that is more than one step is a project."}]},{"type":"element","tag":"blockquote","props":{},"children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In fact, the projects in Linear have matching projects in my "},{"type":"element","tag":"a","props":{"href":"/bear-notes"},"children":[{"type":"text","value":"Bear"}]},{"type":"text","value":" notes app. I don’t create a project in Linear until I’ve fully thought out how a feature will work, which will then guide the Issues I create."}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"When a project is completed, I review the comments in the PRs to update the notes in "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Bear"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"milestones"},"children":[{"type":"text","value":"Milestones"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I use "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"milestones"}]},{"type":"text","value":" to get a high level view of all the projects in the roadmap across all the teams. As a sports team management app, "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Lead Dog"}]},{"type":"text","value":" natively uses the concept of ”seasons,” so my milestones for "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Lead Dog"}]},{"type":"text","value":" are also seasons e.g. Spring, Summer, Fall and Winter."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Deck of Pain"}]},{"type":"text","value":" doesn’t have a similar concept so I simply went with Q1, Q2, Q3 and Q4."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"img","props":{"alt":"Linear Milestones","src":"/assets/images/img-linear-milestone.png"},"children":[]}]},{"type":"element","tag":"h3","props":{"id":"cycles-due-dates-assignees"},"children":[{"type":"text","value":"Cycles, Due Dates, Assignees"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Linear offers a feature called "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Cycles"}]},{"type":"text","value":" which allows you to plan your sprints. I initially enabled it, so I could track progress and also see the "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"velocity"}]},{"type":"text","value":" and see how many points I complete in a cycle. However, these are my own apps and occasionally I get busy with other things. It is pretty demotivating to see multiple “empty cycles.” For this reason, I disabled cycles for all my projects."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Same for "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"due dates"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I also hide the "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"assignee"}]},{"type":"text","value":" attribute since it’s always just me, so I don’t need to see it every time."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The only real “time” marker I have are the "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"milestones"}]},{"type":"text","value":" which usually correlate to some sort of marketing effort."}]},{"type":"element","tag":"h3","props":{"id":"looking-ahead"},"children":[{"type":"text","value":"Looking Ahead"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Currently there is no native mobile app. As I mentioned earlier, their web app is insanely fast and performant, but I’d still prefer a native experience."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"contact","props":{},"children":[]}]}]},"slug":"linear-app","date":"2021-02-25T05:00:00.000Z","tags":["tech","linear","project management"],"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"As my side-projects became more serious endeavors, I wanted to use a project management tool to both as a self-documenting history of the product roadmap, and provide a better overview of the state of the progress and milestones."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I had seen developers mention "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Linear"}]},{"type":"text","value":" on Twitter while it was still in beta and saw it supported all of the features I was looking for in a project management tool."}]},{"type":"element","tag":"h3","props":{"id":"speed"},"children":[{"type":"text","value":"Speed"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The first thing I must mention is that the app is fast and has some of the smoothest interactions I’ve seen in both the web app and the Mac app. The developers really went out of their way to get this right. 👏🏽"}]},{"type":"element","tag":"h3","props":{"id":"github-integration"},"children":[{"type":"text","value":"Github Integration"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The integration with Github works in both directions. Issue details are included in the PRs and PR automations automatically move issues to the next step in the workflow."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I use the following workflow in Linear:\n"},{"type":"element","tag":"img","props":{"alt":"Linear Workflow","src":"/assets/images/img-linear-workflow.png"},"children":[]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"And PR automation:\n"},{"type":"element","tag":"img","props":{"alt":"Linear PR Automation","src":"/assets/images/img-linear-automation.png"},"children":[]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You’ll notice that opening the PR moves it to the In Progress status. I like creating a PR with an empty commit and try to document my thought process as I build out the feature rather than create the PR after the work is completed. I not only have the final implementation, but also a historical record of what didn’t work."}]},{"type":"element","tag":"h3","props":{"id":"teams"},"children":[{"type":"text","value":"Teams"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I’m the only developer on my own apps and work on all the issues, but I still like to split the Issues between different teams e.g. backend, iOS, web, etc. This is reminiscent of the "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"contexts"}]},{"type":"text","value":" from the GTD system, keeps the focus on the platform I’m working on."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I literally put on different hats when I switch context."}]},{"type":"element","tag":"h3","props":{"id":"issues"},"children":[{"type":"text","value":"Issues"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Linear is essentially built around "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Issues"}]},{"type":"text","value":". Other apps might refer to them as tasks, user stories, etc. I view these as individual units of work, and once again borrowing from GTD, they must be completable and have a definition of done."}]},{"type":"element","tag":"blockquote","props":{},"children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Too often, I’ve seen issues like “accessibility” or “look into syncing.” These are vague, with no clear information on how to complete them and will typically live in the backlog forever."}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In addition to a title and description, "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Issues"}]},{"type":"text","value":" have all the attributes a developer would expect:"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Status"}]},{"type":"text","value":": From the workflow above, e.g. In Progress, Done, etc."}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Priority"}]},{"type":"text","value":": Urgent, High, Medium, Low or None."}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Estimate"}]},{"type":"text","value":": I prefer to use the Fibonacci sequence e.g. 1, 2, 3, 5, 8."}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Labels"}]},{"type":"text","value":": I use Bug, Chore, Feature, Improvement."}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"There are a few attributes ("},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"cycle"}]},{"type":"text","value":", "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"due date"}]},{"type":"text","value":", "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"assignee"}]},{"type":"text","value":") that I don’t use. More on that later…"}]},{"type":"element","tag":"h3","props":{"id":"projects"},"children":[{"type":"text","value":"Projects"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Every "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Issue"}]},{"type":"text","value":" belongs in a "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Project"}]},{"type":"text","value":". I reuse the same concept from GTD again, a project is a just a collection of completable tasks. Any feature that is more than one step is a project."}]},{"type":"element","tag":"blockquote","props":{},"children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In fact, the projects in Linear have matching projects in my "},{"type":"element","tag":"a","props":{"href":"/bear-notes"},"children":[{"type":"text","value":"Bear"}]},{"type":"text","value":" notes app. I don’t create a project in Linear until I’ve fully thought out how a feature will work, which will then guide the Issues I create."}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"When a project is completed, I review the comments in the PRs to update the notes in "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Bear"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"milestones"},"children":[{"type":"text","value":"Milestones"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I use "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"milestones"}]},{"type":"text","value":" to get a high level view of all the projects in the roadmap across all the teams. As a sports team management app, "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Lead Dog"}]},{"type":"text","value":" natively uses the concept of ”seasons,” so my milestones for "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Lead Dog"}]},{"type":"text","value":" are also seasons e.g. Spring, Summer, Fall and Winter."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Deck of Pain"}]},{"type":"text","value":" doesn’t have a similar concept so I simply went with Q1, Q2, Q3 and Q4."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"img","props":{"alt":"Linear Milestones","src":"/assets/images/img-linear-milestone.png"},"children":[]}]},{"type":"element","tag":"h3","props":{"id":"cycles-due-dates-assignees"},"children":[{"type":"text","value":"Cycles, Due Dates, Assignees"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Linear offers a feature called "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Cycles"}]},{"type":"text","value":" which allows you to plan your sprints. I initially enabled it, so I could track progress and also see the "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"velocity"}]},{"type":"text","value":" and see how many points I complete in a cycle. However, these are my own apps and occasionally I get busy with other things. It is pretty demotivating to see multiple “empty cycles.” For this reason, I disabled cycles for all my projects."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Same for "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"due dates"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I also hide the "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"assignee"}]},{"type":"text","value":" attribute since it’s always just me, so I don’t need to see it every time."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The only real “time” marker I have are the "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"milestones"}]},{"type":"text","value":" which usually correlate to some sort of marketing effort."}]},{"type":"element","tag":"h3","props":{"id":"looking-ahead"},"children":[{"type":"text","value":"Looking Ahead"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Currently there is no native mobile app. As I mentioned earlier, their web app is insanely fast and performant, but I’d still prefer a native experience."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"contact","props":{},"children":[]}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"speed","depth":3,"text":"Speed"},{"id":"github-integration","depth":3,"text":"Github Integration"},{"id":"teams","depth":3,"text":"Teams"},{"id":"issues","depth":3,"text":"Issues"},{"id":"projects","depth":3,"text":"Projects"},{"id":"milestones","depth":3,"text":"Milestones"},{"id":"cycles-due-dates-assignees","depth":3,"text":"Cycles, Due Dates, Assignees"},{"id":"looking-ahead","depth":3,"text":"Looking Ahead"}]}},"_type":"markdown","_id":"content:linear-app.md","_source":"content","_file":"linear-app.md","_extension":"md"}