How I Built a Learning Machine


Back in late 2014, after being laid off from a startup that was struggling to prove out a business model, I found myself hunting for my next software development role. Along with cleaning up my resume and sending out some applications, I started doing some extracurricular stuff like blogging and contributing to OSS (including Rust). I was feeling both bored and inadequate, so I was trying to find a way to stick out. These things took a lot of energy and I was having trouble keeping them up.

In early 2015, I auditioned for a position at Hashrocket. I came out of the audition with a ton of notes – small things I had picked up while pairing with different members of the team. As I anxiously awaited to hear back, I felt this (sorta irrational) desire to continue to prove myself and I didn't want to lose track of what I had learned. So, I started writing up short, to-the-point microblogs about the different things I had learned. I started collecting these in a GitHub repository and indexed all of it with a README.

This repo was aptly named TIL (Today I Learned). I say aptly because I added to it, nearly daily, the small things I picked up from others and from my own googling, reading, and experimenting. By the way, I got the job. Hashrocket's incredible pairing culture played a huge role in my constant and continued learning.

Fast forward a little bit and this small project aimed at impressing potential employers and capturing some bits of learning has flourished. I've filled it with over 900 posts covering at least 28 topics (check out the Vim section, there are some wildly niche posts in there). It evolved from an obscure scratchpad to a 6K+ star repository that I reference weekly – "How do I do X? … Wait, I think I wrote a TIL about that once."

So, why did TIL work for me?

Writing daily TIL posts became a habit that I could stick with.

Unlike blog posts that often felt daunting to start or got left unfinished, I could carve 10 to 15 minutes out of my work day to solidify and document something I had picked up. There were a few factors that were key to developing this as a habit:

  1. It was tightly constrained. I limited posts to 200 words or less. They needed to be very focused to fit within that word limit.
  2. It took a small amount of time. It always took me 10 to 15 minutes which always felt manageable, even on a busy day.
  3. I did it on the clock. Part of my job as software developer and consultant is to learn. There is simply too much to know, so learning has to happen on the job. By making this part of my work routine, it was easy to do everyday.

Writing daily TIL posts accelerated my learning and overall trajectory as a developer.

I didn't know it at the time, but I was taking smart notes. I kept a notebook and pen in hand while pairing and coding. Anything new, anything that piqued my interest or made me scratch my head, I jotted down a note about it. This is the first phase of note-taking that Sönke Ahrens lays out in How To Take Smart Notes.

I would then pick the items from my notes that seemed important and expand on them in my own words–using my own code snippets and linking to reference material–as TILs. This second phase is what Ahrens describes as deliberate note-taking. This is where I solidified my learning while also creating a "toolbox for thinking."

It started off small. I didn't have some grand plan for writing hundreds of TILs or turbo charging my career. I was just publishing what I was learning as I was learning it, which swyx has since coined as Learning In Public.

I realize now that I was inadvertently putting both deliberate note-taking and the slow, steady work of stacking the bricks toward something bigger into practice. I've put a ton of investment into this second brain of mine. It is paying dividends already – it lends me a lot of credibility essentially serving as a reference for any job application, it has made me a much more capable developer and consultant, and I get to refer to it often as an extension of my thinking.

I'm now reflecting on what is next for it. I'd like to multi-leverage that content as a way of increasing the impact of the value I've already created. This could look like a lot of things including creating gifs, recording screencasts, expanding into longer-form blog posts, linking into blogchains, cultivating as a digital garden, etc.



Though there is a lot to get wrong with pairing, and I won't pretend that it is easy to do effectively, when you get it right, I don't think there is a better way to build software, not to speak of the tight feedback loop that both developers provide for one another. This pairing dynamic can sometimes even develop into a flywheel.

My own TIL repository eventually became a source of inspiration for an internal TIL project at Hashrocket. Jake Worth created a Rails-based platform for the entire company to write, publish, and share the small things they were writing. It was eventually re-written using Elixir and Phoenix. Checkout what they are writing at

What Sönke Ahrens calls a "toolbox for thinking," could also be called by this singular, odd word I recently learned – organon. That is, "an instrument of thought, especially a means of reasoning or a system of logic."

Welcome to tell me your thoughts via "email" or click "here"