Discovering and preserving developer flow is one of the great challenges in software development.
Flow is a mental state of operation in which a person performing an activity is fully immersed in a feeling of energized focus, full involvement, and enjoyment in the process of the activity. In essence, flow is characterized by complete absorption in what one does, and a resulting loss in one's sense of space and time.
How do we achieve flow? What frameworks can help us effortlessly enter a state of flow?
Strategies to boost focus are plentiful. No two developers work exactly the same. As a result, over time, many new methods have grown in popularity.
I’m going to highlight a few different productivity methods that you can try, including how they apply to developers, and their relative strengths and weaknesses.
The most popular techniques for staying focused rely on a strategy known as timeboxing.
As its name implies, timeboxing forces you to allocate a certain, predetermined amount of time to complete a task. Each block of time that you create is dedicated to a single objective.
Timeboxing prevents projects from devolving into endless time sinks. Without defined boundaries, it is easy to lose track of how much time is spent on each project. Parkinson's Law infamously states: work expands so as to fill the time available for its completion.
By breaking down your work schedule into clearly defined blocks of time, tasks are less likely to expand uncontrollably beyond their bounds.
The Pomodoro Technique, 90/30 Technique, and Power Hour are all examples of timeboxing strategies.
The Pomodoro Technique is one of the most well known strategies for harnessing the power of deep work.
The concept behind the Pomodoro Technique is quite simple: focus on a single task for 25 minutes, followed by a 5 minute break. Every fourth break will be a bit longer, at 15 minutes. Following the pomodoro pattern breaks your day into 130-minute intervals.
The Pomodoro Technique is a powerful strategy because it encourages unitasking, rather than multitasking. Research has proven that multitasking is really just rapidly (and inefficiently) switching tasks. Pomodoro timers are designed to help you break free from the illusion of multitasking.
Pomodoro timers also make it easy to plan your day. Neatly organizing your schedule into standard blocks of time can help you plan your day more effectively. As the day progresses, the urgency of each pomodoro timer ticking down gives you an extra boost of motivation.
Despite its widespread popularity, the Pomodoro Technique isn’t perfect. For many developers, the 25-minute blocks of the Pomodoro Technique can feel too short and the frequent 5 minute breaks can be disruptive. If you’re in flow, a ringing pomodoro timer can be costly.
The 90/30 Technique is similar to the Pomodoro Technique, but extends the duration of sessions and breaks to 90 minutes and 30 minutes, respectively.
Each day will have fewer distinct chunks of time, making it feel more cohesive and less scattered. Fewer breaks give you the opportunity to stay in flow longer and worry less about prematurely ending a productive session.
The extension vscode-pomodoro allows you to customize task and break duration, so you can configure it to work with the 90/30 Technique. You could also experiment to see what pattern works best for you.
Like the Pomodoro Technique, the 90/30 Technique also has its flaws. Focusing for 90 minutes without a break can be difficult, especially if you work in a distracting environment or a bustling office. Additionally, finding time on your calendar when you have free blocks of 90 minutes or more can be a challenge on busy days.
Power Hour takes a different approach to productivity than the Pomodoro Technique and 90/30 Technique. Rather than breaking your entire day into working sessions of a fixed duration, Power Hour is designed to ensure that you have at least one powerful and productive session each day.
Power Hour requires you to find one hour each day to focus entirely on one task, preferably a task that is especially challenging or intimidating. Creating a special hour every day helps you defeat procrastination and minimize distractions.
Pomodoro timers can feel burdensome if you feel as though you need to plan out your entire day around these working sessions. The Power Hour takes a far more targeted approach that reserves your focus for the hardest and most important task.
The VS Code extension Simple Timer quickly generates a timer in your status bar for however long you’d like. The Simple Timer commands can be accessed easily using the command palette.
Power Hour lacks the structure of the Pomodoro Technique—if you prefer frequent repetition in your schedule, the Power Hour might be too flexible for you.
Flow is not necessarily constrained by clearly-defined time intervals. More often than not, you’ll maintain your coding flow until you get distracted or succumb to mental fatigue.
A few productivity methods are designed to trigger flow-like states without an explicit target end time. I call this time-unboxing.
The 10-Minute Hack, Flowtime Technique, and Gamification can get you one step closer to achieving flow quickly and effectively.
The 10-minute hack is helpful tool to regain focus and overcome the initial challenge of starting a project. Simply getting started can be daunting—large or complex projects can be intimidating, making it easy to distract yourself with less important work.
The 10-minute hack forces you to set a timer for just ten minutes and focus on a single task during that time.
By including a shorter time limit, you remove the pressure of your long-term goal to complete the current task. You replace the stress of needing to finish a task with the simplicity of needing to start it.
At the end of ten minutes, you will likely find yourself wanting to continue your work. Keep going! Once you’re in motion, you’ll find it easier to stay in motion.
I recommend using the Simple Timer mentioned above with the Power Hour.
Developers can benefit from the 10-minute hack because it provides you with an opportunity to take a concrete action toward accomplishing your task. As an example, software development often requires reading lots (and lots) of documentation, and the 10-minute hack is a great way to transition from research to coding. Starting several 10-minute timers throughout the day can instill a propensity for action in you work.
The flowtime technique was borne out of a dislike for the Pomodoro Technique’s rigid time structure that can occasionally interrupt an otherwise productive working session.
Flowtime simply encourages you to track your start, end, and break times, whenever they naturally occur. The one requirement is that you must unitask during each distinct block of time—that is, each session is only as long as your ability to focus on a single task.
As soon as you become distracted or hope to change to another project, record your time and take a break.
You’ll begin to better understand the context switches you make throughout the day. By writing down your time intervals, you become aware of what you’re working on and where you should be focusing your time.
You can even use the calendar feature of Code Time (the open source code editor plugin that we’ve been building) to automatically see when you coded each day.
If the urgency of a pomodoro timer isn’t a strong enough incentive to keep you focused, adding an element of gamification to your daily schedule can make for a more positive experience.
Boost your motivation by giving yourself small rewards for staying in flow throughout the day.
Apps like Forest and Donut Dog help you track your focus time. Forest is a mobile app, but includes a Chrome extension so that you don’t need to check your phone to see your progress. Both apps are great for preventing distractions and context switches.
You can even pair another method, like the Power Hour, with a reward system, like Habitica, a gamified habit tracker.
Gamification is a powerful method for maintaining focus because it adds a positive reward to your work sessions. This encourages engagement and makes the overall experience more enjoyable.
The main drawback is that gamification, for developers, can be more difficult to implement than other methods. While Forest and other apps are great for minimizing distractions on your phone, most developer tools don’t have an integrated way to reward yourself. You will need to be comfortable using a mobile app during your coding sessions.
Breaking work into time-based sessions can certainly help developers be more productive—many other developers, however, will prefer to organize their schedules according to a task-based strategy.
Pomodoro timers and power hours are great for knowing when to work, but they don’t tell you what you should work on. How do you know which tasks to tackle first?
Getting Things Done, the Action Method, and the Eisenhower Box are all strategies for clearly defining your priorities each day.
Getting things done (commonly referred to as GTD) is a time management method that helps you know where to start, so you can waste less time juggling tasks competing for your attention.
GTD works by making sure you always have a clear set of tasks and goals. Move planned tasks and projects out of the mind by writing them down and breaking them into actionable work items. By doing so, you can focus on taking action, rather than trying to recall tasks.
GTD follows 5 simple steps:
- Capture: Write down on a notepad all the things that have your attention.
- Clarify: Decide which items on the list are actionable and decide on the next action to take. Put the not actionable items on hold.
- Organize: Put each actionable item into organized lists of similar tasks.
- Reflect: Review the lists frequently to keep your mind clear.
- Engage: Complete your tasks with confidence.
By building trust in this external system, you ensure that your mind is focused on only one task at a time.
The GTD method is flexible and easy to implement because you only need a pen and a notepad to get started. You can also use a GTD template in Trello and Evernote. I would also recommend trying the GTD method in Notion, a wildly popular productivity tool that helps organize your thoughts—check out a software developer’s setup of GTD in Notion on this blog.
Implementing GTD can occasionally duplicate other ways you may be prioritizing your work. For example, managing JIRA tickets alongside your own GTD board can get messy without a direct integration. Be forewarned that GTD may not be a perfect solution for every software developer and their todo list.
The action method, originally developed by Behance, is a productivity framework that focuses on writing clear concrete steps to accomplish a task. Every task is a project with action steps—that is, each step must start with a verb—and reference information for context.
The action method, similar to the GTD method, declutters the mind of non-actionable tasks and thoughts so that you can remove mental barriers to getting in flow. Unlike GTD, the action method has a greater emphasis on breaking projects down into smaller pieces to help you work through each project.
Behance sells an action journal, but you can easily format your own notebook. A sample from their website:
The action method is a great choice for developers because it can help break down especially complex coding projects with many moving pieces into bite-sized tasks. You can more easily think about your code in modular components and how they should interconnect.
Unfortunately, like the GTD method, you might need to manage several todo lists and it will be important to keep your action journal in sync with the rest of your team’s tools.
Lastly, the Eisenhower Box is a visual tool designed to help you distinguish between urgent and important tasks.
If indecision is blocking your ability to focus, start by categorizing all of your tasks using the Eisenhower box. The tasks that are both urgent and important should be tackled first. All other tasks can be delayed, delegated, or eliminated.
The Eisenhower box excels at helping you prioritize tasks so that you can confidently focus on the most important tasks. It’s easier to be in flow when your mind is less distracted by lower-priority tasks.
If you’re looking to implement the Eisenhower box, Notion has a free template available.
For developers, the Eisenhower box can be particularly powerful because it encourages elimination before optimization. Don’t write code unless you need to and focus on the most important coding tasks that get you closer to your true mission and goals—everything else can wait.
As I mentioned at the beginning, no two developers work exactly the same. One of the best things you can do as a software developer is to better understand how you work and what methods have a positive impact on your happiness and productivity.
If you enjoyed this article, check out my newsletter SRC. I cover the most important stories in software development, weekly.