July 19, 2016
Nothing In Your Head
I think one of the keys to becoming a better software developer is to hold fewer things in your head.
There are several advantages to doing this:
Clarity of thought
The less I have in my head, the more clearly I am able to both absorb and express complex ideas. Both these abilities are increasingly important as the complexity of my role or a particular project increases.
Faster context switching
The fewer things I hold in my head, the fewer things I have to release when switching to a new task. The ability to compartmentalize ideas is useful in itself, but if these compartments exist outside my head, I can more easily jump between projects. One downside here is that although it becomes faster to switch contexts, you end up switching contexts more, since every change is essentially a context switch.
Things in my head about a project are my shackles to the project. Especially if my head is the only one these things are in. Most projects remain in a single domain, with an established technology stack and an finite scope. These settings stagnates growth as a developer.
The best ways to hold fewer things in your head is to force yourself to become better at documentation and automation.
Complex bits of code, application architecture, infrastructure. These should all be documented. Documentation is itself is an art and requires practice and iteration, but good documentation allows me to forget everything about a project until I need it.
The key to automation, like many other things, is that it works and has a sensible interface. I can forget the details of my infrastructure if I only need to run a couple of commands to spin up new instances.
Becoming good at holding things in your head involves relinquishing ownership and making your work general purpose. This can be practiced at the level of modules, apps, and systems alike.
Interestingly enough, relinquishing ownership is also the path to enlightenment. So there you have it.
Side effects include increased productivity and increased number of blank stares at teammates when they ask you questions about your code.