How I budgeted my time for Oxford final exams

PPE finals are eight high-stakes examinations on two years’ worth of material, composed of eight modules. Everyone dedicates at least their last term to revision, during which no new modules are added. Many PPE students even finish their eight modules two terms before exams (at the end of Michaelmas term of their third year), which theoretically leaves six months between the time they stop learning new material and the time they are examined.

How much explicit planning should go into finals revision? I am generally wary of over-planning, especially with rigid, brittle plans over long time horizons. The plan often ends up being inadequate, not following the plan causes guilt, and constantly revising it costs a lot of effort1. On the other hand, when the stakes and the risk of akrasia are both high, planning could have outsize returns.

There are many aspects of planning for exams. Here I focus on just one: budgeting time between different topics for revision. This is especially difficult to do with raw intuition: it always feels like you’ve got ages left until exams, until you don’t. It’s typical for people to take a leisurely stroll through material that they enjoy, deepening their understanding, which leaves little time for the more difficult and aversive stuff. (Given how easily I get nerd-sniped by my favourite topics, this is an especially worrying pitfall for me.)

To budget my time, I used this spreadsheet, which you can copy and adapt2. I’ll discuss some of its features now.

Dividing the remaining time

The most basic feature is a simple reality check: how many days until exams? (This is calculated dynamically using =TODAY().) Dividing by eight, how many per module? This simple calculation could be enough to snap you out of the vague feeling that there is “a lot” of time left. Maybe there really is ample time. Why not find out exactly how much, so you can use it best? Maybe once you do the maths you realise there isn’t. In that case this simple division provides a salutary wake-up call.

Further adjustments could be useful. I’d recommend planning some days off, like one day a week, and certainly a few full days before exams (cramming is counter-productive). If you’re travelling or doing any projects, subtract those days explicitly from the total.

If your modules have themselves a modular structure, like independent chapters of a textbook, you might consider further subdividing the time between them. Maybe you’ll get something like 0.12 days per chapter, which at five hours a day is 36 minutes, something so close to the skin your system 1 might actually be able to process it. In my experience it’s pretty rare for intellectual material to actually have such independent chunks, when you zoom in all the way, even though it might superficially be organised into discrete topics.

Allocating time between modules in proportion to their variance

If you’re trying to maximise your expected mark, allocating more time to higher-variance papers makes sense. To be precise, if your mark in each paper is the square root of time allocated times the standard deviation, the sum of the marks is maximised by allocating time in proportion to the variance.

I looked up the variance in marks for each paper since 2015, the first year this information was available in the PPE examiner’s reports. I then averaged the three variances3 for each paper. For a PPE student taking my eight papers, I computed how much of the total variance has historically been contributed by each paper.

The results are pretty striking. For example Game Theory contributed more than four times as much variance as Knowledge and Reality. I think these fractions are a better starting point for time budgeting than allocating time equally between the modules.

But allocating time purely by the variance has some pretty obvious flaws. For starters, there are strong selection effects: some papers are mandatory for everyone, while others select for the most capable and interested students. For instance, if all but the nerdiest of nerds avoid econometrics, we should expect the variance to be artificially low for that paper. Then there is the fact that some modules build on each other while others do not: econometrics is basically an advanced version of quantitative economics, so there is little point doing quantitative economics-specific revision over and above what I do for econometrics. And finally you need to adjust for factors idiosyncratic to you: I basically snoozed through Macroeconomics last year while I was busy with an unrelated research project. I ended up with these target allocations:

Planning for humans: built-in updating

A crucial feature of a good revision plan is that it adapts gracefully when you don’t get as much done as you hoped. You shouldn’t have to scramble to adjust your plan after the fact, cursing your weakness of will. It should be baked into the design from the start.

On one view of plans, they are what you should do, and a feeling of guilt when you don’t follow them is not only natural but appropriate. A view that I’ve often found more fruitful is to treat plans as just another tool of instrumental rationality. This may seem like an obvious point, but for many people, myself included, it’s much harder to grasp on an intuitive level, and harder still to implement. On this topic I highly recommend reading Nate Soares’ replacing guilt series.

When you fall behind your initial plan, it can be tempting to think you can accelerate to make up for lost time. But I think this is rarely realistic. When you don’t work as hard as you had planned, this constitutes evidence that your plan is too ambitious for the future as well as the past. I have often ignored this evidence and paid the price for it. Accelerating is an especially bad idea when you need to allocate your effort over weeks rather than days or hours. Like many beginning endurance runners, if you run that fast you’ll end up collapsing before the finish line.

I used the Pomodoro technique: 25-minute segments of focused work followed by a five-minute break. Apart from its other benefits, this technique provides a nice and tangible unit to measure time. At any point in time I want to be solving this equation:

\[\frac{PA_i+S_i}{D+ \sum_i S_i} = T_i\]

This graph shows \(A_i/S_i\):

Where \(P\) is the number of pomodoros left until exams, \(S_i\) is the number of pomodoros spent on module \(i\) so far, \(T_i\) is the overall target allocation for module \(i\), and \(A_i\) is the allocation (out of \(P\)) to now be spent on module \(i\). For this, I need to manually keep track of an additional variable, \(S_i\). I do this on Sheet2.

We can do interesting things with \(P\). The simplest estimate of \(P\) is simply a constant number of pomodoros times the number of days left until exams (running the entire marathon at the same speed). This is sufficient to give you the first feature of the equation: automatic adjustment to the passing of time.

Tracking \(S_i\) enables a second nice feature. By computing your average number of pomos per day (\(\sum_i S_i\) divided by the number of days since you started revising), and extrapolating it, you obtain a realistic estimate of \(P\). This gives you automatic adjustment for your actual capacity to do work. You needn’t slavishly extrapolate this average. But it should feed into your estimate of \(P\). If you plan to work 10 pomos a day but so far you’ve only done an average of 4 pomos a day, that should raise a red flag.

Diminishing returns suggest that it’s best to always work on the module for which \(T_i/S_i\) (depicted below) is largest.

The budget as a part of a larger decision-making procedure

I often disregarded the numbers based on hunches and intuitions, especially when I felt that my intuitions were capturing some unmodeled factor (for instance when I felt confident about a topic without having spent much time revising it, or when I postponed revision on exams which came later).

I fully expected that I would do this. Getting up every day and following the dictates of the spreadsheet would have been an instance of Spock-like “straw vulcan” rationality. Instead, I viewed the model and the intuitive view as two different tools at my disposal, or as two advisors, each with her own bias.

I thought of the division of labour in something like the following way. The whole case for making an explicit, numerical budget is that the intuitive System 1 is about as good at long-term planning as a toddler in a casino. The spreadsheet is excellent at remembering what you did, keeping track of the long-term goals, feeding historical data into your decision making process, and most importantly, it does not self-delude. However, it is a woefully simplified model of the actual task of taking eight exams while trapped in a human body with a fleshy brain. Millions of variables are boiled down to a handful. The model is computationally puny next to the awesome power of your System 1, whose inclinations are based on a great deal of contextual information which your brain constantly gobbles up. System 1 shines at taking in a huge amount of relevant information and boiling it down to an up-or-down judgement: Game Theory today, yea or nay? The spreadsheet is good at correcting some of the biases of System 1 and at giving enough weight to the data on variances, which is crucial but not at all salient.

How useful was all this planning?

Looking back, how much did the budget actually change my decisions? I ended up using the model mostly as a guardrail, reminding me to allocate more time to a module when its ratio \(A_i/S_i\) became something outrageous like 300%. I didn’t pay much attention to the exact numbers on a day-to-day basis. But averaging over the long run, I think the budget substantially affected my decisions. In particular, it made me spend much less time on low-variance philosophy papers and more on game theory and microeconomics.

Another intended purpose of the spreadsheet was to help me smooth my effort more over time. Looking back, I’m a bit disappointed by how much harder I worked when finals were approaching than when they were more distant. But it probably would have been even worse with less planning. My best guess is that the spreadsheet had a minor positive impact in this respect. To be fair, effort and consumption smoothing is, in general, a very difficult task for human motivation.

My final allocations turned out to be pretty close to the targets even though I didn’t strongly intend them to.

Given the high stakes and the relatively low time cost, I think this project was amply worth it. Setting up the spreadsheet took only a few hours. The main cost was the hassle of keeping track of daily time use. The single biggest win was to do the research on the variances. For this insight I thank my friend Rune Tybirk Kvist, who completed finals one year before me.

  1. That’s why I like Complice, which makes you choose fresh, relevant actions every day and prohibits pile-ups of unfinished tasks. 

  2. I’ve removed most of the data to protect my privacy, but I’ve kept the percentages for illustration in Sheet1_hardcoded_data. You’ll also come across some negative numbers because the beginning of exams is now in the past. Data input cells are in orange. Sheets 2015, 2016, and 2017 are where the data from examiner’s reports is stored. 

  3. Not weighted by number of candidates each year, too much of a hassle for something I expect would make little difference. 

June 11, 2018

Philosophy frivolity

Oh love
why are you
so elusive?
This morning
you disappeared
from my ontology.
I too can be reduced
to tears.

— Oxford, September 2017

I met a Dutch gambler in a dream;
she had a raw beauty, Savage and mischievous.

We bet and all her wagers did seem
so full of promise, innocent and auspicious.

But no matter the twists and turns of chance
it was a sure loss, she had known in advance.

Oh I fell for her, but what I felt for her
was only love.

For even the reasoner’s art
bends to the treasonous heart.

— Oxford, May 2018

May 29, 2018

Mindful tech: 22 concrete tips

I often spend more time on distracting websites than I would like. Far beyond a mere productivity issue, aimless browsing and scrolling has become a major source of unhappiness for me.

If you want to do something about this, it’s important to know the forces you’re up against. These apps deliver stimuli that have been optimised more than almost anything in human history. Billions of dollars of incentives and powerful A/B testing have conspired to produce what is perhaps literally the most addictive possible set of 700x1200 pixels to display on your phone.

Over a year ago now, I started thinking about how to regain control. Let me share some of my tricks. (I also endorse everything on this list.) Some of these will be more extreme than others. You could view them as a menu of options to consider, I hope there will be something for everyone. Perhaps you’re just looking to waste a bit less time every day on social media. Or maybe you want to develop full-fledged counter-measures to the onslaught of the attention industry.


  1. Mindfulness
  2. Android
    1. Don’t get a new phone
    2. Constant do not disturb
    3. Notifications
    4. Blocking websites
    5. Home Screen
      1. White wallpaper
      2. Remove shortcuts
      3. Nova launcher
    6. Black and white
    7. No animations
    8. Track how long you can keep your phone locked
    9. Block all notifications
  3. Facebook
    1. Delete the app from your phone
    2. In the browser
    3. Buffer
    4. Messenger Lite
    5. Turn off ‘Active now’
  4. Browser
    1. Grayscale the Web
    2. Delayed gratification
    3. Ascetic monk mode
  5. Windows
    1. Block distracting services
    2. Strip down the start menu, taskbar, and desktop
    3. Single-use instances for webapps


The first thing to say is that these tools and techniques best go hand in hand with broader mindfulness training. These tricks can make it a little bit easier to resist the pull of social media on a distracted or anxious mind. But as long as the underlying distraction, anxiety, or craving is still there, the monkey in you will eventually find a way to evade the obstacles you have put in its way. Paul Christiano writes: “The monkey executes a set of reflexes trained to maximize a complex reward function, which was in turn tuned by evolution to maximize reproductive fitness.” If what your monkey really wants is to escape the present moment, it will ultimately have its way: “No matter how “dumb” the monkey is, if it is unbiased then there is no free lunch”.

I use Headspace for mindfulness training. To avoid getting distracted right when I want to meditate, I actually have a separate phone (my old one) which I use exclusively for Headspace. Unlike my primary phone, I don’t mind keeping my Headspace phone on my bedside table.

To some extent, of course, Headspace is also optimised for engagement. Sometimes, you can fight fire with fire.


Don’t get a new phone

Don’t get a new, faster, shinier phone. Your unappealing, three-year-old Android is your best friend here, as long as it works well for essential uses like Google Maps.

Constant do not disturb

That thing when your phone buzzes or beeps? I haven’t experienced it in a few years, and it’s been great. You still want alarms though. And the good thing about nobody calling each other any more is that if you do get a call it’s probably important. So set do not disturb to Priority only and make it permanent with Until you turn off Do not disturb. Then in the advanced settings for Do not disturb, set Priority only allows to allow All callers. (Don’t only allow calls from contacts. I’ve missed some important and time-sensitive calls because of that.)


Disabling notifications can be a double-edged sword. You might remove one potential distraction. Or you might end up doing more mindless clicking because now you open the apps regularly because there might be something there. Experiment with both and see what happens.

Blocking websites

You can use the “trend micro security” app to block websites. I only weakly recommend it because the interface is crap and the blocking is pretty shallow. You can always go edit your settings. You could install another app like AppBlock to in turn block Trend micro and to block itself. But apps can be very easily and quickly uninstalled on Android, so you’d probably just uninstall them both if you got a big craving. At some point I had a clever scheme with blocking the android system app that uninstalls apps, but it became too brittle. Still, Trend micro’s blocking can give you a couple of seconds to reconsider whether you really want to open Twitter for the thirty-second time today.

Home Screen

White wallpaper

Choose a pure white background. This should make your phone a little bit less appealing.

White wallpaper, before and after (with Nova Launcher)

Remove shortcuts

Remove all but the least distracting apps from your home screen.

Home screen, before and after

Nova launcher

Use this custom Android launcher1 to

  • remove the left-hand-side Google feed from the homescreen
  • remove the Google search bar
  • set the Drawer App Grid to 2x2 (this displays fewer apps at once, and makes it more laborious to find an app)

The left-hand-side Google feed

Removing the search bar, before and after

Setting the drawer app grid, before and after

Black and white

You can manually set your phone to black and white in the following way. Go to developer options, then Hardware-accelerated rendering and set Simulate colour space to Monochrome.

Black and white, before and after

But colour has genuine uses, like viewing photos. You may also want to keep colour for “virtuous” apps like Headspace. By using Tasker, you can actually automate when the grayscale setting is turned on or off.

  • To create a task that sets your phone to grayscale, select Custom Setting, set the type to Secure, set the Name to accessibility_display_daltonizer_enabled and the Value to 1. Set it to 0 to go back to colour.
  • Then you can create a Tasker Profile that disables grayscale when you open certain apps and enables it again when you close them.

You can import my setup by simply clicking this link from an Android device that has Tasker installed (XML backup).

No animations

Go to Developer options, Drawing, and set all of

  • Window animation scale
  • Transition animation scale
  • Animator duration scale to Animation off. This will get rid of these smooth and pleasant animations, and make your phone feel more like Windows XP (in a good way).

Animations, before and after

Track how long you can keep your phone locked

I’ve built a little project in Tasker that tracks how long it has been since you last unlocked your phone. If it’s been more than 30 minutes, you get a notification congratulating you. If you unlock the phone, it’s like losing your highscore.

Keeping track of how long your phone has been locked

This is extremely inexpertly built; if I remember correctly it just writes the date & time to a file every time you lock or unlock the phone. The need to write to a file is to avoid resetting your counter when you turn off your phone. You can import the Tasker project by clicking this link from an Android device that has Tasker installed (XML backup).

Block all notifications

I built another Tasker project that relies on AutoNotification to block some apps’ notifications (e.g. WhatsApp), and then unblock them again.

Blocking notifications can be counter-productive (you just end up checking the app all the time). So I don’t recommend it in general. It has only one use case for me: when I’m doing deep work, but I still want to use my phone to listen to music on Spotify.

Warning: this is some hacky shit, very brittle, I don’t really understand how it handles device reboots. If you’re brave enough to try: Magic Tasker link, XML backup.


Facebook is very harmful in some ways, but beneficial in others. Here’s what I like to use. (Many of these tips apply to most social media services).

Delete the app from your phone

Duh. And if you find yourself using the mobile web interface, log out, set it to never remember your username or password, and pick a really long and annoying password. Because you can sync Facebook events to your Google calendar, I’ve found I honestly never have a legitimate need for Facebook on my phone.

Facebook event on Google Calendar

In the browser

Here’s their combined effect:

Facebook: before and after


If you just want to post a status update, do it through Buffer instead of going to Facebook and giving it another opportunity to suck you in. Web and Mobile.

Messenger Lite

I loathe “My day”. Thankfully there’s Messenger lite, which removes “My Day”, and a bunch of other crap.

Facebook messenger, before and after

Turn off ‘Active now’

In messenger, it’s in Settings, then Availability.


Grayscale the Web

Install Grayscale the Web. Navigate to the distracting website, and click Save Site. (You have to do this manually for every offending domain).

Grayscale the web, before and after

Delayed gratification

Install Delayed Gratification for distracting websites. The key thing here is that the 15-30 second delay gives you a chance to reconsider and close the tab, but since it’s only a delay you’re not tempted to circumvent the tool.

Delayed Gratification

Ascetic monk mode

This stylish extension immediately turns you into an Enlightened One, or comes close.

Ascetic monk mode

More generally, with custom stylish extensions, the sky is the limit for customising the web, but that requires some fiddling with css. Consider using my fork of ascetic monk mode.


Block distracting services

This is where most of the action for this section will happen. Use a programme like Cold Turkey (Windows) or Self-Control (Mac) to block distractions. This is some deep-level blocking. You can’t circumvent it short of reinstalling the operating system, I think. So start with small experiments, and work your way up.

I’ll give more detail only about Cold Turkey, since that’s what I know. Cold Turkey can block both .exe programmes and websites. You can set different block lists and schedule your lists to automatically activate during certain times. I’ve found it useful to have three lists:

  • Quit entirely, for websites that provide no conceivable value
  • Distractions, the main list, for distractions like Facebook, Twitter, etc.
  • Deep work. When doing a deep work session on a single project, I sometimes use this to block everything except a few project-relevant websites for the duration of the session.

For Quit entirely, go to Timers and block the list until 2021 or something.

For Distractions, go to Schedule and block them for a few hours a day at first. Remember, it’s a negotiation between you and the monkey, not an all-out war. These are seriously addictive products. If you block them totally, you might actually re-install the whole OS, or more likely find another device to log in from. What worked for me is to slowly increase the daily window of time during which this list is blocked.

Block Deep work for a few hours as needed.

Don’t forget to go to Settings to lock the schedule.

Cold Turkey

Strip down the start menu, taskbar, and desktop

Remove shortcuts and tiles for all but the least distracting apps. I’ve removed all shortcuts except Chrome, and all tiles except the calendar and weather tiles.

Start menu and taskbar, before and after

Single-use instances for webapps

When you use webapps like Gmail or Google Calendar in a normal browser window, there are several visual cues encouraging you to get distracted: the new tab button, and the address bar (which likely suggests facebook when you type the single letter f). Instead, use a dedicated window. In Chrome, you need to go to the Settings menu, and then More tools and Add to desktop. Don’t forget to delete the shortcut from your desktop (use search instead). (Personally I’ve created my own electron wrappers instead of Chrome, which uses a lot of memory if you have a lot of extensions.)

Google Calendar, in the browser and as a single-use instance

If you’re still here, congratulations on making it to the end! I wish you contentment and calm.

  1. I’ve been told there’s also another launcher, called Siempo, which is designed for mindful use. It’s in Beta but looks like it has some cool features. 

April 17, 2018