Background

I was burned out and my software career was stalling just three years in. My memory sucked. Was my poor memory from stress, lack of sleep or was it always this bad? Work was a cycle of "TODAY IS THE DAY I CHANGE" and end in a self-loathing dopamine-addicted HackerNews, Reddit and Medium. I was a failure.

Advice I Needed But Ignored #213: Don't tie your self-worth to your work.

I wanted to be a good, hell, great software engineer. But my work was mediocre. Even worse, I was trying. My ass was in that chair twelve hours a day, six days a week trying to write beautiful Python code. I was constantly looking up documentation and sucked into the internet's rabbit-hole of distractions. I was a try-hard failure.

And then there was Kyle. Kyle and I had started programming from scratch; we were both learning on the job. Three years later, our progress was nothing alike.

"Kyle is the first 10X engineer I have ever worked with." - Every. single. coworker. w/ 15+ years experience.

Kyle worked weekdays from 10AM to 4PM. He got his work done early and single-handedly output 80% of the entire team. Adding more insult to injury, he only worked like 60% of the time. The rest of the time was spent on ... HackerNews, Reddit and Medium. I was the try-hard slow brute, and Kyle was the graceful hare.

Kyle didn't have a secret routine. He never meditated. He was skinny despite McDonalds for breakfast, lunch and dinner. But, Kyle had a super hero ability. Photographic memory in API syntax and documentation.

I wanted that and I was jealous. My career was stuck and something needed to change. And so I began a dedicated journey into spaced repetition. Every day for three years, I spent one to three hours in spaced repetition. It was brutal and I needed it.

What Is Spaced Repetition?

Spaced repetition is a remembering technique that will remind you concepts at spaced intervals to maximize memory retention efficiently. It's a strategy to remind our brains of facts; it exploits that the best time to be remember a fact is right before we forget it. Our brains are forgetful, but we can use strategies to make it less forgetful.

At increasing spacing intervals, memory is more likely to be consolidated into long-term memory (and less likely forgotten). Notice the duration of each reminder is further out every time.

Note: This image represents exactly the same as above, but in different colors to promote retention. I'm full of brain hacks.

Pretend you had six chances in a year to remind Bill Gates your name. If Bill remembers your name a full calendar year later, you get a million dollars!

Picking The Right Interval

Which reminder interval would you pick?

Option 1 - Cram Before the Exam: Dec 26th, 27th, 28th, 29th, 30th, 31st.

Dec 26th, 27th, 28th, 29th, 30th, 31st. Option 2 - The Ivy League Valedictorian Who Never Procrastinates: 1st of every other month. Jan 1st, March 1st, April 1st, etc.

1st of every other month. Jan 1st, March 1st, April 1st, etc. Option 3 - Spaced Repetition: January 1st, January 3rd, January 20th, Feb 28th, April 15th, September 30th.

Option 3 (Spaced Repetition) gives you the highest probability of Bill remembering your name. Ah, the Captain Obvious Blog Writer.

But Why Option 3?

Cramming rarely works after it passes from short-term memory. How many cram sessions do you remember from high school? Evenly spaced reminders sort-of works, but you'd have to review all your knowledge at every interval, which doesn't sound scalable/fun/have a social life. Our brains work best with exponentially spaced reminders.

Outside of medical students and language learning apps like Duolingo, spaced repetition isn't common. It's not as cool as cramming, but it works. Medical students use it to memorize those awful thousand page textbooks. Duolingo uses it because it's effective. Remember that guy dominating Jeopardy a few years ago? Spaced repetition fanatic.

Why Is Spaced Repetition Rare?

If it's so amazing, why isn't spaced repetition common?

People don't know about it.

Even if you use it, it's hard to make a habit of reviewing flashcards.

Making flashcards is annoying. Who wants to type notes into a flashcard app?

People take a big talk about self-improvement, but don't want to do no stinkin' hard work.

It's not cool. You're not going to bringing up flashcard studying on your first date.

But software engineers already have these pain points ...

Engineers are expected to know about upcoming trends. Otherwise, you'd still be using BitBucket and Adobe Flash.

Engineers are creatures of habit. Make reviewing your flashcard app your first work task (or the train, the toilet right before Candy Crush). Stop StackOverflowing "how do i amend my git commit" five times every month.

Instead of using Quiver, EverNote, Notion, etc, for notetaking, save it as a flashcard.

Being a good software engineer requires lifelong learning.

Let's be honest, you're not getting first dates.

Anki and SuperMemo are the most common spaced repetition applications. Both help create flashcards and quiz based off an spacing algorithm. If you get a question right, it'll ask again further out. Get a card wrong? It'll remind you tomorrow. I use Anki. Anki seems more common among software engineers. Download the mobile app (iOS/Android). The Android app is fantastic.

Some quick terminology (in case you forgot ...)

Spaced repetition is a learning technique.

Anki and SuperMemo are applications that will use spaced repetition.

You create flashcards in Anki and SuperMemo. They quiz you at spaced intervals.

A deck is commonly referred to as your entire flashcard collection.

Examples

Habit: Whenever I search StackOverflow, I'll immediately create a flashcard of my question and the answer(s) into Anki.

Example: Parameter about gsutil.

An easy question I got wrong yesterday. I was almost too embarrassed to show this example.

Spaced repetition is an offline poor man's StackOverflow (Yes, I tried Dash). Pre-Anki, I was forgetting syntax equivalent to my daily learnings. I was already using Anki for general knowledge. Why not embrace programming flashcards for Anki? I was hesitant because of a few reasons.

Laziness. Writing good Anki programming flashcards can be hard. Flashcards w/code is difficult to remember. It's much easier to remember the capital of Mongolia (Ulaanbaatar) than how to copy a list of files in a .txt file from an externally mounted hard drive using xargs (cat list.txt | xargs -l{} mv /Volumes/External/{} /Desktop). Getting a card wrong for multiple days is frustrating.

And for the last three years, I've added EVERYTHING to Anki. Bash aliases, IDE Shortcuts, programming APIs, documentation, design patterns, etc. Having done that, I wouldn't recommend adding EVERYTHING. That topic of my Anki mistakes deserves it's own article ...

EDIT: I've compiled the list of Anki Tips and Tricks here

Benefits

After embracing Anki, once I had mastered a card, the quick recall around language and framework APIs was like having my prayer to the flow gods finally being answered.

Three years ago, my all-too common pattern was :

Start coding.

StackOverflow some syntax I frustratingly forgot.

Get distracted. Read HackerNews.

Hmm, nothing new on HackerNews, let's try Reddit.

Try to get into flow?

Despair. Maybe someone posted a new story on HackerNews?

Now equipped with an improved memory in API syntax, documentation, country capitals, and engineering — there's a stark difference.

Productivity Benefits

2016 - A year described as short bursts followed by frustrating distractions ...

Current Year to Date - I Should Find A New Hobby ...

Commitment

Spaced repetition requires a daily commitment, but guarantees a great memory. Most users average about twenty minutes a day reviewing. If you're adding zero additional cards (cough, slacker), your review time averages to zero as knowledge become long-term memory. The confidence of knowing that once something is added to Anki it won't be forgotten is intoxicating.

Personal Reflection

Spaced repetition is my most important career/life-hack. It's not always easy. It doesn't guarantee you'll be a better engineer (best practices and design beats syntax), but it'll make you a capable one. When you can quickly recall syntax, you'll be amazed at how fast you can code. Sometimes that just results in shitty code, faster. But the best coders code a lot. And that's the only guaranteed way to improve.

Knowledge compounds in interesting ways. Many of my flashcards include blogs and articles about engineering — knowing the history of RPC, SOAP, REST and GraphQL has lead to improved design and architecture decisions. Counter: Memorizing binary search tree algorithms has yet to come in handy ...

Chasing 10X

I began this by chasing an absurd dream of "becoming a 10X engineer". Like there would be a graduation ceremony or something ridiculous. On second thought, the "Biggest Tool of the Year" award sounds about right.

I have no idea what constitutes a 10X engineer; we don't have benchmarks that encompass output, leadership, code quality and technical debt. Chasing 10X became meaningless when I finally had the confidence that I was shaping my own self-improvement. An improved memory gave me control of my own destiny.

Kyle is still multiples better than I will ever be, and that's perfectly fine.

Advice I Needed But Ignored #421: Don't compare yourself to others. Just make sure you're improving everyday. Compound interest is the most powerful thing in the universe.

Misc:

Followup Articles:

Everything I Know: A Comprehensive Guide of Strategies, Tips, and Tricks for Spaced Repetition

My Favorite Hacks to Avoid The Internet's Distractions (EDIT: Coming ... soon, I swear)

Other Great Links About Spaced Repetition: