I think one of the most important things is to take a simple feature, choose the simplest you can think of, and implement it. If there is a maintained wish list use that or else talk to someone familiar with the code base and get them to suggest a feature. Usually I would expect this to be a change with 5~20 LOC. The important point is not that you are adding a very fancy feature but that you are working (or rather grappling :) ) with the code base and going through the whole workflow. You would have to
- Read code to understand the component that you are modifying
- Change code and understand how that impacts the surrounding system.
- Test the change and thus identify how the components interact with each other
- Write the test case and hopefully break one or two test cases so you get to fix them and understand the invariants of the system.
- Build the thing or see the CI build it and then ship it
The list goes on but point is that a mini project like this takes you through all of the items on your check list for getting acquainted with a system and also results in a productive change being done.