Productivity and Flow
Overview
This article describes my typical workday and the tools I use for maximum productivity as a software developer. Each tool serves a specific purpose, from time tracking to task management, and this combination helps me maintain flow throughout the day. I’ll walk you through how these tools fit into my routine and keep everything on track.
This is a second draft, and I welcome feedback to rob@vees.net where I could clarify or expand on anything.
Morning Routine
Toggl: Tracking My Time
I begin by opening Toggl, a time-tracking app, to log the task I’m starting. Toggl integrates with other apps like JIRA, Todoist, and Outlook via a Chrome plugin, allowing me to start new tasks based on items from these systems without needing to input details manually. It’s great for both time tracking and generating daily/weekly summaries, making it ideal for billing purposes and reviewing how my day was spent.
Zapier Integration: I’ve also set up a Zapier automation that syncs Toggl with my Slack status, updating my status with the task I’m working on and a "working" emoji. This is a passive way to let my teammates know my focus and when I’m heads-down on a project.
Inbox Zero: Processing Emails Efficiently
Once my time is tracking, I check my email. I use an Inbox Zero method where all actionable emails are processed into task management systems like JIRA, Todoist, or note-taking tools like Joplin.
My informal email processing categories are:
- Immediate response: Emails I can address quickly (within 2-5 minutes).
- Convert into a task: Use Todoist to quickly make tasks based on email topics.
- Interesting but not urgent: Create a task to review or ask for clarification from the sender.
- Ignore or archive: Anything not useful or that I was copied on as a courtesy.
- Meeting appointments: Accept, reject, or tentative. Resolve any meeting conflicts with all participants as early in the morning as possible.
- Rather than keeping emails for reference, I move the core information into a documentation system like Joplin or Google Docs.
- Gmail and Outlook allow you to create direct links to emails, which I use in my notes for quick reference later.
Mid-Day Routine
Joplin: My Knowledge Hub and Ad-Hoc Journal
Joplin serves two key roles for me: it’s my structured data repository and my journal. I use it to take notes during meetings or when potential tasks come too quickly to process into Todoist in real-time. It allows me to organize thoughts with checkboxes and free-form text, keeping everything in one place.
For example, I might create a notebook specifically for a project with sub-notebooks for meeting notes, decisions, and follow-up tasks. During a fast-paced day, I’ll create a simple list of what’s happening in a dated journal entry, later reorganizing it into a more formal document either in Joplin or another document management system.
Reconcile Calendars
I regularly review all three of my calendars (work, personal, and shared team calendars) to ensure I’m aware of upcoming meetings and deadlines. Preparing for meetings ahead of time—whether by reviewing agendas or confirming any action items—helps me arrive ready to contribute. Meetings will be the number one thing that breaks my ability to focus during the day so its important to make sure that they provide an equal amount of value in return.
A running joke among software developers is that a junior developer wishes they were invited to more meetings and a senior developer wishes they weren't invited to any meetings.
After reviewing an agenda, if I don’t need to be in a meeting, I’ll politely request to be removed or ensure that my input is passed on beforehand in written form.
Clean the Stacks
Depending on the project I'm on, I often find myself with one or more “stacks” where work items or info are distributed such as Github pull requests and monitoring boards. I consider these separate from email because it may actually be necessary handle or mark these tasks complete within the specific system. By regularly checking on them, I reduce clutter and ensure I’m not missing anything important from earlier in the day.
Some examples of stacks I'm currently working on include:
- PR Reviews: I prioritize code review requests early in the day to set myself up for success in coding flow later. Often a few are already in my to-do list after being extracted from notification emails I‘ve received from Github.
- Slack Messages: I go through my Slack channels, catching up on social and work-related messages. Items that require follow-up are either replied to immediately or scheduled in Todoist with follow-up dates. I occasionally use the Slack function to mark a task for later review but that tends to create another stack to deal with later.
Task Management with Todoist
Todoist is my go-to task management tool. The “quick add” feature of Todoist lets me quickly add, categorize, label, prioritize and add due dates to individual tasks as they come in. If I do this consistently, tasks naturally wind up in searchable and sortable groups which I can tackle in groups. I’ve set up several filters and labels to help me quickly navigate what needs attention.
Fearless Priority Tasks
(##Fearless) & (P1 | P2 | P3 | (today | overdue | next weekday ))
This filter organizes tasks by priority and date, allowing me to focus on the most pressing issues.
Key Labels for Work
In Todoist, I organize my tasks by context—whether it’s a physical location (like the office), a specific tool (such as Joplin or JIRA), a device (computer or phone), or tasks that require a response or further action (waiting or tickler). These labels help me filter and prioritize tasks based on where I am, what I have access to, and what’s actionable at the moment. My most frequently used labels are:
-
waiting
-
tickler
-
joplin
-
computer
-
office
-
phone
Fearless Waiting On
While I use the office
and phone
labels infrequently and often just search for them specifically when needed, I have specific and regularly used filters help me track tasks that are dependent on other people such as waiting
and tickler
specific to work. This filter is build by combining the labels and the project/sub-project search into a single set.
##Fearless & (@waiting | @tickler)
Managing Team Members
As a team leader, I assign labels to team members' names to track tasks for one-on-one meetings or daily stand-ups. This system allows me to easily check in on their progress and follow up on any delegated tasks. While I don’t use specific filters for these labels, organizing my main project list by team member labels helps streamline communication and ensure nothing falls through the cracks.
Daily Work States
JIRA: Monitored, shared task system
JIRA is where I manage tasks that are more formal or visible to my team, team leaders, and customers. Each day, I touch every ticket assigned to me to maintain momentum. I regularly update comments and descriptions, ensuring that anyone who picks up the task can easily see where I left off.
This daily check keeps tickets in flow and ensures blockers are identified early. It also helps build a narrative for each ticket’s progress across the sprint.
Code Reviews and Pull Requests
As mentioned earlier, I try to group code reviews and pull requests into a batch of work that can be completed sequentially. When I shift to code reviews or pull requests, I ensure all my own work is committed first. Code reviews require a clean workspace, and it’s easy to lose track of changes if things aren’t saved or stashed correctly.
Coding Flow State
Achieving a flow state in coding is rare but crucial. For me, it only happens when everything else is cleared from my plate. Personally, I need:
- Well-scoped JIRA tickets with solid descriptions
- An up-to-date development environment
- Clear supplementary documentation including design files
I also keep a blank sheet of paper handy for sketching out relationships, process flows, or edge cases that are hard to conceptualize in code. I use a Pomodoro timer during code flow states to keep myself focused on the single task. The 25 minute timer is a reminder to stay on the one issue without letting my attention wander, and I‘ll be rewarded with a brain break at the end.
Ending the Day
At the end of my day, I run a daily report in Toggl to ensure my time is logged. Government regulations require precise time tracking, and I use this report to populate my time sheet. Since I‘ve been updating Toggl every time my task or context changes, there's no additional work for me at the end of the day.
Don't Do
- I am never going to re-watch the video or read the transcript of a video meeting I was in. If effective notes aren't generated during or immediately after the meeting they will never be generated.
- Documents written on paper never get referenced again unless they are transcribed into electronic format because they're not searchable. Either copy the essentials in right away or dispose of them.
Pen and Paper
These represent the structure that I've put around my work, but sometimes I need to put them all aside and simply start with a clean sheet of paper in a bound notebook and a quality pen to get anything done. The whole purpose of systems like this is to facilitate productivity and its okay to abandon them without any regrets when they don't fit how my brain is working that day.