Along the same lines, I also find it useful to have a text log for each sizeable task I undertake. This could contain anything, notes of module structure, code & data snippets for testing, everything!
Like one of the top comments mentions, it acts as a node of knowledge within a wider system (graph) and I end up revisiting these logs more often than you would expect! It only gets better as you explore/document more and edges form.
Yea, for me what really helped is once I interned at a hydraulic engineering company and I was tasked with debugging a custom software for pump modeling/optimization in GIS.
I had no background in C++ or the GIS I was dealing with and this was a one-off thing that was built for a project, but not maintained or documented at all.
The lead eng that wrote the software also had a long and detailed personal log of what he was working on. He just gave me that.
It helped a lot to understand not only how the software worked, but also the design decisions.
Like one of the top comments mentions, it acts as a node of knowledge within a wider system (graph) and I end up revisiting these logs more often than you would expect! It only gets better as you explore/document more and edges form.