Post Made Community Wiki by
    Post Merged (destination) from…
source | link

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

  1. Read code to understand the component that you are modifying
  2. Change code and understand how that impacts the surrounding system.
  3. Test the change and thus identify how the components interact with each other
  4. 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.
  5. 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.