The past week has been Week 0 of my Ultralearning experiment in which I attempt to teach myself web development, with the goal of being good enough to get a SWE internship next summer.

What’s worked well:

  • Lots of research prior to starting. Other options I was considering could have easily taken 1000+ hours. And that’s the condensed version of my initial plan. Instead of succumbing to temptation and diving in, I spent ~ 20 hours over a week reading and talking to people. My goal was a curriculum that’s as easy as possible, and no easier. As per Sam Altman, deciding what to work on is “much more important” than working long hours.
  • Course selection. Early days yet, but the course seems to be of very high quality, testament to the people behind it (University of Helsinki, in collaboration w/ Houston Inc.). It’s detailed without being Byzantine, challenging without being nigh impossible.
  • Behavioural experiments. I’ve engaged in some experiments to tweak my behaviour, resulting in having logged 37.5 hours of work on this course in the past week — the highest number I’ve recorded, during my summer holiday, with little external pressure.
  • Experimentation. Might sound trite or obvious, but I was reluctant to experiment with anything before, say, this summer — probably stemming from mismanagement of my ego. Viewing more things as experiments — including this course — has taken a lot of toxic pressure off, while still facilitating the search for the optimal path.

What’s gone poorly:

  • Active recall experiment. I initially tried to read every sub-section of the course content in detail, and then write it down from memory. That trebled the time taken to work through content, with dubious benefit — since development is about building. I’m retiring this experiment, with the substantiated expectation that just doing the exercises as presented — they’re tricky and require mastery of the material — will serve as the most efficient way to learn.
  • Feedback. There’s a Telegram group chat associated with this course. I didn’t join because I wanted to do it ‘the hard way’. Turns out that attempting the course on my own is the hard way. I’d benefit from nudging and feedback from the instructors in the chat. Quality feedback is a core concept in Ultralearning anyway.
  • Underusing Git. Not committing, pushing, and merging my work after each sub-exercise. I’ve had to restart entire exercises because I couldn’t remember what they looked like before the part that tripped me up.


  • Join the Telegram group.
  • Don’t write detailed notes on my process. I’m using literally 0% of the notes I took alongside my learning in composing this blog post.
  • View more things as variables to be modified as part of an experiment.
  • Commit, push, and merge after finishing every single sub-exercise. It’ll save you from having to start things from scratch when things get weird.

What I’ve built so far:

Anecdotes (Part 1 of course contents): A web app that displays one of six aphorisms upon being prompted.

You can also vote for your favourite:

Vote display updates dynamically when the highest-voted quote is superseded

Unicafe (Part 1):

Web app where you can provide feedback for an imagined cafe.

Statistics are updated with each input.

Courseinfo (Part 1 & 2):

Repo with all my work on this course so far:

Going forward:

  • Experiment. In particular, I’m interested in seeing what kind of feedback I get on the Telegram group, and how I can incorporate it.
  • Work habits. I want to ramp up both hours worked and (especially) intensity — which is currently poor, by my subjective estimate.
  • Course content. I’ve completed Part 0 and Part 1 of the course in the past week; I’d like to have completed Part 3 by this time next week.

Student @ UBC (Vancouver, BC).