The Secret to Staying Productive: Pomodoro + Obsidian
Explore the benefits of the Pomodoro Technique combined with the powerful features of Obsidian to supercharge your work and study routines
What's the point of planning if there's no feedback on the work done? I believe there's little sense without it. For me, the minimum feedback is the amount of time spent overall and on individual projects. Another crucial question is: How can you maintain productivity throughout the day without losing pace? The answer lies in adopting a proven practice. For me, that practice has become the Pomodoro Technique.
The Pomodoro Principle is a time management method invented by Francesco Cirillo in the 1980s. Named after the kitchen timer that the creator used, it involves dividing time into short intervals, usually 25 minutes each, called "pomodoros." Between these intervals, there are short breaks of 5 minutes, and after every four cycles, a longer break of 15-30 minutes follows.
What Does the Pomodoro Method Offer?
Efficiency and Improvement. The technique allows you to accomplish higher quality work in less time, aiding in gradually enhancing professional skills. It enables tracking how much time is spent on productive work daily or weekly. For example, a student preparing for an important exam but struggling with concentration can break down the study material into small blocks, dedicating 25 minutes to each. After each block, a short break is taken, helping to prevent information overload and maintain motivation, as small goals are quickly achieved.
Focus and Motivation. Managing and investing time helps concentrate on studies or work, sustaining motivation over long periods, even when immediate results are not apparent. For instance, a programmer working on a lengthy project might struggle to see progress due to the plethora of tasks. By applying the Pomodoro Principle, he focuses on one specific task for 25 minutes, recording progress in a special journal. This visualizes the completed portions of the project and bolsters confidence that the project is moving forward.
Proper Rest. Pomodoro aids in implementing structured leisure. Without this technique, most might only manage about 4 hours of productive work a day, but with it, this figure can increase to 6-8 hours. For example, a graphic designer often gets tired from not taking regular breaks during complex projects. By applying the Pomodoro method, he structures his time: 25 minutes of intense work followed by a 5-minute break. After several work cycles, he takes a longer break. This system helps reduce emotional and physical fatigue, enhancing long-term productivity.
Creating a Ritual. By starting the timer, you perform a ritual. This moment is for considering your actions using systemic thinking. Setting the role, method, and product, you define the task you want to accomplish in the allotted time. For example, a marketer preparing an advertising campaign sets the timer for 45 minutes. He immediately assumes the necessary role, clearly defining the work product he wants to create during this time. His ritual includes defining the role (marketer), method (brainstorming), and work product (draft of the advertising concept). Repeating this process with different tasks, the marketer creates his work ritual, increasing efficiency and fully engaging in the work.
Time Management Plugins for Obsidian
To apply the Pomodoro method more effectively, I use the Pomodoro Timer for Obsidian plugin (obsidian://show-plugin?id=pomodoro-timer).
Pros:
Concise interface. It allows you to set up the log in a way that tracks both the link to the note and the task specified in the note, which you are directly working on. In my case, a note in Obsidian acts as a task within a project, and a specific line formatted as a plugin task performs the function of the specific work within the task. I discuss the difference between tasks and work in other posts on my blog.
Open functionality through a customizable log. The plugin allows you to very flexibly set up the log template where details of your work are saved, from the start and end times of the session to links to tasks and work you were doing during the session. This allows you to create additional reports for time analysis. Below in this article, I provide an example code for such reports using the Dataview plugin.
Cons:
Does not save data from the current timer when Obsidian is closed. It's frustrating when you rush to close Obsidian or shut down your computer while a timer is running, resulting in no log entries for the current session. It would be helpful if the plugin checked for the program closing or did not allow the program to close until the session was stopped.
No long break after several short ones. This is a detail, but it would be nice to see an option to set up long breaks after a certain number of short ones. It's very helpful over longer distances.
Lastly, this is not a minus, but a wish. In another program, I saw that 2-3 minutes before the end of the session before a break, the program asks if extra time (5, 10 minutes) is needed or simply to take a break. If the user chooses extra time, the timer extends by the chosen amount. This allows for more accurate work time tracking.
Additional Plugins
Dataview – for creating tables and reports for time analysis. Below are the scripts I use as of the writing of this article.
Tasks – as I understand, "Pomodoro Timer for Obsidian" uses this plugin to more flexibly manage the time log.
Properties – a built-in Obsidian plugin. I use it to create additional conveniences for reports when analyzing time.
Templater
Applying the Pomodoro Principle and Analyzing Time
The Pomodoro Principle helps me at different stages of work within the GTD methodology and the creative pipeline developed jointly with the School of System Management.
The Pomodoro method and time analysis help effectively tackle tasks in various situations. Here is how it works at different stages of the GTD methodology, implemented by me in the creative pipeline that I develop jointly with the EEM Institute in my Obsidian exocortex:
Task Formulation in the Project
Description of the Procedure: Before starting work, it is important to clearly formulate the task to be accomplished in the upcoming "pomodoro." This is aided by a systematic approach to the role and product we aim to create.
Example: A writer wants to finish a chapter of a book. He divides the work into several pomodoros of 25 minutes each and specifies the task for each: "In the first pomodoro, I create a rough plan for the chapter. In the second, I write the introduction. In the third, I describe the key events."Planning Work for a Time Slot in the Routine
Description of the Procedure: By applying the Pomodoro method, we distribute tasks across predefined time slots in the daily schedule. The 25-minute slots allow for quick engagement in work, while short breaks maintain motivation.
Example: A designer plans to spend the morning working on a new project. He divides the time into four slots of 25 minutes: the first for a logo sketch, the second for developing a color palette, the third for designing a website layout, the fourth for creating a presentation. This plan provides clear attention distribution and helps work with full dedication.Personal Strategizing When Estimating Expected Time for the First Stage of a Project
Description of the Procedure: By estimating the planned time for the first stage of a project, the Pomodoro method helps break the work into measurable blocks, allowing for a more accurate determination of the required time.
Example: A project manager plans to implement a new document management system. To estimate the time for the first implementation stage, he divides the work into small tasks and determines the number of pomodoros for each: requirements analysis (2 pomodoros), infrastructure planning (3 pomodoros), architecture development (5 pomodoros). This helps him plan time based on realistic expectations.Assessing Planned Time in Work Projects
Description of the Procedure: When planning projects, the Pomodoro method allows for estimating the necessary time by multiplying the number of tasks by the average duration of pomodoros, adding a buffer for breaks and unforeseen circumstances.
Example: A lead engineer at a manufacturing plant needs to complete a project to implement new equipment. He determines the number of pomodoros for each stage: installation (8 pomodoros), testing (5 pomodoros), staff training (6 pomodoros). These estimates help more accurately foresee the completion deadlines.Ongoing Day Review
Description of the Procedure: Throughout the day, I see how much focused work time I have managed to accomplish so far. This helps spur me on, especially when I feel like "slipping off track." After the day ends, it is useful to analyze how much time was spent in focused work. This allows for adjusting approaches to time planning and productivity.
Example: A web application developer keeps a journal of pomodoros, noting the number of productive cycles during the day. At the end of the day, he sees that he only managed three pomodoros in the morning due to frequent distractions. The next day, he decides to plan tasks in advance and limit external factors that hinder concentration.
Time Analysis Script
Below, I provide examples of Dataview scripts that I use at the time of writing this article. The scripts are constantly changing as my research progresses, so keep an eye out for new posts.
Example of a Log Template
For Pomodoro Timer for Obsidian plugin
<%*
let link = log.task?.path ? `[[${log.task.path}]]` : '';
let dateP = log.begin.format('YYYY-MM-DD');
if (log.mode == "WORK") {
if (!log.finished) {
tR = `- 🟡 (pomodoro::${log.mode}) (duration:: ${log.duration}) (begin:: ${log.begin.format('HH:mm')}) - (end:: ${log.end.format('HH:mm')}) (dateP:: ${dateP}) (taskM:: ${link}) - сессия ${log.session}`;
} else {
tR = `- 🍅 (pomodoro::${log.mode}) (duration:: ${log.duration}) (begin:: ${log.begin.format('HH:mm')}) - (end:: ${log.end.format('HH:mm')}) (dateP:: ${dateP}) (taskM:: ${link}) - сессия ${log.session}`;
}
} else {
tR = `- ☕️ (pomodoro::${log.mode}) (duration:: ${log.duration}) (begin:: ${log.begin.format('HH:mm')}) - (end:: ${log.end.format('HH:mm')}) (dateP:: ${dateP})`;
}
%>
Invested Time Report
The report allows for the analysis of invested time over a specific period. It also shows the percentage of the plan completed based on the invested time for each day.
``` dataviewjs
const { DateTime } = dv.luxon;
// Retrieve dates from YAML properties
const startDate = DateTime.fromISO(dv.current().file.frontmatter['Date 1']);
const endDate = DateTime.fromISO(dv.current().file.frontmatter['Date 2']);
const plannedTime = dv.current().file.frontmatter['Target Hours']; // Retrieve planned time from YAML
// Check if dates and planned time are correctly loaded
if (!startDate.isValid || !endDate.isValid || typeof plannedTime !== "number") {
dv.paragraph("Error: Dates or planned time are incorrectly set.");
} else {
// Create a map to aggregate data by day
let timeMap = new Map();
// Collect and aggregate work time data
dv.pages("#MetaData/Registrs/WorkTime").file.lists
.filter(item => item.pomodoro && item.pomodoro === "WORK")
.forEach(item => {
const itemDate = DateTime.fromISO(item.dateP).toFormat('yyyy-MM-dd');
const duration = parseInt(item.duration, 10);
if (timeMap.has(itemDate)) {
timeMap.set(itemDate, timeMap.get(itemDate) + duration);
} else {
timeMap.set(itemDate, duration);
}
});
// Process each day between startDate and endDate
let days = [];
let totalWorkTime = 0;
for (let current = startDate; current <= endDate; current = current.plus({ days: 1 })) {
const currentDate = current.toFormat('yyyy-MM-dd');
const dailyWorkTime = timeMap.get(currentDate) || 0;
const percentageOfPlan = ((dailyWorkTime / plannedTime) * 100).toFixed(2);
days.push({
date: currentDate + ' (' + current.toFormat('ccc') + ')',
timeSpent: dailyWorkTime,
percentOfPlan: `${percentageOfPlan}%`
});
totalWorkTime += dailyWorkTime;
}
// Calculate total planned time
const totalDays = endDate.diff(startDate, 'days').days + 1;
const totalPlannedTime = plannedTime * totalDays;
const totalPercentageOfPlan = (totalWorkTime / totalPlannedTime * 100).toFixed(2);
// Display results in a table
dv.paragraph(`**Total Time Spent: ${totalWorkTime} min (${totalPercentageOfPlan}% of total planned ${totalPlannedTime} min)**`);
dv.table(["Day (Date)", "Time Spent (min)", "Percent of Plan"], days.map(day => [day.date, day.timeSpent, day.percentOfPlan]));
}
```
If you want to see scripts for other reports, let me know in the comments to this post. For regular work with my creative conveyor, I also use:
analysis of time spent on projects,
and analysis of time spent on projects and tasks.
and other…
Write in the comments, I would be happy to share.