Maintain a Failure Stack

Hall of Fail

Every time you fail to do something, add it to a list. Take a memory stack, for example. Whenever I forget something, I add it to a file so that my Spaced Repetition software will test me on it and help me never forget it again. Similarly, you can have a stack for truth (every time you fail to answer a question correctly) or self-esteem (every time you feel crummy about yourself).

Why keep a list of failures? Because I need real-world tests. I want to improve my skill and so I need to know if I’m getting better. The way to do that is to see if I’m no longer failing at things I used to fail at. If I could do something in the past, I will automatically feel surprise if I begin to fail. So, what I need to worry about is the things I can’t do - these are the ones that slip by unnoticed.

Figuring out in the moment whether I did something well is trivial; I know whether I’ve procrastinated or felt shame or given up on a complex task or whatever. In contrast, listing my mistakes by thinking abstractly is really hard.

Humans think too vaguely to enumerate all the instances of a class. It’s hard to list out exactly what I mean by “having more self-esteem”, i.e., all the situations where I perform worse than I am capable of. By having a stack, you can “benefit from the imagination of nature, which, as Feynman pointed out, is more powerful than your own”1.

A happy side-effect is that you will spend your energy only where you need to. If you maintain your stack, the following will hold: if you need to improve in some place, it will be on your list; if you don’t, it won’t be. You can focus purely on the list with the confidence that you’re making genuine progress with every move.

Lazy work: Build only on demand

Corollary: Use this trick anywhere you need to enumerate items.

To know what features you really want in your program - use your program, see what’s missing, and add it. Doing it all upfront (called the Waterfall method) is doomed - you don’t know yourself well enough to know what you want. You may even have all the facts stored in memory, but you don’t have the brainpower to process and list them without error.

As with programs, so with life. When designing plans, go ahead and do it without too much forethought. When you find something missing, add it to your plan.

The same goes with adding unit tests for a program (which have the advantage of being self-testing, so you can just put it, shut it, and forget it).

Concrete incidents

Notes

I obviously got the above idea of lazy and empirical thinking from Paul Graham’s various essays.


  1. From PG’s Six Principles for Making New Things

Created: September 6, 2015
Last modified: September 28, 2019
Status: in-progress notes
Tags: notes, stack

comments powered by Disqus