When I began my career in software at Atomic Object, I felt ready to hit the ground running. There was just one problem. I had no idea where to start. The short-term projects I completed in college simply did not compare to the size and scope of a real-world software project. Plus the tech stack was completely foreign to me. As I struggled to understand the basics of React, Redux, Express, and TypeORM and how they’re used in the project, I began to feel overwhelmed.
Pairing with more senior developers kept me on track, but it felt like I would never understand how all the parts of the project fit together on my own. Every time I started a new story that involved working in a different part of the codebase, it felt like I would forget everything I’d learned before. It was discouraging, to say the least. One technique that helped me overcome this feeling was daily journaling. For one month, I took time at the end of each day to note how my mental model of the project changed throughout the day.
What is a mental model?
Simply put, a mental model is a concept of how something works. Whether consciously or not, all humans use mental models to shape our thinking and understand connections between ideas. The better our mental models are, the more informed our decision-making will be.
In the context of software development, I often express my mental model in the form of flowcharts and diagrams. This helps me understand the connections between the various parts of the project. Diagrams are also an excellent reference when I start working on a new story and am unsure where to start.
Putting it in practice
Daily journaling takes dedication. Building even a small new habit into my daily routine is not easy for me. After a long day of work, I would much rather go to the park with my dog or relax on the couch than spend more time thinking about programming. I started by setting aside a few minutes after work each day to jot down a few notes. Before long, I found myself referencing these notes throughout the work day and updating my journal on the spot when I had breakthroughs in my understanding of the project.
Once I started to see the value in daily journaling, it became easier to make time for it. Although it still takes dedication, I know it’s worth it. That’s not to say I don’t ever skip days. Sometimes I forget my journal or feel too busy to write. But, rather than beat myself up for “failing” to keep up on the journal, I look back at my previous entries and focus instead on how much my understanding of the project has improved through this practice. This helps me feel motivated to keep it up.
The longer I work on the same project, the less I find myself referencing the mental models in my journal. My understanding of the project has improved to the point that I don’t need to. This doesn’t mean I plan to stop journaling. Instead, I have shifted my focus.
Keeping my journal on hand during the work day allows me to use it to keep track of smaller things like helpful Vim commands or new CSS tricks that helped me solve common problems. It became something like an engineering daybook, a concept from The Pragmatic Programmer by David Thomas and Andrew Hunt. I am hoping this practice will help me continue to grow my skills and level up as a developer.