https://sintheta.nexus/blog/feed.xml

pomodori for the win

2025-05-14

I've used various methods over time to try and track my productivity/work, lately usually just setting myself a number of tasks, and then tracking the hours worked, simply hours at main employment + strict bookkeeping at home:

  • any break whatsoever would not be counted as work
  • I would try to stay as focused as possible while working

Setting myself high target hours in any given week, especially lately though the balance seemed off; While clocking in decent hours:

  • I simply wasn't satisfied end of week (perceived a low effectiveness)
  • I still felt too burned out (as if I've had worked too much)
  • I perceived too little real gains given my main tasks

It wasn't my first time coming across the pomodoro technique, whose sheer existence I almost considered insulting; as if I, "as an adult", would need such strong guard rails, as if it wouldn't make sense to take breaks dynamically at will, dependent on the specific task, one's fatigue, one's motivation... but after reading testimonials of people solely measuring their work in "pomodori", some insights from self-observation, and some inspiration from colleagues at work, some things clicked into place for me...

The insights gained:

  • any (especially learning) goal worth having is best approached as a marathon, not a sprint; implying: pick a work load you can fulfill long-term!
  • whatever you track (especially as your primaries) is what you will start to optimize for; track hours, you'll optimize for hours (with disregards for efficiency creeping in)
  • most people completely under-estimate the mental load of highly concentrated work: do less hours, but more focused!
  • if you overstress yourself, you'll find ways to veer off any given path, even within the supposed limits you set yourself, a shameful example from self-observation:
    • start work tired on a book, knowing you want to do 3 hours tonight
    • encounter the first code sample
    • even though you perfectly understand the sample, veer off into writing your own variation of the code for 30 minutes, exhaustingly researching concepts you haven't yet encountered but are perfectly explained three pages later in the book, if only you would've cared to simply read on
    • read next paragraph
    • get stuck on a mathematical analogy the author makes, which has no bearing on whether you can continue the book at this point in time
    • research said analogy anyways, spend 30 minutes on this
    • write a completely unneeded beautiful markdown table w/ inline LaTeX to explain everything best you can
    • end a 120-minute work session w/ what you could've been done in 20 minutes, if you stayed focused on your main task, which should've been: progress in the book given decent enough understanding at each point to move on!
    • take a break, one more hour of work to go...

The self-manipulation part is obvious, but its motivation is more important: Starting the undertaking of working 3 hours fatigued, I knew I couldn't make it in a highly focused manner; so I didn't. I supposedly stayed within the main task, but obviously I didn't; I made an effort, with little effectiveness. I pushed myself, deepening the association of "study" w/ "unreasonable effort", creating dislike long term, for far too little actual gains.

I'm setting myself up for a phase of "nothing will bring me to do anything"!

So recently, I made the switch: All my previous hour goals were reduced to a "minimal count of pomodori" (the minimum goal roughly corresponding to up to a ~20% reduction by hours), so a number of 25-minute intervals, laser-focused on one task; if I do more, great, but the minimum is always the acceptable goal I'll be satisfied with end of a given week.

I'm convinced that:

  • I feel less burnt out
  • I get more done
  • I have more time for meaningful leisure activities
  • it's far more sustainable

The 25-minute + 5-minute split seems perfect: As non-sensical as it first seemed, the brevity of the times ensures

  • it's simple to stay highly focused if it's "only for 25 minutes"
  • it creates a sense of urgency
    • you don't even "have the time" to be distracted, as you always only have x-minutes left for something to click, something to finish doing
  • it forces you to take stock of your own effectivenes in short intervalls
    • you reflect each 25 minutes on how well you worked
    • you continously analyze what one can simply reason about, and optimize

So to end this one somewhat abpruptly: If you want to be more effective, consider what I wrote! It may just work for you as well!


Addendum:

  • now what programmer would I be, if I didn't have bash script for this (below)
  • also: I made this short, I could write for hours about
    • productivity, learning strategies, my detailed scheduling
    • the separation of my weeks into various categories (Normal/Relaxed/Off)
      • setting percentages how many "Relaxed" and "Off" weeks I allow myself
    • etc pp...
    • I think to share all is non-sensical, most seems tailored to myself specifically, with little application as is to anyone else
#!/bin/bash
#
###############################################################################

TIME_WORK=25
TIME_PAUS=5
CYCLES=4

AUDIO_CMD="mpv --really-quiet --no-video"
AUDIO_WORKBEG="/home/ssn/.audio_cinematic_mega_horn.mp3"
AUDIO_WORKEND="/home/ssn/.audio_cinematic_downer_thorn.mp3"

MPV_SOCKET="/tmp/mpvsocket"

###############################################################################

# ommitted lot of error checks
# 	no checking for existence of socket
# 	no checking for existence of sound file
# 	no checking for socat
# 	no checking if mpv is even running

###############################################################################
###############################################################################

# following assumptions are made for pausing/unpausing mpv instance
#   one running mpv instance  w/ `--input-ipc-server=/tmp/mpvsocket`
# no explicit error checks but "seems fine" (TM) for my use case
#   no  running instance: 			   invalid socket, nothing happens
#   two running instances w/ ipc-flag: invalid socket, nothing happens
# &> /dev/null: stdout + stderr both redirected

pause_mpv() {
	echo '{ "command": ["set_property", "pause", true] }' \
		| socat - "$MPV_SOCKET" &> /dev/null
}

unpause_mpv() {
	echo '{ "command": ["set_property", "pause", false] }' \
		| socat -d0 - "$MPV_SOCKET" &> /dev/null
}

###############################################################################
###############################################################################

countdown() {
	local min=$1
	local sec=$((min * 60))
	local label=$2
	local sound=$3

	pause_mpv
	$AUDIO_CMD "$sound"
	sleep 1
	unpause_mpv

	while [ $sec -gt 0 ]; do
		min_rem=$((sec / 60))
		sec_rem=$((sec % 60))
		printf "\r%s: %02d:%02d" "$label" $min_rem $sec_rem
		sleep 1
		((sec--))
	done

	echo ""
}

###############################################################################
###############################################################################

main() {

	for ((i=1; i <= CYCLES; i++)); do
		echo "Cycle $i of $CYCLES"
		countdown $TIME_WORK "Work" $AUDIO_WORKBEG
		countdown $TIME_PAUS "Paus" $AUDIO_WORKEND
	done
	
	echo "$CYCLES pomodori completed; break time"
}

###############################################################################
###############################################################################

if [ $# -eq 1 ]; then
	CYCLES=$1
fi

main