I’ve found that just reading through a new codebase isn’t enough to get me comfortable with it.
I’ve even found that having it explained by the previous developers doesn’t do the trick.
What does “comfortable” mean? It means that I have an accurate mental model of it. I’ve internalized it. I don’t have to check the code or the documentation to know the following:
- what the big features are
- what it does well
- what needs to be fixed about it
- what looks bad but doesn’t need to be fixed right away
- what the low-hanging fruits for code cleanup are
- what OS features it doesn’t support, but should
- what OS features it doesn’t support, and never will
- what its predominate style is (or if it has one)
- where the best place to put a helper method is
That list is just off the top of my head. I’m sure there’s more.
So, if just reading the code doesn’t work for me, what does?
Actually working on it.
Fixing bugs. Adding new features to existing code. Going through one full major release cycle, if possible.
Then I can start thinking concretely about making major improvements to it.