Unlimited Pomodoro Works: My Scheduling System
Related: The Power of Pomodoros, Working Hurts Less Than Procrastinating, Cached Procrastination
Follow-up To: Reinforcement and Short-Term Rewards as Anti-Akratic
I’m still working on cleaning up my scheduling system for release, like I mentioned in the comments to my last post. However, I managed to forget the end of my college semester, which is taking up a distressing amount of my time. So, although progress is being made, I’m not done quite yet and probably won’t be until sometime after my final exams end on the 16th. In the meantime, I’m going to explain my scheduling system and some of the modifications I’ve made to it.
My system is derived from the Pomodoro Technique. In it, work is separated into individual 25-minute blocks also called “Pomodoros.” To ensure that blocks last for the full 25 minutes, they’re timed; once the timer has started, the block should not be uninterrupted until the timer runs out. There’s a short break between each Pomodoro; after several Pomodoros, there’s a longer break.
The biggest benefit I’ve noticed from using my system is in fixing my problems with task switching. When I was doing something I didn’t much like, I used to think about doing something else almost constantly; it usually wasn’t long before I stopped working to do something else. The original Pomodoro Method solved this problem by forcing me to wait until the timer had expired to stop working. However, I had another problem with task switching that the original Pomodoro System didn’t touch. When I was slacking off, I could sit contented for hours without doing anything else; I found it hard to start working or stop slacking off. That’s where my changes came in. These problems are both very similar; in this one, I change tasks too infrequently, where in the other, I changed tasks too often. It stands to reason, then, that they could both be solved the same way: by timing them. So, in my system, everything I do is treated like work is under the Pomodoro System, even slacking off.
That’s the biggest change my system makes: everything is a block (or a Pomodoro), and I’m in a block all the time. However, my system is more than just a few rule tweaks. My system is computerized; I use a web application for my block timer, as well as for managing my task list and the various other add-ons my system has. I’ve also made a number of more subtle decisions that better adapt the system for computerization.
Like in the Pomodoro System, my system times each block of work I do. After the work period ends (usually 25 minutes), my system enters a 5-minute break period. During this break period, I preload my next task into the system so that I can start working as soon as the break ends, without having to futz with the timer. If I forget to preload a task, my system doesn’t start anything automatically; I’m just left outside of a block, which I consider to be a failure state that I always try to avoid.
My system also integrates a task list; to start a block, I must choose my task from the list. This also helps to improve my productivity. Because I choose tasks from a list of all my potential activities, it’s easier to find and select tasks with higher activation energy, instead of falling back on cached procrastination. Forcing me to select a task from a list also makes me explicitly consider what I ought to be doing with my time.
A web application is nice, but there are a lot of things about it that, on its own, make it a bit less useful than the traditional timer. It doesn’t ring, for instance, and I have to open it up every time I want to check how much time I have left. So, I built an application that runs on another computer on my desk that handles all of those things. It rings a digital gong when the current timer ends. It shows me whether I’m in a break, in a task, or if my task has expired by changing the color of the screen. It displays in text the current task, some information about it, and how much time is left on the timer. Right now, this is a fairly bare-bones terminal application; one of the things I’m working on in my current revision is making it look a bit nicer.
Of course, my extrinsic motivator from my previous article is tied into this system as well. Simply put, it rewards me with candy for keeping on track with my schedule. The rules it follows are more precisely explained in its own article. I’m rewriting the rules, however; expect a new article about them in a few weeks.
Even the best scheduling system in the world would be of no use if I couldn’t bring myself to follow it. That’s what my browser plugin is for. When I don’t have a block timer active, or if I’m trying to access a non-productive web site during a productive block, my browser plugin will block the site and tell me to go start a block. I can still override the plugin, but the plugin requires me to wait 10 seconds before I get the option. Since most of my procrastination time is spent on the Internet, the plugin is an effective way of reminding me to turn the system back on.
Since my goal is to keep the system on at all times, it’s a bit problematic that many of real-world tasks don’t divide neatly into Pomodoro-sized chunks. These are things like eating dinner, walking the dog, or sleeping. In order to track them, my system has a category of “real-world” tasks which run for an indefinite amount of time. However, such a task would seem open to abuse; in order to prevent that, my browser plugin blocks my access to the Internet during them, just as if I weren’t in a block at all.
My original plans for the system included things like reports on time usage and a system to help me calibrate my expectations for the amount of time a task is likely to take. However, I’ve yet to implement any of these, and honestly I’m still not sure what the best way to implement these would be. Any interesting suggestions would be appreciated; I hope to write an article about building these systems sometime soon.
This is cool and I’m glad it works for you, but it doesn’t really seem desirable to structure every single minute of your time in this way. Don’t you crave the freedom of unstructured relaxation time a little bit? Personally, after getting my shit together productivity-wise myself, I now actually find unstructured time moderately unpleasant, but I still find it really, really nice to have the option open. Also, I fear that never allowing yourself a break from your system and exclusively thinking of your life in twenty-five minute chunks could be a little damaging to mental health after a while in a “I can’t relax and live in the moment anymore” type of way. But maybe the productivity gains outweigh this downside?
I agree: as I note in a recent comment, for maximum productivity one should allow oneself some predefined amount of leisure time. And I don’t think it’s advisable to lump these periods into the “unstructured procrastination” category: procrastination, however unstructured, is accompanied by guilt and other unpleasant feelings, whereas predefined leisure time should be enjoyed with peace of mind, in the knowledge that one is doing what will actually make one more productive overall. (I’m using ‘productive’ in the broader sense of ‘conducive to the fulfillment of one’s long-term goals’, whatever these goals may be—being happy, saving the world, earning more money, or what have you.)
Ah. I forgot to explain this in the article, but procrastination blocks are effectively “unstructured” in that I can do whatever procrastinatory task I want during them. (If I want to do something productive, though, I break it and take a productive block.) If I’m doing something that I don’t want to interrupt to feed the timer, I can use indefinite blocks or long blocks. I haven’t found the system exceptionally stressful, but this probably depends a lot on who’s using it and why. I suspect I might be a lot less comfortable with it if I hadn’t built it.
Right, but they’re still structured in that they have to be twenty-five minutes long, which is what I think I would find unpleasant.
Yeah, that’s probably true.
I have done over a thousand Pomodoros.
Unknown to procrastination.
Nor known to overwork.
Have withstood ugh fields to get many things done.
I’m actually incredibly amused as to how popular FSN is on lesswrong. I didn’t think so many people would get this reference.
How long you’ve been using this system? Has it been tested by a decently-sized period where you had a large workload? Intuitively, needing to always be in a block feels like a considerable amount of bloat in the system—maintenance work that you’re imposing on yourself without sufficiently large gains. However, I don’t currently use anything like Pomodoros to prevent procrastination, so I’m likely missing something.
I’m also thinking that it would be tiresome to try to divide everything into 25-minute chunks. If I’m trying to learn something, I don’t want to take a break in 25 minutes when I’ve already loaded stuff into my brain. Maybe more variable length work blocks would be better here? (Or maybe you already use them to a greater extent that I thought when reading your post?)
Given my own habits, I wouldn’t even try to implement something like this unless I’d managed to reduce the maintenance work to almost nil. Both of these seem to involve all task start and end times, which would be a significant pain (for me.)
ETA: Also, upvoted. I like reading things like this—it helps me get a feel for systems that I personally haven’t set up without having to go to the trouble of actually doing so.
I started using the system about 6 months ago, but I used it infrequently for about half the time; so, it’s still fairly new. I’ve used it for some fairly heavy workloads. I’m going to try to use it to maintain a self-directed ≥8hr/day workload over the summer, so that’ll probably be the big stress test.
They don’t take that long to set up—maybe 15-45 seconds. They do cost me some time, but it’s more than repaid in increased productivity.
What actually happens in practice is that if I’m sufficiently engaged in an activity I either work straight through the breaks or I forget about the timer altogether. (This seems to happen a lot when I’m programming.) Since this tends to be my most productive time, I’m probably going to come up with some rule change to legitimize this; perhaps ad-hoc conversion of any productive block to indefinite.
Well in that case this won’t count as spam :)
I’ve developed an iPhone app called PlanMyWeek where you describe your tasks, tap a button and then the app schedules the tasks for you.
I was going to prepare a post that when using the app, how quickly it becomes apparent I’ve fallen for the Planning Fallacy, but this seemed like a good opportunity as any.
I really really like the idea of allowing you to go to any website you want but you have to wait 10 seconds if you’re supposed to be doing something else. Is there an existing chrome plugin that does this?
There’s one called “Delayed Gratification” that does this, but for 30 seconds instead of 10. I don’t think it’s configurable, but it’s super easy to use.
Ha, I discovered “Delayed Gratification” a couple of minutes ago and rushed to share the link with others… only to find out that someone had already mentioned it.
(Link to the Chrome Web Store.)
Thanks! Just started using this. I was initially annoyed that you can’t see and edit the list of sites you’ve blocked all at once (unlike StayFocusd), but then it occurred to me that this might be a feature rather than a bug.
I think LeechBlock can be configured to do that, though I’ve never done so (and I don’t know whether there’s a version for Chrome of it).
That wouldn’t work for me—I’ve had lousy Internet connections for such a large fraction of my life that a part of my brain just takes the fact you have to wait to load a web page as a fact of life, and isn’t frustrated by it enough for it to make a difference.
Yes, the “akrasia horizon” for many common distractions seems to be measured in seconds. A month ago I spent a few minutes trying to find exactly such an extension, without success. A substitute that only works on some websites and for some users is to change your password to a long string that you need to manually type in every time, as described here.
UPDATE: Delayed gratification.
Do you live with other people? I think I might find it difficult to live with such a hyper-scheduled system, in part because spontaneous interactions with other people in my house happen a lot. (I have to set myself up carefully to even do Pomodoros when I need to work.)
I give myself a bit of flexibility for social interactions; stonewalling my roommate during productive blocks would cause me more than enough trouble to outweigh the productivity gains.
Are you sure this is nearly ready for release?
Ha. Remember, it’s a Pomodoro-like system with a task list, so it’s intended for short-term and medium-term scheduling, not long-term. That sort of thing, unfortunately, is still left to my forgetful brain. (I might add long-term planning features later, though.)
Suggestion: use a reward / punishment schema to encourage completion of the tasks within the allotted time.
If you miss the deadline, you get no tasty reward for your efforts.
If you finish early, you get the reward...but you have to do intense exercise (or something) for each remaining minute.
Side effect: If you really hate exercise, you might try to prolong the time it takes to finish the task...not sure how to get around this. Removing the exercise “punishment” will encourage you to systematically overestimate times, which is not conducive to calibration. Depending on how conscientious you are, this might mean you do a more thorough job, or it might mean that you waste your time…
EDIT: Cure for side effect: Have a double incentive system in place. You get large incentives for finishing the task efficiently, and you get additional small incentives for accurate time estimation. Incentives are structured such that you will prioritize efficiency, while still attempting to maximize time estimation.
Regarding releasing my scheduling system… I had originally expected that people would want the source, but in retrospect it occurs to me that not everyone wants to deal with setting up a server. So, it’s time for a poll: would you prefer source code, or would you rather I just set up a server for us all to share? Actually, does anyone care about source code at all?
[pollid:466]
Would releasing the source be a significant hassle for you? Because if not, even if you do set up a shared server, I don’t see any reason not to.
It wouldn’t be a significant hassle, but it would mean at least a little bit of cleanup work, so if nobody cares I would prefer not to. It seems that this isn’t the case, so I’ll probably release source.
What language?
It’s written in PHP, targeting a standard Apache+MySQL+PHP setup. So, it’ll probably run on any Web server you have access to, which is why I chose it. The downside is that the code may be a bit cluttered, in the way PHP often is. (I have, however, tried my hand at a modular design here; ideally, this will keep it clean enough.)