I often find myself in situations with engineers on the level above me (I'm a mid) where they are grasping the mental models, comprehending the code Infront of them and managing to remember a lot of context that helps them as they work through problems. I'm personally left feeling a bit dazed and confused. I was wondering if there are any more senior engineers here who recall having similar experiences when they were a lower level and how they overcame those feelings to move more productively through code when working with someone else.
Hey! Thanks for the question.
I'm sorry to hear you don't feel on-par with some of your colleagues in terms of this. However, it's not the worst thing. I don't have a great memory either.
So here's my solution to this: Take great notes!
I'm a fan of Notion but I use OneNote at work because it's what my company approves. Be diligent in writing down all the important information. Tag them so you can easily find and recall them.
If you're feeling dazed and confused, consult your notes. Have the wisdom to realize to write it down immediately, no matter how small. That's how I would start.
Additionally, most of these engineers have probably been there longer than you have, so they have a lot more context and have probably gone through it a few times.
As Xue mentioned, the solution is to write stuff down. The good news is that so much of software engineering has organic avenues to do this:
In a nutshell, make it so that whenever you come into contact with anything (e.g. new code, old code, team tech review meeting, product discussion), there is a great chance there's some handy artifact attached to it that you can look at to quickly ramp up your understanding.
Depth of memory is a natural talent, but I 100% believe that it's something where a lack of it can be overcome with hard work and diligence 💪
I find that the top skill for staying organized is categorizing the information you're managing on behalf of your working memory.
What categories work for your needs & your brain is going to be different from other people's and they're going to change.
You're probably going to start off with categories that don't work for your needs. It's okay! Treat it like code:
Categorizing actual notes is great, but categorizing information mentally as you take it in is also helpful because it creates associations for long-term memory storage & retrieval.
So, how do you get better at identifying what categories work best for you?
Hot take: my bad memory is a gift and it is for you too.
The reason is it focuses my learning on understanding fundamental principles, not memorization. That being said, take notes, create docs, and give yourself time to see things a few times. But ultimately it is NOT about having a lot of stuff memorized.
Example: Leet code
Someone with amazing memory might memorize 5000 problems and solutions and in the interview have amazing recall to pull up the right solution. Alternatively my strategy is to deeply understand the way 5 data structures and 5 algorithms are built and run.
Example: Learning a new code base
Its tempting to read every line of code and try to understand it. But on your team if there are 100 features they may still fall into three types. Then you need to know how each of the 3 types works and then you can see something new of that type and also quickly understand.
Example: Learning to be a manager
I was tempted to memorize and run by my manager a solution for every scenario I faced. I was overwhelmed and hesitant. Instead what worked is learning about what I value and should value as a manager: empathy, communicating (especially the bad), removing blockers, creating trust/trusting my team, and giving each person what they need.
Now I can solve thousands of scenarios (including new ones) by remembering a few principles.