[{"_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"],"_type":"markdown","_id":"content:linear-app.md","_source":"content","_file":"linear-app.md","_extension":"md"},{"_path":"/mindnode","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"MindNode","description":"Every so often I look up at the screen and see 5 or 6 Visual Studio Code editor windows side-by-side. In my codebase the implementation for a feature might be spread across multiple files. When I need to make sense of disparate information and try to see how they all work together, I ended up opening all the files in different windows so I can visually see the code and the connections.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Every so often I look up at the screen and see 5 or 6 Visual Studio Code editor windows side-by-side. In my codebase the implementation for a feature might be spread across multiple files. When I need to make sense of disparate information and try to see how they all work together, I ended up opening all the files in different windows so I can visually see the code and the connections."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I read about "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"mind mapping"}]},{"type":"text","value":" tools that visually represent concepts and connections and wanted to try it out. Since I hadn’t used a mind mapping tool before, I had no initial criteria for my needs. However, the one thing I always look for in any tool that I use in my workflow is having the app on all my devices."}]},{"type":"element","tag":"h3","props":{"id":"design"},"children":[{"type":"text","value":"Design"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"I had seen screenshots of "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"MindNode"}]},{"type":"text","value":" before, but actually using it highlighted the sleak design and interactions. The mind maps look beautiful and visually appealing even when I’m just trying to see the connection between classes in my codebase."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"img","props":{"alt":"Mind Map for Code","src":"/assets/images/img-mindnode-code.png"},"children":[]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The infinite canvas encourages you to brainstorm without feeling the need to be mindful of how large the map can get."}]},{"type":"element","tag":"h3","props":{"id":"customization"},"children":[{"type":"text","value":"Customization"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"MindNode"}]},{"type":"text","value":" also lets you customize every aspect of the mind map. You can start with one of their built-in themes and create your own. I made a custom theme using the "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"Fira Code"}]},{"type":"text","value":" font. You can then also customize the individual nodes overriding the theme."}]},{"type":"element","tag":"h3","props":{"id":"focus-mode"},"children":[{"type":"text","value":"Focus Mode"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Focus mode lets you select a specific node and only view it’s child branches. This comes in very handy when you are dealing with large mind maps."}]},{"type":"element","tag":"h3","props":{"id":"outline-view"},"children":[{"type":"text","value":"Outline View"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This was the killer feature that really sold me on adding "},{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"MindNode"}]},{"type":"text","value":" to my workflow. It’s great to start brainstorming in a visual space and then see the structured hierarchy that almost reads like an article. For writing blog posts, I’ll start with the outline and then export it as markdown and continue writing in the "},{"type":"element","tag":"a","props":{"href":"/bear-notes"},"children":[{"type":"text","value":"Bear Notes"}]},{"type":"text","value":" app."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"img","props":{"alt":"Mind map for writing","src":"/assets/images/img-mindnode-blog.png"},"children":[]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"em","props":{},"children":[{"type":"text","value":"MindNode"}]},{"type":"text","value":" does what it needs to really well. It’s a mind mapping tool nothing more nothing less; I use it for brainstorming and usually delete the file once I understand the connection in my head or once I have the outline needed to begin writing."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"contact","props":{},"children":[]}]}]},"slug":"mindnode","date":"2021-12-14T05:00:00.000Z","tags":["tech","mindnode","mind mapping","brainstorming"],"_type":"markdown","_id":"content:mindnode.md","_source":"content","_file":"mindnode.md","_extension":"md"}]