Keeping your head above water, or, thriving as a developer.
This post tries to distil what I have learnt about navigating a job as a computer programmer. I hope what I’ve learnt can be useful to at least someone out there, even if that’s just my future self.
- channel incoming information into one place: this minimizes cognitive overhead when deciding what to work on
Software engineering involves interacting with a wide array of technologies. Typically, this includes: several codebases, project tracking software, a code review platform, continuous integration, and communication software (slack, email, meets, calendar). Each of these platforms comes with its own set of notifications. Try to configure these platforms to avoid notification duplication (you don’t want to see that someone added you as a reviewer twice). Where possible, use automation to centralize the information to which you need to pay attention.
- minimize task switching as this detracts from your ability to actually solve hard problems
Task switching is cognitively draining. This is a truism and is well-documented in research. Obviously, you can’t work on one task forever, so at some point you have to switch. I have found a reasonable rhythm by dividing the day into two parts, each part reserved for a different project. This allows me to progress on multiple things at once without incurring a huge overhead in reloading state by switching tasks too frequently. This also provides me with enough variety which is an important factor in maintaining motivation when a project gets a little stale.
- keep things (documentation, todo-lists) in one place
Centralizing your documentation, todo lists, work journal, miscellaneous thoughts and notes, in one searchable place has been enormously helpful for me. Frequently when stuck on a problem, I attempt to explain the problem to a text file. The next day when I’m attempting to remember what I was working on, I’m able to quickly reload state by reading my sequence of thoughts. (In the past, I used a text file named with the current date.) My current todo system involves a single file with one item under doing, several items under todo, and a whole suite under backlog. Regardless of your system, centralizing where to store the information about what you are working on is a good way to stay on top of things. Additionally, using such file(s) augments your memory substantially - a text file has a much better memory than you.
- remember that you’re a human
This is pretty self-explanatory. Take regular breaks from the computer - go for walks, listen to music, and do things you enjoy.