Write it down - use notes to keep a second brain
There is only so much stuff you can keep in your brain.
Sometimes, when I'm keeping track of all the information needed to understand a certain problem, I run out of memory. My FIFO*-based brain throws out the first piece of information to make space for the latest one. Too bad, as it was vital to have the complete picture in my mind to progress with the problem.
This can happen when going through layers of function calls, exploring the domain model of a new app, or making sense of the implementation of a complex class.
Typically, my mind builds up a model of how the software works, and my internal monologue goes something like this: "All right, so UserFeed renders UserActivity with an onSave callback, which wraps it in updateCounter and passes it along to UserActivityItem. UserActivityItem calls validate in its onSave, which is, however, not the onSave that was passed in. It first runs the validations, and if they pass, it calls the passed in onSave and then displays a toast message.
"Hmm, so why do we not see the toast message? Wait, what did the original onSave function do again? Shoot, I have no clue."
Notes as mental hard-disk space
The solution is similar to the one used by our computers: I write down some of the information to swap it back when my brain has dumped it out. If I do so, I can side-glance at my notes, learn what I forgot, and carry on building the mental model.
The form of externally stored information can be adapted to the situation. I often write down what I've learned, such as which method of which class calls which. Occasionally, I draw relationship boxes between the app's models or put down what I tend to forget as an English sentence.
As a bonus, jotting something down also makes it easier to recall, so I don't need to check my notes that much.
Write things down to save time
You can also apply this technique to other types of knowledge-based tasks where acquiring the knowledge takes a non-trivial amount of time.
For example, I semi-automated the book update process for the Rock & Roll with Ember.js book. When the raw material was ready, I followed a list of steps to produce the new book in several formats, upload it to the platform, and let people know.
I could have figured it out by rechecking the repositories, but it would have taken much more time and energy. I also made more errors when I didn't formalize and write down the process.
We don't have an unlimited capacity for keeping things in our minds, but we don't need to: we can keep an external brain.
Summary
- When building up a mental model of software, brain space can become limited
- Keeping a notebook (or a note-taking app) to jot down things as an external brain extends the mental space
- You can then quickly swap back important information from the notebook when needed
- This applies to other forms of knowledge where finding (or finding out) the information has a non-trivial cost
*FIFO: First In First Out. The memory entry that was stored ("in") first also gets deleted ("out") first.