- Get the code building and running on your dev box.
 
- Figure out how the system is used and familiarize yourself with the libraries used. (For example, if you see code with calls to some OpenGL lib, familiarize yourself with that library) Read the system's documentation.
 
- I would then find a point of code that will run based on some input. So let's say the system generates output based on some input. I would find the method that initiates the process. Now try to either step through it (could be a pain) or just read the code and try to get a high level overview of what is going on.
 
I've found that step 3 usually becomes very involved and it is what gives me direction in how to read the code and learn how the system works.
Adding a feature can be a nice idea, but in a large system it could be a pain to even figure out what that feature is. Not only that, any feature you write to learn the system will most likely end up looking like crap because you would have no idea what is where and how the system operates. The feature you want to add though can certainly lead you to the right point in #3 so don't discount that.
-s